import 'babel-polyfill'; export default class API { constructor() { this.loggedIn = false; this.user = { }; } csrfToken() { return this.loggedIn ? this.user.session.csrf_token : null; } async apiCall(method, params) { params = params || { }; params.csrf_token = this.csrfToken(); let response = await fetch("/api/" + method, { method: 'post', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(params) }); return await response.json(); } async fetchUser() { let response = await fetch("/api/user/info"); let data = await response.json(); this.user = data["user"]; this.loggedIn = data["loggedIn"]; return data && data.success && data.loggedIn; } async logout() { return this.apiCall("user/logout"); } async getNotifications() { return this.apiCall("notifications/fetch"); } async fetchUsers(pageNum = 1) { return this.apiCall("user/fetch", { page: pageNum }); } async fetchGroups(pageNum = 1) { return this.apiCall("groups/fetch", { page: pageNum }); } async inviteUser(username, email) { return this.apiCall("user/invite", { username: username, email: email }); } async createUser(username, email, password, confirmPassword) { return this.apiCall("user/create", { username: username, email: email, password: password, confirmPassword: confirmPassword }); } };