forked from bitfocus/companion-module-spotify-remote
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayback.ts
127 lines (106 loc) · 3.74 KB
/
playback.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import {
Response,
doGetRequest,
RequestOptionsBase,
DeviceOptions,
QueryParameters,
doPostRequest,
doPutRequest,
BodyParameters,
} from './util.js'
export async function addItemToQueue(
reqOptions: RequestOptionsBase,
context_uri: string,
options?: DeviceOptions,
): Promise<Response<void>> {
const params: QueryParameters = {
uri: context_uri,
}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPostRequest(reqOptions, '/v1/me/player/queue', params)
}
export async function getMyCurrentPlaybackState(
reqOptions: RequestOptionsBase,
): Promise<Response<SpotifyApi.CurrentPlaybackResponse | undefined>> {
return doGetRequest(reqOptions, '/v1/me/player')
}
export async function skipToNext(reqOptions: RequestOptionsBase, options?: DeviceOptions): Promise<Response<void>> {
const params: QueryParameters = {}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPostRequest(reqOptions, '/v1/me/player/next', params)
}
export async function skipToPrevious(reqOptions: RequestOptionsBase, options?: DeviceOptions): Promise<Response<void>> {
const params: QueryParameters = {}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPostRequest(reqOptions, '/v1/me/player/previous', params)
}
export interface TransferPlaybackOptions {
play?: boolean
}
export async function transferMyPlayback(
reqOptions: RequestOptionsBase,
deviceIds: ReadonlyArray<string>,
options?: TransferPlaybackOptions,
): Promise<Response<void>> {
const body: BodyParameters = {
...options,
device_ids: deviceIds,
}
return doPutRequest(reqOptions, '/v1/me/player', {}, body)
}
export async function pause(reqOptions: RequestOptionsBase, options?: DeviceOptions): Promise<Response<void>> {
const params: QueryParameters = {}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPutRequest(reqOptions, '/v1/me/player/pause', params, {})
}
export interface PlayOptions extends DeviceOptions {
context_uri?: string | undefined
uris?: ReadonlyArray<string> | undefined
offset?: { position: number } | { uri: string } | undefined
position_ms?: number | undefined
}
export async function play(reqOptions: RequestOptionsBase, options?: PlayOptions): Promise<Response<void>> {
const params: QueryParameters = {}
const body: BodyParameters = {}
if (options) {
if ('deviceId' in options) params.device_id = options.deviceId
if ('context_uri' in options) body.context_uri = options.context_uri
if ('uris' in options) body.uris = options.uris
if ('offset' in options) body.offset = options.offset
if ('position_ms' in options) body.position_ms = options.position_ms
}
return doPutRequest(reqOptions, '/v1/me/player/play', params, body)
}
export async function setRepeat(
reqOptions: RequestOptionsBase,
state: 'off' | 'track' | 'context',
options?: DeviceOptions,
): Promise<Response<void>> {
const params: QueryParameters = {
state,
}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPutRequest(reqOptions, '/v1/me/player/repeat', params, {})
}
export async function setShuffle(
reqOptions: RequestOptionsBase,
state: boolean,
options?: DeviceOptions,
): Promise<Response<void>> {
const params: QueryParameters = {
state,
}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPutRequest(reqOptions, '/v1/me/player/shuffle', params, {})
}
export async function seek(
reqOptions: RequestOptionsBase,
positionMs: number,
options?: DeviceOptions,
): Promise<Response<void>> {
const params: QueryParameters = {
position_ms: positionMs,
}
if (options && 'deviceId' in options) params.device_id = options.deviceId
return doPutRequest(reqOptions, '/v1/me/player/seek', params, {})
}