aboutsummaryrefslogtreecommitdiff
path: root/web/src/lib/api.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/lib/api.ts')
-rw-r--r--web/src/lib/api.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts
new file mode 100644
index 0000000..032cbd4
--- /dev/null
+++ b/web/src/lib/api.ts
@@ -0,0 +1,40 @@
+export type Song = {
+ title: string;
+ artist: string;
+ source: string;
+ uri: string;
+ weight: number;
+};
+
+export type WsMessage = {
+ cmd: 'add' | 'update' | 'pause' | 'play' | 'upvoted' | 'downvoted';
+ songs: Array<Song>;
+};
+export type SearchResponse = {
+ cmd: 'search';
+ songs: Array<Song>;
+};
+
+const HEADERS = new Headers([
+ ['Accept', 'application/json'],
+ ['Content-Type', 'application/json']
+]);
+const API = {
+ baseUrl: '',
+ get(url: string, body?: Record<string, string>) {
+ if (body !== undefined) {
+ url += '?' + new URLSearchParams(body);
+ }
+ return fetch(this.baseUrl + url, {
+ method: 'GET'
+ });
+ },
+ post(url: string, body?: object) {
+ return fetch(this.baseUrl + url, {
+ method: 'POST',
+ body: body && JSON.stringify(body),
+ headers: HEADERS
+ });
+ }
+};
+export default API;