Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@nuclearplayer/plugin-sdk

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nuclearplayer/plugin-sdk - npm Package Compare versions

Comparing version
0.0.11
to
0.0.14
+409
-8
dist/index.d.ts

@@ -1,8 +0,409 @@

export { NuclearPluginAPI, NuclearAPI } from './api';
export * from './types';
export * from './types/settings';
export * from './types/search';
export type { ProvidersHost } from './types/providers';
export { useSetting } from './react/useSetting';
export * from '@nuclearplayer/model';
//# sourceMappingURL=index.d.ts.map
export declare type Album = {
title: string;
artists: ArtistCredit[];
tracks?: TrackRef[];
releaseDate?: {
precision: 'year' | 'month' | 'day';
dateIso: string;
};
genres?: string[];
artwork?: ArtworkSet;
source: ProviderRef;
};
export declare type AlbumRef = {
title: string;
artists?: ArtistRef[];
artwork?: ArtworkSet;
source: ProviderRef;
};
export declare type Artist = {
name: string;
disambiguation?: string;
bio?: string;
onTour?: boolean;
artwork?: ArtworkSet;
tags?: string[];
source: ProviderRef;
};
export declare type ArtistCredit = {
name: string;
roles: string[];
source?: ProviderRef;
};
export declare type ArtistMetadataCapability = 'artistDetails' | 'artistAlbums' | 'artistTopTracks' | 'artistRelatedArtists';
export declare type ArtistRef = {
name: string;
disambiguation?: string;
artwork?: ArtworkSet;
source: ProviderRef;
};
export declare type Artwork = {
url: string;
width?: number;
height?: number;
purpose?: ArtworkPurpose;
source?: ProviderRef;
};
export declare type ArtworkPurpose = 'avatar' | 'cover' | 'background' | 'thumbnail';
export declare type ArtworkSet = {
items: Artwork[];
};
export declare type BooleanSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'boolean';
default?: boolean;
hidden?: boolean;
source?: SettingSource;
widget?: BooleanWidget;
};
export declare type BooleanWidget = {
type: 'toggle';
};
export declare type EnumOption = {
value: string;
label: string;
};
export declare type EnumSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'enum';
options: EnumOption[];
default?: string;
hidden?: boolean;
source?: SettingSource;
widget?: EnumWidget;
};
export declare type EnumWidget = {
type: 'select';
} | {
type: 'radio';
};
export declare type LoadedPlugin = {
metadata: PluginMetadata;
instance: NuclearPlugin;
path: string;
};
export declare type LocalFileInfo = {
fileUri: string;
fileSize?: number;
format?: string;
bitrateKbps?: number;
sampleRateHz?: number;
channels?: number;
fingerprint?: string;
scannedAtIso?: string;
};
export declare type MetadataProvider = ProviderDescriptor<'metadata'> & {
searchCapabilities?: SearchCapability[];
artistMetadataCapabilities?: ArtistMetadataCapability[];
search?: (params: SearchParams) => Promise<SearchResults>;
searchArtists?: (params: Omit<SearchParams, 'types'>) => Promise<ArtistRef[]>;
searchAlbums?: (params: Omit<SearchParams, 'types'>) => Promise<AlbumRef[]>;
searchTracks?: (params: Omit<SearchParams, 'types'>) => Promise<Track[]>;
searchPlaylists?: (params: Omit<SearchParams, 'types'>) => Promise<PlaylistRef[]>;
fetchArtistDetails?: (query: string) => Promise<Artist>;
fetchAlbumDetails?: (query: string) => Promise<Album>;
fetchArtistAlbums?: (artistId: string) => Promise<AlbumRef[]>;
fetchArtistTopTracks?: (artistId: string) => Promise<TrackRef[]>;
fetchArtistRelatedArtists?: (artistId: string) => Promise<ArtistRef[]>;
};
export declare class MissingCapabilityError extends Error {
constructor(capability: string);
}
export declare class NuclearAPI {
readonly Settings: Settings;
readonly Providers: Providers;
constructor(opts?: {
settingsHost?: SettingsHost;
providersHost?: ProvidersHost;
});
}
export declare type NuclearPlugin = {
onLoad?(api: NuclearPluginAPI): void | Promise<void>;
onUnload?(): void | Promise<void>;
onEnable?(api: NuclearPluginAPI): void | Promise<void>;
onDisable?(): void | Promise<void>;
};
export declare class NuclearPluginAPI extends NuclearAPI {
}
export declare type NumberSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'number';
default?: number;
hidden?: boolean;
source?: SettingSource;
widget?: NumberWidget;
min?: number;
max?: number;
step?: number;
unit?: string;
};
export declare type NumberWidget = {
type: 'slider';
min?: number;
max?: number;
step?: number;
unit?: string;
} | {
type: 'number-input';
min?: number;
max?: number;
step?: number;
unit?: string;
};
export declare function pickArtwork(set: ArtworkSet | undefined, purpose: ArtworkPurpose, targetPx: number): Artwork | undefined;
export declare type Playlist = {
id: string;
name: string;
lastModifiedIso?: string;
items: PlaylistItem[];
};
export declare type PlaylistItem = {
id: string;
title: string;
artists: ArtistCredit[];
album?: string;
durationMs?: number;
artwork?: ArtworkSet;
note?: string;
addedAtIso?: string;
source: ProviderRef;
};
export declare type PlaylistRef = {
id: string;
name: string;
artwork?: ArtworkSet;
source: ProviderRef;
};
export declare type PluginIcon = {
type: 'link';
link: string;
};
export declare type PluginManifest = {
name: string;
version: string;
description: string;
author: string;
main?: string;
nuclear?: {
displayName?: string;
category?: string;
icon?: PluginIcon;
permissions?: string[];
};
};
export declare type PluginMetadata = {
id: string;
name: string;
displayName: string;
version: string;
description: string;
author: string;
category?: string;
icon?: PluginIcon;
permissions: string[];
};
export declare type ProviderDescriptor<K extends ProviderKind = ProviderKind> = {
id: string;
kind: K;
name: string;
pluginId?: string;
};
export declare type ProviderKind = 'metadata' | 'streaming' | 'lyrics' | (string & {});
export declare type ProviderRef = {
provider: string;
id: string;
url?: string;
};
declare class Providers {
#private;
constructor(host?: ProvidersHost);
register<T extends ProviderDescriptor>(p: T): string;
unregister(id: string): boolean;
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
get<T extends ProviderDescriptor>(id: string): T | undefined;
}
export declare type ProvidersHost = {
register<T extends ProviderDescriptor>(provider: T): string;
unregister(providerId: string): boolean;
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
get<T extends ProviderDescriptor>(providerId: string): T | undefined;
clear(): void;
};
export declare type QueueItem = {
id: string;
title: string;
artists: ArtistCredit[];
album?: string;
durationMs?: number;
artwork?: ArtworkSet;
note?: string;
addedAtIso?: string;
source: ProviderRef;
};
export declare type SearchCapability = SearchCategory | 'unified';
export declare type SearchCategory = 'artists' | 'albums' | 'tracks' | 'playlists';
export declare type SearchParams = {
query: string;
types?: SearchCategory[];
limit?: number;
};
export declare type SearchResults = {
artists?: ArtistRef[];
albums?: AlbumRef[];
tracks?: Track[];
playlists?: PlaylistRef[];
};
export declare type SettingCategory = string;
export declare type SettingDefinition = BooleanSettingDefinition | NumberSettingDefinition | StringSettingDefinition | EnumSettingDefinition;
declare class Settings {
#private;
constructor(host?: SettingsHost);
register(defs: SettingDefinition[], source: SettingSource): Promise<SettingsRegistrationResult>;
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
}
export declare type SettingsHost = {
register(defs: SettingDefinition[], source: SettingSource): Promise<SettingsRegistrationResult>;
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
};
export declare type SettingSource = {
type: 'core';
} | {
type: 'plugin';
pluginId: string;
pluginName?: string;
};
export declare type SettingsRegistration = {
settings: SettingDefinition[];
};
export declare type SettingsRegistrationResult = {
registered: string[];
};
export declare type SettingValue = boolean | number | string | undefined;
export declare type Stream = {
url: string;
protocol: 'file' | 'http' | 'https' | 'hls';
mimeType?: string;
bitrateKbps?: number;
codec?: string;
container?: string;
qualityLabel?: string;
durationMs?: number;
contentLengthBytes?: number;
source: ProviderRef;
};
export declare type StringFormat = 'text' | 'url' | 'path' | 'token' | 'language';
export declare type StringSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'string';
default?: string;
hidden?: boolean;
source?: SettingSource;
widget?: StringWidget;
format?: StringFormat;
pattern?: string;
minLength?: number;
maxLength?: number;
};
export declare type StringWidget = {
type: 'text';
placeholder?: string;
} | {
type: 'password';
placeholder?: string;
} | {
type: 'textarea';
placeholder?: string;
rows?: number;
};
export declare type Track = {
title: string;
artists: ArtistCredit[];
album?: AlbumRef;
durationMs?: number;
trackNumber?: number;
disc?: string;
artwork?: ArtworkSet;
tags?: string[];
source: ProviderRef;
localFile?: LocalFileInfo;
streams?: Stream[];
};
export declare type TrackRef = {
title: string;
artists: ArtistRef[];
artwork?: ArtworkSet;
source: ProviderRef;
};
export declare const useSetting: <T extends SettingValue = SettingValue>(host: SettingsHost | undefined, id: string) => readonly [T | undefined, (nextValue: T) => void];
export { }
+5
-3
{
"name": "@nuclearplayer/plugin-sdk",
"version": "0.0.11",
"version": "0.0.14",
"description": "Plugin SDK for Nuclear music player",

@@ -27,2 +27,3 @@ "type": "module",

"devDependencies": {
"@microsoft/api-extractor": "^7.51.1",
"@tailwindcss/vite": "^4.1.11",

@@ -71,4 +72,5 @@ "@testing-library/jest-dom": "^6.6.4",

"dev": "vite",
"build": "tsc && vite build",
"build:npm": "vite build --mode npm",
"build": "tsc && vite build && api-extractor run --local && pnpm clean:dts",
"build:npm": "tsc && vite build --mode npm && api-extractor run --local && pnpm clean:dts",
"clean:dts": "rm -rf dist/api dist/react dist/test dist/types dist/types.d.ts dist/*.d.ts.map dist/tsdoc-metadata.json",
"test": "vitest --run",

@@ -75,0 +77,0 @@ "test:watch": "vitest",

import { ProvidersHost } from '../types/providers';
import { SettingsHost } from '../types/settings';
import { Providers } from './providers';
import { Settings } from './settings';
export declare class NuclearAPI {
readonly Settings: Settings;
readonly Providers: Providers;
constructor(opts?: {
settingsHost?: SettingsHost;
providersHost?: ProvidersHost;
});
}
export declare class NuclearPluginAPI extends NuclearAPI {
}
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;gBAElB,IAAI,CAAC,EAAE;QACjB,YAAY,CAAC,EAAE,YAAY,CAAC;QAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;KAC/B;CAIF;AAED,qBAAa,gBAAiB,SAAQ,UAAU;CAAG"}
import { ProvidersHost } from '../types/providers';
import { ProviderDescriptor, ProviderKind } from '../types/search';
export declare class Providers {
#private;
constructor(host?: ProvidersHost);
register<T extends ProviderDescriptor>(p: T): string;
unregister(id: string): boolean;
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
get<T extends ProviderDescriptor>(id: string): T | undefined;
}
//# sourceMappingURL=providers.d.ts.map
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/api/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAExE,qBAAa,SAAS;;gBAGR,IAAI,CAAC,EAAE,aAAa;IAYhC,QAAQ,CAAC,CAAC,SAAS,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAI3C,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,IAAI,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;IAIpD,GAAG,CAAC,CAAC,SAAS,kBAAkB,EAAE,EAAE,EAAE,MAAM;CAG7C"}
import { SettingDefinition, SettingsHost, SettingSource, SettingValue } from '../types/settings';
export declare class Settings {
#private;
constructor(host?: SettingsHost);
register(defs: SettingDefinition[], source: SettingSource): Promise<import('..').SettingsRegistrationResult>;
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
}
//# sourceMappingURL=settings.d.ts.map
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/api/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,QAAQ;;gBAGP,IAAI,CAAC,EAAE,YAAY;IAY/B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,aAAa;IAIzD,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM;IAIrD,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAI/D,SAAS,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC7C,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI;CAI3C"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACrD,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,cAAc,sBAAsB,CAAC"}
import { SettingsHost, SettingValue } from '../types/settings';
export declare const useSetting: <T extends SettingValue = SettingValue>(host: SettingsHost | undefined, id: string) => readonly [T | undefined, (nextValue: T) => void];
//# sourceMappingURL=useSetting.d.ts.map
{"version":3,"file":"useSetting.d.ts","sourceRoot":"","sources":["../../src/react/useSetting.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,YAAY,GAAG,YAAY,EAC9D,MAAM,YAAY,GAAG,SAAS,EAC9B,IAAI,MAAM,0CAkCU,CAAC,UAUtB,CAAC"}
//# sourceMappingURL=setup.d.ts.map
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
import { SettingDefinition, SettingsHost, SettingSource, SettingValue } from '../../types/settings';
export declare class InMemorySettingsHost implements SettingsHost {
private definitions;
private values;
private listeners;
private readonly source;
constructor(source: SettingSource);
private fullyQualified;
register(definitions: SettingDefinition[], _source: SettingSource): Promise<{
registered: string[];
}>;
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
}
//# sourceMappingURL=inMemorySettingsHost.d.ts.map
{"version":3,"file":"inMemorySettingsHost.d.ts","sourceRoot":"","sources":["../../../src/test/utils/inMemorySettingsHost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,MAAM,EAAE,aAAa;IAIjC,OAAO,CAAC,cAAc;IAOhB,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa;;;IAsBjE,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM;IAKrD,GAAG,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAWrE,SAAS,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC7C,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI;CAmB3C"}
import { NuclearPluginAPI } from './api';
export type PluginIcon = {
type: 'link';
link: string;
};
export type PluginManifest = {
name: string;
version: string;
description: string;
author: string;
main?: string;
nuclear?: {
displayName?: string;
category?: string;
icon?: PluginIcon;
permissions?: string[];
};
};
export type NuclearPlugin = {
onLoad?(api: NuclearPluginAPI): void | Promise<void>;
onUnload?(): void | Promise<void>;
onEnable?(api: NuclearPluginAPI): void | Promise<void>;
onDisable?(): void | Promise<void>;
};
export type PluginMetadata = {
id: string;
name: string;
displayName: string;
version: string;
description: string;
author: string;
category?: string;
icon?: PluginIcon;
permissions: string[];
};
export type LoadedPlugin = {
metadata: PluginMetadata;
instance: NuclearPlugin;
path: string;
};
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,UAAU,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,SAAS,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
import { ProviderDescriptor, ProviderKind } from './search';
export type ProvidersHost = {
register<T extends ProviderDescriptor>(provider: T): string;
unregister(providerId: string): boolean;
list<K extends ProviderKind = ProviderKind>(kind?: K): ProviderDescriptor<K>[];
get<T extends ProviderDescriptor>(providerId: string): T | undefined;
clear(): void;
};
//# sourceMappingURL=providers.d.ts.map
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,SAAS,kBAAkB,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC;IAC5D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EACxC,IAAI,CAAC,EAAE,CAAC,GACP,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,GAAG,CAAC,CAAC,SAAS,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACrE,KAAK,IAAI,IAAI,CAAC;CACf,CAAC"}
import { Album, AlbumRef, Artist, ArtistRef, PlaylistRef, Track, TrackRef } from '@nuclearplayer/model';
export type SearchCategory = 'artists' | 'albums' | 'tracks' | 'playlists';
export type SearchCapability = SearchCategory | 'unified';
export type ArtistMetadataCapability = 'artistDetails' | 'artistAlbums' | 'artistTopTracks' | 'artistRelatedArtists';
export type SearchParams = {
query: string;
types?: SearchCategory[];
limit?: number;
};
export type SearchResults = {
artists?: ArtistRef[];
albums?: AlbumRef[];
tracks?: Track[];
playlists?: PlaylistRef[];
};
export type ProviderKind = 'metadata' | 'streaming' | 'lyrics' | (string & {});
export type ProviderDescriptor<K extends ProviderKind = ProviderKind> = {
id: string;
kind: K;
name: string;
pluginId?: string;
};
export type MetadataProvider = ProviderDescriptor<'metadata'> & {
searchCapabilities?: SearchCapability[];
artistMetadataCapabilities?: ArtistMetadataCapability[];
search?: (params: SearchParams) => Promise<SearchResults>;
searchArtists?: (params: Omit<SearchParams, 'types'>) => Promise<ArtistRef[]>;
searchAlbums?: (params: Omit<SearchParams, 'types'>) => Promise<AlbumRef[]>;
searchTracks?: (params: Omit<SearchParams, 'types'>) => Promise<Track[]>;
searchPlaylists?: (params: Omit<SearchParams, 'types'>) => Promise<PlaylistRef[]>;
fetchArtistDetails?: (query: string) => Promise<Artist>;
fetchAlbumDetails?: (query: string) => Promise<Album>;
fetchArtistAlbums?: (artistId: string) => Promise<AlbumRef[]>;
fetchArtistTopTracks?: (artistId: string) => Promise<TrackRef[]>;
fetchArtistRelatedArtists?: (artistId: string) => Promise<ArtistRef[]>;
};
export declare class MissingCapabilityError extends Error {
constructor(capability: string);
}
//# sourceMappingURL=search.d.ts.map
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/types/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,KAAK,EACL,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAC;AAE1D,MAAM,MAAM,wBAAwB,GAChC,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE/E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG;IAC9D,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,0BAA0B,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,KAChC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5B,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,yBAAyB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACxE,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,UAAU,EAAE,MAAM;CAI/B"}
export type SettingSource = {
type: 'core';
} | {
type: 'plugin';
pluginId: string;
pluginName?: string;
};
export type SettingCategory = string;
export type BooleanWidget = {
type: 'toggle';
};
export type NumberWidget = {
type: 'slider';
min?: number;
max?: number;
step?: number;
unit?: string;
} | {
type: 'number-input';
min?: number;
max?: number;
step?: number;
unit?: string;
};
export type StringWidget = {
type: 'text';
placeholder?: string;
} | {
type: 'password';
placeholder?: string;
} | {
type: 'textarea';
placeholder?: string;
rows?: number;
};
export type EnumWidget = {
type: 'select';
} | {
type: 'radio';
};
export type BooleanSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'boolean';
default?: boolean;
hidden?: boolean;
source?: SettingSource;
widget?: BooleanWidget;
};
export type NumberSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'number';
default?: number;
hidden?: boolean;
source?: SettingSource;
widget?: NumberWidget;
min?: number;
max?: number;
step?: number;
unit?: string;
};
export type StringFormat = 'text' | 'url' | 'path' | 'token' | 'language';
export type StringSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'string';
default?: string;
hidden?: boolean;
source?: SettingSource;
widget?: StringWidget;
format?: StringFormat;
pattern?: string;
minLength?: number;
maxLength?: number;
};
export type EnumOption = {
value: string;
label: string;
};
export type EnumSettingDefinition = {
id: string;
title: string;
description?: string;
category: SettingCategory;
kind: 'enum';
options: EnumOption[];
default?: string;
hidden?: boolean;
source?: SettingSource;
widget?: EnumWidget;
};
export type SettingDefinition = BooleanSettingDefinition | NumberSettingDefinition | StringSettingDefinition | EnumSettingDefinition;
export type SettingValue = boolean | number | string | undefined;
export type SettingsRegistration = {
settings: SettingDefinition[];
};
export type SettingsRegistrationResult = {
registered: string[];
};
export type SettingsHost = {
register(defs: SettingDefinition[], source: SettingSource): Promise<SettingsRegistrationResult>;
get<T extends SettingValue = SettingValue>(id: string): Promise<T | undefined>;
set<T extends SettingValue = SettingValue>(id: string, value: T): Promise<void>;
subscribe<T extends SettingValue = SettingValue>(id: string, listener: (value: T | undefined) => void): () => void;
};
//# sourceMappingURL=settings.d.ts.map
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"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"}