2 Commits

Author SHA1 Message Date
f0a546fd60 update prettier ignored files list 2025-11-08 16:35:04 +01:00
c5f6477d5f update 2025-11-08 16:30:42 +01:00
7 changed files with 62 additions and 179 deletions

View File

@@ -12,8 +12,7 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Setup node - uses: actions/setup-node@v6
uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 22
cache: 'npm' cache: 'npm'
@@ -37,4 +36,4 @@ jobs:
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v5
with: with:
name: stream-bypass-mv3 name: stream-bypass-mv3
path: .output/chrome-mv3 path: .output/firefox-mv3

View File

@@ -1,28 +1,23 @@
name: lint name: lint
on: on:
push: push:
branches: pull_request:
- '**'
tags-ignore:
- '*'
pull_request:
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Setup node - uses: actions/setup-node@v6
uses: actions/setup-node@v6 with:
with: node-version: 22
node-version: 22 cache: 'npm'
cache: 'npm'
- name: Install dependencies - name: Install dependencies
run: npm ci run: npm ci
- name: Lint - name: Lint
run: npm run lint run: npm run lint

View File

@@ -1,85 +0,0 @@
name: publish
on:
push:
tags:
- v*
workflow_dispatch:
inputs:
dry_run:
type: boolean
description: Dry run
default: true
permissions:
contents: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Setup node
uses: actions/setup-node@v6
with:
node-version: 22
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Zip extensions
run: |
npm run zip:firefox
npm run zip
- name: Resolve zip extension paths
id: paths
run: |
MV2_PATH=$(find .output -type f -name "*-mv2.zip")
MV2_NAME=$(basename $MV2_PATH)
MV3_PATH=$(find .output -type f -name "*-mv3.zip")
MV3_NAME=$(basename $MV3_PATH)
echo "mv2_path=$MV2_PATH" >> "$GITHUB_OUTPUT"
echo "mv2_name=$MV2_NAME" >> "$GITHUB_OUTPUT"
echo "mv3_path=$MV3_PATH" >> "$GITHUB_OUTPUT"
echo "mv3_name=$MV3_NAME" >> "$GITHUB_OUTPUT"
- name: Upload mv2 as artifact
uses: actions/upload-artifact@v5
with:
name: ${{ steps.paths.outputs.mv2_name }}
path: ${{ steps.paths.outputs.mv2_path }}
- name: Upload mv3 as artifact
uses: actions/upload-artifact@v5
with:
name: ${{ steps.paths.outputs.mv3_name }}
path: ${{ steps.paths.outputs.mv3_path }}
- name: Upload to latest release
if: github.event.inputs.dry_run != 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: .output/*mv*.zip
tag: ${{ github.ref }}
overwrite: true
file_glob: true
- name: Submit to stores
env:
DRY_RUN: ${{ github.event.inputs.dry_run }}
FIREFOX_EXTENSION_ID: ${{ secrets.FIREFOX_EXTENSION_ID }}
FIREFOX_JWT_ISSUER: ${{ secrets.FIREFOX_JWT_ISSUER }}
FIREFOX_JWT_SECRET: ${{ secrets.FIREFOX_JWT_SECRET }}
CHROME_EXTENSION_ID: ${{ secrets.CHROME_EXTENSION_ID }}
CHROME_CLIENT_ID: ${{ secrets.CHROME_CLIENT_ID }}
CHROME_CLIENT_SECRET: ${{ secrets.CHROME_CLIENT_SECRET }}
CHROME_REFRESH_TOKEN: ${{ secrets.CHROME_REFRESH_TOKEN }}
run: |
npx wxt submit \
--firefox-zip .output/*-mv2.zip --firefox-sources-zip .output/*-sources.zip \
--chrome-zip .output/*-mv3.zip

View File

@@ -4,7 +4,7 @@ A multi-browser addon / extension for multiple streaming providers which redirec
<p align="center"> <p align="center">
<a href="https://github.com/bytedream/stream-bypass/releases/latest"> <a href="https://github.com/bytedream/stream-bypass/releases/latest">
<img src="https://img.shields.io/github/v/release/bytedream/stream-bypass?label=Version&style=flat-square" alt="Version"> <img src="https://img.shields.io/github/v/release/ByteDream/stream-bypass?label=Version&style=flat-square" alt="Version">
</a> </a>
<a href="https://addons.mozilla.org/de/firefox/addon/stream-bypass/"> <a href="https://addons.mozilla.org/de/firefox/addon/stream-bypass/">
<img src="https://img.shields.io/amo/users/stream-bypass?label=Firefox%20Users&style=flat-square" alt="Firefox Addon Store"> <img src="https://img.shields.io/amo/users/stream-bypass?label=Firefox%20Users&style=flat-square" alt="Firefox Addon Store">
@@ -13,7 +13,7 @@ A multi-browser addon / extension for multiple streaming providers which redirec
<img src="https://img.shields.io/chrome-web-store/users/ddfpfjomnakfckhmilacnbokdaknamdb?style=flat-square&label=Chrome%20Users" alt="Chrome Store"> <img src="https://img.shields.io/chrome-web-store/users/ddfpfjomnakfckhmilacnbokdaknamdb?style=flat-square&label=Chrome%20Users" alt="Chrome Store">
</a> </a>
<a href="https://github.com/bytedream/stream-bypass/releases/latest"> <a href="https://github.com/bytedream/stream-bypass/releases/latest">
<img src="https://img.shields.io/github/downloads/bytedream/stream-bypass/total?label=GitHub%20Downloads&style=flat-square" alt="GitHub Downloads"> <img src="https://img.shields.io/github/downloads/ByteDream/stream-bypass/total?label=GitHub%20Downloads&style=flat-square" alt="GitHub Downloads">
</a> </a>
</p> </p>
@@ -40,7 +40,7 @@ This has the advantage, that no advertising or popups are shown when trying to i
Additionally, this enables you to download the video by right-clicking it and just choose the download option. Additionally, this enables you to download the video by right-clicking it and just choose the download option.
<details id="example"> <details id="example">
<summary><b>How it works:</b></summary> <summary><b>How it's working:</b></summary>
<img src="example.gif" alt=""> <img src="example.gif" alt="">
</details> </details>
@@ -53,39 +53,32 @@ The best way to install the extension are the official browser extension stores:
- [Firefox Addon Store](https://addons.mozilla.org/de/firefox/addon/stream-bypass/) (Firefox for Android is supported too!) - [Firefox Addon Store](https://addons.mozilla.org/de/firefox/addon/stream-bypass/) (Firefox for Android is supported too!)
- [Chrome Web Store](https://chromewebstore.google.com/detail/ddfpfjomnakfckhmilacnbokdaknamdb) - [Chrome Web Store](https://chromewebstore.google.com/detail/ddfpfjomnakfckhmilacnbokdaknamdb)
<details> ### Manual installation
<summary><h3 id="manual-installation1">Manual installation</h3></summary>
- Firefox (mv2) - Firefox (mv2)
- Download `stream-bypass-<version>-mv2.zip` from the [latest release](https://github.com/bytedream/stream-bypass/releases/latest) and unzip it (e.g. with [7zip](https://www.7-zip.org/)) - Download `stream-bypass-<version>-mv2.zip` from the [latest release](https://github.com/ByteDream/stream-bypass/releases/latest) and unzip it (with [7zip](https://www.7-zip.org/) or something like that)
- Go into your browser and type `about:debugging#/runtime/this-firefox` in the address bar - Go into your browser and type `about:debugging#/runtime/this-firefox` in the address bar
- Click the `Load Temporary Add-on...` button and choose the `manifest.json` file in the unzipped directory - Click the `Load Temporary Add-on...` button and choose the `manifest.json` file in the unzipped directory
- Chromium / Google Chrome (mv3) - Chromium / Google Chrome (mv3)
> As nearly every browser other than Firefox is based on Chromium, this should be the same for most of them > As nearly every browser other than Firefox is based on Chromium, this should be the same for most of them
- Download `stream-bypass-<version>-mv3.zip` from the [latest release](https://github.com/bytedream/stream-bypass/releases/latest) and unzip it (e.g. [7zip](https://www.7-zip.org/)) - Download `stream-bypass-<version>-mv3.zip` from the [latest release](https://github.com/ByteDream/stream-bypass/releases/latest) and unzip it (with [7zip](https://www.7-zip.org/) or something like that)
- Go into your browser and type `chrome://extensions` in the address bar - Go into your browser and type `chrome://extensions` in the address bar
- Turn on the developer mode by checking the switch in the top right corner - Turn on the developer mode by checking the switch in the top right corner
- Click `Load unpacked` and choose the unzipped directory - Click `Load unpacked` and choose the unzipped directory
</details>
## ✨ Features ## ✨ Features
- ✔: Supported.
- ✖: Not supported.
| Feature | Firefox (mv2) | Chrome (mv3) | Firefox for Android (mv2) | | Feature | Firefox (mv2) | Chrome (mv3) | Firefox for Android (mv2) |
| --------------------------------------------------------------------------------------------------------------------------------- | ------------- | ------------ | ------------------------- | | --------------------------------------------------------------------------------------------------------------------------------- | ------------- | ------------ | ------------------------- |
| Replace site-speicifc video player with browser native video player | ✔ | ✔ | ✔ | | Replace site-speicifc video player with browser native video player | ✔ | ✔ | ✔ |
| Support websites that are accessed via a redirect | ✔ | | ✔ | | Support websites that are accessed via a redirect | ✔ | | ✔ |
| Open video in mpv (with [ff2mpv](https://github.com/bytedream/stream-bypass/tree/master#ff2mpv-use-mpv-to-directly-play-streams)) | ✔ | ✔ | | | Open video in mpv (with [ff2mpv](https://github.com/ByteDream/stream-bypass/tree/master#ff2mpv-use-mpv-to-directly-play-streams)) | ✔ | ✔ | |
- ✔️: Supported.
- ❌: Not supported.
## 📜 Supported websites ## 📜 Supported websites
- ✔: Everything ok.
- ⚠: Works with limitations.
- ✖: Not supported.
| Site | Firefox & Firefox for Android (mv2) | Chrome & Chromium based (mv2) | | Site | Firefox & Firefox for Android (mv2) | Chrome & Chromium based (mv2) |
| --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [dropload.io](https://dropload.io) | ✔ | ✔ | | [dropload.io](https://dropload.io) | ✔ | ✔ |
@@ -93,28 +86,32 @@ The best way to install the extension are the official browser extension stores:
| [filemoon.to](https://filemoon.to) | ✔ | ✔ | | [filemoon.to](https://filemoon.to) | ✔ | ✔ |
| [goodstream.uno](https://goodstream.uno) | ✔ | ✔ | | [goodstream.uno](https://goodstream.uno) | ✔ | ✔ |
| [kwik.cx](https://kwik.cx) | ✔ | ✔ | | [kwik.cx](https://kwik.cx) | ✔ | ✔ |
| [loadx.ws](https://loadx.ws) | ✔ | (background request always required) | | [loadx.ws](https://loadx.ws) | ✔ | (background request always required) |
| [luluvdo.com](https://luluvdo.com) | ✔ | (background request always required) | | [luluvdo.com](https://luluvdo.com) | ✔ | (background request always required) |
| [mixdrop.co](https://mixdrop.co) | ✔ | ✔ | | [mixdrop.co](https://mixdrop.co) | ✔ | ✔ |
| [mp4upload.com](https://mp4upload.com) | ✔ | ✔ | | [mp4upload.com](https://mp4upload.com) | ✔ | ✔ |
| [newgrounds.com](https://newgrounds.com) | ✔ | ✔ | | [newgrounds.com](https://newgrounds.com) | ✔ | ✔ |
| [streama2z.com](https://streama2z.com) | ✔ | (redirect always required) | | [streama2z.com](https://streama2z.com) | ✔ | (redirect always required) |
| [streamtape.com](https://streamtape.com) | ⚠ (correct video url can't always be extract, retrying/reloading the page might fix it) | ⚠ (correct video url can't always be extract, retrying/reloading the page might fix it) | | [streamtape.com](https://streamtape.com) | ⚠ (correct video url can't always be extract, retrying/reloading the page might fix it) | ⚠ (correct video url can't always be extract, retrying/reloading the page might fix it) |
| [streamzz.to](https://streamzz.to) / [streamz.ws](https://streamz.ws) | ✔ | ✔ | | [streamzz.to](https://streamzz.to) / [streamz.ws](https://streamz.ws) | ✔ | ✔ |
| [supervideo.tv](https://supervideo.tv) | ✔ | ✔ | | [supervideo.tv](https://supervideo.tv) | ✔ | ✔ |
| [upstream.to](https://upstream.to) | ✔ | ✔ | | [upstream.to](https://upstream.to) | ✔ | ✔ |
| [vidmoly.to](https://vidmoly.me) | ✔ | ✔ | | [vidmoly.to](https://vidmoly.me) | ✔ | ✔ |
| [vidoza.net](https://vidoza.net) | ✔ | ✔ | | [vidoza.net](https://vidoza.net) | ✔ | ✔ |
| [voe.sx](https://voe.sx) | ✔ | (redirect always required) | | [voe.sx](https://voe.sx) | ✔ | (redirect always required) |
| [vupload.com](https://vupload.com) | ✔ | ✔ | | [vupload.com](https://vupload.com) | ✔ | ✔ |
- ✔️: Everything ok.
- ⚠: Works with limitations.
- ❌: Not supported.
_This table might not be 100% accurate, it isn't actively monitored if the addon works for every website!_ _This table might not be 100% accurate, it isn't actively monitored if the addon works for every website!_
Some sites put much effort in obfuscating their code / how they receive the video stream so that it simply cost too much time for me to reverse engineer it and find out how to bypass the native video player of the site. Some sites put much effort in obfuscating their code / how they receive the video stream so that it simply cost too much time for me to reverse engineer it and find out how to bypass the native video player of the site.
## 🛠️ Building ## 🛠️ Building
If you want to build the addon from source and not using the way described in [installation](#-installation), follow the instructions. If you want to build the addon from source and not using the [installation](#installation) way, follow the instructions.
Requirements: Requirements:
@@ -125,20 +122,18 @@ If the requirements are satisfied, you can continue with the following commands:
```shell ```shell
# install all dependencies # install all dependencies
$ npm i $ npm install
# build the extension and start it in a new firefox instance # build the extension source to the dist/ directory
$ npm run dev:firefox $ npm run build
# build the extension with optimizations to the .output/firefox-mv2 directory # same as build + more optimizations and browser specific settings at release/
$ npm run build:firefox $ npm run release:firefox # or "release:chrome" to create a release for chromium based browsers
``` ```
You can omit the `:firefox` suffix, then it's built for Chrome.
##### Install ##### Install
If you want to use the addon in Chromium or any browser which is based on it, follow the steps in the [manual installation](#-installation). If you want to use the addon in Chromium or any browser which is based on it, follow the steps in [installation](#-installation).
When using firefox, use the following: When using firefox, use the following:
1. Type `about:debugging` in the browser's address bar. 1. Type `about:debugging` in the browser's address bar.
@@ -148,42 +143,33 @@ When using firefox, use the following:
## ⚙️ Settings ## ⚙️ Settings
> You reach the settings by pressing the tree dots (⋮) in the top right corner of the extension popup. ### <ins>ff2mpv: use mpv to directly play streams</ins>
### Hosts ff2mpv is located at this repository: https://github.com/woodruffw/ff2mpv
You can enable or disabled for which hosts the extension should redirect. Steps to get it set up:
### ff2mpv
[ff2mpv](https://github.com/woodruffw/ff2mpv) allows you to play streams directly in [mpv](https://mpv.io/) instead of the browser.
You can enable or disable this behavior.
<details>
<summary><i>Steps to get it set up</i></summary>
- In the [Usage](https://github.com/woodruffw/ff2mpv#usage) section of the ff2mpv repository pick the installation instruction for your operating system (Linux/Windows/macOS; you do not need the browser addon). - In the [Usage](https://github.com/woodruffw/ff2mpv#usage) section of the ff2mpv repository pick the installation instruction for your operating system (Linux/Windows/macOS; you do not need the browser addon).
- Scroll down to `Install manually` - Scroll down to `Install manually`
- Follow instructions for Firefox/Chrome - Follow instructions for Firefox/Chrome
- Edit the `ff2mpv.json` you created: - Edit the `ff2mpv.json` you created:
- Firefox: Add `{55dd42e8-3dd9-455a-b4fe-86664881b10c}` to `allowed_extensions`: - Firefox: Add `{55dd42e8-3dd9-455a-b4fe-86664881b10c}` to `allowed_extensions` ->
``` ```
"allowed_extensions": [ "allowed_extensions": [
"ff2mpv@yossarian.net", "ff2mpv@yossarian.net",
"{55dd42e8-3dd9-455a-b4fe-86664881b10c}" "{55dd42e8-3dd9-455a-b4fe-86664881b10c}"
] ]
``` ```
- Chrome/Chromium:
- Chrome/Chromium: - Go To: Settings -> Extensions - Click on `Details` of the Stream Bypass extension and copy the ID - Add `chrome-extension://ddfpfjomnakfckhmilacnbokdaknamdb/` to `allowed_origins`: - Go To: Settings -> Extensions
``` - Click on `Details` of the Stream Bypass extension and copy the ID
"allowed_origins": [ - Add `chrome-extension://ddfpfjomnakfckhmilacnbokdaknamdb/` to `allowed_origins` ->
"chrome-extension://ephjcajbkgplkjmelpglennepbpmdpjg/", ```
"chrome-extension://ddfpfjomnakfckhmilacnbokdaknamdb/" "allowed_origins": [
] "chrome-extension://ephjcajbkgplkjmelpglennepbpmdpjg/",
``` "chrome-extension://ddfpfjomnakfckhmilacnbokdaknamdb/"
]
</details> ```
## ⚖ License ## ⚖ License

View File

@@ -13,7 +13,7 @@
} }
</style> </style>
</head> </head>
<body style="background-color: #131313; overflow: hidden"> <body class="bg-[#131313]">
<script type="module"> <script type="module">
import { mount } from 'svelte'; import { mount } from 'svelte';
import Player from './Player.svelte'; import Player from './Player.svelte';

View File

@@ -3,8 +3,9 @@ import { HostMatchType, type Host } from '@/lib/host';
export default { export default {
name: 'Vidmoly', name: 'Vidmoly',
id: 'vidmoly', id: 'vidmoly',
domains: ['vidmoly.me', 'vidmoly.net', 'vidmoly.to'], domains: ['vidmoly.me', 'vidmoly.to'],
regex: [/(?<=file:").+\.m3u8.*(?=")/gm], regex: [/(?<=file:").+\.m3u8/gm],
replace: true,
match: async function (match: RegExpMatchArray) { match: async function (match: RegExpMatchArray) {
return { return {

View File

@@ -27,21 +27,8 @@ export default defineConfig({
} }
: undefined, : undefined,
permissions: ['storage', ...(manifestVersion === 2 ? ['webRequest', 'webRequestBlocking', '<all_urls>'] : [])], permissions: ['storage', ...(manifestVersion === 2 ? ['webRequest', 'webRequestBlocking', '<all_urls>'] : [])],
optional_permissions: ['nativeMessaging'], optional_permissions: ['nativeMessaging']
web_accessible_resources: [
{
resources: ['player.html'],
// TODO: Replace this with all hosts domains if target manifest version is 3.
// This isn't working atm because importing '@/lib/host' fails. Ahhhh I love the whole fucking JS/TS
// environment. Maybe I'm also overlooking something and the fix is easy, but that itsn't working out of the
// box is once again terrible DX
matches: ['<all_urls>']
}
]
}), }),
zip: {
artifactTemplate: '{{name}}-{{version}}-{{manifestVersion}}.zip'
},
vite: () => ({ vite: () => ({
define: { define: {