-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathapiClient.js
More file actions
111 lines (93 loc) · 2.4 KB
/
apiClient.js
File metadata and controls
111 lines (93 loc) · 2.4 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
import 'isomorphic-fetch';
import { version as cliVersion } from '../package.json';
class ApiClient {
constructor({
apikey,
apihost = 'https://api.logrocket.com',
}) {
this.apikey = apikey;
this.apihost = apihost;
}
get headers() {
return {
Authorization: `Token ${this.apikey}`,
Accept: 'application/json',
'Content-Type': 'application/json',
'X-LogRocket-Cli-Version': cliVersion,
};
}
async _makeRequest({ url, data }) {
const [orgSlug, appSlug] = this.apikey.split(':');
return fetch(`${this.apihost}/v1/orgs/${orgSlug}/apps/${appSlug}/${url}/`, {
method: 'POST',
headers: this.headers,
body: JSON.stringify(data),
});
}
async checkStatus() {
const res = await fetch(`${this.apihost}/cli/status/`, {
headers: this.headers,
});
if (res.status === 204) {
return;
}
let data;
try {
data = await res.json();
} catch (err) {
console.error('Could not verify CLI status. Check your network connection and reinstall the LogRocket CLI if the problem persists.');
process.exit(1);
}
if (!res.ok) {
console.error(data.message);
process.exit(1);
} else {
console.info(data.message);
}
}
async createRelease({ version }) {
return this._makeRequest({
url: 'releases',
data: { version },
});
}
async uploadFile({ release, filepath, contents }) {
const res = await this._makeRequest({
url: `releases/${release}/artifacts`,
data: { filepath },
});
if (!res.ok) {
return res;
}
const fileData = await res.json();
const gcloudUrl = fileData.signed_url;
if (!gcloudUrl) {
throw new Error(`Could not get upload url for: ${filepath}`);
}
const result = fetch(gcloudUrl, {
method: 'PUT',
body: contents,
});
if (this._gcsBucket) {
await fetch(`${this.apihost}/gcloud/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Goog-Channel-Token': this._gcsToken,
},
body: JSON.stringify({
name: fileData.name,
bucket: this._gcsBucket,
}),
});
}
return result;
}
setGCSData({ gcsToken, gcsBucket }) {
this._gcsToken = gcsToken;
this._gcsBucket = gcsBucket;
}
}
export default function apiClient(config) {
return new ApiClient(config);
}