-
Notifications
You must be signed in to change notification settings - Fork 10
/
wrapper.js
45 lines (36 loc) · 1.3 KB
/
wrapper.js
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
import "promise-polyfill/src/polyfill";
import "whatwg-fetch";
import { decodeCookie } from "./cookie";
const HEADER = "X-CSRFToken";
const json = e => e.json();
function postJSON(endpoint, payload, csrf) {
return fetch(endpoint, {
method: "POST",
credentials: "same-origin",
headers: {
"Content-type": "application/json",
[HEADER]: csrf,
},
body: JSON.stringify(payload),
}).then(json);
}
export default class Api {
constructor (csrf) {
this.csrf = csrf || decodeCookie(document.cookie).csrftoken;
}
checkUsername(username) {
return fetch(`/api/user/username-valid/${encodeURIComponent(username)}`)
.then(json).then(({ usernameValid }) => usernameValid);
}
login(username, password) {
return postJSON("/api/user/login", { username, password }, this.csrf);
}
createAccount(displayName, username, password, email) {
return postJSON("/api/user/new", email ?
{ displayName, username, password, email } :
{ displayName, username, password }, this.csrf);
}
getPrograms(src, offset, limit = 20) {
return fetch(`${src}?offset=${offset}&limit=${limit}`).then(json).then(res => res.programs); //TODO: way of auto-encoding queryParams?
}
}