/
index.ts
50 lines (40 loc) · 1.27 KB
/
index.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
import { runtime, tabs } from 'webextension-polyfill';
import { uploadImg } from '@/api/sm-img';
import { base64ToFile, initStorage } from '@/utils';
import { ExtensionMessageType, OptionsRouteNames, OptionsRoutePaths } from '@/constants';
import type { Base64File, ExtensionMessage } from '@/types';
const openOptionsPage = async (path?: string) => {
let optionsPageUrl = runtime.getURL('src/options.html');
const [tab] = await tabs.query({
url: optionsPageUrl,
});
optionsPageUrl += `#${path || OptionsRoutePaths[OptionsRouteNames.BasicSetting]}`;
if (tab) {
tabs.update(tab.id, {
url: optionsPageUrl,
active: true,
});
} else {
tabs.create({
url: optionsPageUrl,
});
}
};
runtime.onInstalled.addListener(async (details) => {
const { reason } = details;
await initStorage();
if (reason === 'install') {
openOptionsPage();
}
});
runtime.onMessage.addListener(async (message: ExtensionMessage) => {
switch (message.msgType) {
case ExtensionMessageType.OpenOptionsPage:
openOptionsPage(message.extPagePath);
return;
case ExtensionMessageType.UploadImg: {
const imgFile = base64ToFile(message.imgFile as Base64File);
return await uploadImg(message.apiKey as string, imgFile);
}
}
});