@freqhole/api-client 0.2.15 → 0.3.2

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.
@@ -40,6 +40,47 @@ export const AddAlbumsTagsRequestSchema = z.object({
40
40
  });
41
41
  export type AddAlbumsTagsRequest = z.infer<typeof AddAlbumsTagsRequestSchema>;
42
42
 
43
+ export const AddEntitiesTagsRequestSchema = z.object({
44
+ entity_type: z.string(),
45
+ entity_ids: z.array(z.string()),
46
+ tag_names: z.array(z.string())
47
+ });
48
+ export type AddEntitiesTagsRequest = z.infer<typeof AddEntitiesTagsRequestSchema>;
49
+
50
+ export const AddEntityTaxonRequestSchema = z.object({
51
+ entity_type: z.string(),
52
+ entity_id: z.string(),
53
+ taxon_id: z.string(),
54
+ origin: z.string(),
55
+ confidence: z.number().nullish()
56
+ });
57
+ export type AddEntityTaxonRequest = z.infer<typeof AddEntityTaxonRequestSchema>;
58
+
59
+ export const AddEntityUrlRequestSchema = z.object({
60
+ entity_type: z.string(),
61
+ entity_id: z.string(),
62
+ name: z.string().nullish(),
63
+ url: z.string()
64
+ });
65
+ export type AddEntityUrlRequest = z.infer<typeof AddEntityUrlRequestSchema>;
66
+
67
+ export const AddPlaylistItemRequestSchema = z.object({
68
+ playlist_id: z.string(),
69
+ entity_type: z.string(),
70
+ entity_id: z.string(),
71
+ position: z.number().nullish()
72
+ });
73
+ export type AddPlaylistItemRequest = z.infer<typeof AddPlaylistItemRequestSchema>;
74
+
75
+ export const AddPlaylistItemsRequestSchema = z.object({
76
+ playlist_id: z.string(),
77
+ items: z.array(z.object({
78
+ entity_type: z.string(),
79
+ entity_id: z.string()
80
+ }))
81
+ });
82
+ export type AddPlaylistItemsRequest = z.infer<typeof AddPlaylistItemsRequestSchema>;
83
+
43
84
  export const AddSongsToPlaylistRequestSchema = z.object({
44
85
  playlist_id: z.string(),
45
86
  song_ids: z.array(z.string())
@@ -277,7 +318,7 @@ export const AlbumSchema = z.object({
277
318
  images: z.array(z.object({
278
319
  blob_id: z.string(),
279
320
  is_primary: z.number(),
280
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
321
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
281
322
  })).nullish(),
282
323
  urls: z.array(z.object({
283
324
  id: z.string().nullish(),
@@ -554,7 +595,7 @@ export const AlbumQueryResultSchema = z.object({
554
595
  images: z.array(z.object({
555
596
  blob_id: z.string(),
556
597
  is_primary: z.number(),
557
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
598
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
558
599
  })).nullish(),
559
600
  urls: z.array(z.object({
560
601
  id: z.string().nullish(),
@@ -583,7 +624,7 @@ export const AlbumQueryResultSchema = z.object({
583
624
  images: z.array(z.object({
584
625
  blob_id: z.string(),
585
626
  is_primary: z.number(),
586
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
627
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
587
628
  })).nullish(),
588
629
  urls: z.array(z.object({
589
630
  id: z.string().nullish(),
@@ -605,7 +646,7 @@ export const AlbumQueryResultSchema = z.object({
605
646
  images: z.array(z.object({
606
647
  blob_id: z.string(),
607
648
  is_primary: z.number(),
608
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
649
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
609
650
  })).nullish(),
610
651
  album_tags: z.array(z.string()).nullish(),
611
652
  is_favorite: z.boolean().nullish(),
@@ -684,7 +725,7 @@ export const AlbumsByValueResponseSchema = z.object({
684
725
  images: z.array(z.object({
685
726
  blob_id: z.string(),
686
727
  is_primary: z.number(),
687
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
728
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
688
729
  })).nullish(),
689
730
  urls: z.array(z.object({
690
731
  id: z.string().nullish(),
@@ -713,7 +754,7 @@ export const AlbumsByValueResponseSchema = z.object({
713
754
  images: z.array(z.object({
714
755
  blob_id: z.string(),
715
756
  is_primary: z.number(),
716
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
757
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
717
758
  })).nullish(),
718
759
  urls: z.array(z.object({
719
760
  id: z.string().nullish(),
@@ -735,7 +776,7 @@ export const AlbumsByValueResponseSchema = z.object({
735
776
  images: z.array(z.object({
736
777
  blob_id: z.string(),
737
778
  is_primary: z.number(),
738
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
779
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
739
780
  })).nullish(),
740
781
  album_tags: z.array(z.string()).nullish(),
741
782
  is_favorite: z.boolean().nullish(),
@@ -767,7 +808,7 @@ export const AlbumsQueryResultSchema = z.object({
767
808
  images: z.array(z.object({
768
809
  blob_id: z.string(),
769
810
  is_primary: z.number(),
770
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
811
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
771
812
  })).nullish(),
772
813
  urls: z.array(z.object({
773
814
  id: z.string().nullish(),
@@ -796,7 +837,7 @@ export const AlbumsQueryResultSchema = z.object({
796
837
  images: z.array(z.object({
797
838
  blob_id: z.string(),
798
839
  is_primary: z.number(),
799
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
840
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
800
841
  })).nullish(),
801
842
  urls: z.array(z.object({
802
843
  id: z.string().nullish(),
@@ -818,7 +859,7 @@ export const AlbumsQueryResultSchema = z.object({
818
859
  images: z.array(z.object({
819
860
  blob_id: z.string(),
820
861
  is_primary: z.number(),
821
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
862
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
822
863
  })).nullish(),
823
864
  album_tags: z.array(z.string()).nullish(),
824
865
  is_favorite: z.boolean().nullish(),
@@ -916,7 +957,7 @@ export const ArtistSchema = z.object({
916
957
  images: z.array(z.object({
917
958
  blob_id: z.string(),
918
959
  is_primary: z.number(),
919
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
960
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
920
961
  })).nullish(),
921
962
  urls: z.array(z.object({
922
963
  id: z.string().nullish(),
@@ -1105,7 +1146,7 @@ export const ArtistQueryResultSchema = z.object({
1105
1146
  images: z.array(z.object({
1106
1147
  blob_id: z.string(),
1107
1148
  is_primary: z.number(),
1108
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1149
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1109
1150
  })).nullish(),
1110
1151
  urls: z.array(z.object({
1111
1152
  id: z.string().nullish(),
@@ -1122,7 +1163,7 @@ export const ArtistQueryResultSchema = z.object({
1122
1163
  images: z.array(z.object({
1123
1164
  blob_id: z.string(),
1124
1165
  is_primary: z.number(),
1125
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1166
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1126
1167
  })).nullish(),
1127
1168
  song_count: z.number(),
1128
1169
  album_count: z.number(),
@@ -1156,7 +1197,7 @@ export const ArtistsQueryResultSchema = z.object({
1156
1197
  images: z.array(z.object({
1157
1198
  blob_id: z.string(),
1158
1199
  is_primary: z.number(),
1159
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1200
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1160
1201
  })).nullish(),
1161
1202
  urls: z.array(z.object({
1162
1203
  id: z.string().nullish(),
@@ -1173,7 +1214,7 @@ export const ArtistsQueryResultSchema = z.object({
1173
1214
  images: z.array(z.object({
1174
1215
  blob_id: z.string(),
1175
1216
  is_primary: z.number(),
1176
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1217
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1177
1218
  })).nullish(),
1178
1219
  song_count: z.number(),
1179
1220
  album_count: z.number(),
@@ -1195,7 +1236,7 @@ export const AssociationHintSchema = z.object({
1195
1236
  entity_type: z.string(),
1196
1237
  entity_id: z.string(),
1197
1238
  is_primary: z.boolean().nullish(),
1198
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]).nullish()
1239
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]).nullish()
1199
1240
  });
1200
1241
  export type AssociationHint = z.infer<typeof AssociationHintSchema>;
1201
1242
 
@@ -1293,7 +1334,7 @@ export const BlobMetadataResponseSchema = z.object({
1293
1334
  size: z.number().nullish(),
1294
1335
  mime: z.string().nullish(),
1295
1336
  filename: z.string().nullish(),
1296
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
1337
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
1297
1338
  blake3: z.string().nullish()
1298
1339
  });
1299
1340
  export type BlobMetadataResponse = z.infer<typeof BlobMetadataResponseSchema>;
@@ -1332,6 +1373,19 @@ export const BulkDeleteSongsResponseSchema = z.object({
1332
1373
  });
1333
1374
  export type BulkDeleteSongsResponse = z.infer<typeof BulkDeleteSongsResponseSchema>;
1334
1375
 
1376
+ export const BulkDeleteVideosRequestSchema = z.object({
1377
+ video_ids: z.array(z.string())
1378
+ });
1379
+ export type BulkDeleteVideosRequest = z.infer<typeof BulkDeleteVideosRequestSchema>;
1380
+
1381
+ export const BulkDeleteVideosResponseSchema = z.object({
1382
+ success: z.boolean(),
1383
+ message: z.string(),
1384
+ deleted_count: z.number(),
1385
+ failed_ids: z.array(z.string())
1386
+ });
1387
+ export type BulkDeleteVideosResponse = z.infer<typeof BulkDeleteVideosResponseSchema>;
1388
+
1335
1389
  export const BulkEnrichmentRequestSchema = z.object({
1336
1390
  album_ids: z.array(z.string()),
1337
1391
  sources: z.array(z.union([z.literal('Mb'), z.literal('Lastfm'), z.literal('Audiodb')])),
@@ -1402,7 +1456,7 @@ export const CreateArtistRequestSchema = z.object({
1402
1456
  export type CreateArtistRequest = z.infer<typeof CreateArtistRequestSchema>;
1403
1457
 
1404
1458
  export const CreateJobRequestSchema = z.object({
1405
- job_type: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
1459
+ job_type: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
1406
1460
  session_id: z.string().nullish(),
1407
1461
  parameters: z.any(),
1408
1462
  max_retries: z.number().nullish(),
@@ -1418,15 +1472,18 @@ export const CreateKnockRequestSchema = z.object({
1418
1472
  });
1419
1473
  export type CreateKnockRequest = z.infer<typeof CreateKnockRequestSchema>;
1420
1474
 
1421
- export const CreateListenSessionRequestSchema = z.object({
1475
+ export const CreatePlaybackSessionRequestSchema = z.object({
1422
1476
  session_type: z.string(),
1423
1477
  entity_id: z.string().nullish(),
1424
1478
  label: z.string(),
1425
- song_ids: z.array(z.string()),
1426
- total_songs: z.number(),
1479
+ items: z.array(z.object({
1480
+ entity_type: z.string(),
1481
+ entity_id: z.string()
1482
+ })),
1483
+ total_items: z.number(),
1427
1484
  total_duration_ms: z.number()
1428
1485
  });
1429
- export type CreateListenSessionRequest = z.infer<typeof CreateListenSessionRequestSchema>;
1486
+ export type CreatePlaybackSessionRequest = z.infer<typeof CreatePlaybackSessionRequestSchema>;
1430
1487
 
1431
1488
  export const CreatePlaylistRequestSchema = z.object({
1432
1489
  id: z.string().nullish(),
@@ -1461,7 +1518,8 @@ export const CreateTaxonKindRequestSchema = z.object({
1461
1518
  color: z.string().nullish(),
1462
1519
  value_type: z.string().nullish(),
1463
1520
  unit: z.string().nullish(),
1464
- display_order: z.number().nullish()
1521
+ display_order: z.number().nullish(),
1522
+ domain: z.string().nullish()
1465
1523
  });
1466
1524
  export type CreateTaxonKindRequest = z.infer<typeof CreateTaxonKindRequestSchema>;
1467
1525
 
@@ -1473,6 +1531,38 @@ export const CreateTaxonRequestSchema = z.object({
1473
1531
  });
1474
1532
  export type CreateTaxonRequest = z.infer<typeof CreateTaxonRequestSchema>;
1475
1533
 
1534
+ export const CreateVideoRequestSchema = z.object({
1535
+ series_id: z.string().nullish(),
1536
+ season_id: z.string().nullish(),
1537
+ episode_number: z.number().nullish(),
1538
+ content_type: z.string().nullish(),
1539
+ title: z.string(),
1540
+ description: z.string().nullish(),
1541
+ media_blob_id: z.string(),
1542
+ poster_blob_id: z.string().nullish(),
1543
+ duration_seconds: z.number().nullish(),
1544
+ release_date: z.string().nullish(),
1545
+ created_by: z.string().nullish()
1546
+ });
1547
+ export type CreateVideoRequest = z.infer<typeof CreateVideoRequestSchema>;
1548
+
1549
+ export const CreateVideoSeasonRequestSchema = z.object({
1550
+ series_id: z.string(),
1551
+ season_number: z.number(),
1552
+ title: z.string().nullish(),
1553
+ description: z.string().nullish(),
1554
+ poster_blob_id: z.string().nullish()
1555
+ });
1556
+ export type CreateVideoSeasonRequest = z.infer<typeof CreateVideoSeasonRequestSchema>;
1557
+
1558
+ export const CreateVideoSeriesRequestSchema = z.object({
1559
+ title: z.string(),
1560
+ description: z.string().nullish(),
1561
+ poster_blob_id: z.string().nullish(),
1562
+ created_by: z.string().nullish()
1563
+ });
1564
+ export type CreateVideoSeriesRequest = z.infer<typeof CreateVideoSeriesRequestSchema>;
1565
+
1476
1566
  export const DeleteAlbumRequestSchema = z.object({
1477
1567
  id: z.string(),
1478
1568
  user_id: z.string().nullish()
@@ -1514,16 +1604,16 @@ export const DeleteKnockRequestSchema = z.object({
1514
1604
  });
1515
1605
  export type DeleteKnockRequest = z.infer<typeof DeleteKnockRequestSchema>;
1516
1606
 
1517
- export const DeleteListenSessionRequestSchema = z.object({
1518
- id: z.string()
1519
- });
1520
- export type DeleteListenSessionRequest = z.infer<typeof DeleteListenSessionRequestSchema>;
1521
-
1522
1607
  export const DeletePasskeyRequestSchema = z.object({
1523
1608
  credential_id: z.string()
1524
1609
  });
1525
1610
  export type DeletePasskeyRequest = z.infer<typeof DeletePasskeyRequestSchema>;
1526
1611
 
1612
+ export const DeletePlaybackSessionRequestSchema = z.object({
1613
+ id: z.string()
1614
+ });
1615
+ export type DeletePlaybackSessionRequest = z.infer<typeof DeletePlaybackSessionRequestSchema>;
1616
+
1527
1617
  export const DeletePlaylistRequestSchema = z.object({
1528
1618
  playlist_id: z.string()
1529
1619
  });
@@ -1552,6 +1642,26 @@ export const DeleteTaxonRequestSchema = z.object({
1552
1642
  });
1553
1643
  export type DeleteTaxonRequest = z.infer<typeof DeleteTaxonRequestSchema>;
1554
1644
 
1645
+ export const DeleteVideoRenditionRequestSchema = z.object({
1646
+ blob_id: z.string()
1647
+ });
1648
+ export type DeleteVideoRenditionRequest = z.infer<typeof DeleteVideoRenditionRequestSchema>;
1649
+
1650
+ export const DeleteVideoRequestSchema = z.object({
1651
+ id: z.string()
1652
+ });
1653
+ export type DeleteVideoRequest = z.infer<typeof DeleteVideoRequestSchema>;
1654
+
1655
+ export const DeleteVideoSeasonRequestSchema = z.object({
1656
+ id: z.string()
1657
+ });
1658
+ export type DeleteVideoSeasonRequest = z.infer<typeof DeleteVideoSeasonRequestSchema>;
1659
+
1660
+ export const DeleteVideoSeriesRequestSchema = z.object({
1661
+ id: z.string()
1662
+ });
1663
+ export type DeleteVideoSeriesRequest = z.infer<typeof DeleteVideoSeriesRequestSchema>;
1664
+
1555
1665
  export const DeviceLinkedCallbackRequestSchema = z.object({
1556
1666
  peer_addr: z.string(),
1557
1667
  server_name: z.string()
@@ -1625,6 +1735,25 @@ export const EntityRefSchema = z.union([z.object({
1625
1735
  })]);
1626
1736
  export type EntityRef = z.infer<typeof EntityRefSchema>;
1627
1737
 
1738
+ export const EntityTagCountSchema = z.object({
1739
+ tag_id: z.string(),
1740
+ tag_name: z.string(),
1741
+ tag_created_at: z.number(),
1742
+ count: z.number()
1743
+ });
1744
+ export type EntityTagCount = z.infer<typeof EntityTagCountSchema>;
1745
+
1746
+ export const EntityTaxonLinkSchema = z.object({
1747
+ entity_type: z.string(),
1748
+ entity_id: z.string(),
1749
+ taxon_id: z.string(),
1750
+ origin: z.string(),
1751
+ confidence: z.number().nullish(),
1752
+ created_at: z.number(),
1753
+ created_by: z.string().nullish()
1754
+ });
1755
+ export type EntityTaxonLink = z.infer<typeof EntityTaxonLinkSchema>;
1756
+
1628
1757
  export const EntityTaxonsBatchRequestSchema = z.object({
1629
1758
  entity_kind: z.string(),
1630
1759
  entity_ids: z.array(z.string())
@@ -1654,6 +1783,13 @@ export const EntityTaxonsEntrySchema = z.object({
1654
1783
  });
1655
1784
  export type EntityTaxonsEntry = z.infer<typeof EntityTaxonsEntrySchema>;
1656
1785
 
1786
+ export const EntityUrlSchema = z.object({
1787
+ id: z.string().nullish(),
1788
+ name: z.string().nullish(),
1789
+ url: z.string()
1790
+ });
1791
+ export type EntityUrl = z.infer<typeof EntityUrlSchema>;
1792
+
1657
1793
  export const EraAlbumsRequestSchema = z.object({
1658
1794
  min_year: z.number(),
1659
1795
  max_year: z.number(),
@@ -1684,7 +1820,7 @@ export const EraAlbumsResponseSchema = z.object({
1684
1820
  images: z.array(z.object({
1685
1821
  blob_id: z.string(),
1686
1822
  is_primary: z.number(),
1687
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1823
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1688
1824
  })).nullish(),
1689
1825
  urls: z.array(z.object({
1690
1826
  id: z.string().nullish(),
@@ -1713,7 +1849,7 @@ export const EraAlbumsResponseSchema = z.object({
1713
1849
  images: z.array(z.object({
1714
1850
  blob_id: z.string(),
1715
1851
  is_primary: z.number(),
1716
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1852
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1717
1853
  })).nullish(),
1718
1854
  urls: z.array(z.object({
1719
1855
  id: z.string().nullish(),
@@ -1735,7 +1871,7 @@ export const EraAlbumsResponseSchema = z.object({
1735
1871
  images: z.array(z.object({
1736
1872
  blob_id: z.string(),
1737
1873
  is_primary: z.number(),
1738
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1874
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1739
1875
  })).nullish(),
1740
1876
  album_tags: z.array(z.string()).nullish(),
1741
1877
  is_favorite: z.boolean().nullish(),
@@ -1782,7 +1918,7 @@ export const ErrorDetailSchema = z.object({
1782
1918
  export type ErrorDetail = z.infer<typeof ErrorDetailSchema>;
1783
1919
 
1784
1920
  export const EventFilterSchema = z.object({
1785
- kinds: z.array(z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')])).nullish(),
1921
+ kinds: z.array(z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')])).nullish(),
1786
1922
  job_ids: z.array(z.string()).nullish(),
1787
1923
  session_ids: z.array(z.string()).nullish(),
1788
1924
  entity_refs: z.array(z.union([z.object({
@@ -1831,7 +1967,7 @@ export const FavoriteAlbumResultSchema = z.object({
1831
1967
  images: z.array(z.object({
1832
1968
  blob_id: z.string(),
1833
1969
  is_primary: z.number(),
1834
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1970
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1835
1971
  })).nullish(),
1836
1972
  urls: z.array(z.object({
1837
1973
  id: z.string().nullish(),
@@ -1860,7 +1996,7 @@ export const FavoriteAlbumResultSchema = z.object({
1860
1996
  images: z.array(z.object({
1861
1997
  blob_id: z.string(),
1862
1998
  is_primary: z.number(),
1863
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
1999
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1864
2000
  })).nullish(),
1865
2001
  urls: z.array(z.object({
1866
2002
  id: z.string().nullish(),
@@ -1882,7 +2018,7 @@ export const FavoriteAlbumResultSchema = z.object({
1882
2018
  images: z.array(z.object({
1883
2019
  blob_id: z.string(),
1884
2020
  is_primary: z.number(),
1885
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2021
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1886
2022
  })).nullish(),
1887
2023
  album_tags: z.array(z.string()).nullish(),
1888
2024
  is_favorite: z.boolean().nullish(),
@@ -1903,7 +2039,7 @@ export const FavoriteArtistResultSchema = z.object({
1903
2039
  images: z.array(z.object({
1904
2040
  blob_id: z.string(),
1905
2041
  is_primary: z.number(),
1906
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2042
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1907
2043
  })).nullish(),
1908
2044
  urls: z.array(z.object({
1909
2045
  id: z.string().nullish(),
@@ -1920,7 +2056,7 @@ export const FavoriteArtistResultSchema = z.object({
1920
2056
  images: z.array(z.object({
1921
2057
  blob_id: z.string(),
1922
2058
  is_primary: z.number(),
1923
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2059
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1924
2060
  })).nullish(),
1925
2061
  song_count: z.number(),
1926
2062
  album_count: z.number(),
@@ -1944,7 +2080,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
1944
2080
  images: z.array(z.object({
1945
2081
  blob_id: z.string(),
1946
2082
  is_primary: z.number(),
1947
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2083
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1948
2084
  })).nullish(),
1949
2085
  urls: z.array(z.object({
1950
2086
  id: z.string().nullish(),
@@ -1976,7 +2112,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
1976
2112
  images: z.array(z.object({
1977
2113
  blob_id: z.string(),
1978
2114
  is_primary: z.number(),
1979
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2115
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
1980
2116
  })).nullish(),
1981
2117
  urls: z.array(z.object({
1982
2118
  id: z.string().nullish(),
@@ -2008,7 +2144,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2008
2144
  images: z.array(z.object({
2009
2145
  blob_id: z.string(),
2010
2146
  is_primary: z.number(),
2011
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2147
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2012
2148
  })).nullish(),
2013
2149
  urls: z.array(z.object({
2014
2150
  id: z.string().nullish(),
@@ -2043,7 +2179,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2043
2179
  source_client_id: z.string().nullish(),
2044
2180
  filename: z.string().nullish(),
2045
2181
  parent_blob_id: z.string().nullish(),
2046
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
2182
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
2047
2183
  metadata: z.any(),
2048
2184
  created_at: z.number(),
2049
2185
  updated_at: z.number(),
@@ -2058,7 +2194,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2058
2194
  images: z.array(z.object({
2059
2195
  blob_id: z.string(),
2060
2196
  is_primary: z.number(),
2061
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2197
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2062
2198
  })).nullish(),
2063
2199
  relevance_score: z.number().nullish(),
2064
2200
  snippet: z.string().nullish(),
@@ -2096,7 +2232,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2096
2232
  images: z.array(z.object({
2097
2233
  blob_id: z.string(),
2098
2234
  is_primary: z.number(),
2099
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2235
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2100
2236
  })).nullish(),
2101
2237
  urls: z.array(z.object({
2102
2238
  id: z.string().nullish(),
@@ -2125,7 +2261,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2125
2261
  images: z.array(z.object({
2126
2262
  blob_id: z.string(),
2127
2263
  is_primary: z.number(),
2128
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2264
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2129
2265
  })).nullish(),
2130
2266
  urls: z.array(z.object({
2131
2267
  id: z.string().nullish(),
@@ -2147,7 +2283,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2147
2283
  images: z.array(z.object({
2148
2284
  blob_id: z.string(),
2149
2285
  is_primary: z.number(),
2150
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2286
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2151
2287
  })).nullish(),
2152
2288
  album_tags: z.array(z.string()).nullish(),
2153
2289
  is_favorite: z.boolean().nullish(),
@@ -2167,7 +2303,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2167
2303
  images: z.array(z.object({
2168
2304
  blob_id: z.string(),
2169
2305
  is_primary: z.number(),
2170
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2306
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2171
2307
  })).nullish(),
2172
2308
  urls: z.array(z.object({
2173
2309
  id: z.string().nullish(),
@@ -2184,7 +2320,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2184
2320
  images: z.array(z.object({
2185
2321
  blob_id: z.string(),
2186
2322
  is_primary: z.number(),
2187
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2323
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2188
2324
  })).nullish(),
2189
2325
  song_count: z.number(),
2190
2326
  album_count: z.number(),
@@ -2207,7 +2343,7 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2207
2343
  images: z.array(z.object({
2208
2344
  blob_id: z.string(),
2209
2345
  is_primary: z.number(),
2210
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2346
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2211
2347
  })).nullish(),
2212
2348
  urls: z.array(z.object({
2213
2349
  id: z.string().nullish(),
@@ -2228,6 +2364,51 @@ export const FavoriteItemSchema = z.union([z.intersection(z.object({
2228
2364
  is_favorite: z.boolean().nullish(),
2229
2365
  play_count: z.number().nullish()
2230
2366
  })
2367
+ })), z.intersection(z.object({
2368
+ type: z.literal('Video')
2369
+ }), z.object({
2370
+ favorited_at: z.number(),
2371
+ video: z.object({
2372
+ id: z.string(),
2373
+ series_id: z.string().nullish(),
2374
+ season_id: z.string().nullish(),
2375
+ episode_number: z.number().nullish(),
2376
+ content_type: z.string(),
2377
+ title: z.string(),
2378
+ description: z.string().nullish(),
2379
+ media_blob_id: z.string(),
2380
+ poster_blob_id: z.string().nullish(),
2381
+ duration_seconds: z.number().nullish(),
2382
+ release_date: z.string().nullish(),
2383
+ created_at: z.number(),
2384
+ updated_at: z.number(),
2385
+ deleted_at: z.number().nullish(),
2386
+ created_by: z.string().nullish(),
2387
+ updated_by: z.string().nullish(),
2388
+ deleted_by: z.string().nullish(),
2389
+ images: z.array(z.object({
2390
+ blob_id: z.string(),
2391
+ is_primary: z.number(),
2392
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2393
+ })).nullish(),
2394
+ play_count: z.number().nullish()
2395
+ })
2396
+ })), z.intersection(z.object({
2397
+ type: z.literal('VideoSeries')
2398
+ }), z.object({
2399
+ favorited_at: z.number(),
2400
+ series: z.object({
2401
+ id: z.string(),
2402
+ title: z.string(),
2403
+ description: z.string().nullish(),
2404
+ poster_blob_id: z.string().nullish(),
2405
+ created_at: z.number(),
2406
+ updated_at: z.number(),
2407
+ deleted_at: z.number().nullish(),
2408
+ created_by: z.string().nullish(),
2409
+ updated_by: z.string().nullish(),
2410
+ deleted_by: z.string().nullish()
2411
+ })
2231
2412
  }))]);
2232
2413
  export type FavoriteItem = z.infer<typeof FavoriteItemSchema>;
2233
2414
 
@@ -2242,7 +2423,7 @@ export const FavoritePlaylistResultSchema = z.object({
2242
2423
  images: z.array(z.object({
2243
2424
  blob_id: z.string(),
2244
2425
  is_primary: z.number(),
2245
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2426
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2246
2427
  })).nullish(),
2247
2428
  urls: z.array(z.object({
2248
2429
  id: z.string().nullish(),
@@ -2275,7 +2456,7 @@ export const FavoriteSongResultSchema = z.object({
2275
2456
  images: z.array(z.object({
2276
2457
  blob_id: z.string(),
2277
2458
  is_primary: z.number(),
2278
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2459
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2279
2460
  })).nullish(),
2280
2461
  urls: z.array(z.object({
2281
2462
  id: z.string().nullish(),
@@ -2307,7 +2488,7 @@ export const FavoriteSongResultSchema = z.object({
2307
2488
  images: z.array(z.object({
2308
2489
  blob_id: z.string(),
2309
2490
  is_primary: z.number(),
2310
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2491
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2311
2492
  })).nullish(),
2312
2493
  urls: z.array(z.object({
2313
2494
  id: z.string().nullish(),
@@ -2339,7 +2520,7 @@ export const FavoriteSongResultSchema = z.object({
2339
2520
  images: z.array(z.object({
2340
2521
  blob_id: z.string(),
2341
2522
  is_primary: z.number(),
2342
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2523
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2343
2524
  })).nullish(),
2344
2525
  urls: z.array(z.object({
2345
2526
  id: z.string().nullish(),
@@ -2374,7 +2555,7 @@ export const FavoriteSongResultSchema = z.object({
2374
2555
  source_client_id: z.string().nullish(),
2375
2556
  filename: z.string().nullish(),
2376
2557
  parent_blob_id: z.string().nullish(),
2377
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
2558
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
2378
2559
  metadata: z.any(),
2379
2560
  created_at: z.number(),
2380
2561
  updated_at: z.number(),
@@ -2389,7 +2570,7 @@ export const FavoriteSongResultSchema = z.object({
2389
2570
  images: z.array(z.object({
2390
2571
  blob_id: z.string(),
2391
2572
  is_primary: z.number(),
2392
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2573
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2393
2574
  })).nullish(),
2394
2575
  relevance_score: z.number().nullish(),
2395
2576
  snippet: z.string().nullish(),
@@ -2407,19 +2588,26 @@ export const FavoriteSongResultSchema = z.object({
2407
2588
  });
2408
2589
  export type FavoriteSongResult = z.infer<typeof FavoriteSongResultSchema>;
2409
2590
 
2591
+ export const FavoriteStatusItemSchema = z.object({
2592
+ target_id: z.string(),
2593
+ is_favorite: z.boolean()
2594
+ });
2595
+ export type FavoriteStatusItem = z.infer<typeof FavoriteStatusItemSchema>;
2596
+
2410
2597
  export const FeedItemSchema = z.object({
2411
2598
  id: z.string(),
2412
- feed_type: z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image")]),
2599
+ feed_type: z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image"), z.literal("recent_video_watch"), z.literal("recent_video_favorite"), z.literal("recent_video")]),
2413
2600
  song_id: z.string().nullish(),
2414
2601
  album_id: z.string().nullish(),
2415
2602
  artist_id: z.string().nullish(),
2416
2603
  playlist_id: z.string().nullish(),
2604
+ video_id: z.string().nullish(),
2417
2605
  title: z.string(),
2418
2606
  subtitle: z.string().nullish(),
2419
2607
  images: z.array(z.object({
2420
2608
  blob_id: z.string(),
2421
2609
  is_primary: z.number(),
2422
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2610
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2423
2611
  })).nullish(),
2424
2612
  created_at: z.number(),
2425
2613
  user_id: z.string().nullish(),
@@ -2455,19 +2643,19 @@ export const FeedItemSchema = z.object({
2455
2643
  collage_images: z.array(z.object({
2456
2644
  blob_id: z.string(),
2457
2645
  is_primary: z.number(),
2458
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2646
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2459
2647
  })).nullish(),
2460
2648
  entity_created_at: z.number().nullish()
2461
2649
  });
2462
2650
  export type FeedItem = z.infer<typeof FeedItemSchema>;
2463
2651
 
2464
- export const FeedItemTypeSchema = z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image")]);
2652
+ export const FeedItemTypeSchema = z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image"), z.literal("recent_video_watch"), z.literal("recent_video_favorite"), z.literal("recent_video")]);
2465
2653
  export type FeedItemType = z.infer<typeof FeedItemTypeSchema>;
2466
2654
 
2467
2655
  export const FeedRequestSchema = z.object({
2468
2656
  limit: z.number().nullish(),
2469
2657
  offset: z.number().nullish(),
2470
- feed_types: z.array(z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image")])).nullish(),
2658
+ feed_types: z.array(z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image"), z.literal("recent_video_watch"), z.literal("recent_video_favorite"), z.literal("recent_video")])).nullish(),
2471
2659
  user_id: z.string().nullish()
2472
2660
  });
2473
2661
  export type FeedRequest = z.infer<typeof FeedRequestSchema>;
@@ -2475,17 +2663,18 @@ export type FeedRequest = z.infer<typeof FeedRequestSchema>;
2475
2663
  export const FeedResponseSchema = z.object({
2476
2664
  items: z.array(z.object({
2477
2665
  id: z.string(),
2478
- feed_type: z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image")]),
2666
+ feed_type: z.union([z.literal("recent_listen"), z.literal("recent_favorite"), z.literal("recent_album"), z.literal("recent_rating"), z.literal("recent_playlist"), z.literal("listen_session"), z.literal("new_image"), z.literal("recent_video_watch"), z.literal("recent_video_favorite"), z.literal("recent_video")]),
2479
2667
  song_id: z.string().nullish(),
2480
2668
  album_id: z.string().nullish(),
2481
2669
  artist_id: z.string().nullish(),
2482
2670
  playlist_id: z.string().nullish(),
2671
+ video_id: z.string().nullish(),
2483
2672
  title: z.string(),
2484
2673
  subtitle: z.string().nullish(),
2485
2674
  images: z.array(z.object({
2486
2675
  blob_id: z.string(),
2487
2676
  is_primary: z.number(),
2488
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2677
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2489
2678
  })).nullish(),
2490
2679
  created_at: z.number(),
2491
2680
  user_id: z.string().nullish(),
@@ -2521,7 +2710,7 @@ export const FeedResponseSchema = z.object({
2521
2710
  collage_images: z.array(z.object({
2522
2711
  blob_id: z.string(),
2523
2712
  is_primary: z.number(),
2524
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2713
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2525
2714
  })).nullish(),
2526
2715
  entity_created_at: z.number().nullish()
2527
2716
  })),
@@ -2531,7 +2720,8 @@ export type FeedResponse = z.infer<typeof FeedResponseSchema>;
2531
2720
 
2532
2721
  export const FetchMediaParamsSchema = z.object({
2533
2722
  url: z.string(),
2534
- user_id: z.string().nullish()
2723
+ user_id: z.string().nullish(),
2724
+ domain: z.union([z.literal("music"), z.literal("video")])
2535
2725
  });
2536
2726
  export type FetchMediaParams = z.infer<typeof FetchMediaParamsSchema>;
2537
2727
 
@@ -2579,7 +2769,7 @@ export const FindByMergedKeyResponseSchema = z.object({
2579
2769
  images: z.array(z.object({
2580
2770
  blob_id: z.string(),
2581
2771
  is_primary: z.number(),
2582
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2772
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2583
2773
  })).nullish(),
2584
2774
  urls: z.array(z.object({
2585
2775
  id: z.string().nullish(),
@@ -2608,7 +2798,7 @@ export const FindByMergedKeyResponseSchema = z.object({
2608
2798
  images: z.array(z.object({
2609
2799
  blob_id: z.string(),
2610
2800
  is_primary: z.number(),
2611
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
2801
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
2612
2802
  })).nullish(),
2613
2803
  urls: z.array(z.object({
2614
2804
  id: z.string().nullish(),
@@ -2727,6 +2917,36 @@ export const GetEnrichmentProgressResponseSchema = z.object({
2727
2917
  });
2728
2918
  export type GetEnrichmentProgressResponse = z.infer<typeof GetEnrichmentProgressResponseSchema>;
2729
2919
 
2920
+ export const GetEntitiesTagsRequestSchema = z.object({
2921
+ entity_type: z.string(),
2922
+ entity_ids: z.array(z.string())
2923
+ });
2924
+ export type GetEntitiesTagsRequest = z.infer<typeof GetEntitiesTagsRequestSchema>;
2925
+
2926
+ export const GetEntityImagesRequestSchema = z.object({
2927
+ entity_type: z.string(),
2928
+ entity_id: z.string()
2929
+ });
2930
+ export type GetEntityImagesRequest = z.infer<typeof GetEntityImagesRequestSchema>;
2931
+
2932
+ export const GetEntityTaxonsRequestSchema = z.object({
2933
+ entity_type: z.string(),
2934
+ entity_id: z.string()
2935
+ });
2936
+ export type GetEntityTaxonsRequest = z.infer<typeof GetEntityTaxonsRequestSchema>;
2937
+
2938
+ export const GetEntityUrlsRequestSchema = z.object({
2939
+ entity_type: z.string(),
2940
+ entity_id: z.string()
2941
+ });
2942
+ export type GetEntityUrlsRequest = z.infer<typeof GetEntityUrlsRequestSchema>;
2943
+
2944
+ export const GetFavoriteStatusBulkRequestSchema = z.object({
2945
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("taxon"), z.literal("playlist"), z.literal("video"), z.literal("video_series")]),
2946
+ target_ids: z.array(z.string())
2947
+ });
2948
+ export type GetFavoriteStatusBulkRequest = z.infer<typeof GetFavoriteStatusBulkRequestSchema>;
2949
+
2730
2950
  export const GetJobRequestSchema = z.object({
2731
2951
  job_id: z.string()
2732
2952
  });
@@ -2766,10 +2986,16 @@ export const GetKnockRequestSchema = z.object({
2766
2986
  });
2767
2987
  export type GetKnockRequest = z.infer<typeof GetKnockRequestSchema>;
2768
2988
 
2769
- export const GetListenSessionRequestSchema = z.object({
2989
+ export const GetPlaybackProgressRequestSchema = z.object({
2990
+ entity_type: z.string(),
2991
+ entity_id: z.string()
2992
+ });
2993
+ export type GetPlaybackProgressRequest = z.infer<typeof GetPlaybackProgressRequestSchema>;
2994
+
2995
+ export const GetPlaybackSessionRequestSchema = z.object({
2770
2996
  id: z.string()
2771
2997
  });
2772
- export type GetListenSessionRequest = z.infer<typeof GetListenSessionRequestSchema>;
2998
+ export type GetPlaybackSessionRequest = z.infer<typeof GetPlaybackSessionRequestSchema>;
2773
2999
 
2774
3000
  export const GetPlaylistRequestSchema = z.object({
2775
3001
  id: z.string()
@@ -2777,11 +3003,17 @@ export const GetPlaylistRequestSchema = z.object({
2777
3003
  export type GetPlaylistRequest = z.infer<typeof GetPlaylistRequestSchema>;
2778
3004
 
2779
3005
  export const GetRatingStatsRequestSchema = z.object({
2780
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album")]),
3006
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("video")]),
2781
3007
  target_id: z.string()
2782
3008
  });
2783
3009
  export type GetRatingStatsRequest = z.infer<typeof GetRatingStatsRequestSchema>;
2784
3010
 
3011
+ export const GetRatingStatusBulkRequestSchema = z.object({
3012
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("video")]),
3013
+ target_ids: z.array(z.string())
3014
+ });
3015
+ export type GetRatingStatusBulkRequest = z.infer<typeof GetRatingStatusBulkRequestSchema>;
3016
+
2785
3017
  export const GetRecordingRequestSchema = z.object({
2786
3018
  mbid: z.string()
2787
3019
  });
@@ -2802,6 +3034,26 @@ export const GetTaxonRequestSchema = z.object({
2802
3034
  });
2803
3035
  export type GetTaxonRequest = z.infer<typeof GetTaxonRequestSchema>;
2804
3036
 
3037
+ export const GetVideoRenditionsRequestSchema = z.object({
3038
+ media_blob_id: z.string()
3039
+ });
3040
+ export type GetVideoRenditionsRequest = z.infer<typeof GetVideoRenditionsRequestSchema>;
3041
+
3042
+ export const GetVideoRequestSchema = z.object({
3043
+ id: z.string()
3044
+ });
3045
+ export type GetVideoRequest = z.infer<typeof GetVideoRequestSchema>;
3046
+
3047
+ export const GetVideoSeasonRequestSchema = z.object({
3048
+ id: z.string()
3049
+ });
3050
+ export type GetVideoSeasonRequest = z.infer<typeof GetVideoSeasonRequestSchema>;
3051
+
3052
+ export const GetVideoSeriesRequestSchema = z.object({
3053
+ id: z.string()
3054
+ });
3055
+ export type GetVideoSeriesRequest = z.infer<typeof GetVideoSeriesRequestSchema>;
3056
+
2805
3057
  export const HasBlobsRequestSchema = z.object({
2806
3058
  blake3s: z.array(z.string()),
2807
3059
  sha256s: z.array(z.string())
@@ -2831,6 +3083,13 @@ export const ImageIngestTargetSchema = z.union([z.object({
2831
3083
  })]);
2832
3084
  export type ImageIngestTarget = z.infer<typeof ImageIngestTargetSchema>;
2833
3085
 
3086
+ export const ImageMetadataSchema = z.object({
3087
+ blob_id: z.string(),
3088
+ is_primary: z.number(),
3089
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3090
+ });
3091
+ export type ImageMetadata = z.infer<typeof ImageMetadataSchema>;
3092
+
2834
3093
  export const ImageUploadResponseSchema = z.object({
2835
3094
  blob_id: z.string(),
2836
3095
  job_id: z.string(),
@@ -2879,7 +3138,7 @@ export const JobEventSchema = z.union([z.object({
2879
3138
  session_id: z.string(),
2880
3139
  complete: z.number(),
2881
3140
  total: z.number(),
2882
- topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
3141
+ topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
2883
3142
  entity_ref: z.union([z.object({
2884
3143
  kind: z.literal('album'),
2885
3144
  id: z.string()
@@ -2895,7 +3154,7 @@ export const JobEventSchema = z.union([z.object({
2895
3154
  job_id: z.string(),
2896
3155
  from: z.union([z.literal('pending'), z.literal('running'), z.literal('completed'), z.literal('failed'), z.literal('cancelled')]).nullish(),
2897
3156
  to: z.union([z.literal('pending'), z.literal('running'), z.literal('completed'), z.literal('failed'), z.literal('cancelled')]),
2898
- topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
3157
+ topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
2899
3158
  entity_ref: z.union([z.object({
2900
3159
  kind: z.literal('album'),
2901
3160
  id: z.string()
@@ -2910,7 +3169,7 @@ export const JobEventSchema = z.union([z.object({
2910
3169
  job_id: z.string(),
2911
3170
  error_type: z.string(),
2912
3171
  message: z.string(),
2913
- topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
3172
+ topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
2914
3173
  entity_ref: z.union([z.object({
2915
3174
  kind: z.literal('album'),
2916
3175
  id: z.string()
@@ -2925,7 +3184,7 @@ export const JobEventSchema = z.union([z.object({
2925
3184
  job_id: z.string(),
2926
3185
  stage: z.string(),
2927
3186
  message: z.string().nullish(),
2928
- topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
3187
+ topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
2929
3188
  entity_ref: z.union([z.object({
2930
3189
  kind: z.literal('album'),
2931
3190
  id: z.string()
@@ -2937,7 +3196,7 @@ export const JobEventSchema = z.union([z.object({
2937
3196
  }), z.object({
2938
3197
  kind: z.literal('completed'),
2939
3198
  session_id: z.string(),
2940
- topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
3199
+ topic: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
2941
3200
  entity_ref: z.union([z.object({
2942
3201
  kind: z.literal('album'),
2943
3202
  id: z.string()
@@ -2975,7 +3234,7 @@ export type JobResponse = z.infer<typeof JobResponseSchema>;
2975
3234
  export const JobStateSnapshotSchema = z.object({
2976
3235
  job_id: z.string(),
2977
3236
  session_id: z.string().nullish(),
2978
- job_type: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
3237
+ job_type: z.union([z.literal('ScanDirectory'), z.literal('RescanDirectories'), z.literal('ProcessFile'), z.literal('ProcessDirectory'), z.literal('FetchMedia'), z.literal('PreCheckFetch'), z.literal('ConvertWebp'), z.literal('ImportMusic'), z.literal('ImportVideo'), z.literal('TranscodeVideo'), z.literal('MbAlbumSearch'), z.literal('MbAlbumDetail'), z.literal('LastFmAlbumDetail'), z.literal('LastFmArtistDetail'), z.literal('AudioDbAlbumDetail'), z.literal('AudioDbArtistDetail'), z.literal('AlbumEnrichmentPipeline'), z.literal('AutoApplyAlbumEnrichment')]),
2979
3238
  status: z.union([z.literal('pending'), z.literal('running'), z.literal('completed'), z.literal('failed'), z.literal('cancelled')]),
2980
3239
  entity_ref: z.union([z.object({
2981
3240
  kind: z.literal('album'),
@@ -2987,6 +3246,11 @@ export const JobStateSnapshotSchema = z.object({
2987
3246
  created_by: z.string().nullish(),
2988
3247
  last_stage: z.string().nullish(),
2989
3248
  last_message: z.string().nullish(),
3249
+ errors: z.array(z.object({
3250
+ error_type: z.string(),
3251
+ title: z.string(),
3252
+ detail: z.string()
3253
+ })).nullish(),
2990
3254
  updated_at: z.number()
2991
3255
  });
2992
3256
  export type JobStateSnapshot = z.infer<typeof JobStateSnapshotSchema>;
@@ -3076,13 +3340,19 @@ export type ListBelovedRequest = z.infer<typeof ListBelovedRequestSchema>;
3076
3340
 
3077
3341
  export const ListBelovedResponseSchema = z.object({
3078
3342
  album_ids: z.array(z.string()),
3079
- artist_ids: z.array(z.string())
3343
+ artist_ids: z.array(z.string()),
3344
+ video_ids: z.array(z.string())
3080
3345
  });
3081
3346
  export type ListBelovedResponse = z.infer<typeof ListBelovedResponseSchema>;
3082
3347
 
3348
+ export const ListEntityTypeTagsRequestSchema = z.object({
3349
+ entity_type: z.string()
3350
+ });
3351
+ export type ListEntityTypeTagsRequest = z.infer<typeof ListEntityTypeTagsRequestSchema>;
3352
+
3083
3353
  export const ListFavoritesRequestSchema = z.object({
3084
3354
  user_id: z.string().nullish(),
3085
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("taxon"), z.literal("playlist")]).nullish(),
3355
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("taxon"), z.literal("playlist"), z.literal("video"), z.literal("video_series")]).nullish(),
3086
3356
  limit: z.number().nullish(),
3087
3357
  offset: z.number().nullish()
3088
3358
  });
@@ -3100,7 +3370,7 @@ export const ListFavoritesResponseSchema = z.object({
3100
3370
  images: z.array(z.object({
3101
3371
  blob_id: z.string(),
3102
3372
  is_primary: z.number(),
3103
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3373
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3104
3374
  })).nullish(),
3105
3375
  urls: z.array(z.object({
3106
3376
  id: z.string().nullish(),
@@ -3132,7 +3402,7 @@ export const ListFavoritesResponseSchema = z.object({
3132
3402
  images: z.array(z.object({
3133
3403
  blob_id: z.string(),
3134
3404
  is_primary: z.number(),
3135
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3405
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3136
3406
  })).nullish(),
3137
3407
  urls: z.array(z.object({
3138
3408
  id: z.string().nullish(),
@@ -3164,7 +3434,7 @@ export const ListFavoritesResponseSchema = z.object({
3164
3434
  images: z.array(z.object({
3165
3435
  blob_id: z.string(),
3166
3436
  is_primary: z.number(),
3167
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3437
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3168
3438
  })).nullish(),
3169
3439
  urls: z.array(z.object({
3170
3440
  id: z.string().nullish(),
@@ -3199,7 +3469,7 @@ export const ListFavoritesResponseSchema = z.object({
3199
3469
  source_client_id: z.string().nullish(),
3200
3470
  filename: z.string().nullish(),
3201
3471
  parent_blob_id: z.string().nullish(),
3202
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
3472
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
3203
3473
  metadata: z.any(),
3204
3474
  created_at: z.number(),
3205
3475
  updated_at: z.number(),
@@ -3214,7 +3484,7 @@ export const ListFavoritesResponseSchema = z.object({
3214
3484
  images: z.array(z.object({
3215
3485
  blob_id: z.string(),
3216
3486
  is_primary: z.number(),
3217
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3487
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3218
3488
  })).nullish(),
3219
3489
  relevance_score: z.number().nullish(),
3220
3490
  snippet: z.string().nullish(),
@@ -3252,7 +3522,7 @@ export const ListFavoritesResponseSchema = z.object({
3252
3522
  images: z.array(z.object({
3253
3523
  blob_id: z.string(),
3254
3524
  is_primary: z.number(),
3255
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3525
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3256
3526
  })).nullish(),
3257
3527
  urls: z.array(z.object({
3258
3528
  id: z.string().nullish(),
@@ -3281,7 +3551,7 @@ export const ListFavoritesResponseSchema = z.object({
3281
3551
  images: z.array(z.object({
3282
3552
  blob_id: z.string(),
3283
3553
  is_primary: z.number(),
3284
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3554
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3285
3555
  })).nullish(),
3286
3556
  urls: z.array(z.object({
3287
3557
  id: z.string().nullish(),
@@ -3303,7 +3573,7 @@ export const ListFavoritesResponseSchema = z.object({
3303
3573
  images: z.array(z.object({
3304
3574
  blob_id: z.string(),
3305
3575
  is_primary: z.number(),
3306
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3576
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3307
3577
  })).nullish(),
3308
3578
  album_tags: z.array(z.string()).nullish(),
3309
3579
  is_favorite: z.boolean().nullish(),
@@ -3323,7 +3593,7 @@ export const ListFavoritesResponseSchema = z.object({
3323
3593
  images: z.array(z.object({
3324
3594
  blob_id: z.string(),
3325
3595
  is_primary: z.number(),
3326
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3596
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3327
3597
  })).nullish(),
3328
3598
  urls: z.array(z.object({
3329
3599
  id: z.string().nullish(),
@@ -3340,7 +3610,7 @@ export const ListFavoritesResponseSchema = z.object({
3340
3610
  images: z.array(z.object({
3341
3611
  blob_id: z.string(),
3342
3612
  is_primary: z.number(),
3343
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3613
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3344
3614
  })).nullish(),
3345
3615
  song_count: z.number(),
3346
3616
  album_count: z.number(),
@@ -3363,7 +3633,7 @@ export const ListFavoritesResponseSchema = z.object({
3363
3633
  images: z.array(z.object({
3364
3634
  blob_id: z.string(),
3365
3635
  is_primary: z.number(),
3366
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3636
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3367
3637
  })).nullish(),
3368
3638
  urls: z.array(z.object({
3369
3639
  id: z.string().nullish(),
@@ -3384,6 +3654,51 @@ export const ListFavoritesResponseSchema = z.object({
3384
3654
  is_favorite: z.boolean().nullish(),
3385
3655
  play_count: z.number().nullish()
3386
3656
  })
3657
+ })), z.intersection(z.object({
3658
+ type: z.literal('Video')
3659
+ }), z.object({
3660
+ favorited_at: z.number(),
3661
+ video: z.object({
3662
+ id: z.string(),
3663
+ series_id: z.string().nullish(),
3664
+ season_id: z.string().nullish(),
3665
+ episode_number: z.number().nullish(),
3666
+ content_type: z.string(),
3667
+ title: z.string(),
3668
+ description: z.string().nullish(),
3669
+ media_blob_id: z.string(),
3670
+ poster_blob_id: z.string().nullish(),
3671
+ duration_seconds: z.number().nullish(),
3672
+ release_date: z.string().nullish(),
3673
+ created_at: z.number(),
3674
+ updated_at: z.number(),
3675
+ deleted_at: z.number().nullish(),
3676
+ created_by: z.string().nullish(),
3677
+ updated_by: z.string().nullish(),
3678
+ deleted_by: z.string().nullish(),
3679
+ images: z.array(z.object({
3680
+ blob_id: z.string(),
3681
+ is_primary: z.number(),
3682
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3683
+ })).nullish(),
3684
+ play_count: z.number().nullish()
3685
+ })
3686
+ })), z.intersection(z.object({
3687
+ type: z.literal('VideoSeries')
3688
+ }), z.object({
3689
+ favorited_at: z.number(),
3690
+ series: z.object({
3691
+ id: z.string(),
3692
+ title: z.string(),
3693
+ description: z.string().nullish(),
3694
+ poster_blob_id: z.string().nullish(),
3695
+ created_at: z.number(),
3696
+ updated_at: z.number(),
3697
+ deleted_at: z.number().nullish(),
3698
+ created_by: z.string().nullish(),
3699
+ updated_by: z.string().nullish(),
3700
+ deleted_by: z.string().nullish()
3701
+ })
3387
3702
  }))])),
3388
3703
  total_count: z.number(),
3389
3704
  has_more: z.boolean(),
@@ -3400,28 +3715,46 @@ export const ListJobsRequestSchema = z.object({
3400
3715
  });
3401
3716
  export type ListJobsRequest = z.infer<typeof ListJobsRequestSchema>;
3402
3717
 
3403
- export const ListListenSessionsRequestSchema = z.object({
3718
+ export const ListPendingReviewRequestSchema = z.object({
3719
+ session_id: z.string().nullish()
3720
+ });
3721
+ export type ListPendingReviewRequest = z.infer<typeof ListPendingReviewRequestSchema>;
3722
+
3723
+ export const ListPendingVideoReviewRequestSchema = z.object({
3724
+ session_id: z.string().nullish()
3725
+ });
3726
+ export type ListPendingVideoReviewRequest = z.infer<typeof ListPendingVideoReviewRequestSchema>;
3727
+
3728
+ export const ListPlaybackProgressRequestSchema = z.object({
3729
+ limit: z.number().nullish()
3730
+ });
3731
+ export type ListPlaybackProgressRequest = z.infer<typeof ListPlaybackProgressRequestSchema>;
3732
+
3733
+ export const ListPlaybackSessionsRequestSchema = z.object({
3404
3734
  user_id: z.string().nullish(),
3405
3735
  status: z.string().nullish(),
3406
3736
  limit: z.number().nullish(),
3407
3737
  offset: z.number().nullish()
3408
3738
  });
3409
- export type ListListenSessionsRequest = z.infer<typeof ListListenSessionsRequestSchema>;
3739
+ export type ListPlaybackSessionsRequest = z.infer<typeof ListPlaybackSessionsRequestSchema>;
3410
3740
 
3411
- export const ListListenSessionsResponseSchema = z.object({
3741
+ export const ListPlaybackSessionsResponseSchema = z.object({
3412
3742
  items: z.array(z.object({
3413
3743
  id: z.string(),
3414
3744
  user_id: z.string(),
3415
- session_type: z.union([z.literal("song"), z.literal("album"), z.literal("artist"), z.literal("taxon"), z.literal("playlist"), z.literal("shuffle"), z.literal("radio")]),
3745
+ session_type: z.union([z.literal("song"), z.literal("album"), z.literal("artist"), z.literal("taxon"), z.literal("playlist"), z.literal("shuffle"), z.literal("radio"), z.literal("video"), z.literal("video_series"), z.literal("video_season"), z.literal("mixed")]),
3416
3746
  entity_id: z.string().nullish(),
3417
3747
  label: z.string(),
3418
- song_ids: z.array(z.string()),
3419
- total_songs: z.number(),
3420
- songs_completed: z.number(),
3748
+ items: z.array(z.object({
3749
+ entity_type: z.string(),
3750
+ entity_id: z.string()
3751
+ })),
3752
+ total_items: z.number(),
3753
+ items_completed: z.number(),
3421
3754
  total_duration_ms: z.number(),
3422
- listened_duration_ms: z.number(),
3423
- current_song_index: z.number(),
3424
- current_song_position_ms: z.number(),
3755
+ played_duration_ms: z.number(),
3756
+ current_item_index: z.number(),
3757
+ current_item_position_ms: z.number(),
3425
3758
  status: z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]),
3426
3759
  created_at: z.number(),
3427
3760
  updated_at: z.number(),
@@ -3430,12 +3763,12 @@ export const ListListenSessionsResponseSchema = z.object({
3430
3763
  })),
3431
3764
  total: z.number()
3432
3765
  });
3433
- export type ListListenSessionsResponse = z.infer<typeof ListListenSessionsResponseSchema>;
3766
+ export type ListPlaybackSessionsResponse = z.infer<typeof ListPlaybackSessionsResponseSchema>;
3434
3767
 
3435
- export const ListPendingReviewRequestSchema = z.object({
3436
- session_id: z.string().nullish()
3768
+ export const ListPlaylistItemsRequestSchema = z.object({
3769
+ playlist_id: z.string()
3437
3770
  });
3438
- export type ListPendingReviewRequest = z.infer<typeof ListPendingReviewRequestSchema>;
3771
+ export type ListPlaylistItemsRequest = z.infer<typeof ListPlaylistItemsRequestSchema>;
3439
3772
 
3440
3773
  export const ListRelatedArtistsBatchRequestSchema = z.object({
3441
3774
  artist_ids: z.array(z.string()),
@@ -3514,6 +3847,11 @@ export const ListRelatedArtistsResponseSchema = z.object({
3514
3847
  });
3515
3848
  export type ListRelatedArtistsResponse = z.infer<typeof ListRelatedArtistsResponseSchema>;
3516
3849
 
3850
+ export const ListTaxonKindsRequestSchema = z.object({
3851
+ domain: z.string().nullish()
3852
+ });
3853
+ export type ListTaxonKindsRequest = z.infer<typeof ListTaxonKindsRequestSchema>;
3854
+
3517
3855
  export const ListTaxonParentsForKindRequestSchema = z.object({
3518
3856
  kind_slug: z.string()
3519
3857
  });
@@ -3524,32 +3862,32 @@ export const ListTaxonsByKindRequestSchema = z.object({
3524
3862
  });
3525
3863
  export type ListTaxonsByKindRequest = z.infer<typeof ListTaxonsByKindRequestSchema>;
3526
3864
 
3527
- export const ListenSessionSchema = z.object({
3528
- id: z.string(),
3529
- user_id: z.string(),
3530
- session_type: z.union([z.literal("song"), z.literal("album"), z.literal("artist"), z.literal("taxon"), z.literal("playlist"), z.literal("shuffle"), z.literal("radio")]),
3531
- entity_id: z.string().nullish(),
3532
- label: z.string(),
3533
- song_ids: z.array(z.string()),
3534
- total_songs: z.number(),
3535
- songs_completed: z.number(),
3536
- total_duration_ms: z.number(),
3537
- listened_duration_ms: z.number(),
3538
- current_song_index: z.number(),
3539
- current_song_position_ms: z.number(),
3540
- status: z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]),
3541
- created_at: z.number(),
3542
- updated_at: z.number(),
3543
- username: z.string().nullish(),
3544
- progress_percent: z.number().nullish()
3865
+ export const ListVideoSeasonsRequestSchema = z.object({
3866
+ series_id: z.string().nullish()
3545
3867
  });
3546
- export type ListenSession = z.infer<typeof ListenSessionSchema>;
3868
+ export type ListVideoSeasonsRequest = z.infer<typeof ListVideoSeasonsRequestSchema>;
3547
3869
 
3548
- export const ListenSessionStatusSchema = z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]);
3549
- export type ListenSessionStatus = z.infer<typeof ListenSessionStatusSchema>;
3870
+ export const ListVideoSeriesRequestSchema = z.object({
3871
+ limit: z.number().nullish(),
3872
+ offset: z.number().nullish()
3873
+ });
3874
+ export type ListVideoSeriesRequest = z.infer<typeof ListVideoSeriesRequestSchema>;
3550
3875
 
3551
- export const ListenSessionTypeSchema = z.union([z.literal("song"), z.literal("album"), z.literal("artist"), z.literal("taxon"), z.literal("playlist"), z.literal("shuffle"), z.literal("radio")]);
3552
- export type ListenSessionType = z.infer<typeof ListenSessionTypeSchema>;
3876
+ export const ListVideosBySeasonRequestSchema = z.object({
3877
+ season_id: z.string()
3878
+ });
3879
+ export type ListVideosBySeasonRequest = z.infer<typeof ListVideosBySeasonRequestSchema>;
3880
+
3881
+ export const ListVideosBySeriesRequestSchema = z.object({
3882
+ series_id: z.string()
3883
+ });
3884
+ export type ListVideosBySeriesRequest = z.infer<typeof ListVideosBySeriesRequestSchema>;
3885
+
3886
+ export const ListVideosUnattachedRequestSchema = z.object({
3887
+ limit: z.number().nullish(),
3888
+ offset: z.number().nullish()
3889
+ });
3890
+ export type ListVideosUnattachedRequest = z.infer<typeof ListVideosUnattachedRequestSchema>;
3553
3891
 
3554
3892
  export const ListeningHistoryItemSchema = z.object({
3555
3893
  id: z.string(),
@@ -3609,6 +3947,12 @@ export const MarkAlbumReviewedRequestSchema = z.object({
3609
3947
  });
3610
3948
  export type MarkAlbumReviewedRequest = z.infer<typeof MarkAlbumReviewedRequestSchema>;
3611
3949
 
3950
+ export const MarkVideoGroupReviewedRequestSchema = z.object({
3951
+ group_key: z.string(),
3952
+ session_id: z.string()
3953
+ });
3954
+ export type MarkVideoGroupReviewedRequest = z.infer<typeof MarkVideoGroupReviewedRequestSchema>;
3955
+
3612
3956
  export const MbAlbumDetailParamsSchema = z.object({
3613
3957
  album_id: z.string(),
3614
3958
  release_group_id: z.string(),
@@ -3906,7 +4250,7 @@ export const MediaBlobSchema = z.object({
3906
4250
  source_client_id: z.string().nullish(),
3907
4251
  filename: z.string().nullish(),
3908
4252
  parent_blob_id: z.string().nullish(),
3909
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
4253
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
3910
4254
  metadata: z.any(),
3911
4255
  created_at: z.number(),
3912
4256
  updated_at: z.number(),
@@ -3947,7 +4291,7 @@ export const MergedKeyMatchSchema = z.object({
3947
4291
  images: z.array(z.object({
3948
4292
  blob_id: z.string(),
3949
4293
  is_primary: z.number(),
3950
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4294
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3951
4295
  })).nullish(),
3952
4296
  urls: z.array(z.object({
3953
4297
  id: z.string().nullish(),
@@ -3976,7 +4320,7 @@ export const MergedKeyMatchSchema = z.object({
3976
4320
  images: z.array(z.object({
3977
4321
  blob_id: z.string(),
3978
4322
  is_primary: z.number(),
3979
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4323
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3980
4324
  })).nullish(),
3981
4325
  urls: z.array(z.object({
3982
4326
  id: z.string().nullish(),
@@ -3996,10 +4340,25 @@ export type MergedKeyMatch = z.infer<typeof MergedKeyMatchSchema>;
3996
4340
  export const MoveSongReviewRequestSchema = z.object({
3997
4341
  session_id: z.string(),
3998
4342
  song_id: z.string(),
3999
- to_album_id: z.string()
4343
+ to_album_id: z.string().nullish(),
4344
+ new_album_title: z.string().nullish(),
4345
+ new_album_artist_name: z.string().nullish()
4000
4346
  });
4001
4347
  export type MoveSongReviewRequest = z.infer<typeof MoveSongReviewRequestSchema>;
4002
4348
 
4349
+ export const MoveVideoReviewRequestSchema = z.object({
4350
+ video_id: z.string(),
4351
+ to_series_id: z.string().nullish(),
4352
+ to_season_id: z.string().nullish(),
4353
+ content_type: z.string().nullish(),
4354
+ new_series_title: z.string().nullish(),
4355
+ new_season: z.object({
4356
+ season_number: z.number(),
4357
+ title: z.string().nullish()
4358
+ }).nullish()
4359
+ });
4360
+ export type MoveVideoReviewRequest = z.infer<typeof MoveVideoReviewRequestSchema>;
4361
+
4003
4362
  export const MusicImportResponseSchema = z.object({
4004
4363
  session_id: z.string(),
4005
4364
  jobs_created: z.number(),
@@ -4070,6 +4429,25 @@ export const PatchAlbumReviewRequestSchema = z.object({
4070
4429
  });
4071
4430
  export type PatchAlbumReviewRequest = z.infer<typeof PatchAlbumReviewRequestSchema>;
4072
4431
 
4432
+ export const PatchVideoGroupReviewRequestSchema = z.object({
4433
+ group_key: z.string(),
4434
+ session_id: z.string(),
4435
+ series_title: z.string().nullish(),
4436
+ series_description: z.string().nullish(),
4437
+ videos: z.array(z.object({
4438
+ video_id: z.string(),
4439
+ title: z.string().nullish(),
4440
+ episode_number: z.number().nullish(),
4441
+ season_id: z.string().nullish(),
4442
+ new_season: z.object({
4443
+ season_number: z.number(),
4444
+ title: z.string().nullish()
4445
+ }).nullish(),
4446
+ content_type: z.string().nullish()
4447
+ })).nullish()
4448
+ });
4449
+ export type PatchVideoGroupReviewRequest = z.infer<typeof PatchVideoGroupReviewRequestSchema>;
4450
+
4073
4451
  export const PendingReviewAlbumSchema = z.object({
4074
4452
  album_id: z.string(),
4075
4453
  title: z.string(),
@@ -4097,6 +4475,58 @@ export const PendingReviewSessionSchema = z.object({
4097
4475
  });
4098
4476
  export type PendingReviewSession = z.infer<typeof PendingReviewSessionSchema>;
4099
4477
 
4478
+ export const PendingReviewVideoSummarySchema = z.object({
4479
+ video_id: z.string(),
4480
+ title: z.string(),
4481
+ content_type: z.string(),
4482
+ season_id: z.string().nullish(),
4483
+ season_number: z.number().nullish(),
4484
+ season_title: z.string().nullish(),
4485
+ episode_number: z.number().nullish()
4486
+ });
4487
+ export type PendingReviewVideoSummary = z.infer<typeof PendingReviewVideoSummarySchema>;
4488
+
4489
+ export const PendingVideoReviewGroupSchema = z.object({
4490
+ group_key: z.string(),
4491
+ series_id: z.string().nullish(),
4492
+ series_title: z.string().nullish(),
4493
+ poster_blob_id: z.string().nullish(),
4494
+ videos: z.array(z.object({
4495
+ video_id: z.string(),
4496
+ title: z.string(),
4497
+ content_type: z.string(),
4498
+ season_id: z.string().nullish(),
4499
+ season_number: z.number().nullish(),
4500
+ season_title: z.string().nullish(),
4501
+ episode_number: z.number().nullish()
4502
+ })),
4503
+ pending_blob_count: z.number()
4504
+ });
4505
+ export type PendingVideoReviewGroup = z.infer<typeof PendingVideoReviewGroupSchema>;
4506
+
4507
+ export const PendingVideoReviewSessionSchema = z.object({
4508
+ session_id: z.string(),
4509
+ created_at: z.number(),
4510
+ uploader_username: z.string().nullish(),
4511
+ groups: z.array(z.object({
4512
+ group_key: z.string(),
4513
+ series_id: z.string().nullish(),
4514
+ series_title: z.string().nullish(),
4515
+ poster_blob_id: z.string().nullish(),
4516
+ videos: z.array(z.object({
4517
+ video_id: z.string(),
4518
+ title: z.string(),
4519
+ content_type: z.string(),
4520
+ season_id: z.string().nullish(),
4521
+ season_number: z.number().nullish(),
4522
+ season_title: z.string().nullish(),
4523
+ episode_number: z.number().nullish()
4524
+ })),
4525
+ pending_blob_count: z.number()
4526
+ }))
4527
+ });
4528
+ export type PendingVideoReviewSession = z.infer<typeof PendingVideoReviewSessionSchema>;
4529
+
4100
4530
  export const PlayAnalyticsSchema = z.object({
4101
4531
  song_id: z.string(),
4102
4532
  total_plays: z.number(),
@@ -4112,6 +4542,49 @@ export const PlayAnalyticsSchema = z.object({
4112
4542
  });
4113
4543
  export type PlayAnalytics = z.infer<typeof PlayAnalyticsSchema>;
4114
4544
 
4545
+ export const PlaybackProgressSchema = z.object({
4546
+ user_id: z.string(),
4547
+ entity_type: z.string(),
4548
+ entity_id: z.string(),
4549
+ position_fraction: z.number(),
4550
+ position_seconds: z.number().nullish(),
4551
+ duration_seconds: z.number().nullish(),
4552
+ position_locator: z.string().nullish(),
4553
+ completed_at: z.number().nullish(),
4554
+ updated_at: z.number()
4555
+ });
4556
+ export type PlaybackProgress = z.infer<typeof PlaybackProgressSchema>;
4557
+
4558
+ export const PlaybackSessionSchema = z.object({
4559
+ id: z.string(),
4560
+ user_id: z.string(),
4561
+ session_type: z.union([z.literal("song"), z.literal("album"), z.literal("artist"), z.literal("taxon"), z.literal("playlist"), z.literal("shuffle"), z.literal("radio"), z.literal("video"), z.literal("video_series"), z.literal("video_season"), z.literal("mixed")]),
4562
+ entity_id: z.string().nullish(),
4563
+ label: z.string(),
4564
+ items: z.array(z.object({
4565
+ entity_type: z.string(),
4566
+ entity_id: z.string()
4567
+ })),
4568
+ total_items: z.number(),
4569
+ items_completed: z.number(),
4570
+ total_duration_ms: z.number(),
4571
+ played_duration_ms: z.number(),
4572
+ current_item_index: z.number(),
4573
+ current_item_position_ms: z.number(),
4574
+ status: z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]),
4575
+ created_at: z.number(),
4576
+ updated_at: z.number(),
4577
+ username: z.string().nullish(),
4578
+ progress_percent: z.number().nullish()
4579
+ });
4580
+ export type PlaybackSession = z.infer<typeof PlaybackSessionSchema>;
4581
+
4582
+ export const PlaybackSessionStatusSchema = z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]);
4583
+ export type PlaybackSessionStatus = z.infer<typeof PlaybackSessionStatusSchema>;
4584
+
4585
+ export const PlaybackSessionTypeSchema = z.union([z.literal("song"), z.literal("album"), z.literal("artist"), z.literal("taxon"), z.literal("playlist"), z.literal("shuffle"), z.literal("radio"), z.literal("video"), z.literal("video_series"), z.literal("video_season"), z.literal("mixed")]);
4586
+ export type PlaybackSessionType = z.infer<typeof PlaybackSessionTypeSchema>;
4587
+
4115
4588
  export const PlayerCommandSchema = z.union([
4116
4589
  z.object({ kind: z.literal("load"), paths: z.array(z.string()) }),
4117
4590
  z.object({ kind: z.literal("enqueue"), paths: z.array(z.string()) }),
@@ -4158,7 +4631,7 @@ export const PlaylistSchema = z.object({
4158
4631
  images: z.array(z.object({
4159
4632
  blob_id: z.string(),
4160
4633
  is_primary: z.number(),
4161
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4634
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4162
4635
  })).nullish(),
4163
4636
  urls: z.array(z.object({
4164
4637
  id: z.string().nullish(),
@@ -4176,6 +4649,23 @@ export const PlaylistSchema = z.object({
4176
4649
  });
4177
4650
  export type Playlist = z.infer<typeof PlaylistSchema>;
4178
4651
 
4652
+ export const PlaylistItemSchema = z.object({
4653
+ id: z.string(),
4654
+ playlist_id: z.string(),
4655
+ entity_type: z.string(),
4656
+ entity_id: z.string(),
4657
+ position: z.number(),
4658
+ added_at: z.number(),
4659
+ added_by: z.string().nullish()
4660
+ });
4661
+ export type PlaylistItem = z.infer<typeof PlaylistItemSchema>;
4662
+
4663
+ export const PlaylistItemRefSchema = z.object({
4664
+ entity_type: z.string(),
4665
+ entity_id: z.string()
4666
+ });
4667
+ export type PlaylistItemRef = z.infer<typeof PlaylistItemRefSchema>;
4668
+
4179
4669
  export const PlaylistQueryResultSchema = z.object({
4180
4670
  playlist: z.object({
4181
4671
  id: z.string(),
@@ -4185,7 +4675,7 @@ export const PlaylistQueryResultSchema = z.object({
4185
4675
  images: z.array(z.object({
4186
4676
  blob_id: z.string(),
4187
4677
  is_primary: z.number(),
4188
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4678
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4189
4679
  })).nullish(),
4190
4680
  urls: z.array(z.object({
4191
4681
  id: z.string().nullish(),
@@ -4229,7 +4719,7 @@ export const PlaylistSongResultSchema = z.object({
4229
4719
  images: z.array(z.object({
4230
4720
  blob_id: z.string(),
4231
4721
  is_primary: z.number(),
4232
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4722
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4233
4723
  })).nullish(),
4234
4724
  urls: z.array(z.object({
4235
4725
  id: z.string().nullish(),
@@ -4261,7 +4751,7 @@ export const PlaylistSongResultSchema = z.object({
4261
4751
  images: z.array(z.object({
4262
4752
  blob_id: z.string(),
4263
4753
  is_primary: z.number(),
4264
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4754
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4265
4755
  })).nullish(),
4266
4756
  urls: z.array(z.object({
4267
4757
  id: z.string().nullish(),
@@ -4293,7 +4783,7 @@ export const PlaylistSongResultSchema = z.object({
4293
4783
  images: z.array(z.object({
4294
4784
  blob_id: z.string(),
4295
4785
  is_primary: z.number(),
4296
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4786
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4297
4787
  })).nullish(),
4298
4788
  urls: z.array(z.object({
4299
4789
  id: z.string().nullish(),
@@ -4328,7 +4818,7 @@ export const PlaylistSongResultSchema = z.object({
4328
4818
  source_client_id: z.string().nullish(),
4329
4819
  filename: z.string().nullish(),
4330
4820
  parent_blob_id: z.string().nullish(),
4331
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
4821
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
4332
4822
  metadata: z.any(),
4333
4823
  created_at: z.number(),
4334
4824
  updated_at: z.number(),
@@ -4343,7 +4833,7 @@ export const PlaylistSongResultSchema = z.object({
4343
4833
  images: z.array(z.object({
4344
4834
  blob_id: z.string(),
4345
4835
  is_primary: z.number(),
4346
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4836
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4347
4837
  })).nullish(),
4348
4838
  relevance_score: z.number().nullish(),
4349
4839
  snippet: z.string().nullish(),
@@ -4372,7 +4862,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4372
4862
  images: z.array(z.object({
4373
4863
  blob_id: z.string(),
4374
4864
  is_primary: z.number(),
4375
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4865
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4376
4866
  })).nullish(),
4377
4867
  urls: z.array(z.object({
4378
4868
  id: z.string().nullish(),
@@ -4404,7 +4894,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4404
4894
  images: z.array(z.object({
4405
4895
  blob_id: z.string(),
4406
4896
  is_primary: z.number(),
4407
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4897
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4408
4898
  })).nullish(),
4409
4899
  urls: z.array(z.object({
4410
4900
  id: z.string().nullish(),
@@ -4436,7 +4926,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4436
4926
  images: z.array(z.object({
4437
4927
  blob_id: z.string(),
4438
4928
  is_primary: z.number(),
4439
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4929
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4440
4930
  })).nullish(),
4441
4931
  urls: z.array(z.object({
4442
4932
  id: z.string().nullish(),
@@ -4471,7 +4961,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4471
4961
  source_client_id: z.string().nullish(),
4472
4962
  filename: z.string().nullish(),
4473
4963
  parent_blob_id: z.string().nullish(),
4474
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
4964
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
4475
4965
  metadata: z.any(),
4476
4966
  created_at: z.number(),
4477
4967
  updated_at: z.number(),
@@ -4486,7 +4976,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4486
4976
  images: z.array(z.object({
4487
4977
  blob_id: z.string(),
4488
4978
  is_primary: z.number(),
4489
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4979
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4490
4980
  })).nullish(),
4491
4981
  relevance_score: z.number().nullish(),
4492
4982
  snippet: z.string().nullish(),
@@ -4522,7 +5012,7 @@ export const PlaylistsQueryResultSchema = z.object({
4522
5012
  images: z.array(z.object({
4523
5013
  blob_id: z.string(),
4524
5014
  is_primary: z.number(),
4525
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5015
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4526
5016
  })).nullish(),
4527
5017
  urls: z.array(z.object({
4528
5018
  id: z.string().nullish(),
@@ -4816,6 +5306,28 @@ export const QueryTaxonsRequestSchema = z.object({
4816
5306
  });
4817
5307
  export type QueryTaxonsRequest = z.infer<typeof QueryTaxonsRequestSchema>;
4818
5308
 
5309
+ export const QueryVideosRequestSchema = z.object({
5310
+ params: z.object({
5311
+ q: z.string().nullish(),
5312
+ search_fields: z.array(z.string()).nullish(),
5313
+ filters: z.record(z.string(), z.any()),
5314
+ sort_by: z.string().nullish(),
5315
+ sort_direction: z.string().nullish(),
5316
+ limit: z.number().nullish(),
5317
+ offset: z.number().nullish(),
5318
+ user_id: z.string().nullish(),
5319
+ favorites_only: z.boolean().nullish(),
5320
+ min_rating: z.number().nullish(),
5321
+ mb_lookup_status: z.array(z.string()).nullish(),
5322
+ pending_review: z.boolean().nullish(),
5323
+ caller_is_admin: z.boolean().nullish()
5324
+ }),
5325
+ series_id: z.string().nullish(),
5326
+ season_id: z.string().nullish(),
5327
+ unassigned: z.boolean()
5328
+ });
5329
+ export type QueryVideosRequest = z.infer<typeof QueryVideosRequestSchema>;
5330
+
4819
5331
  export const RadioBumperSchema = z.object({
4820
5332
  id: z.string(),
4821
5333
  station_id: z.string(),
@@ -5001,6 +5513,12 @@ export const RatingStatsSchema = z.object({
5001
5513
  });
5002
5514
  export type RatingStats = z.infer<typeof RatingStatsSchema>;
5003
5515
 
5516
+ export const RatingStatusItemSchema = z.object({
5517
+ target_id: z.string(),
5518
+ rating: z.number().nullish()
5519
+ });
5520
+ export type RatingStatusItem = z.infer<typeof RatingStatusItemSchema>;
5521
+
5004
5522
  export const RecentSongsRequestSchema = z.object({
5005
5523
  limit: z.number().nullish()
5006
5524
  });
@@ -5031,7 +5549,7 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5031
5549
  images: z.array(z.object({
5032
5550
  blob_id: z.string(),
5033
5551
  is_primary: z.number(),
5034
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5552
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5035
5553
  })).nullish(),
5036
5554
  urls: z.array(z.object({
5037
5555
  id: z.string().nullish(),
@@ -5060,7 +5578,7 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5060
5578
  images: z.array(z.object({
5061
5579
  blob_id: z.string(),
5062
5580
  is_primary: z.number(),
5063
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5581
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5064
5582
  })).nullish(),
5065
5583
  urls: z.array(z.object({
5066
5584
  id: z.string().nullish(),
@@ -5082,7 +5600,7 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5082
5600
  images: z.array(z.object({
5083
5601
  blob_id: z.string(),
5084
5602
  is_primary: z.number(),
5085
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5603
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5086
5604
  })).nullish(),
5087
5605
  album_tags: z.array(z.string()).nullish(),
5088
5606
  is_favorite: z.boolean().nullish(),
@@ -5094,6 +5612,41 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5094
5612
  });
5095
5613
  export type RecentlyAddedAlbumsResponse = z.infer<typeof RecentlyAddedAlbumsResponseSchema>;
5096
5614
 
5615
+ export const RecentlyAddedVideosRequestSchema = z.object({
5616
+ limit: z.number().nullish()
5617
+ });
5618
+ export type RecentlyAddedVideosRequest = z.infer<typeof RecentlyAddedVideosRequestSchema>;
5619
+
5620
+ export const RecentlyAddedVideosResponseSchema = z.object({
5621
+ videos: z.array(z.object({
5622
+ id: z.string(),
5623
+ series_id: z.string().nullish(),
5624
+ season_id: z.string().nullish(),
5625
+ episode_number: z.number().nullish(),
5626
+ content_type: z.string(),
5627
+ title: z.string(),
5628
+ description: z.string().nullish(),
5629
+ media_blob_id: z.string(),
5630
+ poster_blob_id: z.string().nullish(),
5631
+ duration_seconds: z.number().nullish(),
5632
+ release_date: z.string().nullish(),
5633
+ created_at: z.number(),
5634
+ updated_at: z.number(),
5635
+ deleted_at: z.number().nullish(),
5636
+ created_by: z.string().nullish(),
5637
+ updated_by: z.string().nullish(),
5638
+ deleted_by: z.string().nullish(),
5639
+ images: z.array(z.object({
5640
+ blob_id: z.string(),
5641
+ is_primary: z.number(),
5642
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5643
+ })).nullish(),
5644
+ play_count: z.number().nullish()
5645
+ })),
5646
+ count: z.number()
5647
+ });
5648
+ export type RecentlyAddedVideosResponse = z.infer<typeof RecentlyAddedVideosResponseSchema>;
5649
+
5097
5650
  export const RecordPlayRequestSchema = z.object({
5098
5651
  media_blob_id: z.string(),
5099
5652
  song_id: z.string(),
@@ -5102,6 +5655,14 @@ export const RecordPlayRequestSchema = z.object({
5102
5655
  });
5103
5656
  export type RecordPlayRequest = z.infer<typeof RecordPlayRequestSchema>;
5104
5657
 
5658
+ export const RecordVideoPlayRequestSchema = z.object({
5659
+ media_blob_id: z.string(),
5660
+ video_id: z.string(),
5661
+ session_id: z.string().nullish(),
5662
+ event_data: z.any().nullish()
5663
+ });
5664
+ export type RecordVideoPlayRequest = z.infer<typeof RecordVideoPlayRequestSchema>;
5665
+
5105
5666
  export const RedeemInviteRequestSchema = z.object({
5106
5667
  invite_code: z.string(),
5107
5668
  username: z.string().nullish(),
@@ -5234,6 +5795,44 @@ export const RemoveAlbumsTagsRequestSchema = z.object({
5234
5795
  });
5235
5796
  export type RemoveAlbumsTagsRequest = z.infer<typeof RemoveAlbumsTagsRequestSchema>;
5236
5797
 
5798
+ export const RemoveEntitiesTagsRequestSchema = z.object({
5799
+ entity_type: z.string(),
5800
+ entity_ids: z.array(z.string()),
5801
+ tag_ids: z.array(z.string())
5802
+ });
5803
+ export type RemoveEntitiesTagsRequest = z.infer<typeof RemoveEntitiesTagsRequestSchema>;
5804
+
5805
+ export const RemoveEntityTaxonRequestSchema = z.object({
5806
+ entity_type: z.string(),
5807
+ entity_id: z.string(),
5808
+ taxon_id: z.string(),
5809
+ origin: z.string()
5810
+ });
5811
+ export type RemoveEntityTaxonRequest = z.infer<typeof RemoveEntityTaxonRequestSchema>;
5812
+
5813
+ export const RemoveEntityUrlRequestSchema = z.object({
5814
+ entity_type: z.string(),
5815
+ entity_id: z.string(),
5816
+ id: z.string()
5817
+ });
5818
+ export type RemoveEntityUrlRequest = z.infer<typeof RemoveEntityUrlRequestSchema>;
5819
+
5820
+ export const RemovePlaylistItemRequestSchema = z.object({
5821
+ playlist_id: z.string(),
5822
+ entity_type: z.string(),
5823
+ entity_id: z.string()
5824
+ });
5825
+ export type RemovePlaylistItemRequest = z.infer<typeof RemovePlaylistItemRequestSchema>;
5826
+
5827
+ export const RemovePlaylistItemsRequestSchema = z.object({
5828
+ playlist_id: z.string(),
5829
+ items: z.array(z.object({
5830
+ entity_type: z.string(),
5831
+ entity_id: z.string()
5832
+ }))
5833
+ });
5834
+ export type RemovePlaylistItemsRequest = z.infer<typeof RemovePlaylistItemsRequestSchema>;
5835
+
5237
5836
  export const RemovePlaylistThumbnailRequestSchema = z.object({
5238
5837
  playlist_id: z.string(),
5239
5838
  cleanup_blob: z.boolean().nullish(),
@@ -5243,7 +5842,7 @@ export type RemovePlaylistThumbnailRequest = z.infer<typeof RemovePlaylistThumbn
5243
5842
 
5244
5843
  export const RemoveRatingRequestSchema = z.object({
5245
5844
  user_id: z.string().nullish(),
5246
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album")]),
5845
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("video")]),
5247
5846
  target_id: z.string()
5248
5847
  });
5249
5848
  export type RemoveRatingRequest = z.infer<typeof RemoveRatingRequestSchema>;
@@ -5266,6 +5865,15 @@ export const RemoveTaxonParentRequestSchema = z.object({
5266
5865
  });
5267
5866
  export type RemoveTaxonParentRequest = z.infer<typeof RemoveTaxonParentRequestSchema>;
5268
5867
 
5868
+ export const ReorderPlaylistItemsRequestSchema = z.object({
5869
+ playlist_id: z.string(),
5870
+ ordered_entity_refs: z.array(z.object({
5871
+ entity_type: z.string(),
5872
+ entity_id: z.string()
5873
+ }))
5874
+ });
5875
+ export type ReorderPlaylistItemsRequest = z.infer<typeof ReorderPlaylistItemsRequestSchema>;
5876
+
5269
5877
  export const ReorderPlaylistSongsRequestSchema = z.object({
5270
5878
  playlist_id: z.string(),
5271
5879
  song_ids: z.array(z.string()),
@@ -5329,7 +5937,7 @@ export const ScalarAttributeSchema = z.object({
5329
5937
  });
5330
5938
  export type ScalarAttribute = z.infer<typeof ScalarAttributeSchema>;
5331
5939
 
5332
- export const SearchFieldSchema = z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists")]);
5940
+ export const SearchFieldSchema = z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists"), z.literal("videos"), z.literal("video_series")]);
5333
5941
  export type SearchField = z.infer<typeof SearchFieldSchema>;
5334
5942
 
5335
5943
  export const SearchRecordingsRequestSchema = z.object({
@@ -5351,7 +5959,7 @@ export type SearchReleasesRequest = z.infer<typeof SearchReleasesRequestSchema>;
5351
5959
 
5352
5960
  export const SearchRequestSchema = z.object({
5353
5961
  query: z.string(),
5354
- field: z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists")]).nullish(),
5962
+ field: z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists"), z.literal("videos"), z.literal("video_series")]).nullish(),
5355
5963
  page: z.number().nullish(),
5356
5964
  page_size: z.number().nullish(),
5357
5965
  context: z.object({
@@ -5424,6 +6032,30 @@ export const SearchResponseSchema = z.object({
5424
6032
  thumbnail_url: z.string().nullish(),
5425
6033
  search_rank: z.number(),
5426
6034
  highlight: z.string().nullish()
6035
+ })).nullish(),
6036
+ videos: z.array(z.object({
6037
+ id: z.string(),
6038
+ title: z.string(),
6039
+ series_id: z.string().nullish(),
6040
+ series_name: z.string().nullish(),
6041
+ episode_number: z.number().nullish(),
6042
+ duration_seconds: z.number().nullish(),
6043
+ thumbnail_url: z.string().nullish(),
6044
+ user_rating: z.number().nullish(),
6045
+ is_favorite: z.boolean(),
6046
+ search_rank: z.number(),
6047
+ match_type: z.string(),
6048
+ highlight: z.string().nullish()
6049
+ })).nullish(),
6050
+ video_series: z.array(z.object({
6051
+ id: z.string(),
6052
+ title: z.string(),
6053
+ description: z.string().nullish(),
6054
+ video_count: z.number(),
6055
+ thumbnail_url: z.string().nullish(),
6056
+ search_rank: z.number(),
6057
+ match_type: z.string(),
6058
+ highlight: z.string().nullish()
5427
6059
  })).nullish(),
5428
6060
  total_count: z.number(),
5429
6061
  page: z.number(),
@@ -5437,54 +6069,202 @@ export const SearchResponseSchema = z.object({
5437
6069
  });
5438
6070
  export type SearchResponse = z.infer<typeof SearchResponseSchema>;
5439
6071
 
5440
- export const SelfAccountLinkResponseSchema = z.object({
5441
- code: z.string(),
5442
- expires_at: z.number()
5443
- });
5444
- export type SelfAccountLinkResponse = z.infer<typeof SelfAccountLinkResponseSchema>;
5445
-
5446
- export const ServerInfoResponseSchema = z.object({
5447
- name: z.string(),
6072
+ export const SeasonWithVideosSchema = z.object({
6073
+ season: z.object({
6074
+ id: z.string(),
6075
+ series_id: z.string(),
6076
+ season_number: z.number(),
6077
+ title: z.string().nullish(),
5448
6078
  description: z.string().nullish(),
5449
- version: z.string(),
5450
- image_url: z.string().nullish(),
5451
- image_blob_id: z.string().nullish(),
5452
- knocking_enabled: z.boolean().nullish(),
5453
- musicbrainz_enabled: z.boolean().nullish(),
5454
- lastfm_enabled: z.boolean().nullish(),
5455
- audiodb_enabled: z.boolean().nullish(),
5456
- passkey_p2p_enabled: z.boolean().nullish(),
5457
- fetch_precheck_enabled: z.boolean().nullish()
5458
- });
5459
- export type ServerInfoResponse = z.infer<typeof ServerInfoResponseSchema>;
5460
-
5461
- export const SessionSongSchema = z.object({
5462
- song_id: z.string(),
6079
+ poster_blob_id: z.string().nullish(),
6080
+ created_at: z.number(),
6081
+ updated_at: z.number(),
6082
+ deleted_at: z.number().nullish()
6083
+ }),
6084
+ videos: z.array(z.object({
6085
+ id: z.string(),
6086
+ series_id: z.string().nullish(),
6087
+ season_id: z.string().nullish(),
6088
+ episode_number: z.number().nullish(),
6089
+ content_type: z.string(),
5463
6090
  title: z.string(),
5464
- artist: z.string().nullish(),
5465
- album: z.string().nullish(),
6091
+ description: z.string().nullish(),
6092
+ media_blob_id: z.string(),
6093
+ poster_blob_id: z.string().nullish(),
6094
+ duration_seconds: z.number().nullish(),
6095
+ release_date: z.string().nullish(),
6096
+ created_at: z.number(),
6097
+ updated_at: z.number(),
6098
+ deleted_at: z.number().nullish(),
6099
+ created_by: z.string().nullish(),
6100
+ updated_by: z.string().nullish(),
6101
+ deleted_by: z.string().nullish(),
5466
6102
  images: z.array(z.object({
5467
6103
  blob_id: z.string(),
5468
6104
  is_primary: z.number(),
5469
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6105
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5470
6106
  })).nullish(),
5471
- played_at: z.number()
6107
+ play_count: z.number().nullish()
6108
+ }))
5472
6109
  });
5473
- export type SessionSong = z.infer<typeof SessionSongSchema>;
6110
+ export type SeasonWithVideos = z.infer<typeof SeasonWithVideosSchema>;
5474
6111
 
5475
- export const SessionSummarySchema = z.object({
5476
- session_id: z.string(),
5477
- user_id: z.string().nullish(),
5478
- username: z.string().nullish(),
5479
- songs: z.array(z.object({
5480
- song_id: z.string(),
6112
+ export const SelfAccountLinkResponseSchema = z.object({
6113
+ code: z.string(),
6114
+ expires_at: z.number()
6115
+ });
6116
+ export type SelfAccountLinkResponse = z.infer<typeof SelfAccountLinkResponseSchema>;
6117
+
6118
+ export const SeriesDetailSchema = z.object({
6119
+ series: z.object({
6120
+ id: z.string(),
5481
6121
  title: z.string(),
5482
- artist: z.string().nullish(),
5483
- album: z.string().nullish(),
6122
+ description: z.string().nullish(),
6123
+ poster_blob_id: z.string().nullish(),
6124
+ created_at: z.number(),
6125
+ updated_at: z.number(),
6126
+ deleted_at: z.number().nullish(),
6127
+ created_by: z.string().nullish(),
6128
+ updated_by: z.string().nullish(),
6129
+ deleted_by: z.string().nullish()
6130
+ }),
6131
+ seasons: z.array(z.object({
6132
+ season: z.object({
6133
+ id: z.string(),
6134
+ series_id: z.string(),
6135
+ season_number: z.number(),
6136
+ title: z.string().nullish(),
6137
+ description: z.string().nullish(),
6138
+ poster_blob_id: z.string().nullish(),
6139
+ created_at: z.number(),
6140
+ updated_at: z.number(),
6141
+ deleted_at: z.number().nullish()
6142
+ }),
6143
+ videos: z.array(z.object({
6144
+ id: z.string(),
6145
+ series_id: z.string().nullish(),
6146
+ season_id: z.string().nullish(),
6147
+ episode_number: z.number().nullish(),
6148
+ content_type: z.string(),
6149
+ title: z.string(),
6150
+ description: z.string().nullish(),
6151
+ media_blob_id: z.string(),
6152
+ poster_blob_id: z.string().nullish(),
6153
+ duration_seconds: z.number().nullish(),
6154
+ release_date: z.string().nullish(),
6155
+ created_at: z.number(),
6156
+ updated_at: z.number(),
6157
+ deleted_at: z.number().nullish(),
6158
+ created_by: z.string().nullish(),
6159
+ updated_by: z.string().nullish(),
6160
+ deleted_by: z.string().nullish(),
5484
6161
  images: z.array(z.object({
5485
6162
  blob_id: z.string(),
5486
6163
  is_primary: z.number(),
5487
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6164
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6165
+ })).nullish(),
6166
+ play_count: z.number().nullish()
6167
+ }))
6168
+ })),
6169
+ unassigned_videos: z.array(z.object({
6170
+ id: z.string(),
6171
+ series_id: z.string().nullish(),
6172
+ season_id: z.string().nullish(),
6173
+ episode_number: z.number().nullish(),
6174
+ content_type: z.string(),
6175
+ title: z.string(),
6176
+ description: z.string().nullish(),
6177
+ media_blob_id: z.string(),
6178
+ poster_blob_id: z.string().nullish(),
6179
+ duration_seconds: z.number().nullish(),
6180
+ release_date: z.string().nullish(),
6181
+ created_at: z.number(),
6182
+ updated_at: z.number(),
6183
+ deleted_at: z.number().nullish(),
6184
+ created_by: z.string().nullish(),
6185
+ updated_by: z.string().nullish(),
6186
+ deleted_by: z.string().nullish(),
6187
+ images: z.array(z.object({
6188
+ blob_id: z.string(),
6189
+ is_primary: z.number(),
6190
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6191
+ })).nullish(),
6192
+ play_count: z.number().nullish()
6193
+ }))
6194
+ });
6195
+ export type SeriesDetail = z.infer<typeof SeriesDetailSchema>;
6196
+
6197
+ export const SeriesQueryResultSchema = z.object({
6198
+ items: z.array(z.object({
6199
+ id: z.string(),
6200
+ title: z.string(),
6201
+ description: z.string().nullish(),
6202
+ poster_blob_id: z.string().nullish(),
6203
+ created_at: z.number(),
6204
+ updated_at: z.number(),
6205
+ deleted_at: z.number().nullish(),
6206
+ created_by: z.string().nullish(),
6207
+ updated_by: z.string().nullish(),
6208
+ deleted_by: z.string().nullish()
6209
+ })),
6210
+ total_count: z.number(),
6211
+ has_more: z.boolean(),
6212
+ offset: z.number(),
6213
+ limit: z.number(),
6214
+ query_time_ms: z.number().nullish()
6215
+ });
6216
+ export type SeriesQueryResult = z.infer<typeof SeriesQueryResultSchema>;
6217
+
6218
+ export const ServerInfoResponseSchema = z.object({
6219
+ name: z.string(),
6220
+ description: z.string().nullish(),
6221
+ version: z.string(),
6222
+ image_url: z.string().nullish(),
6223
+ image_blob_id: z.string().nullish(),
6224
+ knocking_enabled: z.boolean().nullish(),
6225
+ musicbrainz_enabled: z.boolean().nullish(),
6226
+ lastfm_enabled: z.boolean().nullish(),
6227
+ audiodb_enabled: z.boolean().nullish(),
6228
+ passkey_p2p_enabled: z.boolean().nullish(),
6229
+ fetch_precheck_enabled: z.boolean().nullish(),
6230
+ fetch_video_enabled: z.boolean().nullish(),
6231
+ player_device: z.boolean().nullish()
6232
+ });
6233
+ export type ServerInfoResponse = z.infer<typeof ServerInfoResponseSchema>;
6234
+
6235
+ export const SessionItemSchema = z.object({
6236
+ entity_type: z.string(),
6237
+ entity_id: z.string()
6238
+ });
6239
+ export type SessionItem = z.infer<typeof SessionItemSchema>;
6240
+
6241
+ export const SessionSongSchema = z.object({
6242
+ song_id: z.string(),
6243
+ title: z.string(),
6244
+ artist: z.string().nullish(),
6245
+ album: z.string().nullish(),
6246
+ images: z.array(z.object({
6247
+ blob_id: z.string(),
6248
+ is_primary: z.number(),
6249
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6250
+ })).nullish(),
6251
+ played_at: z.number()
6252
+ });
6253
+ export type SessionSong = z.infer<typeof SessionSongSchema>;
6254
+
6255
+ export const SessionSummarySchema = z.object({
6256
+ session_id: z.string(),
6257
+ user_id: z.string().nullish(),
6258
+ username: z.string().nullish(),
6259
+ songs: z.array(z.object({
6260
+ song_id: z.string(),
6261
+ title: z.string(),
6262
+ artist: z.string().nullish(),
6263
+ album: z.string().nullish(),
6264
+ images: z.array(z.object({
6265
+ blob_id: z.string(),
6266
+ is_primary: z.number(),
6267
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5488
6268
  })).nullish(),
5489
6269
  played_at: z.number()
5490
6270
  })),
@@ -5507,7 +6287,7 @@ export type SetAlbumTaxonsRequest = z.infer<typeof SetAlbumTaxonsRequestSchema>;
5507
6287
 
5508
6288
  export const SetFavoriteRequestSchema = z.object({
5509
6289
  user_id: z.string().nullish(),
5510
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("taxon"), z.literal("playlist")]),
6290
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("taxon"), z.literal("playlist"), z.literal("video"), z.literal("video_series")]),
5511
6291
  target_id: z.string(),
5512
6292
  is_favorite: z.boolean()
5513
6293
  });
@@ -5534,7 +6314,7 @@ export type SetPrimaryImageRequest = z.infer<typeof SetPrimaryImageRequestSchema
5534
6314
 
5535
6315
  export const SetRatingRequestSchema = z.object({
5536
6316
  user_id: z.string().nullish(),
5537
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album")]),
6317
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("video")]),
5538
6318
  target_id: z.string(),
5539
6319
  rating: z.number()
5540
6320
  });
@@ -5595,7 +6375,7 @@ export const SongSchema = z.object({
5595
6375
  images: z.array(z.object({
5596
6376
  blob_id: z.string(),
5597
6377
  is_primary: z.number(),
5598
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6378
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5599
6379
  })).nullish(),
5600
6380
  urls: z.array(z.object({
5601
6381
  id: z.string().nullish(),
@@ -5634,7 +6414,7 @@ export const SongQueryResultSchema = z.object({
5634
6414
  images: z.array(z.object({
5635
6415
  blob_id: z.string(),
5636
6416
  is_primary: z.number(),
5637
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6417
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5638
6418
  })).nullish(),
5639
6419
  urls: z.array(z.object({
5640
6420
  id: z.string().nullish(),
@@ -5666,7 +6446,7 @@ export const SongQueryResultSchema = z.object({
5666
6446
  images: z.array(z.object({
5667
6447
  blob_id: z.string(),
5668
6448
  is_primary: z.number(),
5669
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6449
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5670
6450
  })).nullish(),
5671
6451
  urls: z.array(z.object({
5672
6452
  id: z.string().nullish(),
@@ -5698,7 +6478,7 @@ export const SongQueryResultSchema = z.object({
5698
6478
  images: z.array(z.object({
5699
6479
  blob_id: z.string(),
5700
6480
  is_primary: z.number(),
5701
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6481
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5702
6482
  })).nullish(),
5703
6483
  urls: z.array(z.object({
5704
6484
  id: z.string().nullish(),
@@ -5733,7 +6513,7 @@ export const SongQueryResultSchema = z.object({
5733
6513
  source_client_id: z.string().nullish(),
5734
6514
  filename: z.string().nullish(),
5735
6515
  parent_blob_id: z.string().nullish(),
5736
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
6516
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
5737
6517
  metadata: z.any(),
5738
6518
  created_at: z.number(),
5739
6519
  updated_at: z.number(),
@@ -5748,7 +6528,7 @@ export const SongQueryResultSchema = z.object({
5748
6528
  images: z.array(z.object({
5749
6529
  blob_id: z.string(),
5750
6530
  is_primary: z.number(),
5751
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6531
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5752
6532
  })).nullish(),
5753
6533
  relevance_score: z.number().nullish(),
5754
6534
  snippet: z.string().nullish(),
@@ -5804,7 +6584,7 @@ export const SongsQueryResultSchema = z.object({
5804
6584
  images: z.array(z.object({
5805
6585
  blob_id: z.string(),
5806
6586
  is_primary: z.number(),
5807
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6587
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5808
6588
  })).nullish(),
5809
6589
  urls: z.array(z.object({
5810
6590
  id: z.string().nullish(),
@@ -5836,7 +6616,7 @@ export const SongsQueryResultSchema = z.object({
5836
6616
  images: z.array(z.object({
5837
6617
  blob_id: z.string(),
5838
6618
  is_primary: z.number(),
5839
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6619
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5840
6620
  })).nullish(),
5841
6621
  urls: z.array(z.object({
5842
6622
  id: z.string().nullish(),
@@ -5868,7 +6648,7 @@ export const SongsQueryResultSchema = z.object({
5868
6648
  images: z.array(z.object({
5869
6649
  blob_id: z.string(),
5870
6650
  is_primary: z.number(),
5871
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6651
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5872
6652
  })).nullish(),
5873
6653
  urls: z.array(z.object({
5874
6654
  id: z.string().nullish(),
@@ -5903,7 +6683,7 @@ export const SongsQueryResultSchema = z.object({
5903
6683
  source_client_id: z.string().nullish(),
5904
6684
  filename: z.string().nullish(),
5905
6685
  parent_blob_id: z.string().nullish(),
5906
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
6686
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
5907
6687
  metadata: z.any(),
5908
6688
  created_at: z.number(),
5909
6689
  updated_at: z.number(),
@@ -5918,7 +6698,7 @@ export const SongsQueryResultSchema = z.object({
5918
6698
  images: z.array(z.object({
5919
6699
  blob_id: z.string(),
5920
6700
  is_primary: z.number(),
5921
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6701
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5922
6702
  })).nullish(),
5923
6703
  relevance_score: z.number().nullish(),
5924
6704
  snippet: z.string().nullish(),
@@ -5963,7 +6743,7 @@ export const SuggestionSchema = z.object({
5963
6743
  display: z.string(),
5964
6744
  highlight: z.string(),
5965
6745
  count: z.number(),
5966
- suggestion_type: z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist")]),
6746
+ suggestion_type: z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist"), z.literal("video"), z.literal("video_series")]),
5967
6747
  confidence: z.number(),
5968
6748
  metadata: z.any().nullish(),
5969
6749
  entity_id: z.string(),
@@ -5973,11 +6753,11 @@ export const SuggestionSchema = z.object({
5973
6753
  });
5974
6754
  export type Suggestion = z.infer<typeof SuggestionSchema>;
5975
6755
 
5976
- export const SuggestionTypeSchema = z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist")]);
6756
+ export const SuggestionTypeSchema = z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist"), z.literal("video"), z.literal("video_series")]);
5977
6757
  export type SuggestionType = z.infer<typeof SuggestionTypeSchema>;
5978
6758
 
5979
6759
  export const SuggestionsRequestSchema = z.object({
5980
- field: z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists")]),
6760
+ field: z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists"), z.literal("videos"), z.literal("video_series")]),
5981
6761
  partial: z.string(),
5982
6762
  page: z.number().nullish(),
5983
6763
  page_size: z.number().nullish(),
@@ -5999,7 +6779,7 @@ export const SuggestionsResponseSchema = z.object({
5999
6779
  display: z.string(),
6000
6780
  highlight: z.string(),
6001
6781
  count: z.number(),
6002
- suggestion_type: z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist")]),
6782
+ suggestion_type: z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist"), z.literal("video"), z.literal("video_series")]),
6003
6783
  confidence: z.number(),
6004
6784
  metadata: z.any().nullish(),
6005
6785
  entity_id: z.string(),
@@ -6138,6 +6918,61 @@ export const SyncSongByBlake3ResponseSchema = z.object({
6138
6918
  });
6139
6919
  export type SyncSongByBlake3Response = z.infer<typeof SyncSongByBlake3ResponseSchema>;
6140
6920
 
6921
+ export const SyncVideoByBlake3RequestSchema = z.object({
6922
+ blake3: z.string(),
6923
+ sha256: z.string().nullish(),
6924
+ size: z.number().nullish(),
6925
+ filename: z.string(),
6926
+ source_node_id: z.string(),
6927
+ source_remote_id: z.string().nullish(),
6928
+ remote_name: z.string().nullish(),
6929
+ title: z.string(),
6930
+ description: z.string().nullish(),
6931
+ content_type: z.string().nullish(),
6932
+ episode_number: z.number().nullish(),
6933
+ duration_seconds: z.number().nullish(),
6934
+ release_date: z.string().nullish(),
6935
+ series_title: z.string().nullish(),
6936
+ series_description: z.string().nullish(),
6937
+ season_number: z.number().nullish(),
6938
+ season_title: z.string().nullish(),
6939
+ video_images: z.array(z.object({
6940
+ content_sha256: z.string(),
6941
+ data_base64: z.string().nullish(),
6942
+ mime_type: z.string(),
6943
+ is_primary: z.boolean(),
6944
+ blob_type: z.string().nullish()
6945
+ })),
6946
+ series_images: z.array(z.object({
6947
+ content_sha256: z.string(),
6948
+ data_base64: z.string().nullish(),
6949
+ mime_type: z.string(),
6950
+ is_primary: z.boolean(),
6951
+ blob_type: z.string().nullish()
6952
+ })),
6953
+ season_images: z.array(z.object({
6954
+ content_sha256: z.string(),
6955
+ data_base64: z.string().nullish(),
6956
+ mime_type: z.string(),
6957
+ is_primary: z.boolean(),
6958
+ blob_type: z.string().nullish()
6959
+ }))
6960
+ });
6961
+ export type SyncVideoByBlake3Request = z.infer<typeof SyncVideoByBlake3RequestSchema>;
6962
+
6963
+ export const SyncVideoByBlake3ResponseSchema = z.object({
6964
+ video_id: z.string(),
6965
+ media_blob_id: z.string(),
6966
+ file_path: z.string(),
6967
+ blake3: z.string(),
6968
+ series_id: z.string().nullish(),
6969
+ season_id: z.string().nullish(),
6970
+ existing: z.boolean(),
6971
+ images_linked: z.number(),
6972
+ missing_image_sha256s: z.array(z.string())
6973
+ });
6974
+ export type SyncVideoByBlake3Response = z.infer<typeof SyncVideoByBlake3ResponseSchema>;
6975
+
6141
6976
  export const TagSchema = z.object({
6142
6977
  id: z.string(),
6143
6978
  name: z.string(),
@@ -6170,7 +7005,9 @@ export const TaxonKindSchema = z.object({
6170
7005
  display_order: z.number(),
6171
7006
  is_user_defined: z.boolean(),
6172
7007
  created_at: z.number(),
6173
- album_count: z.number()
7008
+ album_count: z.number(),
7009
+ video_count: z.number(),
7010
+ domain: z.string()
6174
7011
  });
6175
7012
  export type TaxonKind = z.infer<typeof TaxonKindSchema>;
6176
7013
 
@@ -6205,7 +7042,8 @@ export const TaxonWithStatsSchema = z.object({
6205
7042
  created_at: z.number(),
6206
7043
  album_count: z.number(),
6207
7044
  song_count: z.number(),
6208
- total_duration: z.number()
7045
+ total_duration: z.number(),
7046
+ video_count: z.number()
6209
7047
  });
6210
7048
  export type TaxonWithStats = z.infer<typeof TaxonWithStatsSchema>;
6211
7049
 
@@ -6219,7 +7057,8 @@ export const TaxonsQueryResultSchema = z.object({
6219
7057
  created_at: z.number(),
6220
7058
  album_count: z.number(),
6221
7059
  song_count: z.number(),
6222
- total_duration: z.number()
7060
+ total_duration: z.number(),
7061
+ video_count: z.number()
6223
7062
  })),
6224
7063
  total_count: z.number(),
6225
7064
  has_more: z.boolean(),
@@ -6235,7 +7074,7 @@ export const TopAlbumSchema = z.object({
6235
7074
  images: z.array(z.object({
6236
7075
  blob_id: z.string(),
6237
7076
  is_primary: z.number(),
6238
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7077
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6239
7078
  })).nullish(),
6240
7079
  total_plays: z.number(),
6241
7080
  song_count: z.number(),
@@ -6273,7 +7112,7 @@ export const TopSongSchema = z.object({
6273
7112
  images: z.array(z.object({
6274
7113
  blob_id: z.string(),
6275
7114
  is_primary: z.number(),
6276
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7115
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6277
7116
  })).nullish(),
6278
7117
  play_count: z.number(),
6279
7118
  unique_users: z.number(),
@@ -6314,7 +7153,7 @@ export const UnassignedAlbumsResponseSchema = z.object({
6314
7153
  images: z.array(z.object({
6315
7154
  blob_id: z.string(),
6316
7155
  is_primary: z.number(),
6317
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7156
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6318
7157
  })).nullish(),
6319
7158
  urls: z.array(z.object({
6320
7159
  id: z.string().nullish(),
@@ -6343,7 +7182,7 @@ export const UnassignedAlbumsResponseSchema = z.object({
6343
7182
  images: z.array(z.object({
6344
7183
  blob_id: z.string(),
6345
7184
  is_primary: z.number(),
6346
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7185
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6347
7186
  })).nullish(),
6348
7187
  urls: z.array(z.object({
6349
7188
  id: z.string().nullish(),
@@ -6365,7 +7204,7 @@ export const UnassignedAlbumsResponseSchema = z.object({
6365
7204
  images: z.array(z.object({
6366
7205
  blob_id: z.string(),
6367
7206
  is_primary: z.number(),
6368
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7207
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6369
7208
  })).nullish(),
6370
7209
  album_tags: z.array(z.string()).nullish(),
6371
7210
  is_favorite: z.boolean().nullish(),
@@ -6377,6 +7216,42 @@ export const UnassignedAlbumsResponseSchema = z.object({
6377
7216
  });
6378
7217
  export type UnassignedAlbumsResponse = z.infer<typeof UnassignedAlbumsResponseSchema>;
6379
7218
 
7219
+ export const UnassignedVideosRequestSchema = z.object({
7220
+ limit: z.number().nullish(),
7221
+ offset: z.number().nullish()
7222
+ });
7223
+ export type UnassignedVideosRequest = z.infer<typeof UnassignedVideosRequestSchema>;
7224
+
7225
+ export const UnassignedVideosResponseSchema = z.object({
7226
+ videos: z.array(z.object({
7227
+ id: z.string(),
7228
+ series_id: z.string().nullish(),
7229
+ season_id: z.string().nullish(),
7230
+ episode_number: z.number().nullish(),
7231
+ content_type: z.string(),
7232
+ title: z.string(),
7233
+ description: z.string().nullish(),
7234
+ media_blob_id: z.string(),
7235
+ poster_blob_id: z.string().nullish(),
7236
+ duration_seconds: z.number().nullish(),
7237
+ release_date: z.string().nullish(),
7238
+ created_at: z.number(),
7239
+ updated_at: z.number(),
7240
+ deleted_at: z.number().nullish(),
7241
+ created_by: z.string().nullish(),
7242
+ updated_by: z.string().nullish(),
7243
+ deleted_by: z.string().nullish(),
7244
+ images: z.array(z.object({
7245
+ blob_id: z.string(),
7246
+ is_primary: z.number(),
7247
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7248
+ })).nullish(),
7249
+ play_count: z.number().nullish()
7250
+ })),
7251
+ count: z.number()
7252
+ });
7253
+ export type UnassignedVideosResponse = z.infer<typeof UnassignedVideosResponseSchema>;
7254
+
6380
7255
  export const UpdateAlbumRequestSchema = z.object({
6381
7256
  album_id: z.string(),
6382
7257
  title: z.string().nullish(),
@@ -6497,32 +7372,35 @@ export const UpdateArtistRequestSchema = z.object({
6497
7372
  });
6498
7373
  export type UpdateArtistRequest = z.infer<typeof UpdateArtistRequestSchema>;
6499
7374
 
6500
- export const UpdateListenSessionProgressRequestSchema = z.object({
6501
- id: z.string(),
6502
- progress: z.number()
7375
+ export const UpdatePasskeyNameRequestSchema = z.object({
7376
+ credential_id: z.string(),
7377
+ name: z.string().nullish()
6503
7378
  });
6504
- export type UpdateListenSessionProgressRequest = z.infer<typeof UpdateListenSessionProgressRequestSchema>;
7379
+ export type UpdatePasskeyNameRequest = z.infer<typeof UpdatePasskeyNameRequestSchema>;
6505
7380
 
6506
- export const UpdateListenSessionSongsRequestSchema = z.object({
7381
+ export const UpdatePlaybackSessionItemsRequestSchema = z.object({
6507
7382
  id: z.string(),
6508
- song_ids: z.array(z.string()),
7383
+ items: z.array(z.object({
7384
+ entity_type: z.string(),
7385
+ entity_id: z.string()
7386
+ })),
6509
7387
  label: z.string(),
6510
- total_songs: z.number(),
7388
+ total_items: z.number(),
6511
7389
  total_duration_ms: z.number()
6512
7390
  });
6513
- export type UpdateListenSessionSongsRequest = z.infer<typeof UpdateListenSessionSongsRequestSchema>;
7391
+ export type UpdatePlaybackSessionItemsRequest = z.infer<typeof UpdatePlaybackSessionItemsRequestSchema>;
6514
7392
 
6515
- export const UpdateListenSessionStatusRequestSchema = z.object({
7393
+ export const UpdatePlaybackSessionProgressRequestSchema = z.object({
6516
7394
  id: z.string(),
6517
- status: z.string()
7395
+ progress: z.number()
6518
7396
  });
6519
- export type UpdateListenSessionStatusRequest = z.infer<typeof UpdateListenSessionStatusRequestSchema>;
7397
+ export type UpdatePlaybackSessionProgressRequest = z.infer<typeof UpdatePlaybackSessionProgressRequestSchema>;
6520
7398
 
6521
- export const UpdatePasskeyNameRequestSchema = z.object({
6522
- credential_id: z.string(),
6523
- name: z.string().nullish()
7399
+ export const UpdatePlaybackSessionStatusRequestSchema = z.object({
7400
+ id: z.string(),
7401
+ status: z.string()
6524
7402
  });
6525
- export type UpdatePasskeyNameRequest = z.infer<typeof UpdatePasskeyNameRequestSchema>;
7403
+ export type UpdatePlaybackSessionStatusRequest = z.infer<typeof UpdatePlaybackSessionStatusRequestSchema>;
6526
7404
 
6527
7405
  export const UpdatePlaylistRequestSchema = z.object({
6528
7406
  playlist_id: z.string(),
@@ -6608,7 +7486,7 @@ export const UpdateSongsResultSchema = z.object({
6608
7486
  images: z.array(z.object({
6609
7487
  blob_id: z.string(),
6610
7488
  is_primary: z.number(),
6611
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7489
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6612
7490
  })).nullish(),
6613
7491
  urls: z.array(z.object({
6614
7492
  id: z.string().nullish(),
@@ -6640,7 +7518,7 @@ export const UpdateSongsResultSchema = z.object({
6640
7518
  images: z.array(z.object({
6641
7519
  blob_id: z.string(),
6642
7520
  is_primary: z.number(),
6643
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7521
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6644
7522
  })).nullish(),
6645
7523
  urls: z.array(z.object({
6646
7524
  id: z.string().nullish(),
@@ -6689,6 +7567,67 @@ export const UpdateUsernameRequestSchema = z.object({
6689
7567
  });
6690
7568
  export type UpdateUsernameRequest = z.infer<typeof UpdateUsernameRequestSchema>;
6691
7569
 
7570
+ export const UpdateVideoRequestSchema = z.object({
7571
+ video_id: z.string(),
7572
+ series_id: z.string().nullish(),
7573
+ season_id: z.string().nullish(),
7574
+ episode_number: z.number().nullish(),
7575
+ content_type: z.string().nullish(),
7576
+ title: z.string().nullish(),
7577
+ description: z.string().nullish(),
7578
+ poster_blob_id: z.string().nullish(),
7579
+ duration_seconds: z.number().nullish(),
7580
+ release_date: z.string().nullish(),
7581
+ updated_by: z.string().nullish(),
7582
+ clear_series_id: z.boolean(),
7583
+ clear_season_id: z.boolean()
7584
+ });
7585
+ export type UpdateVideoRequest = z.infer<typeof UpdateVideoRequestSchema>;
7586
+
7587
+ export const UpdateVideoSeasonRequestSchema = z.object({
7588
+ season_id: z.string(),
7589
+ season_number: z.number().nullish(),
7590
+ title: z.string().nullish(),
7591
+ description: z.string().nullish(),
7592
+ poster_blob_id: z.string().nullish()
7593
+ });
7594
+ export type UpdateVideoSeasonRequest = z.infer<typeof UpdateVideoSeasonRequestSchema>;
7595
+
7596
+ export const UpdateVideoSeriesRequestSchema = z.object({
7597
+ series_id: z.string(),
7598
+ title: z.string().nullish(),
7599
+ description: z.string().nullish(),
7600
+ poster_blob_id: z.string().nullish(),
7601
+ updated_by: z.string().nullish()
7602
+ });
7603
+ export type UpdateVideoSeriesRequest = z.infer<typeof UpdateVideoSeriesRequestSchema>;
7604
+
7605
+ export const UpdateVideosRequestSchema = z.object({
7606
+ video_ids: z.array(z.string()),
7607
+ series_id: z.string().nullish(),
7608
+ season_id: z.string().nullish(),
7609
+ episode_number: z.number().nullish(),
7610
+ content_type: z.string().nullish(),
7611
+ title: z.string().nullish(),
7612
+ description: z.string().nullish(),
7613
+ poster_blob_id: z.string().nullish(),
7614
+ duration_seconds: z.number().nullish(),
7615
+ release_date: z.string().nullish(),
7616
+ updated_by: z.string().nullish(),
7617
+ clear_series_id: z.boolean(),
7618
+ clear_season_id: z.boolean()
7619
+ });
7620
+ export type UpdateVideosRequest = z.infer<typeof UpdateVideosRequestSchema>;
7621
+
7622
+ export const UpdateVideosResultSchema = z.object({
7623
+ videos_updated: z.number(),
7624
+ videos_failed: z.array(z.object({
7625
+ video_id: z.string(),
7626
+ reason: z.string()
7627
+ }))
7628
+ });
7629
+ export type UpdateVideosResult = z.infer<typeof UpdateVideosResultSchema>;
7630
+
6692
7631
  export const UploadMusicByBlake3RequestSchema = z.object({
6693
7632
  blake3: z.string(),
6694
7633
  filename: z.string(),
@@ -6706,6 +7645,31 @@ export const UploadMusicByBlake3RequestSchema = z.object({
6706
7645
  });
6707
7646
  export type UploadMusicByBlake3Request = z.infer<typeof UploadMusicByBlake3RequestSchema>;
6708
7647
 
7648
+ export const UploadVideoByBlake3RequestSchema = z.object({
7649
+ blake3: z.string(),
7650
+ filename: z.string(),
7651
+ size: z.number().nullish(),
7652
+ node_id: z.string().nullish(),
7653
+ metadata: z.object({
7654
+ series_id: z.string().nullish(),
7655
+ season_id: z.string().nullish(),
7656
+ episode_number: z.number().nullish(),
7657
+ title: z.string().nullish()
7658
+ }).nullish()
7659
+ });
7660
+ export type UploadVideoByBlake3Request = z.infer<typeof UploadVideoByBlake3RequestSchema>;
7661
+
7662
+ export const UpsertPlaybackProgressRequestSchema = z.object({
7663
+ entity_type: z.string(),
7664
+ entity_id: z.string(),
7665
+ position_fraction: z.number(),
7666
+ position_seconds: z.number().nullish(),
7667
+ duration_seconds: z.number().nullish(),
7668
+ position_locator: z.string().nullish(),
7669
+ completed_at: z.number().nullish()
7670
+ });
7671
+ export type UpsertPlaybackProgressRequest = z.infer<typeof UpsertPlaybackProgressRequestSchema>;
7672
+
6709
7673
  export const UserStatsSchema = z.object({
6710
7674
  user_id: z.string(),
6711
7675
  username: z.string(),
@@ -6718,6 +7682,258 @@ export const UserStatsSchema = z.object({
6718
7682
  });
6719
7683
  export type UserStats = z.infer<typeof UserStatsSchema>;
6720
7684
 
7685
+ export const VideoSchema = z.object({
7686
+ id: z.string(),
7687
+ series_id: z.string().nullish(),
7688
+ season_id: z.string().nullish(),
7689
+ episode_number: z.number().nullish(),
7690
+ content_type: z.string(),
7691
+ title: z.string(),
7692
+ description: z.string().nullish(),
7693
+ media_blob_id: z.string(),
7694
+ poster_blob_id: z.string().nullish(),
7695
+ duration_seconds: z.number().nullish(),
7696
+ release_date: z.string().nullish(),
7697
+ created_at: z.number(),
7698
+ updated_at: z.number(),
7699
+ deleted_at: z.number().nullish(),
7700
+ created_by: z.string().nullish(),
7701
+ updated_by: z.string().nullish(),
7702
+ deleted_by: z.string().nullish(),
7703
+ images: z.array(z.object({
7704
+ blob_id: z.string(),
7705
+ is_primary: z.number(),
7706
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7707
+ })).nullish(),
7708
+ play_count: z.number().nullish()
7709
+ });
7710
+ export type Video = z.infer<typeof VideoSchema>;
7711
+
7712
+ export const VideoImportReviewOkSchema = z.object({
7713
+ ok: z.boolean()
7714
+ });
7715
+ export type VideoImportReviewOk = z.infer<typeof VideoImportReviewOkSchema>;
7716
+
7717
+ export const VideoMetadataHintsSchema = z.object({
7718
+ series_id: z.string().nullish(),
7719
+ season_id: z.string().nullish(),
7720
+ episode_number: z.number().nullish(),
7721
+ title: z.string().nullish()
7722
+ });
7723
+ export type VideoMetadataHints = z.infer<typeof VideoMetadataHintsSchema>;
7724
+
7725
+ export const VideoPendingRequestSchema = z.object({
7726
+ video_id: z.string()
7727
+ });
7728
+ export type VideoPendingRequest = z.infer<typeof VideoPendingRequestSchema>;
7729
+
7730
+ export const VideoPendingResponseSchema = z.object({
7731
+ session_id: z.string().nullish(),
7732
+ pending_count: z.number(),
7733
+ created_at: z.number().nullish()
7734
+ });
7735
+ export type VideoPendingResponse = z.infer<typeof VideoPendingResponseSchema>;
7736
+
7737
+ export const VideoRenditionSchema = z.object({
7738
+ blob_id: z.string(),
7739
+ label: z.string(),
7740
+ extension: z.string(),
7741
+ mime: z.string().nullish(),
7742
+ skipped: z.boolean()
7743
+ });
7744
+ export type VideoRendition = z.infer<typeof VideoRenditionSchema>;
7745
+
7746
+ export const VideoReviewPatchSchema = z.object({
7747
+ video_id: z.string(),
7748
+ title: z.string().nullish(),
7749
+ episode_number: z.number().nullish(),
7750
+ season_id: z.string().nullish(),
7751
+ new_season: z.object({
7752
+ season_number: z.number(),
7753
+ title: z.string().nullish()
7754
+ }).nullish(),
7755
+ content_type: z.string().nullish()
7756
+ });
7757
+ export type VideoReviewPatch = z.infer<typeof VideoReviewPatchSchema>;
7758
+
7759
+ export const VideoSearchResultSchema = z.object({
7760
+ id: z.string(),
7761
+ title: z.string(),
7762
+ series_id: z.string().nullish(),
7763
+ series_name: z.string().nullish(),
7764
+ episode_number: z.number().nullish(),
7765
+ duration_seconds: z.number().nullish(),
7766
+ thumbnail_url: z.string().nullish(),
7767
+ user_rating: z.number().nullish(),
7768
+ is_favorite: z.boolean(),
7769
+ search_rank: z.number(),
7770
+ match_type: z.string(),
7771
+ highlight: z.string().nullish()
7772
+ });
7773
+ export type VideoSearchResult = z.infer<typeof VideoSearchResultSchema>;
7774
+
7775
+ export const VideoSeasonSchema = z.object({
7776
+ id: z.string(),
7777
+ series_id: z.string(),
7778
+ season_number: z.number(),
7779
+ title: z.string().nullish(),
7780
+ description: z.string().nullish(),
7781
+ poster_blob_id: z.string().nullish(),
7782
+ created_at: z.number(),
7783
+ updated_at: z.number(),
7784
+ deleted_at: z.number().nullish()
7785
+ });
7786
+ export type VideoSeason = z.infer<typeof VideoSeasonSchema>;
7787
+
7788
+ export const VideoSeriesSchema = z.object({
7789
+ id: z.string(),
7790
+ title: z.string(),
7791
+ description: z.string().nullish(),
7792
+ poster_blob_id: z.string().nullish(),
7793
+ created_at: z.number(),
7794
+ updated_at: z.number(),
7795
+ deleted_at: z.number().nullish(),
7796
+ created_by: z.string().nullish(),
7797
+ updated_by: z.string().nullish(),
7798
+ deleted_by: z.string().nullish()
7799
+ });
7800
+ export type VideoSeries = z.infer<typeof VideoSeriesSchema>;
7801
+
7802
+ export const VideoSeriesSearchResultSchema = z.object({
7803
+ id: z.string(),
7804
+ title: z.string(),
7805
+ description: z.string().nullish(),
7806
+ video_count: z.number(),
7807
+ thumbnail_url: z.string().nullish(),
7808
+ search_rank: z.number(),
7809
+ match_type: z.string(),
7810
+ highlight: z.string().nullish()
7811
+ });
7812
+ export type VideoSeriesSearchResult = z.infer<typeof VideoSeriesSearchResultSchema>;
7813
+
7814
+ export const VideoUploadResponseSchema = z.object({
7815
+ blob_id: z.string(),
7816
+ job_id: z.string(),
7817
+ sha256: z.string(),
7818
+ size: z.number(),
7819
+ mime: z.string(),
7820
+ existing: z.boolean(),
7821
+ message: z.string()
7822
+ });
7823
+ export type VideoUploadResponse = z.infer<typeof VideoUploadResponseSchema>;
7824
+
7825
+ export const VideoWithMetadataSchema = z.object({
7826
+ video: z.object({
7827
+ id: z.string(),
7828
+ series_id: z.string().nullish(),
7829
+ season_id: z.string().nullish(),
7830
+ episode_number: z.number().nullish(),
7831
+ content_type: z.string(),
7832
+ title: z.string(),
7833
+ description: z.string().nullish(),
7834
+ media_blob_id: z.string(),
7835
+ poster_blob_id: z.string().nullish(),
7836
+ duration_seconds: z.number().nullish(),
7837
+ release_date: z.string().nullish(),
7838
+ created_at: z.number(),
7839
+ updated_at: z.number(),
7840
+ deleted_at: z.number().nullish(),
7841
+ created_by: z.string().nullish(),
7842
+ updated_by: z.string().nullish(),
7843
+ deleted_by: z.string().nullish(),
7844
+ images: z.array(z.object({
7845
+ blob_id: z.string(),
7846
+ is_primary: z.number(),
7847
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7848
+ })).nullish(),
7849
+ play_count: z.number().nullish()
7850
+ }),
7851
+ created_by_username: z.string().nullish(),
7852
+ updated_by_username: z.string().nullish(),
7853
+ blob_size: z.number().nullish(),
7854
+ blob_width: z.number().nullish(),
7855
+ blob_height: z.number().nullish(),
7856
+ codec: z.string().nullish(),
7857
+ container: z.string().nullish(),
7858
+ bitrate: z.number().nullish(),
7859
+ frame_rate: z.number().nullish()
7860
+ });
7861
+ export type VideoWithMetadata = z.infer<typeof VideoWithMetadataSchema>;
7862
+
7863
+ export const VideosByValueRequestSchema = z.object({
7864
+ kind: z.string(),
7865
+ value_norm: z.string(),
7866
+ limit: z.number().nullish(),
7867
+ offset: z.number().nullish()
7868
+ });
7869
+ export type VideosByValueRequest = z.infer<typeof VideosByValueRequestSchema>;
7870
+
7871
+ export const VideosByValueResponseSchema = z.object({
7872
+ kind: z.string(),
7873
+ value_norm: z.string(),
7874
+ videos: z.array(z.object({
7875
+ id: z.string(),
7876
+ series_id: z.string().nullish(),
7877
+ season_id: z.string().nullish(),
7878
+ episode_number: z.number().nullish(),
7879
+ content_type: z.string(),
7880
+ title: z.string(),
7881
+ description: z.string().nullish(),
7882
+ media_blob_id: z.string(),
7883
+ poster_blob_id: z.string().nullish(),
7884
+ duration_seconds: z.number().nullish(),
7885
+ release_date: z.string().nullish(),
7886
+ created_at: z.number(),
7887
+ updated_at: z.number(),
7888
+ deleted_at: z.number().nullish(),
7889
+ created_by: z.string().nullish(),
7890
+ updated_by: z.string().nullish(),
7891
+ deleted_by: z.string().nullish(),
7892
+ images: z.array(z.object({
7893
+ blob_id: z.string(),
7894
+ is_primary: z.number(),
7895
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7896
+ })).nullish(),
7897
+ play_count: z.number().nullish()
7898
+ })),
7899
+ count: z.number()
7900
+ });
7901
+ export type VideosByValueResponse = z.infer<typeof VideosByValueResponseSchema>;
7902
+
7903
+ export const VideosQueryResultSchema = z.object({
7904
+ items: z.array(z.object({
7905
+ id: z.string(),
7906
+ series_id: z.string().nullish(),
7907
+ season_id: z.string().nullish(),
7908
+ episode_number: z.number().nullish(),
7909
+ content_type: z.string(),
7910
+ title: z.string(),
7911
+ description: z.string().nullish(),
7912
+ media_blob_id: z.string(),
7913
+ poster_blob_id: z.string().nullish(),
7914
+ duration_seconds: z.number().nullish(),
7915
+ release_date: z.string().nullish(),
7916
+ created_at: z.number(),
7917
+ updated_at: z.number(),
7918
+ deleted_at: z.number().nullish(),
7919
+ created_by: z.string().nullish(),
7920
+ updated_by: z.string().nullish(),
7921
+ deleted_by: z.string().nullish(),
7922
+ images: z.array(z.object({
7923
+ blob_id: z.string(),
7924
+ is_primary: z.number(),
7925
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7926
+ })).nullish(),
7927
+ play_count: z.number().nullish()
7928
+ })),
7929
+ total_count: z.number(),
7930
+ has_more: z.boolean(),
7931
+ offset: z.number(),
7932
+ limit: z.number(),
7933
+ query_time_ms: z.number().nullish()
7934
+ });
7935
+ export type VideosQueryResult = z.infer<typeof VideosQueryResultSchema>;
7936
+
6721
7937
  export const WhoAmIResponseSchema = z.object({
6722
7938
  user_id: z.string(),
6723
7939
  username: z.string(),