mirror of
https://github.com/bytedream/stream-bypass.git
synced 2025-05-11 13:15:13 +02:00
Make mv3 compatible
This commit is contained in:
parent
fffe23638c
commit
fe14edc0ef
16
package-lock.json
generated
16
package-lock.json
generated
@ -13,7 +13,6 @@
|
|||||||
"@sveltejs/vite-plugin-svelte": "^2.1.1",
|
"@sveltejs/vite-plugin-svelte": "^2.1.1",
|
||||||
"@tsconfig/svelte": "^4.0.1",
|
"@tsconfig/svelte": "^4.0.1",
|
||||||
"@types/chrome": "^0.0.228",
|
"@types/chrome": "^0.0.228",
|
||||||
"@types/webextension-polyfill": "^0.10.0",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
||||||
"@typescript-eslint/parser": "^6.10.0",
|
"@typescript-eslint/parser": "^6.10.0",
|
||||||
"eslint": "^8.53.0",
|
"eslint": "^8.53.0",
|
||||||
@ -29,8 +28,7 @@
|
|||||||
"tslib": "^2.5.0",
|
"tslib": "^2.5.0",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.0.4",
|
||||||
"vite": "~4.3.3",
|
"vite": "~4.3.3",
|
||||||
"web-ext": "^7.6.2",
|
"web-ext": "^7.6.2"
|
||||||
"webextension-polyfill": "^0.10.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@aashutoshrathi/word-wrap": {
|
"node_modules/@aashutoshrathi/word-wrap": {
|
||||||
@ -1096,12 +1094,6 @@
|
|||||||
"integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
|
"integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/webextension-polyfill": {
|
|
||||||
"version": "0.10.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.10.6.tgz",
|
|
||||||
"integrity": "sha512-tHMENOd86LDISoxw/8C3KFazU1T6X5+eMhI3AS0KU9pYVLYb4kuQ2tIdrpE9aBqd2y8Ix4cVwR/Jwm2fzABTow==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/@types/yauzl": {
|
"node_modules/@types/yauzl": {
|
||||||
"version": "2.10.0",
|
"version": "2.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
|
||||||
@ -7295,12 +7287,6 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/webextension-polyfill": {
|
|
||||||
"version": "0.10.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz",
|
|
||||||
"integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/webidl-conversions": {
|
"node_modules/webidl-conversions": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
"@sveltejs/vite-plugin-svelte": "^2.1.1",
|
"@sveltejs/vite-plugin-svelte": "^2.1.1",
|
||||||
"@tsconfig/svelte": "^4.0.1",
|
"@tsconfig/svelte": "^4.0.1",
|
||||||
"@types/chrome": "^0.0.228",
|
"@types/chrome": "^0.0.228",
|
||||||
"@types/webextension-polyfill": "^0.10.0",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
||||||
"@typescript-eslint/parser": "^6.10.0",
|
"@typescript-eslint/parser": "^6.10.0",
|
||||||
"eslint": "^8.53.0",
|
"eslint": "^8.53.0",
|
||||||
@ -45,8 +44,7 @@
|
|||||||
"tslib": "^2.5.0",
|
"tslib": "^2.5.0",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.0.4",
|
||||||
"vite": "~4.3.3",
|
"vite": "~4.3.3",
|
||||||
"web-ext": "^7.6.2",
|
"web-ext": "^7.6.2"
|
||||||
"webextension-polyfill": "^0.10.0"
|
|
||||||
},
|
},
|
||||||
"type": "module"
|
"type": "module"
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
|
import './shared';
|
||||||
|
|
||||||
import type { Match } from '~/lib/match';
|
import type { Match } from '~/lib/match';
|
||||||
import { storageDelete, storageGet, storageSet } from '~/lib/settings';
|
import { storageDelete, storageGet, storageSet } from '~/lib/settings';
|
||||||
import { getMatch } from '~/lib/match';
|
import { getMatch } from '~/lib/match';
|
||||||
|
|
||||||
chrome.runtime.onMessage.addListener(async (message) => {
|
|
||||||
if (message.action == 'ff2mpv') {
|
|
||||||
await chrome.runtime.sendNativeMessage('ff2mpv', { url: message.url });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
chrome.webRequest.onBeforeRedirect.addListener(
|
chrome.webRequest.onBeforeRedirect.addListener(
|
||||||
async (details) => {
|
async (details) => {
|
||||||
// check if redirects origins from a previous redirect
|
// check if redirects origins from a previous redirect
|
1
src/entries/background/mv3.ts
Normal file
1
src/entries/background/mv3.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
import './shared';
|
5
src/entries/background/shared.ts
Normal file
5
src/entries/background/shared.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
chrome.runtime.onMessage.addListener(async (message) => {
|
||||||
|
if (message.action == 'ff2mpv') {
|
||||||
|
await chrome.runtime.sendNativeMessage('ff2mpv', { url: message.url });
|
||||||
|
}
|
||||||
|
});
|
@ -1,7 +1,6 @@
|
|||||||
import type { Match } from '~/lib/match';
|
import type { Match } from '~/lib/match';
|
||||||
import { getMatch } from '~/lib/match';
|
import { getMatch } from '~/lib/match';
|
||||||
import { Other, Redirect } from '~/lib/settings';
|
import { Other, Redirect } from '~/lib/settings';
|
||||||
import browser from 'webextension-polyfill';
|
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
let match: Match;
|
let match: Match;
|
||||||
@ -25,7 +24,7 @@ async function main() {
|
|||||||
|
|
||||||
// send the url to the ff2mpv (https://github.com/woodruffw/ff2mpv) application
|
// send the url to the ff2mpv (https://github.com/woodruffw/ff2mpv) application
|
||||||
if (await Other.getFf2mpv()) {
|
if (await Other.getFf2mpv()) {
|
||||||
await browser.runtime.sendMessage({ action: 'ff2mpv', url: url });
|
await chrome.runtime.sendMessage({ action: 'ff2mpv', url: url });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (match.replace && !url.includes('.m3u8')) {
|
if (match.replace && !url.includes('.m3u8')) {
|
||||||
@ -39,7 +38,7 @@ async function main() {
|
|||||||
document.body.append(player);
|
document.body.append(player);
|
||||||
} else {
|
} else {
|
||||||
window.location.assign(
|
window.location.assign(
|
||||||
browser.runtime.getURL(
|
chrome.runtime.getURL(
|
||||||
`src/entries/player/player.html?id=${match.id}&url=${encodeURIComponent(url)}&domain=${
|
`src/entries/player/player.html?id=${match.id}&url=${encodeURIComponent(url)}&domain=${
|
||||||
window.location.hostname
|
window.location.hostname
|
||||||
}`
|
}`
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { unpack } from '~/lib/utils';
|
import { unpack } from './utils';
|
||||||
import { Hosters } from '~/lib/settings';
|
import { Hosters } from './settings';
|
||||||
|
|
||||||
export enum Reliability {
|
export enum Reliability {
|
||||||
HIGH,
|
HIGH,
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import browser from 'webextension-polyfill';
|
import type { Match } from './match';
|
||||||
import type { Match } from '~/lib/match';
|
import { matches } from './match';
|
||||||
import { matches } from '~/lib/match';
|
|
||||||
|
|
||||||
export const Hosters = {
|
export const Hosters = {
|
||||||
getDisabled: async () => {
|
getDisabled: async () => {
|
||||||
@ -56,7 +55,7 @@ export const Other = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export async function storageGet<T>(key: string, defaultValue?: T): Promise<T | undefined> {
|
export async function storageGet<T>(key: string, defaultValue?: T): Promise<T | undefined> {
|
||||||
const entry = await browser.storage.local.get(key);
|
const entry = await chrome.storage.local.get(key);
|
||||||
const value = entry[key];
|
const value = entry[key];
|
||||||
return value === undefined ? defaultValue : value;
|
return value === undefined ? defaultValue : value;
|
||||||
}
|
}
|
||||||
@ -65,9 +64,9 @@ export async function storageSet<T>(key: string, value: T) {
|
|||||||
const obj = {
|
const obj = {
|
||||||
[key]: value
|
[key]: value
|
||||||
};
|
};
|
||||||
await browser.storage.local.set(obj);
|
await chrome.storage.local.set(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function storageDelete(key: string) {
|
export async function storageDelete(key: string) {
|
||||||
await browser.storage.local.remove(key);
|
await chrome.storage.local.remove(key);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import pkg from '../package.json';
|
import pkg from '../package.json';
|
||||||
|
import { matches } from './lib/match';
|
||||||
|
|
||||||
const sharedManifest: Partial<chrome.runtime.ManifestBase> = {
|
const sharedManifest: Partial<chrome.runtime.ManifestBase> = {
|
||||||
browser_specific_settings: {
|
browser_specific_settings: {
|
||||||
@ -9,7 +10,7 @@ const sharedManifest: Partial<chrome.runtime.ManifestBase> = {
|
|||||||
content_scripts: [
|
content_scripts: [
|
||||||
{
|
{
|
||||||
all_frames: true,
|
all_frames: true,
|
||||||
matches: ['<all_urls>'],
|
matches: Object.values(matches).flatMap((m) => m.domains.map((d) => `*://${d}/*`)),
|
||||||
js: ['src/entries/contentScript/main.ts'],
|
js: ['src/entries/contentScript/main.ts'],
|
||||||
run_at: 'document_end'
|
run_at: 'document_end'
|
||||||
}
|
}
|
||||||
@ -21,7 +22,7 @@ const sharedManifest: Partial<chrome.runtime.ManifestBase> = {
|
|||||||
96: 'icons/stream-bypass@96px.png',
|
96: 'icons/stream-bypass@96px.png',
|
||||||
128: 'icons/stream-bypass@128px.png'
|
128: 'icons/stream-bypass@128px.png'
|
||||||
},
|
},
|
||||||
permissions: ['storage', 'webRequest', 'nativeMessaging', '<all_urls>']
|
permissions: ['storage', 'nativeMessaging']
|
||||||
};
|
};
|
||||||
|
|
||||||
const browserAction = {
|
const browserAction = {
|
||||||
@ -35,18 +36,19 @@ const browserAction = {
|
|||||||
const ManifestV2 = {
|
const ManifestV2 = {
|
||||||
...sharedManifest,
|
...sharedManifest,
|
||||||
background: {
|
background: {
|
||||||
scripts: ['src/entries/background/main.ts'],
|
scripts: ['src/entries/background/mv2.ts'],
|
||||||
persistent: true
|
persistent: true
|
||||||
},
|
},
|
||||||
|
content_scripts: [{ ...sharedManifest.content_scripts[0], matches: ['<all_urls>'] }],
|
||||||
browser_action: browserAction,
|
browser_action: browserAction,
|
||||||
permissions: [...sharedManifest.permissions]
|
permissions: [...sharedManifest.permissions, 'webRequest', '<all_urls>']
|
||||||
};
|
};
|
||||||
|
|
||||||
const ManifestV3 = {
|
const ManifestV3 = {
|
||||||
...sharedManifest,
|
...sharedManifest,
|
||||||
action: browserAction,
|
action: browserAction,
|
||||||
background: {
|
background: {
|
||||||
service_worker: 'src/entries/background/main.ts'
|
service_worker: 'src/entries/background/mv3.ts'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -71,6 +73,9 @@ export function getManifest(
|
|||||||
if (manifestVersion === 3) {
|
if (manifestVersion === 3) {
|
||||||
return {
|
return {
|
||||||
...manifest,
|
...manifest,
|
||||||
|
// just like all the adblockers which are unable to fully work under MV3, we need access to every website
|
||||||
|
// the user enters in order to work correctly, which is forbidden when using MV3
|
||||||
|
name: `${manifest.name} Lite`,
|
||||||
...ManifestV3,
|
...ManifestV3,
|
||||||
manifest_version: manifestVersion
|
manifest_version: manifestVersion
|
||||||
};
|
};
|
||||||
|
@ -3,6 +3,7 @@ import { svelte } from '@sveltejs/vite-plugin-svelte';
|
|||||||
import webExtension from '@samrum/vite-plugin-web-extension';
|
import webExtension from '@samrum/vite-plugin-web-extension';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { getManifest } from './src/manifest';
|
import { getManifest } from './src/manifest';
|
||||||
|
import { matches } from './src/lib/match';
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig(({ mode }) => {
|
export default defineConfig(({ mode }) => {
|
||||||
@ -18,8 +19,10 @@ export default defineConfig(({ mode }) => {
|
|||||||
{
|
{
|
||||||
fileName: 'src/entries/player/player.html',
|
fileName: 'src/entries/player/player.html',
|
||||||
webAccessible: {
|
webAccessible: {
|
||||||
matches: ['<all_urls>'],
|
matches:
|
||||||
excludeEntryFile: true
|
Number(env.MANIFEST_VERSION) === 3
|
||||||
|
? Object.values(matches).flatMap((m) => m.domains.map((d) => `*://${d}/*`))
|
||||||
|
: ['<all_urls>']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user