-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathapi-client.js
More file actions
119 lines (107 loc) · 2.73 KB
/
api-client.js
File metadata and controls
119 lines (107 loc) · 2.73 KB
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
const JsonApiDataStore = require('jsonapi-datastore').Store;
const Config = require('electron-config');
const https = require('https');
class ApiClient {
constructor() {
this.config = new Config();
this.store = new JsonApiDataStore();
}
token() {
return this.config.get('token');
}
email() {
return this.config.get('email');
}
logIn(email, password, callback) {
var me = this;
this.config.set('email', email);
var req = https.request({
method: 'POST',
host: 'api.op1.fun',
path: '/v1/api_token',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}, function(res) {
var body = '';
res.on('data', function(d) { body += d; });
res.on('end', function() {
var res = JSON.parse(body);
if (res.api_token) {
me.config.set('token', res.api_token);
}
me.enableAppFeatureFlag();
callback(res);
});
});
req.write(JSON.stringify({ email: email, password: password }));
req.end();
}
enableAppFeatureFlag() {
this._post('feature_flags', { flags: { app: true } }, function() {});
}
logOut(callback) {
this.config.set('email', null);
this.config.set('token', null);
callback();
}
isLoggedIn() {
return (this.email() && this.token());
}
getPack(path, id, callback) {
var me = this;
this._get(path, function() {
var pack = me.store.find("packs", id);
callback(pack);
})
}
getPatch(path, id, callback) {
var me = this;
this._get(path, function() {
var patch = me.store.find("patches", id);
callback(patch);
})
}
_get(path, callback) {
var me = this;
return https.get({
host: 'api.op1.fun',
path: '/v1/' + path,
headers: {
'X-User-Email': this.email(),
'X-User-Token': this.token()
}
}, function(res) {
var body = '';
res.on('data', function(d) { body += d; });
res.on('end', function() {
me.store.sync(JSON.parse(body));
callback();
});
});
}
_post(path, data, callback) {
var me = this;
var req = https.request({
method: 'POST',
host: 'api.op1.fun',
path: '/v1/' + path,
headers: {
'X-User-Email': this.email(),
'X-User-Token': this.token(),
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}, function(res) {
var body = '';
res.on('data', function(d) { body += d; });
res.on('end', function() { callback(body); });
});
console.log(data);
console.log(JSON.stringify(data));
req.write(JSON.stringify(data));
req.end();
}
}
module.exports = ApiClient;