@nuclearplayer/plugin-sdk 1.2.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { z } from 'zod';
2
+
1
3
  export declare type Album = {
2
4
  title: string;
3
5
  artists: ArtistCredit[];
@@ -20,7 +22,7 @@ export declare type AlbumRef = {
20
22
  source: ProviderRef;
21
23
  };
22
24
 
23
- export declare type Artist = {
25
+ export declare type ArtistBio = {
24
26
  name: string;
25
27
  disambiguation?: string;
26
28
  bio?: string;
@@ -36,7 +38,7 @@ export declare type ArtistCredit = {
36
38
  source?: ProviderRef;
37
39
  };
38
40
 
39
- export declare type ArtistMetadataCapability = 'artistDetails' | 'artistAlbums' | 'artistTopTracks' | 'artistRelatedArtists';
41
+ export declare type ArtistMetadataCapability = 'artistBio' | 'artistSocialStats' | 'artistTopTracks' | 'artistAlbums' | 'artistPlaylists' | 'artistRelatedArtists';
40
42
 
41
43
  export declare type ArtistRef = {
42
44
  name: string;
@@ -45,6 +47,18 @@ export declare type ArtistRef = {
45
47
  source: ProviderRef;
46
48
  };
47
49
 
50
+ export declare type ArtistSocialStats = {
51
+ name: string;
52
+ artwork?: ArtworkSet;
53
+ city?: string;
54
+ country?: string;
55
+ followersCount?: number;
56
+ followingsCount?: number;
57
+ trackCount?: number;
58
+ playlistCount?: number;
59
+ source: ProviderRef;
60
+ };
61
+
48
62
  export declare type Artwork = {
49
63
  url: string;
50
64
  width?: number;
@@ -59,6 +73,13 @@ export declare type ArtworkSet = {
59
73
  items: Artwork[];
60
74
  };
61
75
 
76
+ export declare type AttributedResult<T> = {
77
+ providerId: string;
78
+ metadataProviderId?: string;
79
+ providerName: string;
80
+ items: T[];
81
+ };
82
+
62
83
  export declare type BooleanSettingDefinition = {
63
84
  id: string;
64
85
  title: string;
@@ -75,6 +96,36 @@ export declare type BooleanWidget = {
75
96
  type: 'toggle';
76
97
  };
77
98
 
99
+ export declare class DashboardAPI {
100
+ #private;
101
+ constructor(host?: DashboardHost);
102
+ fetchTopTracks(providerId?: string): Promise<AttributedResult<Track>[]>;
103
+ fetchTopArtists(providerId?: string): Promise<AttributedResult<ArtistRef>[]>;
104
+ fetchTopAlbums(providerId?: string): Promise<AttributedResult<AlbumRef>[]>;
105
+ fetchEditorialPlaylists(providerId?: string): Promise<AttributedResult<PlaylistRef>[]>;
106
+ fetchNewReleases(providerId?: string): Promise<AttributedResult<AlbumRef>[]>;
107
+ }
108
+
109
+ export declare type DashboardCapability = 'topTracks' | 'topArtists' | 'topAlbums' | 'editorialPlaylists' | 'newReleases';
110
+
111
+ export declare type DashboardHost = {
112
+ fetchTopTracks: (providerId?: string) => Promise<AttributedResult<Track>[]>;
113
+ fetchTopArtists: (providerId?: string) => Promise<AttributedResult<ArtistRef>[]>;
114
+ fetchTopAlbums: (providerId?: string) => Promise<AttributedResult<AlbumRef>[]>;
115
+ fetchEditorialPlaylists: (providerId?: string) => Promise<AttributedResult<PlaylistRef>[]>;
116
+ fetchNewReleases: (providerId?: string) => Promise<AttributedResult<AlbumRef>[]>;
117
+ };
118
+
119
+ export declare type DashboardProvider = ProviderDescriptor<'dashboard'> & {
120
+ metadataProviderId?: string;
121
+ capabilities: DashboardCapability[];
122
+ fetchTopTracks?: () => Promise<Track[]>;
123
+ fetchTopArtists?: () => Promise<ArtistRef[]>;
124
+ fetchTopAlbums?: () => Promise<AlbumRef[]>;
125
+ fetchEditorialPlaylists?: () => Promise<PlaylistRef[]>;
126
+ fetchNewReleases?: () => Promise<AlbumRef[]>;
127
+ };
128
+
78
129
  export declare type EnumOption = {
79
130
  value: string;
80
131
  label: string;
@@ -207,18 +258,22 @@ declare class MetadataAPI {
207
258
  #private;
208
259
  constructor(host?: MetadataHost);
209
260
  search(params: SearchParams, providerId?: string): Promise<SearchResults>;
210
- fetchArtistDetails(artistId: string, providerId?: string): Promise<Artist>;
261
+ fetchArtistBio(artistId: string, providerId?: string): Promise<ArtistBio>;
262
+ fetchArtistSocialStats(artistId: string, providerId?: string): Promise<ArtistSocialStats>;
211
263
  fetchArtistAlbums(artistId: string, providerId?: string): Promise<AlbumRef[]>;
212
264
  fetchArtistTopTracks(artistId: string, providerId?: string): Promise<TrackRef[]>;
265
+ fetchArtistPlaylists(artistId: string, providerId?: string): Promise<PlaylistRef[]>;
213
266
  fetchArtistRelatedArtists(artistId: string, providerId?: string): Promise<ArtistRef[]>;
214
267
  fetchAlbumDetails(albumId: string, providerId?: string): Promise<Album>;
215
268
  }
216
269
 
217
270
  export declare type MetadataHost = {
218
271
  search: (params: SearchParams, providerId?: string) => Promise<SearchResults>;
219
- fetchArtistDetails: (artistId: string, providerId?: string) => Promise<Artist>;
272
+ fetchArtistBio: (artistId: string, providerId?: string) => Promise<ArtistBio>;
273
+ fetchArtistSocialStats: (artistId: string, providerId?: string) => Promise<ArtistSocialStats>;
220
274
  fetchArtistAlbums: (artistId: string, providerId?: string) => Promise<AlbumRef[]>;
221
275
  fetchArtistTopTracks: (artistId: string, providerId?: string) => Promise<TrackRef[]>;
276
+ fetchArtistPlaylists: (artistId: string, providerId?: string) => Promise<PlaylistRef[]>;
222
277
  fetchArtistRelatedArtists: (artistId: string, providerId?: string) => Promise<ArtistRef[]>;
223
278
  fetchAlbumDetails: (albumId: string, providerId?: string) => Promise<Album>;
224
279
  };
@@ -232,15 +287,17 @@ export declare type MetadataProvider = ProviderDescriptor<'metadata'> & {
232
287
  searchAlbums?: (params: Omit<SearchParams, 'types'>) => Promise<AlbumRef[]>;
233
288
  searchTracks?: (params: Omit<SearchParams, 'types'>) => Promise<Track[]>;
234
289
  searchPlaylists?: (params: Omit<SearchParams, 'types'>) => Promise<PlaylistRef[]>;
235
- fetchArtistDetails?: (query: string) => Promise<Artist>;
290
+ fetchArtistBio?: (artistId: string) => Promise<ArtistBio>;
291
+ fetchArtistSocialStats?: (artistId: string) => Promise<ArtistSocialStats>;
236
292
  fetchAlbumDetails?: (query: string) => Promise<Album>;
237
- fetchArtistAlbums?: (artistId: string) => Promise<AlbumRef[]>;
238
293
  fetchArtistTopTracks?: (artistId: string) => Promise<TrackRef[]>;
294
+ fetchArtistAlbums?: (artistId: string) => Promise<AlbumRef[]>;
295
+ fetchArtistPlaylists?: (artistId: string) => Promise<PlaylistRef[]>;
239
296
  fetchArtistRelatedArtists?: (artistId: string) => Promise<ArtistRef[]>;
240
297
  };
241
298
 
242
299
  export declare class MissingCapabilityError extends Error {
243
- constructor(capability: string);
300
+ constructor(capability: string, providerName: string);
244
301
  }
245
302
 
246
303
  export declare class NuclearAPI {
@@ -253,6 +310,7 @@ export declare class NuclearAPI {
253
310
  readonly Ytdlp: YtdlpAPI;
254
311
  readonly Favorites: FavoritesAPI;
255
312
  readonly Logger: LoggerAPI;
313
+ readonly Dashboard: DashboardAPI;
256
314
  constructor(opts?: {
257
315
  settingsHost?: SettingsHost;
258
316
  providersHost?: ProvidersHost;
@@ -263,6 +321,7 @@ export declare class NuclearAPI {
263
321
  ytdlpHost?: YtdlpHost;
264
322
  favoritesHost?: FavoritesHost;
265
323
  loggerHost?: LoggerHost;
324
+ dashboardHost?: DashboardHost;
266
325
  });
267
326
  }
268
327
 
@@ -311,20 +370,261 @@ export declare function pickArtwork(set: ArtworkSet | undefined, purpose: Artwor
311
370
  export declare type Playlist = {
312
371
  id: string;
313
372
  name: string;
314
- lastModifiedIso?: string;
373
+ description?: string;
374
+ artwork?: ArtworkSet;
375
+ tags?: string[];
376
+ createdAtIso: string;
377
+ lastModifiedIso: string;
378
+ origin?: ProviderRef;
379
+ isReadOnly: boolean;
380
+ parentId?: string;
315
381
  items: PlaylistItem[];
316
382
  };
317
383
 
318
- export declare type PlaylistItem = {
384
+ export declare type PlaylistIndexEntry = Pick<Playlist, 'id' | 'name' | 'createdAtIso' | 'lastModifiedIso' | 'isReadOnly' | 'artwork'> & {
385
+ itemCount: number;
386
+ totalDurationMs: number;
387
+ };
388
+
389
+ export declare const playlistIndexEntrySchema: z.ZodObject<{
390
+ id: z.ZodString;
391
+ name: z.ZodString;
392
+ createdAtIso: z.ZodString;
393
+ lastModifiedIso: z.ZodString;
394
+ isReadOnly: z.ZodBoolean;
395
+ artwork: z.ZodOptional<z.ZodObject<{
396
+ items: z.ZodArray<z.ZodObject<{
397
+ url: z.ZodString;
398
+ width: z.ZodOptional<z.ZodNumber>;
399
+ height: z.ZodOptional<z.ZodNumber>;
400
+ purpose: z.ZodOptional<z.ZodEnum<["avatar", "cover", "background", "thumbnail"]>>;
401
+ source: z.ZodOptional<z.ZodObject<{
402
+ provider: z.ZodString;
403
+ id: z.ZodString;
404
+ url: z.ZodOptional<z.ZodString>;
405
+ }, "strip", z.ZodTypeAny, {
406
+ id: string;
407
+ provider: string;
408
+ url?: string | undefined;
409
+ }, {
410
+ id: string;
411
+ provider: string;
412
+ url?: string | undefined;
413
+ }>>;
414
+ }, "strip", z.ZodTypeAny, {
415
+ url: string;
416
+ width?: number | undefined;
417
+ height?: number | undefined;
418
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
419
+ source?: {
420
+ id: string;
421
+ provider: string;
422
+ url?: string | undefined;
423
+ } | undefined;
424
+ }, {
425
+ url: string;
426
+ width?: number | undefined;
427
+ height?: number | undefined;
428
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
429
+ source?: {
430
+ id: string;
431
+ provider: string;
432
+ url?: string | undefined;
433
+ } | undefined;
434
+ }>, "many">;
435
+ }, "strip", z.ZodTypeAny, {
436
+ items: {
437
+ url: string;
438
+ width?: number | undefined;
439
+ height?: number | undefined;
440
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
441
+ source?: {
442
+ id: string;
443
+ provider: string;
444
+ url?: string | undefined;
445
+ } | undefined;
446
+ }[];
447
+ }, {
448
+ items: {
449
+ url: string;
450
+ width?: number | undefined;
451
+ height?: number | undefined;
452
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
453
+ source?: {
454
+ id: string;
455
+ provider: string;
456
+ url?: string | undefined;
457
+ } | undefined;
458
+ }[];
459
+ }>>;
460
+ itemCount: z.ZodNumber;
461
+ totalDurationMs: z.ZodNumber;
462
+ }, "strip", z.ZodTypeAny, {
319
463
  id: string;
320
- title: string;
321
- artists: ArtistCredit[];
322
- album?: string;
323
- durationMs?: number;
324
- artwork?: ArtworkSet;
464
+ name: string;
465
+ createdAtIso: string;
466
+ lastModifiedIso: string;
467
+ isReadOnly: boolean;
468
+ itemCount: number;
469
+ totalDurationMs: number;
470
+ artwork?: {
471
+ items: {
472
+ url: string;
473
+ width?: number | undefined;
474
+ height?: number | undefined;
475
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
476
+ source?: {
477
+ id: string;
478
+ provider: string;
479
+ url?: string | undefined;
480
+ } | undefined;
481
+ }[];
482
+ } | undefined;
483
+ }, {
484
+ id: string;
485
+ name: string;
486
+ createdAtIso: string;
487
+ lastModifiedIso: string;
488
+ isReadOnly: boolean;
489
+ itemCount: number;
490
+ totalDurationMs: number;
491
+ artwork?: {
492
+ items: {
493
+ url: string;
494
+ width?: number | undefined;
495
+ height?: number | undefined;
496
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
497
+ source?: {
498
+ id: string;
499
+ provider: string;
500
+ url?: string | undefined;
501
+ } | undefined;
502
+ }[];
503
+ } | undefined;
504
+ }>;
505
+
506
+ export declare const playlistIndexSchema: z.ZodArray<z.ZodObject<{
507
+ id: z.ZodString;
508
+ name: z.ZodString;
509
+ createdAtIso: z.ZodString;
510
+ lastModifiedIso: z.ZodString;
511
+ isReadOnly: z.ZodBoolean;
512
+ artwork: z.ZodOptional<z.ZodObject<{
513
+ items: z.ZodArray<z.ZodObject<{
514
+ url: z.ZodString;
515
+ width: z.ZodOptional<z.ZodNumber>;
516
+ height: z.ZodOptional<z.ZodNumber>;
517
+ purpose: z.ZodOptional<z.ZodEnum<["avatar", "cover", "background", "thumbnail"]>>;
518
+ source: z.ZodOptional<z.ZodObject<{
519
+ provider: z.ZodString;
520
+ id: z.ZodString;
521
+ url: z.ZodOptional<z.ZodString>;
522
+ }, "strip", z.ZodTypeAny, {
523
+ id: string;
524
+ provider: string;
525
+ url?: string | undefined;
526
+ }, {
527
+ id: string;
528
+ provider: string;
529
+ url?: string | undefined;
530
+ }>>;
531
+ }, "strip", z.ZodTypeAny, {
532
+ url: string;
533
+ width?: number | undefined;
534
+ height?: number | undefined;
535
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
536
+ source?: {
537
+ id: string;
538
+ provider: string;
539
+ url?: string | undefined;
540
+ } | undefined;
541
+ }, {
542
+ url: string;
543
+ width?: number | undefined;
544
+ height?: number | undefined;
545
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
546
+ source?: {
547
+ id: string;
548
+ provider: string;
549
+ url?: string | undefined;
550
+ } | undefined;
551
+ }>, "many">;
552
+ }, "strip", z.ZodTypeAny, {
553
+ items: {
554
+ url: string;
555
+ width?: number | undefined;
556
+ height?: number | undefined;
557
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
558
+ source?: {
559
+ id: string;
560
+ provider: string;
561
+ url?: string | undefined;
562
+ } | undefined;
563
+ }[];
564
+ }, {
565
+ items: {
566
+ url: string;
567
+ width?: number | undefined;
568
+ height?: number | undefined;
569
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
570
+ source?: {
571
+ id: string;
572
+ provider: string;
573
+ url?: string | undefined;
574
+ } | undefined;
575
+ }[];
576
+ }>>;
577
+ itemCount: z.ZodNumber;
578
+ totalDurationMs: z.ZodNumber;
579
+ }, "strip", z.ZodTypeAny, {
580
+ id: string;
581
+ name: string;
582
+ createdAtIso: string;
583
+ lastModifiedIso: string;
584
+ isReadOnly: boolean;
585
+ itemCount: number;
586
+ totalDurationMs: number;
587
+ artwork?: {
588
+ items: {
589
+ url: string;
590
+ width?: number | undefined;
591
+ height?: number | undefined;
592
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
593
+ source?: {
594
+ id: string;
595
+ provider: string;
596
+ url?: string | undefined;
597
+ } | undefined;
598
+ }[];
599
+ } | undefined;
600
+ }, {
601
+ id: string;
602
+ name: string;
603
+ createdAtIso: string;
604
+ lastModifiedIso: string;
605
+ isReadOnly: boolean;
606
+ itemCount: number;
607
+ totalDurationMs: number;
608
+ artwork?: {
609
+ items: {
610
+ url: string;
611
+ width?: number | undefined;
612
+ height?: number | undefined;
613
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
614
+ source?: {
615
+ id: string;
616
+ provider: string;
617
+ url?: string | undefined;
618
+ } | undefined;
619
+ }[];
620
+ } | undefined;
621
+ }>, "many">;
622
+
623
+ export declare type PlaylistItem<T extends Track = Track> = {
624
+ id: string;
625
+ track: T;
325
626
  note?: string;
326
- addedAtIso?: string;
327
- source: ProviderRef;
627
+ addedAtIso: string;
328
628
  };
329
629
 
330
630
  export declare type PlaylistRef = {
@@ -334,6 +634,400 @@ export declare type PlaylistRef = {
334
634
  source: ProviderRef;
335
635
  };
336
636
 
637
+ export declare const playlistSchema: z.ZodObject<{
638
+ id: z.ZodString;
639
+ name: z.ZodString;
640
+ description: z.ZodOptional<z.ZodString>;
641
+ artwork: z.ZodOptional<z.ZodObject<{
642
+ items: z.ZodArray<z.ZodObject<{
643
+ url: z.ZodString;
644
+ width: z.ZodOptional<z.ZodNumber>;
645
+ height: z.ZodOptional<z.ZodNumber>;
646
+ purpose: z.ZodOptional<z.ZodEnum<["avatar", "cover", "background", "thumbnail"]>>;
647
+ source: z.ZodOptional<z.ZodObject<{
648
+ provider: z.ZodString;
649
+ id: z.ZodString;
650
+ url: z.ZodOptional<z.ZodString>;
651
+ }, "strip", z.ZodTypeAny, {
652
+ id: string;
653
+ provider: string;
654
+ url?: string | undefined;
655
+ }, {
656
+ id: string;
657
+ provider: string;
658
+ url?: string | undefined;
659
+ }>>;
660
+ }, "strip", z.ZodTypeAny, {
661
+ url: string;
662
+ width?: number | undefined;
663
+ height?: number | undefined;
664
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
665
+ source?: {
666
+ id: string;
667
+ provider: string;
668
+ url?: string | undefined;
669
+ } | undefined;
670
+ }, {
671
+ url: string;
672
+ width?: number | undefined;
673
+ height?: number | undefined;
674
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
675
+ source?: {
676
+ id: string;
677
+ provider: string;
678
+ url?: string | undefined;
679
+ } | undefined;
680
+ }>, "many">;
681
+ }, "strip", z.ZodTypeAny, {
682
+ items: {
683
+ url: string;
684
+ width?: number | undefined;
685
+ height?: number | undefined;
686
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
687
+ source?: {
688
+ id: string;
689
+ provider: string;
690
+ url?: string | undefined;
691
+ } | undefined;
692
+ }[];
693
+ }, {
694
+ items: {
695
+ url: string;
696
+ width?: number | undefined;
697
+ height?: number | undefined;
698
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
699
+ source?: {
700
+ id: string;
701
+ provider: string;
702
+ url?: string | undefined;
703
+ } | undefined;
704
+ }[];
705
+ }>>;
706
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
707
+ createdAtIso: z.ZodString;
708
+ lastModifiedIso: z.ZodString;
709
+ origin: z.ZodOptional<z.ZodObject<{
710
+ provider: z.ZodString;
711
+ id: z.ZodString;
712
+ url: z.ZodOptional<z.ZodString>;
713
+ }, "strip", z.ZodTypeAny, {
714
+ id: string;
715
+ provider: string;
716
+ url?: string | undefined;
717
+ }, {
718
+ id: string;
719
+ provider: string;
720
+ url?: string | undefined;
721
+ }>>;
722
+ isReadOnly: z.ZodBoolean;
723
+ parentId: z.ZodOptional<z.ZodString>;
724
+ items: z.ZodArray<z.ZodObject<{
725
+ id: z.ZodString;
726
+ track: z.ZodObject<{
727
+ title: z.ZodString;
728
+ artists: z.ZodArray<z.ZodObject<{
729
+ name: z.ZodString;
730
+ roles: z.ZodArray<z.ZodString, "many">;
731
+ source: z.ZodOptional<z.ZodObject<{
732
+ provider: z.ZodString;
733
+ id: z.ZodString;
734
+ url: z.ZodOptional<z.ZodString>;
735
+ }, "strip", z.ZodTypeAny, {
736
+ id: string;
737
+ provider: string;
738
+ url?: string | undefined;
739
+ }, {
740
+ id: string;
741
+ provider: string;
742
+ url?: string | undefined;
743
+ }>>;
744
+ }, "strip", z.ZodTypeAny, {
745
+ name: string;
746
+ roles: string[];
747
+ source?: {
748
+ id: string;
749
+ provider: string;
750
+ url?: string | undefined;
751
+ } | undefined;
752
+ }, {
753
+ name: string;
754
+ roles: string[];
755
+ source?: {
756
+ id: string;
757
+ provider: string;
758
+ url?: string | undefined;
759
+ } | undefined;
760
+ }>, "many">;
761
+ durationMs: z.ZodOptional<z.ZodNumber>;
762
+ source: z.ZodObject<{
763
+ provider: z.ZodString;
764
+ id: z.ZodString;
765
+ url: z.ZodOptional<z.ZodString>;
766
+ }, "strip", z.ZodTypeAny, {
767
+ id: string;
768
+ provider: string;
769
+ url?: string | undefined;
770
+ }, {
771
+ id: string;
772
+ provider: string;
773
+ url?: string | undefined;
774
+ }>;
775
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
776
+ title: z.ZodString;
777
+ artists: z.ZodArray<z.ZodObject<{
778
+ name: z.ZodString;
779
+ roles: z.ZodArray<z.ZodString, "many">;
780
+ source: z.ZodOptional<z.ZodObject<{
781
+ provider: z.ZodString;
782
+ id: z.ZodString;
783
+ url: z.ZodOptional<z.ZodString>;
784
+ }, "strip", z.ZodTypeAny, {
785
+ id: string;
786
+ provider: string;
787
+ url?: string | undefined;
788
+ }, {
789
+ id: string;
790
+ provider: string;
791
+ url?: string | undefined;
792
+ }>>;
793
+ }, "strip", z.ZodTypeAny, {
794
+ name: string;
795
+ roles: string[];
796
+ source?: {
797
+ id: string;
798
+ provider: string;
799
+ url?: string | undefined;
800
+ } | undefined;
801
+ }, {
802
+ name: string;
803
+ roles: string[];
804
+ source?: {
805
+ id: string;
806
+ provider: string;
807
+ url?: string | undefined;
808
+ } | undefined;
809
+ }>, "many">;
810
+ durationMs: z.ZodOptional<z.ZodNumber>;
811
+ source: z.ZodObject<{
812
+ provider: z.ZodString;
813
+ id: z.ZodString;
814
+ url: z.ZodOptional<z.ZodString>;
815
+ }, "strip", z.ZodTypeAny, {
816
+ id: string;
817
+ provider: string;
818
+ url?: string | undefined;
819
+ }, {
820
+ id: string;
821
+ provider: string;
822
+ url?: string | undefined;
823
+ }>;
824
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
825
+ title: z.ZodString;
826
+ artists: z.ZodArray<z.ZodObject<{
827
+ name: z.ZodString;
828
+ roles: z.ZodArray<z.ZodString, "many">;
829
+ source: z.ZodOptional<z.ZodObject<{
830
+ provider: z.ZodString;
831
+ id: z.ZodString;
832
+ url: z.ZodOptional<z.ZodString>;
833
+ }, "strip", z.ZodTypeAny, {
834
+ id: string;
835
+ provider: string;
836
+ url?: string | undefined;
837
+ }, {
838
+ id: string;
839
+ provider: string;
840
+ url?: string | undefined;
841
+ }>>;
842
+ }, "strip", z.ZodTypeAny, {
843
+ name: string;
844
+ roles: string[];
845
+ source?: {
846
+ id: string;
847
+ provider: string;
848
+ url?: string | undefined;
849
+ } | undefined;
850
+ }, {
851
+ name: string;
852
+ roles: string[];
853
+ source?: {
854
+ id: string;
855
+ provider: string;
856
+ url?: string | undefined;
857
+ } | undefined;
858
+ }>, "many">;
859
+ durationMs: z.ZodOptional<z.ZodNumber>;
860
+ source: z.ZodObject<{
861
+ provider: z.ZodString;
862
+ id: z.ZodString;
863
+ url: z.ZodOptional<z.ZodString>;
864
+ }, "strip", z.ZodTypeAny, {
865
+ id: string;
866
+ provider: string;
867
+ url?: string | undefined;
868
+ }, {
869
+ id: string;
870
+ provider: string;
871
+ url?: string | undefined;
872
+ }>;
873
+ }, z.ZodTypeAny, "passthrough">>;
874
+ note: z.ZodOptional<z.ZodString>;
875
+ addedAtIso: z.ZodString;
876
+ }, "strip", z.ZodTypeAny, {
877
+ id: string;
878
+ track: {
879
+ artists: {
880
+ name: string;
881
+ roles: string[];
882
+ source?: {
883
+ id: string;
884
+ provider: string;
885
+ url?: string | undefined;
886
+ } | undefined;
887
+ }[];
888
+ source: {
889
+ id: string;
890
+ provider: string;
891
+ url?: string | undefined;
892
+ };
893
+ title: string;
894
+ durationMs?: number | undefined;
895
+ } & {
896
+ [k: string]: unknown;
897
+ };
898
+ addedAtIso: string;
899
+ note?: string | undefined;
900
+ }, {
901
+ id: string;
902
+ track: {
903
+ artists: {
904
+ name: string;
905
+ roles: string[];
906
+ source?: {
907
+ id: string;
908
+ provider: string;
909
+ url?: string | undefined;
910
+ } | undefined;
911
+ }[];
912
+ source: {
913
+ id: string;
914
+ provider: string;
915
+ url?: string | undefined;
916
+ };
917
+ title: string;
918
+ durationMs?: number | undefined;
919
+ } & {
920
+ [k: string]: unknown;
921
+ };
922
+ addedAtIso: string;
923
+ note?: string | undefined;
924
+ }>, "many">;
925
+ }, "strip", z.ZodTypeAny, {
926
+ items: {
927
+ id: string;
928
+ track: {
929
+ artists: {
930
+ name: string;
931
+ roles: string[];
932
+ source?: {
933
+ id: string;
934
+ provider: string;
935
+ url?: string | undefined;
936
+ } | undefined;
937
+ }[];
938
+ source: {
939
+ id: string;
940
+ provider: string;
941
+ url?: string | undefined;
942
+ };
943
+ title: string;
944
+ durationMs?: number | undefined;
945
+ } & {
946
+ [k: string]: unknown;
947
+ };
948
+ addedAtIso: string;
949
+ note?: string | undefined;
950
+ }[];
951
+ id: string;
952
+ name: string;
953
+ createdAtIso: string;
954
+ lastModifiedIso: string;
955
+ isReadOnly: boolean;
956
+ artwork?: {
957
+ items: {
958
+ url: string;
959
+ width?: number | undefined;
960
+ height?: number | undefined;
961
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
962
+ source?: {
963
+ id: string;
964
+ provider: string;
965
+ url?: string | undefined;
966
+ } | undefined;
967
+ }[];
968
+ } | undefined;
969
+ description?: string | undefined;
970
+ tags?: string[] | undefined;
971
+ origin?: {
972
+ id: string;
973
+ provider: string;
974
+ url?: string | undefined;
975
+ } | undefined;
976
+ parentId?: string | undefined;
977
+ }, {
978
+ items: {
979
+ id: string;
980
+ track: {
981
+ artists: {
982
+ name: string;
983
+ roles: string[];
984
+ source?: {
985
+ id: string;
986
+ provider: string;
987
+ url?: string | undefined;
988
+ } | undefined;
989
+ }[];
990
+ source: {
991
+ id: string;
992
+ provider: string;
993
+ url?: string | undefined;
994
+ };
995
+ title: string;
996
+ durationMs?: number | undefined;
997
+ } & {
998
+ [k: string]: unknown;
999
+ };
1000
+ addedAtIso: string;
1001
+ note?: string | undefined;
1002
+ }[];
1003
+ id: string;
1004
+ name: string;
1005
+ createdAtIso: string;
1006
+ lastModifiedIso: string;
1007
+ isReadOnly: boolean;
1008
+ artwork?: {
1009
+ items: {
1010
+ url: string;
1011
+ width?: number | undefined;
1012
+ height?: number | undefined;
1013
+ purpose?: "avatar" | "cover" | "background" | "thumbnail" | undefined;
1014
+ source?: {
1015
+ id: string;
1016
+ provider: string;
1017
+ url?: string | undefined;
1018
+ } | undefined;
1019
+ }[];
1020
+ } | undefined;
1021
+ description?: string | undefined;
1022
+ tags?: string[] | undefined;
1023
+ origin?: {
1024
+ id: string;
1025
+ provider: string;
1026
+ url?: string | undefined;
1027
+ } | undefined;
1028
+ parentId?: string | undefined;
1029
+ }>;
1030
+
337
1031
  export declare type PluginIcon = {
338
1032
  type: 'link';
339
1033
  link: string;
@@ -372,7 +1066,7 @@ export declare type ProviderDescriptor<K extends ProviderKind = ProviderKind> =
372
1066
  pluginId?: string;
373
1067
  };
374
1068
 
375
- export declare type ProviderKind = 'metadata' | 'streaming' | 'lyrics' | (string & {});
1069
+ export declare type ProviderKind = 'metadata' | 'streaming' | 'lyrics' | 'dashboard' | (string & {});
376
1070
 
377
1071
  export declare type ProviderRef = {
378
1072
  provider: string;
@@ -386,14 +1080,14 @@ declare class Providers {
386
1080
  register<T extends ProviderDescriptor>(p: T): string;
387
1081
  unregister(id: string): boolean;
388
1082
  list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
389
- get<T extends ProviderDescriptor>(id: string): T | undefined;
1083
+ get<T extends ProviderDescriptor>(id: string, kind: ProviderKind): T | undefined;
390
1084
  }
391
1085
 
392
1086
  export declare type ProvidersHost = {
393
1087
  register<T extends ProviderDescriptor>(provider: T): string;
394
1088
  unregister(providerId: string): boolean;
395
1089
  list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
396
- get<T extends ProviderDescriptor>(providerId: string): T | undefined;
1090
+ get<T extends ProviderDescriptor>(providerId: string, kind: ProviderKind): T | undefined;
397
1091
  clear(): void;
398
1092
  };
399
1093