@freqhole/api-client 0.2.15 → 0.3.1

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'),
@@ -3076,13 +3335,19 @@ export type ListBelovedRequest = z.infer<typeof ListBelovedRequestSchema>;
3076
3335
 
3077
3336
  export const ListBelovedResponseSchema = z.object({
3078
3337
  album_ids: z.array(z.string()),
3079
- artist_ids: z.array(z.string())
3338
+ artist_ids: z.array(z.string()),
3339
+ video_ids: z.array(z.string())
3080
3340
  });
3081
3341
  export type ListBelovedResponse = z.infer<typeof ListBelovedResponseSchema>;
3082
3342
 
3343
+ export const ListEntityTypeTagsRequestSchema = z.object({
3344
+ entity_type: z.string()
3345
+ });
3346
+ export type ListEntityTypeTagsRequest = z.infer<typeof ListEntityTypeTagsRequestSchema>;
3347
+
3083
3348
  export const ListFavoritesRequestSchema = z.object({
3084
3349
  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(),
3350
+ 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
3351
  limit: z.number().nullish(),
3087
3352
  offset: z.number().nullish()
3088
3353
  });
@@ -3100,7 +3365,7 @@ export const ListFavoritesResponseSchema = z.object({
3100
3365
  images: z.array(z.object({
3101
3366
  blob_id: z.string(),
3102
3367
  is_primary: z.number(),
3103
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3368
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3104
3369
  })).nullish(),
3105
3370
  urls: z.array(z.object({
3106
3371
  id: z.string().nullish(),
@@ -3132,7 +3397,7 @@ export const ListFavoritesResponseSchema = z.object({
3132
3397
  images: z.array(z.object({
3133
3398
  blob_id: z.string(),
3134
3399
  is_primary: z.number(),
3135
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3400
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3136
3401
  })).nullish(),
3137
3402
  urls: z.array(z.object({
3138
3403
  id: z.string().nullish(),
@@ -3164,7 +3429,7 @@ export const ListFavoritesResponseSchema = z.object({
3164
3429
  images: z.array(z.object({
3165
3430
  blob_id: z.string(),
3166
3431
  is_primary: z.number(),
3167
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3432
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3168
3433
  })).nullish(),
3169
3434
  urls: z.array(z.object({
3170
3435
  id: z.string().nullish(),
@@ -3199,7 +3464,7 @@ export const ListFavoritesResponseSchema = z.object({
3199
3464
  source_client_id: z.string().nullish(),
3200
3465
  filename: z.string().nullish(),
3201
3466
  parent_blob_id: z.string().nullish(),
3202
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
3467
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
3203
3468
  metadata: z.any(),
3204
3469
  created_at: z.number(),
3205
3470
  updated_at: z.number(),
@@ -3214,7 +3479,7 @@ export const ListFavoritesResponseSchema = z.object({
3214
3479
  images: z.array(z.object({
3215
3480
  blob_id: z.string(),
3216
3481
  is_primary: z.number(),
3217
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3482
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3218
3483
  })).nullish(),
3219
3484
  relevance_score: z.number().nullish(),
3220
3485
  snippet: z.string().nullish(),
@@ -3252,7 +3517,7 @@ export const ListFavoritesResponseSchema = z.object({
3252
3517
  images: z.array(z.object({
3253
3518
  blob_id: z.string(),
3254
3519
  is_primary: z.number(),
3255
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3520
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3256
3521
  })).nullish(),
3257
3522
  urls: z.array(z.object({
3258
3523
  id: z.string().nullish(),
@@ -3281,7 +3546,7 @@ export const ListFavoritesResponseSchema = z.object({
3281
3546
  images: z.array(z.object({
3282
3547
  blob_id: z.string(),
3283
3548
  is_primary: z.number(),
3284
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3549
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3285
3550
  })).nullish(),
3286
3551
  urls: z.array(z.object({
3287
3552
  id: z.string().nullish(),
@@ -3303,7 +3568,7 @@ export const ListFavoritesResponseSchema = z.object({
3303
3568
  images: z.array(z.object({
3304
3569
  blob_id: z.string(),
3305
3570
  is_primary: z.number(),
3306
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3571
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3307
3572
  })).nullish(),
3308
3573
  album_tags: z.array(z.string()).nullish(),
3309
3574
  is_favorite: z.boolean().nullish(),
@@ -3323,7 +3588,7 @@ export const ListFavoritesResponseSchema = z.object({
3323
3588
  images: z.array(z.object({
3324
3589
  blob_id: z.string(),
3325
3590
  is_primary: z.number(),
3326
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3591
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3327
3592
  })).nullish(),
3328
3593
  urls: z.array(z.object({
3329
3594
  id: z.string().nullish(),
@@ -3340,7 +3605,7 @@ export const ListFavoritesResponseSchema = z.object({
3340
3605
  images: z.array(z.object({
3341
3606
  blob_id: z.string(),
3342
3607
  is_primary: z.number(),
3343
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3608
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3344
3609
  })).nullish(),
3345
3610
  song_count: z.number(),
3346
3611
  album_count: z.number(),
@@ -3363,7 +3628,7 @@ export const ListFavoritesResponseSchema = z.object({
3363
3628
  images: z.array(z.object({
3364
3629
  blob_id: z.string(),
3365
3630
  is_primary: z.number(),
3366
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
3631
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3367
3632
  })).nullish(),
3368
3633
  urls: z.array(z.object({
3369
3634
  id: z.string().nullish(),
@@ -3384,6 +3649,51 @@ export const ListFavoritesResponseSchema = z.object({
3384
3649
  is_favorite: z.boolean().nullish(),
3385
3650
  play_count: z.number().nullish()
3386
3651
  })
3652
+ })), z.intersection(z.object({
3653
+ type: z.literal('Video')
3654
+ }), z.object({
3655
+ favorited_at: z.number(),
3656
+ video: z.object({
3657
+ id: z.string(),
3658
+ series_id: z.string().nullish(),
3659
+ season_id: z.string().nullish(),
3660
+ episode_number: z.number().nullish(),
3661
+ content_type: z.string(),
3662
+ title: z.string(),
3663
+ description: z.string().nullish(),
3664
+ media_blob_id: z.string(),
3665
+ poster_blob_id: z.string().nullish(),
3666
+ duration_seconds: z.number().nullish(),
3667
+ release_date: z.string().nullish(),
3668
+ created_at: z.number(),
3669
+ updated_at: z.number(),
3670
+ deleted_at: z.number().nullish(),
3671
+ created_by: z.string().nullish(),
3672
+ updated_by: z.string().nullish(),
3673
+ deleted_by: z.string().nullish(),
3674
+ images: z.array(z.object({
3675
+ blob_id: z.string(),
3676
+ is_primary: z.number(),
3677
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3678
+ })).nullish(),
3679
+ play_count: z.number().nullish()
3680
+ })
3681
+ })), z.intersection(z.object({
3682
+ type: z.literal('VideoSeries')
3683
+ }), z.object({
3684
+ favorited_at: z.number(),
3685
+ series: z.object({
3686
+ id: z.string(),
3687
+ title: z.string(),
3688
+ description: z.string().nullish(),
3689
+ poster_blob_id: z.string().nullish(),
3690
+ created_at: z.number(),
3691
+ updated_at: z.number(),
3692
+ deleted_at: z.number().nullish(),
3693
+ created_by: z.string().nullish(),
3694
+ updated_by: z.string().nullish(),
3695
+ deleted_by: z.string().nullish()
3696
+ })
3387
3697
  }))])),
3388
3698
  total_count: z.number(),
3389
3699
  has_more: z.boolean(),
@@ -3400,28 +3710,46 @@ export const ListJobsRequestSchema = z.object({
3400
3710
  });
3401
3711
  export type ListJobsRequest = z.infer<typeof ListJobsRequestSchema>;
3402
3712
 
3403
- export const ListListenSessionsRequestSchema = z.object({
3713
+ export const ListPendingReviewRequestSchema = z.object({
3714
+ session_id: z.string().nullish()
3715
+ });
3716
+ export type ListPendingReviewRequest = z.infer<typeof ListPendingReviewRequestSchema>;
3717
+
3718
+ export const ListPendingVideoReviewRequestSchema = z.object({
3719
+ session_id: z.string().nullish()
3720
+ });
3721
+ export type ListPendingVideoReviewRequest = z.infer<typeof ListPendingVideoReviewRequestSchema>;
3722
+
3723
+ export const ListPlaybackProgressRequestSchema = z.object({
3724
+ limit: z.number().nullish()
3725
+ });
3726
+ export type ListPlaybackProgressRequest = z.infer<typeof ListPlaybackProgressRequestSchema>;
3727
+
3728
+ export const ListPlaybackSessionsRequestSchema = z.object({
3404
3729
  user_id: z.string().nullish(),
3405
3730
  status: z.string().nullish(),
3406
3731
  limit: z.number().nullish(),
3407
3732
  offset: z.number().nullish()
3408
3733
  });
3409
- export type ListListenSessionsRequest = z.infer<typeof ListListenSessionsRequestSchema>;
3734
+ export type ListPlaybackSessionsRequest = z.infer<typeof ListPlaybackSessionsRequestSchema>;
3410
3735
 
3411
- export const ListListenSessionsResponseSchema = z.object({
3736
+ export const ListPlaybackSessionsResponseSchema = z.object({
3412
3737
  items: z.array(z.object({
3413
3738
  id: z.string(),
3414
3739
  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")]),
3740
+ 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
3741
  entity_id: z.string().nullish(),
3417
3742
  label: z.string(),
3418
- song_ids: z.array(z.string()),
3419
- total_songs: z.number(),
3420
- songs_completed: z.number(),
3743
+ items: z.array(z.object({
3744
+ entity_type: z.string(),
3745
+ entity_id: z.string()
3746
+ })),
3747
+ total_items: z.number(),
3748
+ items_completed: z.number(),
3421
3749
  total_duration_ms: z.number(),
3422
- listened_duration_ms: z.number(),
3423
- current_song_index: z.number(),
3424
- current_song_position_ms: z.number(),
3750
+ played_duration_ms: z.number(),
3751
+ current_item_index: z.number(),
3752
+ current_item_position_ms: z.number(),
3425
3753
  status: z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]),
3426
3754
  created_at: z.number(),
3427
3755
  updated_at: z.number(),
@@ -3430,12 +3758,12 @@ export const ListListenSessionsResponseSchema = z.object({
3430
3758
  })),
3431
3759
  total: z.number()
3432
3760
  });
3433
- export type ListListenSessionsResponse = z.infer<typeof ListListenSessionsResponseSchema>;
3761
+ export type ListPlaybackSessionsResponse = z.infer<typeof ListPlaybackSessionsResponseSchema>;
3434
3762
 
3435
- export const ListPendingReviewRequestSchema = z.object({
3436
- session_id: z.string().nullish()
3763
+ export const ListPlaylistItemsRequestSchema = z.object({
3764
+ playlist_id: z.string()
3437
3765
  });
3438
- export type ListPendingReviewRequest = z.infer<typeof ListPendingReviewRequestSchema>;
3766
+ export type ListPlaylistItemsRequest = z.infer<typeof ListPlaylistItemsRequestSchema>;
3439
3767
 
3440
3768
  export const ListRelatedArtistsBatchRequestSchema = z.object({
3441
3769
  artist_ids: z.array(z.string()),
@@ -3514,6 +3842,11 @@ export const ListRelatedArtistsResponseSchema = z.object({
3514
3842
  });
3515
3843
  export type ListRelatedArtistsResponse = z.infer<typeof ListRelatedArtistsResponseSchema>;
3516
3844
 
3845
+ export const ListTaxonKindsRequestSchema = z.object({
3846
+ domain: z.string().nullish()
3847
+ });
3848
+ export type ListTaxonKindsRequest = z.infer<typeof ListTaxonKindsRequestSchema>;
3849
+
3517
3850
  export const ListTaxonParentsForKindRequestSchema = z.object({
3518
3851
  kind_slug: z.string()
3519
3852
  });
@@ -3524,37 +3857,37 @@ export const ListTaxonsByKindRequestSchema = z.object({
3524
3857
  });
3525
3858
  export type ListTaxonsByKindRequest = z.infer<typeof ListTaxonsByKindRequestSchema>;
3526
3859
 
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()
3860
+ export const ListVideoSeasonsRequestSchema = z.object({
3861
+ series_id: z.string().nullish()
3545
3862
  });
3546
- export type ListenSession = z.infer<typeof ListenSessionSchema>;
3863
+ export type ListVideoSeasonsRequest = z.infer<typeof ListVideoSeasonsRequestSchema>;
3547
3864
 
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>;
3865
+ export const ListVideoSeriesRequestSchema = z.object({
3866
+ limit: z.number().nullish(),
3867
+ offset: z.number().nullish()
3868
+ });
3869
+ export type ListVideoSeriesRequest = z.infer<typeof ListVideoSeriesRequestSchema>;
3550
3870
 
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>;
3871
+ export const ListVideosBySeasonRequestSchema = z.object({
3872
+ season_id: z.string()
3873
+ });
3874
+ export type ListVideosBySeasonRequest = z.infer<typeof ListVideosBySeasonRequestSchema>;
3553
3875
 
3554
- export const ListeningHistoryItemSchema = z.object({
3555
- id: z.string(),
3556
- media_event_id: z.string(),
3557
- song_id: z.string(),
3876
+ export const ListVideosBySeriesRequestSchema = z.object({
3877
+ series_id: z.string()
3878
+ });
3879
+ export type ListVideosBySeriesRequest = z.infer<typeof ListVideosBySeriesRequestSchema>;
3880
+
3881
+ export const ListVideosUnattachedRequestSchema = z.object({
3882
+ limit: z.number().nullish(),
3883
+ offset: z.number().nullish()
3884
+ });
3885
+ export type ListVideosUnattachedRequest = z.infer<typeof ListVideosUnattachedRequestSchema>;
3886
+
3887
+ export const ListeningHistoryItemSchema = z.object({
3888
+ id: z.string(),
3889
+ media_event_id: z.string(),
3890
+ song_id: z.string(),
3558
3891
  title: z.string(),
3559
3892
  artist: z.string().nullish(),
3560
3893
  album: z.string().nullish(),
@@ -3609,6 +3942,12 @@ export const MarkAlbumReviewedRequestSchema = z.object({
3609
3942
  });
3610
3943
  export type MarkAlbumReviewedRequest = z.infer<typeof MarkAlbumReviewedRequestSchema>;
3611
3944
 
3945
+ export const MarkVideoGroupReviewedRequestSchema = z.object({
3946
+ group_key: z.string(),
3947
+ session_id: z.string()
3948
+ });
3949
+ export type MarkVideoGroupReviewedRequest = z.infer<typeof MarkVideoGroupReviewedRequestSchema>;
3950
+
3612
3951
  export const MbAlbumDetailParamsSchema = z.object({
3613
3952
  album_id: z.string(),
3614
3953
  release_group_id: z.string(),
@@ -3906,7 +4245,7 @@ export const MediaBlobSchema = z.object({
3906
4245
  source_client_id: z.string().nullish(),
3907
4246
  filename: z.string().nullish(),
3908
4247
  parent_blob_id: z.string().nullish(),
3909
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
4248
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
3910
4249
  metadata: z.any(),
3911
4250
  created_at: z.number(),
3912
4251
  updated_at: z.number(),
@@ -3947,7 +4286,7 @@ export const MergedKeyMatchSchema = z.object({
3947
4286
  images: z.array(z.object({
3948
4287
  blob_id: z.string(),
3949
4288
  is_primary: z.number(),
3950
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4289
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3951
4290
  })).nullish(),
3952
4291
  urls: z.array(z.object({
3953
4292
  id: z.string().nullish(),
@@ -3976,7 +4315,7 @@ export const MergedKeyMatchSchema = z.object({
3976
4315
  images: z.array(z.object({
3977
4316
  blob_id: z.string(),
3978
4317
  is_primary: z.number(),
3979
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4318
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
3980
4319
  })).nullish(),
3981
4320
  urls: z.array(z.object({
3982
4321
  id: z.string().nullish(),
@@ -3996,10 +4335,25 @@ export type MergedKeyMatch = z.infer<typeof MergedKeyMatchSchema>;
3996
4335
  export const MoveSongReviewRequestSchema = z.object({
3997
4336
  session_id: z.string(),
3998
4337
  song_id: z.string(),
3999
- to_album_id: z.string()
4338
+ to_album_id: z.string().nullish(),
4339
+ new_album_title: z.string().nullish(),
4340
+ new_album_artist_name: z.string().nullish()
4000
4341
  });
4001
4342
  export type MoveSongReviewRequest = z.infer<typeof MoveSongReviewRequestSchema>;
4002
4343
 
4344
+ export const MoveVideoReviewRequestSchema = z.object({
4345
+ video_id: z.string(),
4346
+ to_series_id: z.string().nullish(),
4347
+ to_season_id: z.string().nullish(),
4348
+ content_type: z.string().nullish(),
4349
+ new_series_title: z.string().nullish(),
4350
+ new_season: z.object({
4351
+ season_number: z.number(),
4352
+ title: z.string().nullish()
4353
+ }).nullish()
4354
+ });
4355
+ export type MoveVideoReviewRequest = z.infer<typeof MoveVideoReviewRequestSchema>;
4356
+
4003
4357
  export const MusicImportResponseSchema = z.object({
4004
4358
  session_id: z.string(),
4005
4359
  jobs_created: z.number(),
@@ -4070,6 +4424,25 @@ export const PatchAlbumReviewRequestSchema = z.object({
4070
4424
  });
4071
4425
  export type PatchAlbumReviewRequest = z.infer<typeof PatchAlbumReviewRequestSchema>;
4072
4426
 
4427
+ export const PatchVideoGroupReviewRequestSchema = z.object({
4428
+ group_key: z.string(),
4429
+ session_id: z.string(),
4430
+ series_title: z.string().nullish(),
4431
+ series_description: z.string().nullish(),
4432
+ videos: z.array(z.object({
4433
+ video_id: z.string(),
4434
+ title: z.string().nullish(),
4435
+ episode_number: z.number().nullish(),
4436
+ season_id: z.string().nullish(),
4437
+ new_season: z.object({
4438
+ season_number: z.number(),
4439
+ title: z.string().nullish()
4440
+ }).nullish(),
4441
+ content_type: z.string().nullish()
4442
+ })).nullish()
4443
+ });
4444
+ export type PatchVideoGroupReviewRequest = z.infer<typeof PatchVideoGroupReviewRequestSchema>;
4445
+
4073
4446
  export const PendingReviewAlbumSchema = z.object({
4074
4447
  album_id: z.string(),
4075
4448
  title: z.string(),
@@ -4097,6 +4470,58 @@ export const PendingReviewSessionSchema = z.object({
4097
4470
  });
4098
4471
  export type PendingReviewSession = z.infer<typeof PendingReviewSessionSchema>;
4099
4472
 
4473
+ export const PendingReviewVideoSummarySchema = z.object({
4474
+ video_id: z.string(),
4475
+ title: z.string(),
4476
+ content_type: z.string(),
4477
+ season_id: z.string().nullish(),
4478
+ season_number: z.number().nullish(),
4479
+ season_title: z.string().nullish(),
4480
+ episode_number: z.number().nullish()
4481
+ });
4482
+ export type PendingReviewVideoSummary = z.infer<typeof PendingReviewVideoSummarySchema>;
4483
+
4484
+ export const PendingVideoReviewGroupSchema = z.object({
4485
+ group_key: z.string(),
4486
+ series_id: z.string().nullish(),
4487
+ series_title: z.string().nullish(),
4488
+ poster_blob_id: z.string().nullish(),
4489
+ videos: z.array(z.object({
4490
+ video_id: z.string(),
4491
+ title: z.string(),
4492
+ content_type: z.string(),
4493
+ season_id: z.string().nullish(),
4494
+ season_number: z.number().nullish(),
4495
+ season_title: z.string().nullish(),
4496
+ episode_number: z.number().nullish()
4497
+ })),
4498
+ pending_blob_count: z.number()
4499
+ });
4500
+ export type PendingVideoReviewGroup = z.infer<typeof PendingVideoReviewGroupSchema>;
4501
+
4502
+ export const PendingVideoReviewSessionSchema = z.object({
4503
+ session_id: z.string(),
4504
+ created_at: z.number(),
4505
+ uploader_username: z.string().nullish(),
4506
+ groups: z.array(z.object({
4507
+ group_key: z.string(),
4508
+ series_id: z.string().nullish(),
4509
+ series_title: z.string().nullish(),
4510
+ poster_blob_id: z.string().nullish(),
4511
+ videos: z.array(z.object({
4512
+ video_id: z.string(),
4513
+ title: z.string(),
4514
+ content_type: z.string(),
4515
+ season_id: z.string().nullish(),
4516
+ season_number: z.number().nullish(),
4517
+ season_title: z.string().nullish(),
4518
+ episode_number: z.number().nullish()
4519
+ })),
4520
+ pending_blob_count: z.number()
4521
+ }))
4522
+ });
4523
+ export type PendingVideoReviewSession = z.infer<typeof PendingVideoReviewSessionSchema>;
4524
+
4100
4525
  export const PlayAnalyticsSchema = z.object({
4101
4526
  song_id: z.string(),
4102
4527
  total_plays: z.number(),
@@ -4112,6 +4537,49 @@ export const PlayAnalyticsSchema = z.object({
4112
4537
  });
4113
4538
  export type PlayAnalytics = z.infer<typeof PlayAnalyticsSchema>;
4114
4539
 
4540
+ export const PlaybackProgressSchema = z.object({
4541
+ user_id: z.string(),
4542
+ entity_type: z.string(),
4543
+ entity_id: z.string(),
4544
+ position_fraction: z.number(),
4545
+ position_seconds: z.number().nullish(),
4546
+ duration_seconds: z.number().nullish(),
4547
+ position_locator: z.string().nullish(),
4548
+ completed_at: z.number().nullish(),
4549
+ updated_at: z.number()
4550
+ });
4551
+ export type PlaybackProgress = z.infer<typeof PlaybackProgressSchema>;
4552
+
4553
+ export const PlaybackSessionSchema = z.object({
4554
+ id: z.string(),
4555
+ user_id: z.string(),
4556
+ 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")]),
4557
+ entity_id: z.string().nullish(),
4558
+ label: z.string(),
4559
+ items: z.array(z.object({
4560
+ entity_type: z.string(),
4561
+ entity_id: z.string()
4562
+ })),
4563
+ total_items: z.number(),
4564
+ items_completed: z.number(),
4565
+ total_duration_ms: z.number(),
4566
+ played_duration_ms: z.number(),
4567
+ current_item_index: z.number(),
4568
+ current_item_position_ms: z.number(),
4569
+ status: z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]),
4570
+ created_at: z.number(),
4571
+ updated_at: z.number(),
4572
+ username: z.string().nullish(),
4573
+ progress_percent: z.number().nullish()
4574
+ });
4575
+ export type PlaybackSession = z.infer<typeof PlaybackSessionSchema>;
4576
+
4577
+ export const PlaybackSessionStatusSchema = z.union([z.literal("active"), z.literal("paused"), z.literal("completed"), z.literal("abandoned")]);
4578
+ export type PlaybackSessionStatus = z.infer<typeof PlaybackSessionStatusSchema>;
4579
+
4580
+ 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")]);
4581
+ export type PlaybackSessionType = z.infer<typeof PlaybackSessionTypeSchema>;
4582
+
4115
4583
  export const PlayerCommandSchema = z.union([
4116
4584
  z.object({ kind: z.literal("load"), paths: z.array(z.string()) }),
4117
4585
  z.object({ kind: z.literal("enqueue"), paths: z.array(z.string()) }),
@@ -4158,7 +4626,7 @@ export const PlaylistSchema = z.object({
4158
4626
  images: z.array(z.object({
4159
4627
  blob_id: z.string(),
4160
4628
  is_primary: z.number(),
4161
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4629
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4162
4630
  })).nullish(),
4163
4631
  urls: z.array(z.object({
4164
4632
  id: z.string().nullish(),
@@ -4176,6 +4644,23 @@ export const PlaylistSchema = z.object({
4176
4644
  });
4177
4645
  export type Playlist = z.infer<typeof PlaylistSchema>;
4178
4646
 
4647
+ export const PlaylistItemSchema = z.object({
4648
+ id: z.string(),
4649
+ playlist_id: z.string(),
4650
+ entity_type: z.string(),
4651
+ entity_id: z.string(),
4652
+ position: z.number(),
4653
+ added_at: z.number(),
4654
+ added_by: z.string().nullish()
4655
+ });
4656
+ export type PlaylistItem = z.infer<typeof PlaylistItemSchema>;
4657
+
4658
+ export const PlaylistItemRefSchema = z.object({
4659
+ entity_type: z.string(),
4660
+ entity_id: z.string()
4661
+ });
4662
+ export type PlaylistItemRef = z.infer<typeof PlaylistItemRefSchema>;
4663
+
4179
4664
  export const PlaylistQueryResultSchema = z.object({
4180
4665
  playlist: z.object({
4181
4666
  id: z.string(),
@@ -4185,7 +4670,7 @@ export const PlaylistQueryResultSchema = z.object({
4185
4670
  images: z.array(z.object({
4186
4671
  blob_id: z.string(),
4187
4672
  is_primary: z.number(),
4188
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4673
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4189
4674
  })).nullish(),
4190
4675
  urls: z.array(z.object({
4191
4676
  id: z.string().nullish(),
@@ -4229,7 +4714,7 @@ export const PlaylistSongResultSchema = z.object({
4229
4714
  images: z.array(z.object({
4230
4715
  blob_id: z.string(),
4231
4716
  is_primary: z.number(),
4232
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4717
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4233
4718
  })).nullish(),
4234
4719
  urls: z.array(z.object({
4235
4720
  id: z.string().nullish(),
@@ -4261,7 +4746,7 @@ export const PlaylistSongResultSchema = z.object({
4261
4746
  images: z.array(z.object({
4262
4747
  blob_id: z.string(),
4263
4748
  is_primary: z.number(),
4264
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4749
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4265
4750
  })).nullish(),
4266
4751
  urls: z.array(z.object({
4267
4752
  id: z.string().nullish(),
@@ -4293,7 +4778,7 @@ export const PlaylistSongResultSchema = z.object({
4293
4778
  images: z.array(z.object({
4294
4779
  blob_id: z.string(),
4295
4780
  is_primary: z.number(),
4296
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4781
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4297
4782
  })).nullish(),
4298
4783
  urls: z.array(z.object({
4299
4784
  id: z.string().nullish(),
@@ -4328,7 +4813,7 @@ export const PlaylistSongResultSchema = z.object({
4328
4813
  source_client_id: z.string().nullish(),
4329
4814
  filename: z.string().nullish(),
4330
4815
  parent_blob_id: z.string().nullish(),
4331
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
4816
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
4332
4817
  metadata: z.any(),
4333
4818
  created_at: z.number(),
4334
4819
  updated_at: z.number(),
@@ -4343,7 +4828,7 @@ export const PlaylistSongResultSchema = z.object({
4343
4828
  images: z.array(z.object({
4344
4829
  blob_id: z.string(),
4345
4830
  is_primary: z.number(),
4346
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4831
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4347
4832
  })).nullish(),
4348
4833
  relevance_score: z.number().nullish(),
4349
4834
  snippet: z.string().nullish(),
@@ -4372,7 +4857,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4372
4857
  images: z.array(z.object({
4373
4858
  blob_id: z.string(),
4374
4859
  is_primary: z.number(),
4375
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4860
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4376
4861
  })).nullish(),
4377
4862
  urls: z.array(z.object({
4378
4863
  id: z.string().nullish(),
@@ -4404,7 +4889,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4404
4889
  images: z.array(z.object({
4405
4890
  blob_id: z.string(),
4406
4891
  is_primary: z.number(),
4407
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4892
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4408
4893
  })).nullish(),
4409
4894
  urls: z.array(z.object({
4410
4895
  id: z.string().nullish(),
@@ -4436,7 +4921,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4436
4921
  images: z.array(z.object({
4437
4922
  blob_id: z.string(),
4438
4923
  is_primary: z.number(),
4439
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4924
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4440
4925
  })).nullish(),
4441
4926
  urls: z.array(z.object({
4442
4927
  id: z.string().nullish(),
@@ -4471,7 +4956,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4471
4956
  source_client_id: z.string().nullish(),
4472
4957
  filename: z.string().nullish(),
4473
4958
  parent_blob_id: z.string().nullish(),
4474
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
4959
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
4475
4960
  metadata: z.any(),
4476
4961
  created_at: z.number(),
4477
4962
  updated_at: z.number(),
@@ -4486,7 +4971,7 @@ export const PlaylistSongsQueryResultSchema = z.object({
4486
4971
  images: z.array(z.object({
4487
4972
  blob_id: z.string(),
4488
4973
  is_primary: z.number(),
4489
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
4974
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4490
4975
  })).nullish(),
4491
4976
  relevance_score: z.number().nullish(),
4492
4977
  snippet: z.string().nullish(),
@@ -4522,7 +5007,7 @@ export const PlaylistsQueryResultSchema = z.object({
4522
5007
  images: z.array(z.object({
4523
5008
  blob_id: z.string(),
4524
5009
  is_primary: z.number(),
4525
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5010
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
4526
5011
  })).nullish(),
4527
5012
  urls: z.array(z.object({
4528
5013
  id: z.string().nullish(),
@@ -4816,6 +5301,28 @@ export const QueryTaxonsRequestSchema = z.object({
4816
5301
  });
4817
5302
  export type QueryTaxonsRequest = z.infer<typeof QueryTaxonsRequestSchema>;
4818
5303
 
5304
+ export const QueryVideosRequestSchema = z.object({
5305
+ params: z.object({
5306
+ q: z.string().nullish(),
5307
+ search_fields: z.array(z.string()).nullish(),
5308
+ filters: z.record(z.string(), z.any()),
5309
+ sort_by: z.string().nullish(),
5310
+ sort_direction: z.string().nullish(),
5311
+ limit: z.number().nullish(),
5312
+ offset: z.number().nullish(),
5313
+ user_id: z.string().nullish(),
5314
+ favorites_only: z.boolean().nullish(),
5315
+ min_rating: z.number().nullish(),
5316
+ mb_lookup_status: z.array(z.string()).nullish(),
5317
+ pending_review: z.boolean().nullish(),
5318
+ caller_is_admin: z.boolean().nullish()
5319
+ }),
5320
+ series_id: z.string().nullish(),
5321
+ season_id: z.string().nullish(),
5322
+ unassigned: z.boolean()
5323
+ });
5324
+ export type QueryVideosRequest = z.infer<typeof QueryVideosRequestSchema>;
5325
+
4819
5326
  export const RadioBumperSchema = z.object({
4820
5327
  id: z.string(),
4821
5328
  station_id: z.string(),
@@ -5001,6 +5508,12 @@ export const RatingStatsSchema = z.object({
5001
5508
  });
5002
5509
  export type RatingStats = z.infer<typeof RatingStatsSchema>;
5003
5510
 
5511
+ export const RatingStatusItemSchema = z.object({
5512
+ target_id: z.string(),
5513
+ rating: z.number().nullish()
5514
+ });
5515
+ export type RatingStatusItem = z.infer<typeof RatingStatusItemSchema>;
5516
+
5004
5517
  export const RecentSongsRequestSchema = z.object({
5005
5518
  limit: z.number().nullish()
5006
5519
  });
@@ -5031,7 +5544,7 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5031
5544
  images: z.array(z.object({
5032
5545
  blob_id: z.string(),
5033
5546
  is_primary: z.number(),
5034
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5547
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5035
5548
  })).nullish(),
5036
5549
  urls: z.array(z.object({
5037
5550
  id: z.string().nullish(),
@@ -5060,7 +5573,7 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5060
5573
  images: z.array(z.object({
5061
5574
  blob_id: z.string(),
5062
5575
  is_primary: z.number(),
5063
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5576
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5064
5577
  })).nullish(),
5065
5578
  urls: z.array(z.object({
5066
5579
  id: z.string().nullish(),
@@ -5082,7 +5595,7 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5082
5595
  images: z.array(z.object({
5083
5596
  blob_id: z.string(),
5084
5597
  is_primary: z.number(),
5085
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
5598
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5086
5599
  })).nullish(),
5087
5600
  album_tags: z.array(z.string()).nullish(),
5088
5601
  is_favorite: z.boolean().nullish(),
@@ -5094,6 +5607,41 @@ export const RecentlyAddedAlbumsResponseSchema = z.object({
5094
5607
  });
5095
5608
  export type RecentlyAddedAlbumsResponse = z.infer<typeof RecentlyAddedAlbumsResponseSchema>;
5096
5609
 
5610
+ export const RecentlyAddedVideosRequestSchema = z.object({
5611
+ limit: z.number().nullish()
5612
+ });
5613
+ export type RecentlyAddedVideosRequest = z.infer<typeof RecentlyAddedVideosRequestSchema>;
5614
+
5615
+ export const RecentlyAddedVideosResponseSchema = z.object({
5616
+ videos: z.array(z.object({
5617
+ id: z.string(),
5618
+ series_id: z.string().nullish(),
5619
+ season_id: z.string().nullish(),
5620
+ episode_number: z.number().nullish(),
5621
+ content_type: z.string(),
5622
+ title: z.string(),
5623
+ description: z.string().nullish(),
5624
+ media_blob_id: z.string(),
5625
+ poster_blob_id: z.string().nullish(),
5626
+ duration_seconds: z.number().nullish(),
5627
+ release_date: z.string().nullish(),
5628
+ created_at: z.number(),
5629
+ updated_at: z.number(),
5630
+ deleted_at: z.number().nullish(),
5631
+ created_by: z.string().nullish(),
5632
+ updated_by: z.string().nullish(),
5633
+ deleted_by: z.string().nullish(),
5634
+ images: z.array(z.object({
5635
+ blob_id: z.string(),
5636
+ is_primary: z.number(),
5637
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5638
+ })).nullish(),
5639
+ play_count: z.number().nullish()
5640
+ })),
5641
+ count: z.number()
5642
+ });
5643
+ export type RecentlyAddedVideosResponse = z.infer<typeof RecentlyAddedVideosResponseSchema>;
5644
+
5097
5645
  export const RecordPlayRequestSchema = z.object({
5098
5646
  media_blob_id: z.string(),
5099
5647
  song_id: z.string(),
@@ -5102,6 +5650,14 @@ export const RecordPlayRequestSchema = z.object({
5102
5650
  });
5103
5651
  export type RecordPlayRequest = z.infer<typeof RecordPlayRequestSchema>;
5104
5652
 
5653
+ export const RecordVideoPlayRequestSchema = z.object({
5654
+ media_blob_id: z.string(),
5655
+ video_id: z.string(),
5656
+ session_id: z.string().nullish(),
5657
+ event_data: z.any().nullish()
5658
+ });
5659
+ export type RecordVideoPlayRequest = z.infer<typeof RecordVideoPlayRequestSchema>;
5660
+
5105
5661
  export const RedeemInviteRequestSchema = z.object({
5106
5662
  invite_code: z.string(),
5107
5663
  username: z.string().nullish(),
@@ -5234,6 +5790,44 @@ export const RemoveAlbumsTagsRequestSchema = z.object({
5234
5790
  });
5235
5791
  export type RemoveAlbumsTagsRequest = z.infer<typeof RemoveAlbumsTagsRequestSchema>;
5236
5792
 
5793
+ export const RemoveEntitiesTagsRequestSchema = z.object({
5794
+ entity_type: z.string(),
5795
+ entity_ids: z.array(z.string()),
5796
+ tag_ids: z.array(z.string())
5797
+ });
5798
+ export type RemoveEntitiesTagsRequest = z.infer<typeof RemoveEntitiesTagsRequestSchema>;
5799
+
5800
+ export const RemoveEntityTaxonRequestSchema = z.object({
5801
+ entity_type: z.string(),
5802
+ entity_id: z.string(),
5803
+ taxon_id: z.string(),
5804
+ origin: z.string()
5805
+ });
5806
+ export type RemoveEntityTaxonRequest = z.infer<typeof RemoveEntityTaxonRequestSchema>;
5807
+
5808
+ export const RemoveEntityUrlRequestSchema = z.object({
5809
+ entity_type: z.string(),
5810
+ entity_id: z.string(),
5811
+ id: z.string()
5812
+ });
5813
+ export type RemoveEntityUrlRequest = z.infer<typeof RemoveEntityUrlRequestSchema>;
5814
+
5815
+ export const RemovePlaylistItemRequestSchema = z.object({
5816
+ playlist_id: z.string(),
5817
+ entity_type: z.string(),
5818
+ entity_id: z.string()
5819
+ });
5820
+ export type RemovePlaylistItemRequest = z.infer<typeof RemovePlaylistItemRequestSchema>;
5821
+
5822
+ export const RemovePlaylistItemsRequestSchema = z.object({
5823
+ playlist_id: z.string(),
5824
+ items: z.array(z.object({
5825
+ entity_type: z.string(),
5826
+ entity_id: z.string()
5827
+ }))
5828
+ });
5829
+ export type RemovePlaylistItemsRequest = z.infer<typeof RemovePlaylistItemsRequestSchema>;
5830
+
5237
5831
  export const RemovePlaylistThumbnailRequestSchema = z.object({
5238
5832
  playlist_id: z.string(),
5239
5833
  cleanup_blob: z.boolean().nullish(),
@@ -5243,7 +5837,7 @@ export type RemovePlaylistThumbnailRequest = z.infer<typeof RemovePlaylistThumbn
5243
5837
 
5244
5838
  export const RemoveRatingRequestSchema = z.object({
5245
5839
  user_id: z.string().nullish(),
5246
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album")]),
5840
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("video")]),
5247
5841
  target_id: z.string()
5248
5842
  });
5249
5843
  export type RemoveRatingRequest = z.infer<typeof RemoveRatingRequestSchema>;
@@ -5266,6 +5860,15 @@ export const RemoveTaxonParentRequestSchema = z.object({
5266
5860
  });
5267
5861
  export type RemoveTaxonParentRequest = z.infer<typeof RemoveTaxonParentRequestSchema>;
5268
5862
 
5863
+ export const ReorderPlaylistItemsRequestSchema = z.object({
5864
+ playlist_id: z.string(),
5865
+ ordered_entity_refs: z.array(z.object({
5866
+ entity_type: z.string(),
5867
+ entity_id: z.string()
5868
+ }))
5869
+ });
5870
+ export type ReorderPlaylistItemsRequest = z.infer<typeof ReorderPlaylistItemsRequestSchema>;
5871
+
5269
5872
  export const ReorderPlaylistSongsRequestSchema = z.object({
5270
5873
  playlist_id: z.string(),
5271
5874
  song_ids: z.array(z.string()),
@@ -5329,7 +5932,7 @@ export const ScalarAttributeSchema = z.object({
5329
5932
  });
5330
5933
  export type ScalarAttribute = z.infer<typeof ScalarAttributeSchema>;
5331
5934
 
5332
- export const SearchFieldSchema = z.union([z.literal("all"), z.literal("artists"), z.literal("albums"), z.literal("songs"), z.literal("genres"), z.literal("playlists")]);
5935
+ 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
5936
  export type SearchField = z.infer<typeof SearchFieldSchema>;
5334
5937
 
5335
5938
  export const SearchRecordingsRequestSchema = z.object({
@@ -5351,7 +5954,7 @@ export type SearchReleasesRequest = z.infer<typeof SearchReleasesRequestSchema>;
5351
5954
 
5352
5955
  export const SearchRequestSchema = z.object({
5353
5956
  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(),
5957
+ 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
5958
  page: z.number().nullish(),
5356
5959
  page_size: z.number().nullish(),
5357
5960
  context: z.object({
@@ -5424,6 +6027,30 @@ export const SearchResponseSchema = z.object({
5424
6027
  thumbnail_url: z.string().nullish(),
5425
6028
  search_rank: z.number(),
5426
6029
  highlight: z.string().nullish()
6030
+ })).nullish(),
6031
+ videos: z.array(z.object({
6032
+ id: z.string(),
6033
+ title: z.string(),
6034
+ series_id: z.string().nullish(),
6035
+ series_name: z.string().nullish(),
6036
+ episode_number: z.number().nullish(),
6037
+ duration_seconds: z.number().nullish(),
6038
+ thumbnail_url: z.string().nullish(),
6039
+ user_rating: z.number().nullish(),
6040
+ is_favorite: z.boolean(),
6041
+ search_rank: z.number(),
6042
+ match_type: z.string(),
6043
+ highlight: z.string().nullish()
6044
+ })).nullish(),
6045
+ video_series: z.array(z.object({
6046
+ id: z.string(),
6047
+ title: z.string(),
6048
+ description: z.string().nullish(),
6049
+ video_count: z.number(),
6050
+ thumbnail_url: z.string().nullish(),
6051
+ search_rank: z.number(),
6052
+ match_type: z.string(),
6053
+ highlight: z.string().nullish()
5427
6054
  })).nullish(),
5428
6055
  total_count: z.number(),
5429
6056
  page: z.number(),
@@ -5437,54 +6064,202 @@ export const SearchResponseSchema = z.object({
5437
6064
  });
5438
6065
  export type SearchResponse = z.infer<typeof SearchResponseSchema>;
5439
6066
 
6067
+ export const SeasonWithVideosSchema = z.object({
6068
+ season: z.object({
6069
+ id: z.string(),
6070
+ series_id: z.string(),
6071
+ season_number: z.number(),
6072
+ title: z.string().nullish(),
6073
+ description: z.string().nullish(),
6074
+ poster_blob_id: z.string().nullish(),
6075
+ created_at: z.number(),
6076
+ updated_at: z.number(),
6077
+ deleted_at: z.number().nullish()
6078
+ }),
6079
+ videos: z.array(z.object({
6080
+ id: z.string(),
6081
+ series_id: z.string().nullish(),
6082
+ season_id: z.string().nullish(),
6083
+ episode_number: z.number().nullish(),
6084
+ content_type: z.string(),
6085
+ title: z.string(),
6086
+ description: z.string().nullish(),
6087
+ media_blob_id: z.string(),
6088
+ poster_blob_id: z.string().nullish(),
6089
+ duration_seconds: z.number().nullish(),
6090
+ release_date: z.string().nullish(),
6091
+ created_at: z.number(),
6092
+ updated_at: z.number(),
6093
+ deleted_at: z.number().nullish(),
6094
+ created_by: z.string().nullish(),
6095
+ updated_by: z.string().nullish(),
6096
+ deleted_by: z.string().nullish(),
6097
+ images: z.array(z.object({
6098
+ blob_id: z.string(),
6099
+ is_primary: z.number(),
6100
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6101
+ })).nullish(),
6102
+ play_count: z.number().nullish()
6103
+ }))
6104
+ });
6105
+ export type SeasonWithVideos = z.infer<typeof SeasonWithVideosSchema>;
6106
+
5440
6107
  export const SelfAccountLinkResponseSchema = z.object({
5441
6108
  code: z.string(),
5442
6109
  expires_at: z.number()
5443
6110
  });
5444
6111
  export type SelfAccountLinkResponse = z.infer<typeof SelfAccountLinkResponseSchema>;
5445
6112
 
5446
- export const ServerInfoResponseSchema = z.object({
5447
- name: z.string(),
6113
+ export const SeriesDetailSchema = z.object({
6114
+ series: z.object({
6115
+ id: z.string(),
6116
+ title: z.string(),
5448
6117
  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(),
6118
+ poster_blob_id: z.string().nullish(),
6119
+ created_at: z.number(),
6120
+ updated_at: z.number(),
6121
+ deleted_at: z.number().nullish(),
6122
+ created_by: z.string().nullish(),
6123
+ updated_by: z.string().nullish(),
6124
+ deleted_by: z.string().nullish()
6125
+ }),
6126
+ seasons: z.array(z.object({
6127
+ season: z.object({
6128
+ id: z.string(),
6129
+ series_id: z.string(),
6130
+ season_number: z.number(),
6131
+ title: z.string().nullish(),
6132
+ description: z.string().nullish(),
6133
+ poster_blob_id: z.string().nullish(),
6134
+ created_at: z.number(),
6135
+ updated_at: z.number(),
6136
+ deleted_at: z.number().nullish()
6137
+ }),
6138
+ videos: z.array(z.object({
6139
+ id: z.string(),
6140
+ series_id: z.string().nullish(),
6141
+ season_id: z.string().nullish(),
6142
+ episode_number: z.number().nullish(),
6143
+ content_type: z.string(),
5463
6144
  title: z.string(),
5464
- artist: z.string().nullish(),
5465
- album: z.string().nullish(),
6145
+ description: z.string().nullish(),
6146
+ media_blob_id: z.string(),
6147
+ poster_blob_id: z.string().nullish(),
6148
+ duration_seconds: z.number().nullish(),
6149
+ release_date: z.string().nullish(),
6150
+ created_at: z.number(),
6151
+ updated_at: z.number(),
6152
+ deleted_at: z.number().nullish(),
6153
+ created_by: z.string().nullish(),
6154
+ updated_by: z.string().nullish(),
6155
+ deleted_by: z.string().nullish(),
5466
6156
  images: z.array(z.object({
5467
6157
  blob_id: z.string(),
5468
6158
  is_primary: z.number(),
5469
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6159
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5470
6160
  })).nullish(),
5471
- played_at: z.number()
5472
- });
5473
- export type SessionSong = z.infer<typeof SessionSongSchema>;
5474
-
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(),
5481
- title: z.string(),
5482
- artist: z.string().nullish(),
6161
+ play_count: z.number().nullish()
6162
+ }))
6163
+ })),
6164
+ unassigned_videos: z.array(z.object({
6165
+ id: z.string(),
6166
+ series_id: z.string().nullish(),
6167
+ season_id: z.string().nullish(),
6168
+ episode_number: z.number().nullish(),
6169
+ content_type: z.string(),
6170
+ title: z.string(),
6171
+ description: z.string().nullish(),
6172
+ media_blob_id: z.string(),
6173
+ poster_blob_id: z.string().nullish(),
6174
+ duration_seconds: z.number().nullish(),
6175
+ release_date: z.string().nullish(),
6176
+ created_at: z.number(),
6177
+ updated_at: z.number(),
6178
+ deleted_at: z.number().nullish(),
6179
+ created_by: z.string().nullish(),
6180
+ updated_by: z.string().nullish(),
6181
+ deleted_by: z.string().nullish(),
6182
+ images: z.array(z.object({
6183
+ blob_id: z.string(),
6184
+ is_primary: z.number(),
6185
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6186
+ })).nullish(),
6187
+ play_count: z.number().nullish()
6188
+ }))
6189
+ });
6190
+ export type SeriesDetail = z.infer<typeof SeriesDetailSchema>;
6191
+
6192
+ export const SeriesQueryResultSchema = z.object({
6193
+ items: z.array(z.object({
6194
+ id: z.string(),
6195
+ title: z.string(),
6196
+ description: z.string().nullish(),
6197
+ poster_blob_id: z.string().nullish(),
6198
+ created_at: z.number(),
6199
+ updated_at: z.number(),
6200
+ deleted_at: z.number().nullish(),
6201
+ created_by: z.string().nullish(),
6202
+ updated_by: z.string().nullish(),
6203
+ deleted_by: z.string().nullish()
6204
+ })),
6205
+ total_count: z.number(),
6206
+ has_more: z.boolean(),
6207
+ offset: z.number(),
6208
+ limit: z.number(),
6209
+ query_time_ms: z.number().nullish()
6210
+ });
6211
+ export type SeriesQueryResult = z.infer<typeof SeriesQueryResultSchema>;
6212
+
6213
+ export const ServerInfoResponseSchema = z.object({
6214
+ name: z.string(),
6215
+ description: z.string().nullish(),
6216
+ version: z.string(),
6217
+ image_url: z.string().nullish(),
6218
+ image_blob_id: z.string().nullish(),
6219
+ knocking_enabled: z.boolean().nullish(),
6220
+ musicbrainz_enabled: z.boolean().nullish(),
6221
+ lastfm_enabled: z.boolean().nullish(),
6222
+ audiodb_enabled: z.boolean().nullish(),
6223
+ passkey_p2p_enabled: z.boolean().nullish(),
6224
+ fetch_precheck_enabled: z.boolean().nullish(),
6225
+ fetch_video_enabled: z.boolean().nullish(),
6226
+ player_device: z.boolean().nullish()
6227
+ });
6228
+ export type ServerInfoResponse = z.infer<typeof ServerInfoResponseSchema>;
6229
+
6230
+ export const SessionItemSchema = z.object({
6231
+ entity_type: z.string(),
6232
+ entity_id: z.string()
6233
+ });
6234
+ export type SessionItem = z.infer<typeof SessionItemSchema>;
6235
+
6236
+ export const SessionSongSchema = z.object({
6237
+ song_id: z.string(),
6238
+ title: z.string(),
6239
+ artist: z.string().nullish(),
6240
+ album: z.string().nullish(),
6241
+ images: z.array(z.object({
6242
+ blob_id: z.string(),
6243
+ is_primary: z.number(),
6244
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6245
+ })).nullish(),
6246
+ played_at: z.number()
6247
+ });
6248
+ export type SessionSong = z.infer<typeof SessionSongSchema>;
6249
+
6250
+ export const SessionSummarySchema = z.object({
6251
+ session_id: z.string(),
6252
+ user_id: z.string().nullish(),
6253
+ username: z.string().nullish(),
6254
+ songs: z.array(z.object({
6255
+ song_id: z.string(),
6256
+ title: z.string(),
6257
+ artist: z.string().nullish(),
5483
6258
  album: z.string().nullish(),
5484
6259
  images: z.array(z.object({
5485
6260
  blob_id: z.string(),
5486
6261
  is_primary: z.number(),
5487
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6262
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5488
6263
  })).nullish(),
5489
6264
  played_at: z.number()
5490
6265
  })),
@@ -5507,7 +6282,7 @@ export type SetAlbumTaxonsRequest = z.infer<typeof SetAlbumTaxonsRequestSchema>;
5507
6282
 
5508
6283
  export const SetFavoriteRequestSchema = z.object({
5509
6284
  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")]),
6285
+ 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
6286
  target_id: z.string(),
5512
6287
  is_favorite: z.boolean()
5513
6288
  });
@@ -5534,7 +6309,7 @@ export type SetPrimaryImageRequest = z.infer<typeof SetPrimaryImageRequestSchema
5534
6309
 
5535
6310
  export const SetRatingRequestSchema = z.object({
5536
6311
  user_id: z.string().nullish(),
5537
- target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album")]),
6312
+ target_type: z.union([z.literal("song"), z.literal("artist"), z.literal("album"), z.literal("video")]),
5538
6313
  target_id: z.string(),
5539
6314
  rating: z.number()
5540
6315
  });
@@ -5595,7 +6370,7 @@ export const SongSchema = z.object({
5595
6370
  images: z.array(z.object({
5596
6371
  blob_id: z.string(),
5597
6372
  is_primary: z.number(),
5598
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6373
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5599
6374
  })).nullish(),
5600
6375
  urls: z.array(z.object({
5601
6376
  id: z.string().nullish(),
@@ -5634,7 +6409,7 @@ export const SongQueryResultSchema = z.object({
5634
6409
  images: z.array(z.object({
5635
6410
  blob_id: z.string(),
5636
6411
  is_primary: z.number(),
5637
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6412
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5638
6413
  })).nullish(),
5639
6414
  urls: z.array(z.object({
5640
6415
  id: z.string().nullish(),
@@ -5666,7 +6441,7 @@ export const SongQueryResultSchema = z.object({
5666
6441
  images: z.array(z.object({
5667
6442
  blob_id: z.string(),
5668
6443
  is_primary: z.number(),
5669
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6444
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5670
6445
  })).nullish(),
5671
6446
  urls: z.array(z.object({
5672
6447
  id: z.string().nullish(),
@@ -5698,7 +6473,7 @@ export const SongQueryResultSchema = z.object({
5698
6473
  images: z.array(z.object({
5699
6474
  blob_id: z.string(),
5700
6475
  is_primary: z.number(),
5701
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6476
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5702
6477
  })).nullish(),
5703
6478
  urls: z.array(z.object({
5704
6479
  id: z.string().nullish(),
@@ -5733,7 +6508,7 @@ export const SongQueryResultSchema = z.object({
5733
6508
  source_client_id: z.string().nullish(),
5734
6509
  filename: z.string().nullish(),
5735
6510
  parent_blob_id: z.string().nullish(),
5736
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
6511
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
5737
6512
  metadata: z.any(),
5738
6513
  created_at: z.number(),
5739
6514
  updated_at: z.number(),
@@ -5748,7 +6523,7 @@ export const SongQueryResultSchema = z.object({
5748
6523
  images: z.array(z.object({
5749
6524
  blob_id: z.string(),
5750
6525
  is_primary: z.number(),
5751
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6526
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5752
6527
  })).nullish(),
5753
6528
  relevance_score: z.number().nullish(),
5754
6529
  snippet: z.string().nullish(),
@@ -5804,7 +6579,7 @@ export const SongsQueryResultSchema = z.object({
5804
6579
  images: z.array(z.object({
5805
6580
  blob_id: z.string(),
5806
6581
  is_primary: z.number(),
5807
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6582
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5808
6583
  })).nullish(),
5809
6584
  urls: z.array(z.object({
5810
6585
  id: z.string().nullish(),
@@ -5836,7 +6611,7 @@ export const SongsQueryResultSchema = z.object({
5836
6611
  images: z.array(z.object({
5837
6612
  blob_id: z.string(),
5838
6613
  is_primary: z.number(),
5839
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6614
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5840
6615
  })).nullish(),
5841
6616
  urls: z.array(z.object({
5842
6617
  id: z.string().nullish(),
@@ -5868,7 +6643,7 @@ export const SongsQueryResultSchema = z.object({
5868
6643
  images: z.array(z.object({
5869
6644
  blob_id: z.string(),
5870
6645
  is_primary: z.number(),
5871
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6646
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5872
6647
  })).nullish(),
5873
6648
  urls: z.array(z.object({
5874
6649
  id: z.string().nullish(),
@@ -5903,7 +6678,7 @@ export const SongsQueryResultSchema = z.object({
5903
6678
  source_client_id: z.string().nullish(),
5904
6679
  filename: z.string().nullish(),
5905
6680
  parent_blob_id: z.string().nullish(),
5906
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")]),
6681
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")]),
5907
6682
  metadata: z.any(),
5908
6683
  created_at: z.number(),
5909
6684
  updated_at: z.number(),
@@ -5918,7 +6693,7 @@ export const SongsQueryResultSchema = z.object({
5918
6693
  images: z.array(z.object({
5919
6694
  blob_id: z.string(),
5920
6695
  is_primary: z.number(),
5921
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
6696
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
5922
6697
  })).nullish(),
5923
6698
  relevance_score: z.number().nullish(),
5924
6699
  snippet: z.string().nullish(),
@@ -5963,7 +6738,7 @@ export const SuggestionSchema = z.object({
5963
6738
  display: z.string(),
5964
6739
  highlight: z.string(),
5965
6740
  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")]),
6741
+ 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
6742
  confidence: z.number(),
5968
6743
  metadata: z.any().nullish(),
5969
6744
  entity_id: z.string(),
@@ -5973,11 +6748,11 @@ export const SuggestionSchema = z.object({
5973
6748
  });
5974
6749
  export type Suggestion = z.infer<typeof SuggestionSchema>;
5975
6750
 
5976
- export const SuggestionTypeSchema = z.union([z.literal("artist"), z.literal("album"), z.literal("song"), z.literal("taxon"), z.literal("genre"), z.literal("playlist")]);
6751
+ 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
6752
  export type SuggestionType = z.infer<typeof SuggestionTypeSchema>;
5978
6753
 
5979
6754
  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")]),
6755
+ 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
6756
  partial: z.string(),
5982
6757
  page: z.number().nullish(),
5983
6758
  page_size: z.number().nullish(),
@@ -5999,7 +6774,7 @@ export const SuggestionsResponseSchema = z.object({
5999
6774
  display: z.string(),
6000
6775
  highlight: z.string(),
6001
6776
  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")]),
6777
+ 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
6778
  confidence: z.number(),
6004
6779
  metadata: z.any().nullish(),
6005
6780
  entity_id: z.string(),
@@ -6138,6 +6913,61 @@ export const SyncSongByBlake3ResponseSchema = z.object({
6138
6913
  });
6139
6914
  export type SyncSongByBlake3Response = z.infer<typeof SyncSongByBlake3ResponseSchema>;
6140
6915
 
6916
+ export const SyncVideoByBlake3RequestSchema = z.object({
6917
+ blake3: z.string(),
6918
+ sha256: z.string().nullish(),
6919
+ size: z.number().nullish(),
6920
+ filename: z.string(),
6921
+ source_node_id: z.string(),
6922
+ source_remote_id: z.string().nullish(),
6923
+ remote_name: z.string().nullish(),
6924
+ title: z.string(),
6925
+ description: z.string().nullish(),
6926
+ content_type: z.string().nullish(),
6927
+ episode_number: z.number().nullish(),
6928
+ duration_seconds: z.number().nullish(),
6929
+ release_date: z.string().nullish(),
6930
+ series_title: z.string().nullish(),
6931
+ series_description: z.string().nullish(),
6932
+ season_number: z.number().nullish(),
6933
+ season_title: z.string().nullish(),
6934
+ video_images: z.array(z.object({
6935
+ content_sha256: z.string(),
6936
+ data_base64: z.string().nullish(),
6937
+ mime_type: z.string(),
6938
+ is_primary: z.boolean(),
6939
+ blob_type: z.string().nullish()
6940
+ })),
6941
+ series_images: z.array(z.object({
6942
+ content_sha256: z.string(),
6943
+ data_base64: z.string().nullish(),
6944
+ mime_type: z.string(),
6945
+ is_primary: z.boolean(),
6946
+ blob_type: z.string().nullish()
6947
+ })),
6948
+ season_images: z.array(z.object({
6949
+ content_sha256: z.string(),
6950
+ data_base64: z.string().nullish(),
6951
+ mime_type: z.string(),
6952
+ is_primary: z.boolean(),
6953
+ blob_type: z.string().nullish()
6954
+ }))
6955
+ });
6956
+ export type SyncVideoByBlake3Request = z.infer<typeof SyncVideoByBlake3RequestSchema>;
6957
+
6958
+ export const SyncVideoByBlake3ResponseSchema = z.object({
6959
+ video_id: z.string(),
6960
+ media_blob_id: z.string(),
6961
+ file_path: z.string(),
6962
+ blake3: z.string(),
6963
+ series_id: z.string().nullish(),
6964
+ season_id: z.string().nullish(),
6965
+ existing: z.boolean(),
6966
+ images_linked: z.number(),
6967
+ missing_image_sha256s: z.array(z.string())
6968
+ });
6969
+ export type SyncVideoByBlake3Response = z.infer<typeof SyncVideoByBlake3ResponseSchema>;
6970
+
6141
6971
  export const TagSchema = z.object({
6142
6972
  id: z.string(),
6143
6973
  name: z.string(),
@@ -6170,7 +7000,9 @@ export const TaxonKindSchema = z.object({
6170
7000
  display_order: z.number(),
6171
7001
  is_user_defined: z.boolean(),
6172
7002
  created_at: z.number(),
6173
- album_count: z.number()
7003
+ album_count: z.number(),
7004
+ video_count: z.number(),
7005
+ domain: z.string()
6174
7006
  });
6175
7007
  export type TaxonKind = z.infer<typeof TaxonKindSchema>;
6176
7008
 
@@ -6205,7 +7037,8 @@ export const TaxonWithStatsSchema = z.object({
6205
7037
  created_at: z.number(),
6206
7038
  album_count: z.number(),
6207
7039
  song_count: z.number(),
6208
- total_duration: z.number()
7040
+ total_duration: z.number(),
7041
+ video_count: z.number()
6209
7042
  });
6210
7043
  export type TaxonWithStats = z.infer<typeof TaxonWithStatsSchema>;
6211
7044
 
@@ -6219,7 +7052,8 @@ export const TaxonsQueryResultSchema = z.object({
6219
7052
  created_at: z.number(),
6220
7053
  album_count: z.number(),
6221
7054
  song_count: z.number(),
6222
- total_duration: z.number()
7055
+ total_duration: z.number(),
7056
+ video_count: z.number()
6223
7057
  })),
6224
7058
  total_count: z.number(),
6225
7059
  has_more: z.boolean(),
@@ -6235,7 +7069,7 @@ export const TopAlbumSchema = z.object({
6235
7069
  images: z.array(z.object({
6236
7070
  blob_id: z.string(),
6237
7071
  is_primary: z.number(),
6238
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7072
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6239
7073
  })).nullish(),
6240
7074
  total_plays: z.number(),
6241
7075
  song_count: z.number(),
@@ -6273,7 +7107,7 @@ export const TopSongSchema = z.object({
6273
7107
  images: z.array(z.object({
6274
7108
  blob_id: z.string(),
6275
7109
  is_primary: z.number(),
6276
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7110
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6277
7111
  })).nullish(),
6278
7112
  play_count: z.number(),
6279
7113
  unique_users: z.number(),
@@ -6314,7 +7148,7 @@ export const UnassignedAlbumsResponseSchema = z.object({
6314
7148
  images: z.array(z.object({
6315
7149
  blob_id: z.string(),
6316
7150
  is_primary: z.number(),
6317
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7151
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6318
7152
  })).nullish(),
6319
7153
  urls: z.array(z.object({
6320
7154
  id: z.string().nullish(),
@@ -6343,7 +7177,7 @@ export const UnassignedAlbumsResponseSchema = z.object({
6343
7177
  images: z.array(z.object({
6344
7178
  blob_id: z.string(),
6345
7179
  is_primary: z.number(),
6346
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7180
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6347
7181
  })).nullish(),
6348
7182
  urls: z.array(z.object({
6349
7183
  id: z.string().nullish(),
@@ -6365,7 +7199,7 @@ export const UnassignedAlbumsResponseSchema = z.object({
6365
7199
  images: z.array(z.object({
6366
7200
  blob_id: z.string(),
6367
7201
  is_primary: z.number(),
6368
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7202
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6369
7203
  })).nullish(),
6370
7204
  album_tags: z.array(z.string()).nullish(),
6371
7205
  is_favorite: z.boolean().nullish(),
@@ -6377,6 +7211,42 @@ export const UnassignedAlbumsResponseSchema = z.object({
6377
7211
  });
6378
7212
  export type UnassignedAlbumsResponse = z.infer<typeof UnassignedAlbumsResponseSchema>;
6379
7213
 
7214
+ export const UnassignedVideosRequestSchema = z.object({
7215
+ limit: z.number().nullish(),
7216
+ offset: z.number().nullish()
7217
+ });
7218
+ export type UnassignedVideosRequest = z.infer<typeof UnassignedVideosRequestSchema>;
7219
+
7220
+ export const UnassignedVideosResponseSchema = z.object({
7221
+ videos: z.array(z.object({
7222
+ id: z.string(),
7223
+ series_id: z.string().nullish(),
7224
+ season_id: z.string().nullish(),
7225
+ episode_number: z.number().nullish(),
7226
+ content_type: z.string(),
7227
+ title: z.string(),
7228
+ description: z.string().nullish(),
7229
+ media_blob_id: z.string(),
7230
+ poster_blob_id: z.string().nullish(),
7231
+ duration_seconds: z.number().nullish(),
7232
+ release_date: z.string().nullish(),
7233
+ created_at: z.number(),
7234
+ updated_at: z.number(),
7235
+ deleted_at: z.number().nullish(),
7236
+ created_by: z.string().nullish(),
7237
+ updated_by: z.string().nullish(),
7238
+ deleted_by: z.string().nullish(),
7239
+ images: z.array(z.object({
7240
+ blob_id: z.string(),
7241
+ is_primary: z.number(),
7242
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7243
+ })).nullish(),
7244
+ play_count: z.number().nullish()
7245
+ })),
7246
+ count: z.number()
7247
+ });
7248
+ export type UnassignedVideosResponse = z.infer<typeof UnassignedVideosResponseSchema>;
7249
+
6380
7250
  export const UpdateAlbumRequestSchema = z.object({
6381
7251
  album_id: z.string(),
6382
7252
  title: z.string().nullish(),
@@ -6497,32 +7367,35 @@ export const UpdateArtistRequestSchema = z.object({
6497
7367
  });
6498
7368
  export type UpdateArtistRequest = z.infer<typeof UpdateArtistRequestSchema>;
6499
7369
 
6500
- export const UpdateListenSessionProgressRequestSchema = z.object({
6501
- id: z.string(),
6502
- progress: z.number()
7370
+ export const UpdatePasskeyNameRequestSchema = z.object({
7371
+ credential_id: z.string(),
7372
+ name: z.string().nullish()
6503
7373
  });
6504
- export type UpdateListenSessionProgressRequest = z.infer<typeof UpdateListenSessionProgressRequestSchema>;
7374
+ export type UpdatePasskeyNameRequest = z.infer<typeof UpdatePasskeyNameRequestSchema>;
6505
7375
 
6506
- export const UpdateListenSessionSongsRequestSchema = z.object({
7376
+ export const UpdatePlaybackSessionItemsRequestSchema = z.object({
6507
7377
  id: z.string(),
6508
- song_ids: z.array(z.string()),
7378
+ items: z.array(z.object({
7379
+ entity_type: z.string(),
7380
+ entity_id: z.string()
7381
+ })),
6509
7382
  label: z.string(),
6510
- total_songs: z.number(),
7383
+ total_items: z.number(),
6511
7384
  total_duration_ms: z.number()
6512
7385
  });
6513
- export type UpdateListenSessionSongsRequest = z.infer<typeof UpdateListenSessionSongsRequestSchema>;
7386
+ export type UpdatePlaybackSessionItemsRequest = z.infer<typeof UpdatePlaybackSessionItemsRequestSchema>;
6514
7387
 
6515
- export const UpdateListenSessionStatusRequestSchema = z.object({
7388
+ export const UpdatePlaybackSessionProgressRequestSchema = z.object({
6516
7389
  id: z.string(),
6517
- status: z.string()
7390
+ progress: z.number()
6518
7391
  });
6519
- export type UpdateListenSessionStatusRequest = z.infer<typeof UpdateListenSessionStatusRequestSchema>;
7392
+ export type UpdatePlaybackSessionProgressRequest = z.infer<typeof UpdatePlaybackSessionProgressRequestSchema>;
6520
7393
 
6521
- export const UpdatePasskeyNameRequestSchema = z.object({
6522
- credential_id: z.string(),
6523
- name: z.string().nullish()
7394
+ export const UpdatePlaybackSessionStatusRequestSchema = z.object({
7395
+ id: z.string(),
7396
+ status: z.string()
6524
7397
  });
6525
- export type UpdatePasskeyNameRequest = z.infer<typeof UpdatePasskeyNameRequestSchema>;
7398
+ export type UpdatePlaybackSessionStatusRequest = z.infer<typeof UpdatePlaybackSessionStatusRequestSchema>;
6526
7399
 
6527
7400
  export const UpdatePlaylistRequestSchema = z.object({
6528
7401
  playlist_id: z.string(),
@@ -6608,7 +7481,7 @@ export const UpdateSongsResultSchema = z.object({
6608
7481
  images: z.array(z.object({
6609
7482
  blob_id: z.string(),
6610
7483
  is_primary: z.number(),
6611
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7484
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6612
7485
  })).nullish(),
6613
7486
  urls: z.array(z.object({
6614
7487
  id: z.string().nullish(),
@@ -6640,7 +7513,7 @@ export const UpdateSongsResultSchema = z.object({
6640
7513
  images: z.array(z.object({
6641
7514
  blob_id: z.string(),
6642
7515
  is_primary: z.number(),
6643
- blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview")])
7516
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
6644
7517
  })).nullish(),
6645
7518
  urls: z.array(z.object({
6646
7519
  id: z.string().nullish(),
@@ -6689,6 +7562,67 @@ export const UpdateUsernameRequestSchema = z.object({
6689
7562
  });
6690
7563
  export type UpdateUsernameRequest = z.infer<typeof UpdateUsernameRequestSchema>;
6691
7564
 
7565
+ export const UpdateVideoRequestSchema = z.object({
7566
+ video_id: z.string(),
7567
+ series_id: z.string().nullish(),
7568
+ season_id: z.string().nullish(),
7569
+ episode_number: z.number().nullish(),
7570
+ content_type: z.string().nullish(),
7571
+ title: z.string().nullish(),
7572
+ description: z.string().nullish(),
7573
+ poster_blob_id: z.string().nullish(),
7574
+ duration_seconds: z.number().nullish(),
7575
+ release_date: z.string().nullish(),
7576
+ updated_by: z.string().nullish(),
7577
+ clear_series_id: z.boolean(),
7578
+ clear_season_id: z.boolean()
7579
+ });
7580
+ export type UpdateVideoRequest = z.infer<typeof UpdateVideoRequestSchema>;
7581
+
7582
+ export const UpdateVideoSeasonRequestSchema = z.object({
7583
+ season_id: z.string(),
7584
+ season_number: z.number().nullish(),
7585
+ title: z.string().nullish(),
7586
+ description: z.string().nullish(),
7587
+ poster_blob_id: z.string().nullish()
7588
+ });
7589
+ export type UpdateVideoSeasonRequest = z.infer<typeof UpdateVideoSeasonRequestSchema>;
7590
+
7591
+ export const UpdateVideoSeriesRequestSchema = z.object({
7592
+ series_id: z.string(),
7593
+ title: z.string().nullish(),
7594
+ description: z.string().nullish(),
7595
+ poster_blob_id: z.string().nullish(),
7596
+ updated_by: z.string().nullish()
7597
+ });
7598
+ export type UpdateVideoSeriesRequest = z.infer<typeof UpdateVideoSeriesRequestSchema>;
7599
+
7600
+ export const UpdateVideosRequestSchema = z.object({
7601
+ video_ids: z.array(z.string()),
7602
+ series_id: z.string().nullish(),
7603
+ season_id: z.string().nullish(),
7604
+ episode_number: z.number().nullish(),
7605
+ content_type: z.string().nullish(),
7606
+ title: z.string().nullish(),
7607
+ description: z.string().nullish(),
7608
+ poster_blob_id: z.string().nullish(),
7609
+ duration_seconds: z.number().nullish(),
7610
+ release_date: z.string().nullish(),
7611
+ updated_by: z.string().nullish(),
7612
+ clear_series_id: z.boolean(),
7613
+ clear_season_id: z.boolean()
7614
+ });
7615
+ export type UpdateVideosRequest = z.infer<typeof UpdateVideosRequestSchema>;
7616
+
7617
+ export const UpdateVideosResultSchema = z.object({
7618
+ videos_updated: z.number(),
7619
+ videos_failed: z.array(z.object({
7620
+ video_id: z.string(),
7621
+ reason: z.string()
7622
+ }))
7623
+ });
7624
+ export type UpdateVideosResult = z.infer<typeof UpdateVideosResultSchema>;
7625
+
6692
7626
  export const UploadMusicByBlake3RequestSchema = z.object({
6693
7627
  blake3: z.string(),
6694
7628
  filename: z.string(),
@@ -6706,6 +7640,31 @@ export const UploadMusicByBlake3RequestSchema = z.object({
6706
7640
  });
6707
7641
  export type UploadMusicByBlake3Request = z.infer<typeof UploadMusicByBlake3RequestSchema>;
6708
7642
 
7643
+ export const UploadVideoByBlake3RequestSchema = z.object({
7644
+ blake3: z.string(),
7645
+ filename: z.string(),
7646
+ size: z.number().nullish(),
7647
+ node_id: z.string().nullish(),
7648
+ metadata: z.object({
7649
+ series_id: z.string().nullish(),
7650
+ season_id: z.string().nullish(),
7651
+ episode_number: z.number().nullish(),
7652
+ title: z.string().nullish()
7653
+ }).nullish()
7654
+ });
7655
+ export type UploadVideoByBlake3Request = z.infer<typeof UploadVideoByBlake3RequestSchema>;
7656
+
7657
+ export const UpsertPlaybackProgressRequestSchema = z.object({
7658
+ entity_type: z.string(),
7659
+ entity_id: z.string(),
7660
+ position_fraction: z.number(),
7661
+ position_seconds: z.number().nullish(),
7662
+ duration_seconds: z.number().nullish(),
7663
+ position_locator: z.string().nullish(),
7664
+ completed_at: z.number().nullish()
7665
+ });
7666
+ export type UpsertPlaybackProgressRequest = z.infer<typeof UpsertPlaybackProgressRequestSchema>;
7667
+
6709
7668
  export const UserStatsSchema = z.object({
6710
7669
  user_id: z.string(),
6711
7670
  username: z.string(),
@@ -6718,6 +7677,258 @@ export const UserStatsSchema = z.object({
6718
7677
  });
6719
7678
  export type UserStats = z.infer<typeof UserStatsSchema>;
6720
7679
 
7680
+ export const VideoSchema = z.object({
7681
+ id: z.string(),
7682
+ series_id: z.string().nullish(),
7683
+ season_id: z.string().nullish(),
7684
+ episode_number: z.number().nullish(),
7685
+ content_type: z.string(),
7686
+ title: z.string(),
7687
+ description: z.string().nullish(),
7688
+ media_blob_id: z.string(),
7689
+ poster_blob_id: z.string().nullish(),
7690
+ duration_seconds: z.number().nullish(),
7691
+ release_date: z.string().nullish(),
7692
+ created_at: z.number(),
7693
+ updated_at: z.number(),
7694
+ deleted_at: z.number().nullish(),
7695
+ created_by: z.string().nullish(),
7696
+ updated_by: z.string().nullish(),
7697
+ deleted_by: z.string().nullish(),
7698
+ images: z.array(z.object({
7699
+ blob_id: z.string(),
7700
+ is_primary: z.number(),
7701
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7702
+ })).nullish(),
7703
+ play_count: z.number().nullish()
7704
+ });
7705
+ export type Video = z.infer<typeof VideoSchema>;
7706
+
7707
+ export const VideoImportReviewOkSchema = z.object({
7708
+ ok: z.boolean()
7709
+ });
7710
+ export type VideoImportReviewOk = z.infer<typeof VideoImportReviewOkSchema>;
7711
+
7712
+ export const VideoMetadataHintsSchema = z.object({
7713
+ series_id: z.string().nullish(),
7714
+ season_id: z.string().nullish(),
7715
+ episode_number: z.number().nullish(),
7716
+ title: z.string().nullish()
7717
+ });
7718
+ export type VideoMetadataHints = z.infer<typeof VideoMetadataHintsSchema>;
7719
+
7720
+ export const VideoPendingRequestSchema = z.object({
7721
+ video_id: z.string()
7722
+ });
7723
+ export type VideoPendingRequest = z.infer<typeof VideoPendingRequestSchema>;
7724
+
7725
+ export const VideoPendingResponseSchema = z.object({
7726
+ session_id: z.string().nullish(),
7727
+ pending_count: z.number(),
7728
+ created_at: z.number().nullish()
7729
+ });
7730
+ export type VideoPendingResponse = z.infer<typeof VideoPendingResponseSchema>;
7731
+
7732
+ export const VideoRenditionSchema = z.object({
7733
+ blob_id: z.string(),
7734
+ label: z.string(),
7735
+ extension: z.string(),
7736
+ mime: z.string().nullish(),
7737
+ skipped: z.boolean()
7738
+ });
7739
+ export type VideoRendition = z.infer<typeof VideoRenditionSchema>;
7740
+
7741
+ export const VideoReviewPatchSchema = z.object({
7742
+ video_id: z.string(),
7743
+ title: z.string().nullish(),
7744
+ episode_number: z.number().nullish(),
7745
+ season_id: z.string().nullish(),
7746
+ new_season: z.object({
7747
+ season_number: z.number(),
7748
+ title: z.string().nullish()
7749
+ }).nullish(),
7750
+ content_type: z.string().nullish()
7751
+ });
7752
+ export type VideoReviewPatch = z.infer<typeof VideoReviewPatchSchema>;
7753
+
7754
+ export const VideoSearchResultSchema = z.object({
7755
+ id: z.string(),
7756
+ title: z.string(),
7757
+ series_id: z.string().nullish(),
7758
+ series_name: z.string().nullish(),
7759
+ episode_number: z.number().nullish(),
7760
+ duration_seconds: z.number().nullish(),
7761
+ thumbnail_url: z.string().nullish(),
7762
+ user_rating: z.number().nullish(),
7763
+ is_favorite: z.boolean(),
7764
+ search_rank: z.number(),
7765
+ match_type: z.string(),
7766
+ highlight: z.string().nullish()
7767
+ });
7768
+ export type VideoSearchResult = z.infer<typeof VideoSearchResultSchema>;
7769
+
7770
+ export const VideoSeasonSchema = z.object({
7771
+ id: z.string(),
7772
+ series_id: z.string(),
7773
+ season_number: z.number(),
7774
+ title: z.string().nullish(),
7775
+ description: z.string().nullish(),
7776
+ poster_blob_id: z.string().nullish(),
7777
+ created_at: z.number(),
7778
+ updated_at: z.number(),
7779
+ deleted_at: z.number().nullish()
7780
+ });
7781
+ export type VideoSeason = z.infer<typeof VideoSeasonSchema>;
7782
+
7783
+ export const VideoSeriesSchema = z.object({
7784
+ id: z.string(),
7785
+ title: z.string(),
7786
+ description: z.string().nullish(),
7787
+ poster_blob_id: z.string().nullish(),
7788
+ created_at: z.number(),
7789
+ updated_at: z.number(),
7790
+ deleted_at: z.number().nullish(),
7791
+ created_by: z.string().nullish(),
7792
+ updated_by: z.string().nullish(),
7793
+ deleted_by: z.string().nullish()
7794
+ });
7795
+ export type VideoSeries = z.infer<typeof VideoSeriesSchema>;
7796
+
7797
+ export const VideoSeriesSearchResultSchema = z.object({
7798
+ id: z.string(),
7799
+ title: z.string(),
7800
+ description: z.string().nullish(),
7801
+ video_count: z.number(),
7802
+ thumbnail_url: z.string().nullish(),
7803
+ search_rank: z.number(),
7804
+ match_type: z.string(),
7805
+ highlight: z.string().nullish()
7806
+ });
7807
+ export type VideoSeriesSearchResult = z.infer<typeof VideoSeriesSearchResultSchema>;
7808
+
7809
+ export const VideoUploadResponseSchema = z.object({
7810
+ blob_id: z.string(),
7811
+ job_id: z.string(),
7812
+ sha256: z.string(),
7813
+ size: z.number(),
7814
+ mime: z.string(),
7815
+ existing: z.boolean(),
7816
+ message: z.string()
7817
+ });
7818
+ export type VideoUploadResponse = z.infer<typeof VideoUploadResponseSchema>;
7819
+
7820
+ export const VideoWithMetadataSchema = z.object({
7821
+ video: z.object({
7822
+ id: z.string(),
7823
+ series_id: z.string().nullish(),
7824
+ season_id: z.string().nullish(),
7825
+ episode_number: z.number().nullish(),
7826
+ content_type: z.string(),
7827
+ title: z.string(),
7828
+ description: z.string().nullish(),
7829
+ media_blob_id: z.string(),
7830
+ poster_blob_id: z.string().nullish(),
7831
+ duration_seconds: z.number().nullish(),
7832
+ release_date: z.string().nullish(),
7833
+ created_at: z.number(),
7834
+ updated_at: z.number(),
7835
+ deleted_at: z.number().nullish(),
7836
+ created_by: z.string().nullish(),
7837
+ updated_by: z.string().nullish(),
7838
+ deleted_by: z.string().nullish(),
7839
+ images: z.array(z.object({
7840
+ blob_id: z.string(),
7841
+ is_primary: z.number(),
7842
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7843
+ })).nullish(),
7844
+ play_count: z.number().nullish()
7845
+ }),
7846
+ created_by_username: z.string().nullish(),
7847
+ updated_by_username: z.string().nullish(),
7848
+ blob_size: z.number().nullish(),
7849
+ blob_width: z.number().nullish(),
7850
+ blob_height: z.number().nullish(),
7851
+ codec: z.string().nullish(),
7852
+ container: z.string().nullish(),
7853
+ bitrate: z.number().nullish(),
7854
+ frame_rate: z.number().nullish()
7855
+ });
7856
+ export type VideoWithMetadata = z.infer<typeof VideoWithMetadataSchema>;
7857
+
7858
+ export const VideosByValueRequestSchema = z.object({
7859
+ kind: z.string(),
7860
+ value_norm: z.string(),
7861
+ limit: z.number().nullish(),
7862
+ offset: z.number().nullish()
7863
+ });
7864
+ export type VideosByValueRequest = z.infer<typeof VideosByValueRequestSchema>;
7865
+
7866
+ export const VideosByValueResponseSchema = z.object({
7867
+ kind: z.string(),
7868
+ value_norm: z.string(),
7869
+ videos: z.array(z.object({
7870
+ id: z.string(),
7871
+ series_id: z.string().nullish(),
7872
+ season_id: z.string().nullish(),
7873
+ episode_number: z.number().nullish(),
7874
+ content_type: z.string(),
7875
+ title: z.string(),
7876
+ description: z.string().nullish(),
7877
+ media_blob_id: z.string(),
7878
+ poster_blob_id: z.string().nullish(),
7879
+ duration_seconds: z.number().nullish(),
7880
+ release_date: z.string().nullish(),
7881
+ created_at: z.number(),
7882
+ updated_at: z.number(),
7883
+ deleted_at: z.number().nullish(),
7884
+ created_by: z.string().nullish(),
7885
+ updated_by: z.string().nullish(),
7886
+ deleted_by: z.string().nullish(),
7887
+ images: z.array(z.object({
7888
+ blob_id: z.string(),
7889
+ is_primary: z.number(),
7890
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7891
+ })).nullish(),
7892
+ play_count: z.number().nullish()
7893
+ })),
7894
+ count: z.number()
7895
+ });
7896
+ export type VideosByValueResponse = z.infer<typeof VideosByValueResponseSchema>;
7897
+
7898
+ export const VideosQueryResultSchema = z.object({
7899
+ items: z.array(z.object({
7900
+ id: z.string(),
7901
+ series_id: z.string().nullish(),
7902
+ season_id: z.string().nullish(),
7903
+ episode_number: z.number().nullish(),
7904
+ content_type: z.string(),
7905
+ title: z.string(),
7906
+ description: z.string().nullish(),
7907
+ media_blob_id: z.string(),
7908
+ poster_blob_id: z.string().nullish(),
7909
+ duration_seconds: z.number().nullish(),
7910
+ release_date: z.string().nullish(),
7911
+ created_at: z.number(),
7912
+ updated_at: z.number(),
7913
+ deleted_at: z.number().nullish(),
7914
+ created_by: z.string().nullish(),
7915
+ updated_by: z.string().nullish(),
7916
+ deleted_by: z.string().nullish(),
7917
+ images: z.array(z.object({
7918
+ blob_id: z.string(),
7919
+ is_primary: z.number(),
7920
+ blob_type: z.union([z.literal("original"), z.literal("thumbnail"), z.literal("waveform"), z.literal("preview"), z.literal("rendition"), z.literal("subtitle")])
7921
+ })).nullish(),
7922
+ play_count: z.number().nullish()
7923
+ })),
7924
+ total_count: z.number(),
7925
+ has_more: z.boolean(),
7926
+ offset: z.number(),
7927
+ limit: z.number(),
7928
+ query_time_ms: z.number().nullish()
7929
+ });
7930
+ export type VideosQueryResult = z.infer<typeof VideosQueryResultSchema>;
7931
+
6721
7932
  export const WhoAmIResponseSchema = z.object({
6722
7933
  user_id: z.string(),
6723
7934
  username: z.string(),