soundcloud.ts
Version:
Soundcloud API v2 wrapper with typings.
66 lines (65 loc) • 2.61 kB
TypeScript
import type { SoundcloudTrack } from "./TrackTypes";
export interface SoundcloudWidget {
bind<Value extends SoundcloudEventValue>(event: Value, callback: SoundcloudEventCallback<Value>): void;
unbind(event: SoundcloudEventValue): void;
load(url: string, options?: SoundcloudLoadOptions): void;
play(): void;
pause(): void;
toggle(): void;
seekTo(ms: number): void;
setVolume(volume: number): void;
next(): void;
prev(): void;
skip(index: number): void;
getVolume(callback: (volume: number) => void): void;
getDuration(callback: (duration: number) => void): void;
getPosition(callback: (position: number) => void): void;
getSounds(callback: (sounds: SoundcloudTrack[]) => void): void;
getCurrentSound(callback: (sound: SoundcloudTrack) => void): void;
getCurrentSoundIndex(callback: (index: number) => void): void;
isPaused(callback: (paused: boolean) => void): void;
}
export interface SoundcloudLoadOptions {
callback?(): void;
[param: string]: unknown;
}
export interface SoundcloudAudioEvents {
LOAD_PROGRESS: "loadProgress";
PLAY_PROGRESS: "playProgress";
PLAY: "play";
PAUSE: "pause";
FINISH: "finish";
SEEK: "seek";
}
export type SoundcloudAudioEventKey = keyof SoundcloudAudioEvents;
export type SoundcloudAudioEventValue = SoundcloudAudioEvents[SoundcloudAudioEventKey];
export type SoundcloudAudioEventCallback = (data: SoundcloudAudioData) => void;
export interface SoundcloudAudioData {
relativePosition: number;
loadProgress: number;
currentPosition: number;
}
export interface SoundcloudUIEvents {
READY: "ready";
CLICK_DOWNLOAD: "downloadClicked";
CLICK_BUY: "buyClicked";
OPEN_SHARE_PANEL: "sharePanelOpened";
ERROR: "error";
}
export type SoundcloudUIEventKey = keyof SoundcloudUIEvents;
export type SoundcloudUIEventValue = SoundcloudUIEvents[SoundcloudUIEventKey];
export type SoundcloudUIEventCallback = () => void;
export type SoundcloudEventKey = SoundcloudAudioEventKey | SoundcloudUIEventKey;
export type SoundcloudEventValue = SoundcloudAudioEventValue | SoundcloudUIEventValue;
export type SoundcloudEvents = SoundcloudAudioEvents & SoundcloudUIEvents;
export type SoundcloudEventCallback<Value extends SoundcloudEventValue> = Value extends SoundcloudAudioEventValue ? SoundcloudAudioEventCallback : SoundcloudUIEventCallback;
declare global {
interface Window {
SC?: {
Widget: {
(element: string | HTMLIFrameElement): SoundcloudWidget;
Events: SoundcloudEvents;
};
};
}
}