-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathpublish.ts
More file actions
65 lines (48 loc) · 2.25 KB
/
publish.ts
File metadata and controls
65 lines (48 loc) · 2.25 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
import axios from "axios";
import * as fs from "fs-extra";
import { getConfig, getVersion, IConfig } from "./ci";
import Logger from "./src/logger";
const _logger = new Logger("publish");
const run = async () => {
const config = await getConfig();
const version = await getVersion();
const token = await refreshToken(config);
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
axios.defaults.headers.common["Content-Type"] = "application/json";
axios.defaults.headers.common["x-goog-api-version"] = "2";
// await uploadPackage(token, config.googleApi.amazonMusicAppId, `AmazonMusicControls.${version}.zip`);
// await publish(token, config.googleApi.amazonMusicAppId);
await uploadPackage(token, config.googleApi.spotifyAppId, `SpotifyControls.${version}.zip`);
await publish(token, config.googleApi.spotifyAppId);
};
const refreshToken = async (config: IConfig) => {
_logger.info("refreshToken");
const url = `https://www.googleapis.com/oauth2/v4/token?client_id=${config.googleApi.clientId}&client_secret=${config.googleApi.clientSecret}&refresh_token=${config.googleApi.refreshToken}&grant_type=refresh_token&redirect_uri=urn:ietf:wg:oauth:2.0:oob`;
const result = await axios.post(url, {
headers: {
"Content-Type": "application/json"
}
});
_logger.info({ status: result.status, data: result.data });
return result.data.access_token;
};
const uploadPackage = async (token: string, appId: string, file: string) => {
_logger.info("uploadPackage", { token, appId, file });
const path = `./uploads/${file}`;
const buffer = await fs.readFile(path);
const url = `https://www.googleapis.com/upload/chromewebstore/v1.1/items/${appId}`;
const result = await axios.put(url, buffer);
_logger.info({ status: result.status, data: result.data });
if (result.data.uploadState !== "SUCCESS") {
_logger.info({ data: JSON.stringify(result.data) });
throw new Error(`Failed to upload a package`);
}
};
const publish = async (token: string, appId: string) => {
_logger.info("publish");
const url = `https://www.googleapis.com/chromewebstore/v1.1/items/${appId}/publish`;
const result = await axios.post(url, {
});
_logger.info({ status: result.status, data: result.data });
};
(async () => await run())();