-
Notifications
You must be signed in to change notification settings - Fork 6
/
uploadAppBundle.ts
56 lines (47 loc) · 1.64 KB
/
uploadAppBundle.ts
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
import { readFileSync } from 'node:fs';
/**
* Function that uploads a zip bundle to the endpoint.
* @param endpoint string The endpoint to upload to
* @param bundle string The filename to upload
* @returns Object
*/
export const uploadAppBundle = async (endpoint: string, bundle: string) => {
const state: { buffer: Buffer | null } = {
buffer: null,
};
try {
state.buffer = readFileSync(bundle);
} catch {
throw new Error(`😞 Could not read bundle ${bundle}, does it exist?`);
}
const requestBundle = await fetch(endpoint, {
method: 'POST',
body: state.buffer,
headers: {
Authorization: `Bearer ${process.env.FUSION_TOKEN}`,
'Content-Type': 'application/zip',
},
});
if (requestBundle.status === 401 || requestBundle.status === 403) {
throw new Error(
`This is not allowed for this role on this app. HTTP message: ${requestBundle.statusText}`,
);
}
if (requestBundle.status === 404) {
throw new Error(`This app do not exist. HTTP message: ${requestBundle.statusText}`);
}
if (requestBundle.status === 409) {
throw new Error(
`This version is already published. HTTP message: ${requestBundle.statusText}`,
);
}
if (requestBundle.status === 410) {
throw new Error(`This app is deleted. HTTP message: ${requestBundle.statusText}`);
}
if (!requestBundle.ok) {
throw new Error(
`Failed to publish bundle. HTTP status ${requestBundle.status}, ${requestBundle.statusText}`,
);
}
return await requestBundle.json();
};