UNPKG

soundcloud.ts

Version:

Soundcloud API v2 wrapper with typings.

66 lines (65 loc) 2.61 kB
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; }; }; } }