@radiolise/metadata-client
Version:
Library for subscribing to metadata of ICY radio streams; powered by the Radiolise API, based on WebSockets
55 lines (52 loc) • 1.55 kB
TypeScript
declare enum ErrorTypes {
/**
* The API server was unable to parse the payload because something has been
* omitted or is invalid.
*/
MALFORMED_PAYLOAD = "malformedPayload",
/**
* The provided host is unreachable.
*/
SERVER_UNREACHABLE = "serverUnreachable",
/**
* The server responded with an HTTP status error.
*/
SERVER_HTTP_ERROR = "serverHttpError",
/**
* The resource does not appear to be an ICY audio stream.
*/
NON_ICY_RESOURCE = "nonIcyResource"
}
declare global {
interface SymbolConstructor {
readonly observable: symbol;
}
}
type Handler<T> = (value: T) => void;
type Observer<T> = Handler<T> | {
next?: Handler<T>;
error?: Handler<any>;
complete?: Handler<boolean>;
};
interface NowPlayingInfo {
title: string;
error?: ErrorTypes;
}
interface MetadataClientOptions {
url: string | URL;
/** @default true */
reconnect?: boolean;
/** @default 2000 */
reconnectDelay?: number | undefined;
onSocketError?: (this: MetadataClient, code: number) => void;
}
type MetadataClient = ReturnType<typeof createMetadataClient>;
declare function createMetadataClient(options: MetadataClientOptions): {
[Symbol.observable]: () => any;
trackStream: (url: string | URL | undefined) => Promise<void>;
terminate: () => void;
subscribe: (observer: Observer<NowPlayingInfo>) => {
unsubscribe: () => void;
};
};
export { ErrorTypes, MetadataClient, NowPlayingInfo, createMetadataClient };