soundcloud.ts
Version:
Soundcloud API v2 wrapper with typings.
90 lines (74 loc) • 2.63 kB
text/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
}
}
}
}