mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 11:33:25 +00:00
55
README.md
55
README.md
@@ -1,57 +1,12 @@
|
|||||||
# extension
|
# extension
|
||||||
|
|
||||||
movie-web extension, allows providers to work without proxy
|
Enhance your movie-web experience with just one click
|
||||||
|
|
||||||
## Components
|
## Running for development
|
||||||
|
|
||||||
1. Messaging
|
We use pnpm with the latest version of NodeJS.
|
||||||
- `makeRequest` message. Make requests that ignore CORS and can set forbidden headers. Replies with request results.
|
|
||||||
- `prepareStream` message. For a list of domains, set required or preferred headers.
|
|
||||||
- `hello` message. Gives details on the extension, like the version. If not allowed, simply respond with an error describing it.
|
|
||||||
|
|
||||||
2. Popout
|
```sh
|
||||||
- The popout should have a simple interface for trusting or untrusting the current site. Only trusted sites should be able to communicate with the extension.
|
pnpm i
|
||||||
|
|
||||||
3. Storage
|
|
||||||
- The extension will need to store active rules for setting headers. And which sites (origins) are trusted.
|
|
||||||
|
|
||||||
## How will the client work
|
|
||||||
1. When creating providers, first send a hello message to identify if there is an extension installed at all and if its correct version.
|
|
||||||
2. If no extension (or not suitable) fallback on standard providers.
|
|
||||||
3. Else, make new provider controls, target set to BROWSER_EXTENSION, with custom fetcher that uses the extension to send requests instead.
|
|
||||||
4. If any message to the extension fail. Fallback to standard providers again.
|
|
||||||
5. When a stream will be played, communicate to extension through a `prepareStream`
|
|
||||||
|
|
||||||
# Plasmo
|
|
||||||
|
|
||||||
## Getting Started
|
|
||||||
|
|
||||||
First, run the development server:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm dev
|
pnpm dev
|
||||||
# or
|
|
||||||
npm run dev
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Open your browser and load the appropriate development build. For example, if you are developing for the chrome browser, using manifest v3, use: `build/chrome-mv3-dev`.
|
|
||||||
|
|
||||||
You can start editing the popup by modifying `popup.tsx`. It should auto-update as you make changes. To add an options page, simply add a `options.tsx` file to the root of the project, with a react component default exported. Likewise to add a content page, add a `content.ts` file to the root of the project, importing some module and do some logic, then reload the extension on your browser.
|
|
||||||
|
|
||||||
For further guidance, [visit our Documentation](https://docs.plasmo.com/)
|
|
||||||
|
|
||||||
## Making production build
|
|
||||||
|
|
||||||
Run the following:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
pnpm build
|
|
||||||
# or
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
This should create a production bundle for your extension, ready to be zipped and published to the stores.
|
|
||||||
|
|
||||||
## Submit to the webstores
|
|
||||||
|
|
||||||
The easiest way to deploy your Plasmo extension is to use the built-in [bpp](https://bpp.browser.market) GitHub action. Prior to using this action however, make sure to build your extension and upload the first version to the store to establish the basic credentials. Then, simply follow [this setup instruction](https://docs.plasmo.com/framework/workflows/submit) and you should be on your way for automated submission!
|
|
||||||
|
BIN
assets/icon.png
BIN
assets/icon.png
Binary file not shown.
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 4.6 KiB |
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@movie-web/extension",
|
"name": "@movie-web/extension",
|
||||||
"displayName": "movie-web extension",
|
"displayName": "movie-web extension",
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"description": "movie-web extension, allows providers to work without proxy",
|
"description": "Enhance your movie-web experience with just one click",
|
||||||
"author": "movie-web",
|
"author": "movie-web",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "plasmo dev",
|
"dev": "plasmo dev",
|
||||||
|
@@ -7,7 +7,8 @@ import { assertDomainWhitelist } from '~utils/storage';
|
|||||||
|
|
||||||
interface Request extends BaseRequest {
|
interface Request extends BaseRequest {
|
||||||
ruleId: number;
|
ruleId: number;
|
||||||
targetDomains: [string, ...string[]];
|
targetDomains?: [string, ...string[]];
|
||||||
|
targetRegex?: string;
|
||||||
requestHeaders?: Record<string, string>;
|
requestHeaders?: Record<string, string>;
|
||||||
responseHeaders?: Record<string, string>;
|
responseHeaders?: Record<string, string>;
|
||||||
}
|
}
|
||||||
@@ -33,7 +34,8 @@ const handler: PlasmoMessaging.MessageHandler<Request, BaseResponse> = async (re
|
|||||||
{
|
{
|
||||||
id: req.body.ruleId,
|
id: req.body.ruleId,
|
||||||
condition: {
|
condition: {
|
||||||
requestDomains: req.body.targetDomains,
|
...(req.body.targetDomains && { requestDomains: req.body.targetDomains }),
|
||||||
|
...(req.body.targetRegex && { regexFilter: req.body.targetRegex }),
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
||||||
@@ -78,7 +80,8 @@ const handler: PlasmoMessaging.MessageHandler<Request, BaseResponse> = async (re
|
|||||||
{
|
{
|
||||||
id: req.body.ruleId,
|
id: req.body.ruleId,
|
||||||
condition: {
|
condition: {
|
||||||
requestDomains: req.body.targetDomains,
|
...(req.body.targetDomains && { requestDomains: req.body.targetDomains }),
|
||||||
|
...(req.body.targetRegex && { regexFilter: req.body.targetRegex }),
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
type: 'modifyHeaders',
|
type: 'modifyHeaders',
|
||||||
|
Reference in New Issue
Block a user