|
1 |
| -const { merge } = require('lodash'); |
| 1 | +// eslint-disable-next-line import/no-extraneous-dependencies |
| 2 | +const { default: merge } = require('webpack-merge'); |
2 | 3 | const fs = require('fs');
|
3 | 4 | const path = require('path');
|
4 | 5 | const packageJson = require('../package.json');
|
5 | 6 |
|
6 | 7 | const manifestTemplate = {
|
7 |
| - manifest_version: 2, |
8 | 8 | name: packageJson.extensionName,
|
9 | 9 | version: packageJson.version,
|
10 | 10 | description: packageJson.description,
|
11 | 11 | options_ui: {
|
12 | 12 | page: 'options.html',
|
13 | 13 | open_in_tab: true,
|
14 | 14 | },
|
15 |
| - browser_action: { |
16 |
| - default_popup: 'popup.html', |
17 |
| - }, |
18 |
| - background: { |
19 |
| - scripts: ['background-script.js'], |
20 |
| - }, |
21 |
| - web_accessible_resources: ['window-proxy-script.js'], |
22 |
| - permissions: [ |
23 |
| - 'storage', |
24 |
| - '*://api.aniskip.com/*', |
25 |
| - '*://api.malsync.moe/*', |
26 |
| - '*://graphql.anilist.co/*', |
27 |
| - '*://beta-api.crunchyroll.com/*', |
28 |
| - ], |
| 15 | + permissions: ['storage'], |
29 | 16 | icons: {
|
30 | 17 | 16: 'icon_16.png',
|
31 | 18 | 48: 'icon_48.png',
|
32 | 19 | 128: 'icon_128.png',
|
33 | 20 | },
|
34 | 21 | };
|
35 | 22 |
|
| 23 | +const apiPermissions = [ |
| 24 | + '*://api.aniskip.com/*', |
| 25 | + '*://api.malsync.moe/*', |
| 26 | + '*://graphql.anilist.co/*', |
| 27 | + '*://beta-api.crunchyroll.com/*', |
| 28 | +]; |
| 29 | + |
| 30 | +const backgroundScript = 'background-script.js'; |
| 31 | +const windowProxyScript = 'window-proxy-script.js'; |
| 32 | + |
36 | 33 | const browser = process.env.BROWSER;
|
37 | 34 |
|
38 | 35 | const getPageUrls = () => {
|
@@ -97,26 +94,42 @@ module.exports = () => {
|
97 | 94 | switch (browser) {
|
98 | 95 | case 'chromium':
|
99 | 96 | return merge(manifestTemplate, {
|
100 |
| - options_ui: { |
101 |
| - chrome_style: false, |
| 97 | + manifest_version: 3, |
| 98 | + background: { |
| 99 | + service_worker: backgroundScript, |
102 | 100 | },
|
103 |
| - browser_action: { |
| 101 | + action: { |
| 102 | + default_popup: 'popup.html', |
104 | 103 | chrome_style: false,
|
105 | 104 | },
|
| 105 | + host_permissions: apiPermissions, |
| 106 | + web_accessible_resources: [ |
| 107 | + { |
| 108 | + resources: [windowProxyScript], |
| 109 | + matches: ['https://beta.crunchyroll.com/*'], |
| 110 | + }, |
| 111 | + ], |
106 | 112 | });
|
107 | 113 | case 'firefox':
|
108 | 114 | return merge(manifestTemplate, {
|
| 115 | + manifest_version: 2, |
| 116 | + background: { |
| 117 | + scripts: [backgroundScript], |
| 118 | + }, |
109 | 119 | options_ui: {
|
110 | 120 | browser_style: false,
|
111 | 121 | },
|
112 | 122 | browser_action: {
|
| 123 | + default_popup: 'popup.html', |
113 | 124 | browser_style: false,
|
114 | 125 | },
|
115 | 126 | browser_specific_settings: {
|
116 | 127 | gecko: {
|
117 | 128 | id: '{c67645fa-ad86-4b2f-ab7a-67fc5f3e9f5a}',
|
118 | 129 | },
|
119 | 130 | },
|
| 131 | + permissions: apiPermissions, |
| 132 | + web_accessible_resources: [windowProxyScript], |
120 | 133 | });
|
121 | 134 | default:
|
122 | 135 | throw new Error(`Invalid browser type '${browser}'`);
|
|
0 commit comments