mirror of
https://github.com/bytedream/stream-bypass.git
synced 2025-05-12 13:45:13 +02:00
Compare commits
No commits in common. "main" and "v3.1.4" have entirely different histories.
1975
package-lock.json
generated
1975
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
26
package.json
26
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "stream-bypass",
|
"name": "stream-bypass",
|
||||||
"version": "3.1.6",
|
"version": "3.1.4",
|
||||||
"displayName": "Stream Bypass",
|
"displayName": "Stream Bypass",
|
||||||
"author": "bytedream",
|
"author": "bytedream",
|
||||||
"description": "Multi-browser addon for multiple streaming providers which redirects directly to the source video",
|
"description": "Multi-browser addon for multiple streaming providers which redirects directly to the source video",
|
||||||
@ -29,23 +29,23 @@
|
|||||||
"@samrum/vite-plugin-web-extension": "^5.1.1",
|
"@samrum/vite-plugin-web-extension": "^5.1.1",
|
||||||
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
||||||
"@tsconfig/svelte": "^5.0.4",
|
"@tsconfig/svelte": "^5.0.4",
|
||||||
"@types/chrome": "^0.0.320",
|
"@types/chrome": "^0.0.313",
|
||||||
"@types/firefox-webext-browser": "^120.0.4",
|
"@types/firefox-webext-browser": "^120.0.4",
|
||||||
"eslint": "^9.26.0",
|
"eslint": "^9.23.0",
|
||||||
"eslint-config-prettier": "^10.1.3",
|
"eslint-config-prettier": "^10.1.1",
|
||||||
"eslint-plugin-svelte": "^3.5.1",
|
"eslint-plugin-svelte": "^3.5.0",
|
||||||
"hls.js": "^1.6.2",
|
"hls.js": "^1.6.0",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"prettier-plugin-svelte": "^3.3.3",
|
"prettier-plugin-svelte": "^3.3.3",
|
||||||
"sass": "^1.87.0",
|
"sass": "^1.86.2",
|
||||||
"svelte": "^5.28.2",
|
"svelte": "^5.25.6",
|
||||||
"svelte-check": "^4.1.7",
|
"svelte-check": "^4.1.5",
|
||||||
"svelte-preprocess": "^6.0.3",
|
"svelte-preprocess": "^6.0.3",
|
||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.2",
|
||||||
"typescript-eslint": "^8.32.0",
|
"typescript-eslint": "^8.29.0",
|
||||||
"vite": "^6.3.5",
|
"vite": "^6.2.5",
|
||||||
"web-ext": "^8.6.0"
|
"web-ext": "^8.5.0"
|
||||||
},
|
},
|
||||||
"type": "module"
|
"type": "module"
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,6 @@ export interface Match {
|
|||||||
): Promise<
|
): Promise<
|
||||||
string | { [MatchMediaType.Hls]: string } | { [MatchMediaType.Native]: string } | null
|
string | { [MatchMediaType.Hls]: string } | { [MatchMediaType.Native]: string } | null
|
||||||
>;
|
>;
|
||||||
|
|
||||||
// allow other properties that may be implemented by the objects that use this interface declaration
|
|
||||||
[other: string]: any;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum MatchMediaType {
|
export enum MatchMediaType {
|
||||||
@ -51,7 +48,7 @@ export const Doodstream: Match = {
|
|||||||
replace: true,
|
replace: true,
|
||||||
regex: [/(\/pass_md5\/.*?)'.*(\?token=.*?expiry=)/s],
|
regex: [/(\/pass_md5\/.*?)'.*(\?token=.*?expiry=)/s],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const response = await fetch(`https://${window.location.host}${match[1]}`, {
|
const response = await fetch(`https://${window.location.host}${match[1]}`, {
|
||||||
headers: {
|
headers: {
|
||||||
Range: 'bytes=0-'
|
Range: 'bytes=0-'
|
||||||
@ -67,10 +64,10 @@ export const Doodstream: Match = {
|
|||||||
export const DropLoad: Match = {
|
export const DropLoad: Match = {
|
||||||
name: 'Dropload',
|
name: 'Dropload',
|
||||||
id: 'dropload',
|
id: 'dropload',
|
||||||
domains: ['dropload.io'],
|
domains: ['dropload.ui'],
|
||||||
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const unpacked = await unpack(match[0]);
|
const unpacked = await unpack(match[0]);
|
||||||
return unpacked.match(/(?<=file:").*(?=")/)![0];
|
return unpacked.match(/(?<=file:").*(?=")/)![0];
|
||||||
}
|
}
|
||||||
@ -83,7 +80,7 @@ export const Filemoon: Match = {
|
|||||||
regex: [/(?<=<iframe\s*src=")\S*(?=")/s, /eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/(?<=<iframe\s*src=")\S*(?=")/s, /eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
replace: true,
|
replace: true,
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
if (window.location.host.startsWith('filemoon')) {
|
if (window.location.host.startsWith('filemoon')) {
|
||||||
await TmpHost.set(new URL(match[0]).host, Filemoon);
|
await TmpHost.set(new URL(match[0]).host, Filemoon);
|
||||||
return null;
|
return null;
|
||||||
@ -102,7 +99,7 @@ export const GoodStream: Match = {
|
|||||||
domains: ['goodstream.uno'],
|
domains: ['goodstream.uno'],
|
||||||
regex: [/(?<=file:\s+").*(?=")/g],
|
regex: [/(?<=file:\s+").*(?=")/g],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
return match[0];
|
return match[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -113,7 +110,7 @@ export const Kwik: Match = {
|
|||||||
domains: ['kwik.cx'],
|
domains: ['kwik.cx'],
|
||||||
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const unpacked = await unpack(match[0]);
|
const unpacked = await unpack(match[0]);
|
||||||
return unpacked.match(/(?<=source=').*(?=')/)![0];
|
return unpacked.match(/(?<=source=').*(?=')/)![0];
|
||||||
}
|
}
|
||||||
@ -181,10 +178,10 @@ export const Luluvdo: Match = {
|
|||||||
export const Mixdrop: Match = {
|
export const Mixdrop: Match = {
|
||||||
name: 'Mixdrop',
|
name: 'Mixdrop',
|
||||||
id: 'mixdrop',
|
id: 'mixdrop',
|
||||||
domains: ['mixdrop.bz', 'mixdrop.ch', 'mixdrop.co', 'mixdrop.gl', 'mixdrop.my', 'mixdrop.to'],
|
domains: ['mixdrop.co', 'mixdrop.to', 'mixdrop.ch', 'mixdrop.bz', 'mixdrop.gl'],
|
||||||
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const unpacked = await unpack(match[0]);
|
const unpacked = await unpack(match[0]);
|
||||||
const url = unpacked.match(/(?<=MDCore.wurl=").*(?=")/)![0];
|
const url = unpacked.match(/(?<=MDCore.wurl=").*(?=")/)![0];
|
||||||
return `https:${url}`;
|
return `https:${url}`;
|
||||||
@ -198,7 +195,7 @@ export const Mp4Upload: Match = {
|
|||||||
replace: true,
|
replace: true,
|
||||||
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const unpacked = await unpack(match[0]);
|
const unpacked = await unpack(match[0]);
|
||||||
return unpacked.match(/(?<=player.src\(").*(?=")/)![0];
|
return unpacked.match(/(?<=player.src\(").*(?=")/)![0];
|
||||||
}
|
}
|
||||||
@ -228,7 +225,7 @@ export const StreamA2z: Match = {
|
|||||||
domains: ['streama2z.com', 'streama2z.xyz'],
|
domains: ['streama2z.com', 'streama2z.xyz'],
|
||||||
regex: [/https?:\/\/\S*m3u8.+(?=['"])/gm],
|
regex: [/https?:\/\/\S*m3u8.+(?=['"])/gm],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
if (StreamA2z.domains.indexOf(window.location.hostname) !== -1) {
|
if (StreamA2z.domains.indexOf(window.location.hostname) !== -1) {
|
||||||
await Redirect.set(StreamA2z);
|
await Redirect.set(StreamA2z);
|
||||||
return null;
|
return null;
|
||||||
@ -243,7 +240,7 @@ export const Streamtape: Match = {
|
|||||||
domains: ['streamtape.com', 'streamtape.net', 'shavetape.cash'],
|
domains: ['streamtape.com', 'streamtape.net', 'shavetape.cash'],
|
||||||
regex: [/id=.*(?=')/gm],
|
regex: [/id=.*(?=')/gm],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
let i = 0;
|
let i = 0;
|
||||||
while (i < match.length) {
|
while (i < match.length) {
|
||||||
if (match[++i - 1] == match[i]) {
|
if (match[++i - 1] == match[i]) {
|
||||||
@ -262,7 +259,7 @@ export const Streamzz: Match = {
|
|||||||
domains: ['streamzz.to', 'streamz.ws'],
|
domains: ['streamzz.to', 'streamz.ws'],
|
||||||
regex: [/(?<=\|)\w{2,}/gm],
|
regex: [/(?<=\|)\w{2,}/gm],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
return `https://get.${location.hostname.split('.')[0]}.tw/getlink-${
|
return `https://get.${location.hostname.split('.')[0]}.tw/getlink-${
|
||||||
match.sort((a, b) => b.length - a.length)[0]
|
match.sort((a, b) => b.length - a.length)[0]
|
||||||
}.dll`;
|
}.dll`;
|
||||||
@ -272,10 +269,10 @@ export const Streamzz: Match = {
|
|||||||
export const SuperVideo: Match = {
|
export const SuperVideo: Match = {
|
||||||
name: 'Supervideo',
|
name: 'Supervideo',
|
||||||
id: 'supervideo',
|
id: 'supervideo',
|
||||||
domains: ['supervideo.cc', 'supervideo.tv'],
|
domains: ['supervideo.tv'],
|
||||||
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const unpacked = await unpack(match[0]);
|
const unpacked = await unpack(match[0]);
|
||||||
return unpacked.match(/(?<=file:").*(?=")/)![0];
|
return unpacked.match(/(?<=file:").*(?=")/)![0];
|
||||||
}
|
}
|
||||||
@ -287,7 +284,7 @@ export const Upstream: Match = {
|
|||||||
domains: ['upstream.to'],
|
domains: ['upstream.to'],
|
||||||
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
regex: [/eval\(function\(p,a,c,k,e,d\).*?(?=<\/script>)/gms],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
const unpacked = await unpack(match[0]);
|
const unpacked = await unpack(match[0]);
|
||||||
return unpacked.match(/(?<=file:").*(?=")/)![0];
|
return unpacked.match(/(?<=file:").*(?=")/)![0];
|
||||||
}
|
}
|
||||||
@ -300,7 +297,7 @@ export const Vidmoly: Match = {
|
|||||||
regex: [/(?<=file:").+\.m3u8/gm],
|
regex: [/(?<=file:").+\.m3u8/gm],
|
||||||
replace: true,
|
replace: true,
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
return match[0];
|
return match[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -312,7 +309,7 @@ export const Vidoza: Match = {
|
|||||||
regex: [/(?<=src:\s?").+?(?=")/gm],
|
regex: [/(?<=src:\s?").+?(?=")/gm],
|
||||||
replace: true,
|
replace: true,
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
return match[0];
|
return match[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -325,63 +322,17 @@ export const Voe: Match = {
|
|||||||
// voe.sx
|
// voe.sx
|
||||||
/(?<=window\.location\.href\s=\s')\S*(?=')/gm,
|
/(?<=window\.location\.href\s=\s')\S*(?=')/gm,
|
||||||
// whatever site voe.sx redirects to
|
// whatever site voe.sx redirects to
|
||||||
/(?<=<script type="application\/json">).*(?=<\/script>)/m
|
/(?<='hls':\s*')\S*(?=')/gm
|
||||||
],
|
],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
if (window.location.host === 'voe.sx') {
|
if (window.location.host === 'voe.sx') {
|
||||||
const redirectUrl = new URL(match[0]);
|
const redirectUrl = new URL(match[0]);
|
||||||
await TmpHost.set(redirectUrl.host, Voe);
|
await TmpHost.set(redirectUrl.host, Voe);
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
let json = match[0];
|
return atob(match[0]);
|
||||||
json = JSON.parse(json);
|
|
||||||
|
|
||||||
let deobfuscated = json[0];
|
|
||||||
deobfuscated = this.rot13(deobfuscated);
|
|
||||||
deobfuscated = this.removeSpecialSequences(deobfuscated);
|
|
||||||
deobfuscated = atob(deobfuscated);
|
|
||||||
deobfuscated = this.shiftString(deobfuscated);
|
|
||||||
deobfuscated = deobfuscated.split('').reverse().join('');
|
|
||||||
deobfuscated = atob(deobfuscated);
|
|
||||||
|
|
||||||
const payload = JSON.parse(deobfuscated);
|
|
||||||
|
|
||||||
return payload['source'];
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
|
|
||||||
rot13: function (encrypted: string) {
|
|
||||||
let decrypted = '';
|
|
||||||
for (let i = 0; i < encrypted.length; i++) {
|
|
||||||
let char = encrypted.charCodeAt(i);
|
|
||||||
if (char >= 65 && char <= 90) {
|
|
||||||
char = ((char - 65 + 13) % 26) + 65;
|
|
||||||
} else if (char >= 97 && char <= 122) {
|
|
||||||
char = ((char - 97 + 13) % 26) + 97;
|
|
||||||
}
|
|
||||||
decrypted += String.fromCharCode(char);
|
|
||||||
}
|
|
||||||
return decrypted;
|
|
||||||
},
|
|
||||||
removeSpecialSequences: function (input: string) {
|
|
||||||
return input
|
|
||||||
.replaceAll(/@\$/g, '')
|
|
||||||
.replaceAll(/\^\^/g, '')
|
|
||||||
.replaceAll(/~@/g, '')
|
|
||||||
.replaceAll(/%\?/g, '')
|
|
||||||
.replaceAll(/\*~/g, '')
|
|
||||||
.replaceAll(/!!/g, '')
|
|
||||||
.replaceAll(/#&/g, '');
|
|
||||||
},
|
|
||||||
shiftString: function (input: string) {
|
|
||||||
let shifted = '';
|
|
||||||
for (let i = 0; i < input.length; i++) {
|
|
||||||
const char = input.charCodeAt(i);
|
|
||||||
const shiftedChar = char - 3;
|
|
||||||
shifted += String.fromCharCode(shiftedChar);
|
|
||||||
}
|
|
||||||
return shifted;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -391,7 +342,7 @@ export const Vupload: Match = {
|
|||||||
domains: ['vupload.com'],
|
domains: ['vupload.com'],
|
||||||
regex: [/(?<=src:\s?").+?(?=")/gm],
|
regex: [/(?<=src:\s?").+?(?=")/gm],
|
||||||
|
|
||||||
match: async function (match: RegExpMatchArray) {
|
match: async (match: RegExpMatchArray) => {
|
||||||
return match[0];
|
return match[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"extends": "@tsconfig/svelte/tsconfig.json",
|
"extends": "@tsconfig/svelte/tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"target": "es2021",
|
"target": "es2019",
|
||||||
"module": "esnext",
|
"module": "esnext",
|
||||||
"useDefineForClassFields": true,
|
"useDefineForClassFields": true,
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user