vd-plugins/plugins/defs.d.ts
kmmiio99o 19168b1238 Add advanced CLI UI and logging to build and serve scripts
- Enhance `build.mjs` and `serve.mjs` with colorful banners, progress
bars, tables, and section headers for a professional CLI experience -
Add detailed build summaries, error reporting, and plugin statistics to
`build.mjs` - Improve argument parsing and verbose logging in
`build.mjs` - Add plugin authors to Last.fm manifest - Refactor Last.fm
plugin code for consistent formatting and improved settings typing - Add
plugin and file statistics, network interface table, and graceful
shutdown to `serve.mjs` - Remove `.vscode/settings.json` from repo
2025-10-04 11:16:42 +02:00

74 lines
1.5 KiB
TypeScript

export type Activity = {
name: string;
application_id: string;
flags: number;
type: number;
details?: string;
state?: string;
timestamps?: {
_enabled?: boolean;
start: number | string;
end?: number | string;
};
assets?: ActivityAssets;
buttons?: ActivityButton[];
status_display_type?: number;
};
export type ActivityButton = {
label: string;
url: string;
};
export type ActivityAssets = {
large_image?: string;
large_text?: string;
small_image?: string;
small_text?: string;
};
export type ServiceType = "lastfm" | "librefm" | "listenbrainz";
export type LFMSettings = {
appName: string;
username: string;
apiKey: string;
showTimestamp: boolean;
timeInterval: number | string;
listeningTo: boolean;
ignoreSpotify: boolean;
verboseLogging: boolean;
service: ServiceType;
// Service-specific settings
librefmUsername?: string;
librefmApiKey?: string;
listenbrainzUsername?: string;
listenbrainzToken?: string;
};
export type Track = {
name: string;
artist: string;
album: string;
albumArt: string | null;
url: string;
date: string;
nowPlaying: boolean;
loved: boolean;
from: number;
to: number | null;
duration?: number;
};
export interface ServiceClient {
fetchLatestScrobble(): Promise<Track>;
validateCredentials(): Promise<boolean>;
getServiceName(): string;
}
export interface ServiceConfig {
name: string;
baseUrl: string;
requiresApiKey: boolean;
requiresToken: boolean;
}