From a884c785f0d248c029993d407626a364b7d698f5 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 18:48:46 +0000 Subject: [PATCH 1/7] Remove lonelil as a redirect, Firefox didn't like --- src/tabs/PermissionGrant.tsx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/tabs/PermissionGrant.tsx b/src/tabs/PermissionGrant.tsx index a8c238c..a2d0047 100644 --- a/src/tabs/PermissionGrant.tsx +++ b/src/tabs/PermissionGrant.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { Button } from '~components/Button'; import { usePermission } from '~hooks/usePermission'; import { makeUrlIntoDomain } from '~utils/domains'; @@ -8,11 +10,27 @@ export default function PermissionGrant() { const { grantPermission } = usePermission(); const queryParams = new URLSearchParams(window.location.search); - const redirectUrl = queryParams.get('redirectUrl') ?? 'https://mw.lonelil.ru'; - const domain = makeUrlIntoDomain(redirectUrl); + const redirectUrl = queryParams.get('redirectUrl') ?? undefined; + const domain = redirectUrl ? makeUrlIntoDomain(redirectUrl) : undefined; + + if (!domain) { + return ( +
+
+
+

Permission

+

+ No domain found to grant permission to. +

+
+
+
+ ); + } const redirectBack = () => { chrome.tabs.getCurrent((tab) => { + if (!tab?.id) return; chrome.tabs.update(tab.id, { url: redirectUrl }); }); }; From 8ba0544468d25082b6a59f5e10a77a0da9cf5e44 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 18:49:12 +0000 Subject: [PATCH 2/7] Enable TS strict mode and fix all associated errors --- src/background/messages/hello.ts | 4 +++- src/background/messages/makeRequest.ts | 7 +++++-- src/background/messages/openPage.ts | 5 ++++- src/background/messages/prepareStream.ts | 5 ++++- src/hooks/useDomain.ts | 2 +- src/hooks/useDomainWhitelist.ts | 4 ++-- src/utils/declarativeNetRequest.ts | 3 ++- src/utils/tabs.ts | 2 +- tsconfig.json | 17 ++++++----------- 9 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/background/messages/hello.ts b/src/background/messages/hello.ts index 84a8489..35eeb15 100644 --- a/src/background/messages/hello.ts +++ b/src/background/messages/hello.ts @@ -14,6 +14,8 @@ type Response = BaseResponse<{ const handler: PlasmoMessaging.MessageHandler = async (req, res) => { try { + if (!req.sender?.tab?.url) throw new Error('No tab URL found in the request.'); + const version = getVersion(); res.send({ success: true, @@ -21,7 +23,7 @@ const handler: PlasmoMessaging.MessageHandler = async (re allowed: await isDomainWhitelisted(req.sender.tab.url), hasPermission: await hasPermission(), }); - } catch (err) { + } catch (err: any) { res.send({ success: false, error: err.message, diff --git a/src/background/messages/makeRequest.ts b/src/background/messages/makeRequest.ts index 61d77ca..522a744 100644 --- a/src/background/messages/makeRequest.ts +++ b/src/background/messages/makeRequest.ts @@ -32,7 +32,7 @@ type Response = BaseResponse<{ const mapBodyToFetchBody = (body: Request['body'], bodyType: Request['bodyType']): BodyInit => { if (bodyType === 'FormData') { const formData = new FormData(); - body.forEach(([key, value]) => { + body.forEach(([key, value]: [any, any]) => { formData.append(key, value.toString()); }); } @@ -50,6 +50,9 @@ const mapBodyToFetchBody = (body: Request['body'], bodyType: Request['bodyType'] const handler: PlasmoMessaging.MessageHandler> = async (req, res) => { try { + if (!req.sender?.tab?.url) throw new Error('No tab URL found in the request.'); + if (!req.body) throw new Error('No request body found in the request.'); + const url = makeFullUrl(req.body.url, req.body); await assertDomainWhitelist(req.sender.tab.url); @@ -87,7 +90,7 @@ const handler: PlasmoMessaging.MessageHandler> = async (r finalUrl: response.url, }, }); - } catch (err) { + } catch (err: any) { console.error('failed request', err); res.send({ success: false, diff --git a/src/background/messages/openPage.ts b/src/background/messages/openPage.ts index 3b69788..18402db 100644 --- a/src/background/messages/openPage.ts +++ b/src/background/messages/openPage.ts @@ -11,6 +11,9 @@ type Request = BaseRequest & { const handler: PlasmoMessaging.MessageHandler = async (req, res) => { try { + if (!req.sender?.tab?.id) throw new Error('No tab ID found in the request.'); + if (!req.body) throw new Error('No body found in the request.'); + const searchParams = new URLSearchParams(); searchParams.set('redirectUrl', req.body.redirectUrl); const url = (chrome || browser).runtime.getURL(`/tabs/${req.body.page}.html?${searchParams.toString()}`); @@ -26,7 +29,7 @@ const handler: PlasmoMessaging.MessageHandler = async (re res.send({ success: true, }); - } catch (err) { + } catch (err: any) { res.send({ success: false, error: err.message, diff --git a/src/background/messages/prepareStream.ts b/src/background/messages/prepareStream.ts index 2833433..62da3f1 100644 --- a/src/background/messages/prepareStream.ts +++ b/src/background/messages/prepareStream.ts @@ -15,12 +15,15 @@ interface Request extends BaseRequest { const handler: PlasmoMessaging.MessageHandler = async (req, res) => { try { + if (!req.sender?.tab?.url) throw new Error('No tab URL found in the request.'); + if (!req.body) throw new Error('No request body found in the request.'); + await assertDomainWhitelist(req.sender.tab.url); await setDynamicRules(req.body); res.send({ success: true, }); - } catch (err) { + } catch (err: any) { res.send({ success: false, error: err.message, diff --git a/src/hooks/useDomain.ts b/src/hooks/useDomain.ts index 1f0ad57..f327410 100644 --- a/src/hooks/useDomain.ts +++ b/src/hooks/useDomain.ts @@ -15,5 +15,5 @@ export function useDomain(): null | string { }; }, []); - return makeUrlIntoDomain(domain); + return domain ? makeUrlIntoDomain(domain) : null; } diff --git a/src/hooks/useDomainWhitelist.ts b/src/hooks/useDomainWhitelist.ts index a7cc42c..18c88f1 100644 --- a/src/hooks/useDomainWhitelist.ts +++ b/src/hooks/useDomainWhitelist.ts @@ -8,12 +8,12 @@ export function useDomainWhitelist() { const removeDomain = useCallback((domain: string | null) => { if (!domain) return; - setDomainWhitelist((s) => [...s.filter((v) => v !== domain)]); + setDomainWhitelist((s) => [...(s ?? []).filter((v) => v !== domain)]); }, []); const addDomain = useCallback((domain: string | null) => { if (!domain) return; - setDomainWhitelist((s) => [...s.filter((v) => v !== domain), domain]); + setDomainWhitelist((s) => [...(s ?? []).filter((v) => v !== domain), domain]); }, []); return { diff --git a/src/utils/declarativeNetRequest.ts b/src/utils/declarativeNetRequest.ts index 0b1deaa..7b5e710 100644 --- a/src/utils/declarativeNetRequest.ts +++ b/src/utils/declarativeNetRequest.ts @@ -123,5 +123,6 @@ export const removeDynamicRules = async (ruleIds: number[]) => { await (chrome || browser).declarativeNetRequest.updateDynamicRules({ removeRuleIds: ruleIds, }); - if ((chrome || browser).runtime.lastError?.message) throw new Error((chrome || browser).runtime.lastError.message); + if ((chrome || browser).runtime.lastError?.message) + throw new Error((chrome || browser).runtime.lastError?.message ?? 'Unknown error'); }; diff --git a/src/utils/tabs.ts b/src/utils/tabs.ts index 00b538f..85a06a9 100644 --- a/src/utils/tabs.ts +++ b/src/utils/tabs.ts @@ -1,7 +1,7 @@ import { isChrome } from './extension'; export function queryCurrentDomain(cb: (domain: string | null) => void) { - const handle = (tabUrl: string | null) => { + const handle = (tabUrl: string | undefined) => { if (!tabUrl) cb(null); else cb(tabUrl); }; diff --git a/tsconfig.json b/tsconfig.json index c4c5955..9c04ad2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,13 @@ { "extends": "plasmo/templates/tsconfig.base", - "exclude": [ - "node_modules" - ], - "include": [ - ".plasmo/index.d.ts", - "./**/*.ts", - "./**/*.tsx" - ], + "exclude": ["node_modules"], + "include": [".plasmo/index.d.ts", "./**/*.ts", "./**/*.tsx"], + "compilerOptions": { + "jsx": "react-jsx", + "strict": true, "paths": { - "~*": [ - "./src/*" - ] + "~*": ["./src/*"] }, "baseUrl": "." } From de0a1b384943705c17badcf97814488b04473596 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 18:53:44 +0000 Subject: [PATCH 3/7] Fix centering of permission grant page --- src/tabs/PermissionGrant.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tabs/PermissionGrant.css b/src/tabs/PermissionGrant.css index 3c15cd2..e82eadf 100644 --- a/src/tabs/PermissionGrant.css +++ b/src/tabs/PermissionGrant.css @@ -13,7 +13,7 @@ body { #__plasmo { display: flex; flex-direction: column; - min-height: 100%; + height: 100%; background-color: #0A0A10; } From 0bd1a39b53a3b693e9a6a46bd55e8fa19b4c2cbc Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 19:24:03 +0000 Subject: [PATCH 4/7] Remove react import --- src/tabs/PermissionGrant.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/tabs/PermissionGrant.tsx b/src/tabs/PermissionGrant.tsx index a2d0047..9730fd4 100644 --- a/src/tabs/PermissionGrant.tsx +++ b/src/tabs/PermissionGrant.tsx @@ -1,5 +1,3 @@ -import React from 'react'; - import { Button } from '~components/Button'; import { usePermission } from '~hooks/usePermission'; import { makeUrlIntoDomain } from '~utils/domains'; From c72ec412285c486329b25155b27768835bd32a71 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 19:24:07 +0000 Subject: [PATCH 5/7] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c60afd3..5a1df59 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@movie-web/extension", "displayName": "movie-web extension", - "version": "1.1.2", + "version": "1.1.3", "description": "Enhance your movie-web experience with just one click", "author": "movie-web", "scripts": { From 327f175241ce2df8b62c2e5479fb5c698811c96f Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 19:39:03 +0000 Subject: [PATCH 6/7] Do safe checking on exception message --- src/background/messages/hello.ts | 2 +- src/background/messages/makeRequest.ts | 2 +- src/background/messages/openPage.ts | 2 +- src/background/messages/prepareStream.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/background/messages/hello.ts b/src/background/messages/hello.ts index 35eeb15..a972bf6 100644 --- a/src/background/messages/hello.ts +++ b/src/background/messages/hello.ts @@ -26,7 +26,7 @@ const handler: PlasmoMessaging.MessageHandler = async (re } catch (err: any) { res.send({ success: false, - error: err.message, + error: err instanceof Error ? err.message : err, }); } }; diff --git a/src/background/messages/makeRequest.ts b/src/background/messages/makeRequest.ts index 522a744..f497c3e 100644 --- a/src/background/messages/makeRequest.ts +++ b/src/background/messages/makeRequest.ts @@ -94,7 +94,7 @@ const handler: PlasmoMessaging.MessageHandler> = async (r console.error('failed request', err); res.send({ success: false, - error: err.message, + error: err instanceof Error ? err.message : err, }); } }; diff --git a/src/background/messages/openPage.ts b/src/background/messages/openPage.ts index 18402db..217dd30 100644 --- a/src/background/messages/openPage.ts +++ b/src/background/messages/openPage.ts @@ -32,7 +32,7 @@ const handler: PlasmoMessaging.MessageHandler = async (re } catch (err: any) { res.send({ success: false, - error: err.message, + error: err instanceof Error ? err.message : err, }); } }; diff --git a/src/background/messages/prepareStream.ts b/src/background/messages/prepareStream.ts index 62da3f1..9023ab4 100644 --- a/src/background/messages/prepareStream.ts +++ b/src/background/messages/prepareStream.ts @@ -26,7 +26,7 @@ const handler: PlasmoMessaging.MessageHandler = async (re } catch (err: any) { res.send({ success: false, - error: err.message, + error: err instanceof Error ? err.message : err, }); } }; From 8e179e4455fc3f1feee0759d7cfd4a2e7c0df231 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Fri, 15 Mar 2024 19:42:51 +0000 Subject: [PATCH 7/7] Remove any in error handling --- src/background/messages/hello.ts | 4 ++-- src/background/messages/makeRequest.ts | 4 ++-- src/background/messages/openPage.ts | 4 ++-- src/background/messages/prepareStream.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/background/messages/hello.ts b/src/background/messages/hello.ts index a972bf6..3ad39ac 100644 --- a/src/background/messages/hello.ts +++ b/src/background/messages/hello.ts @@ -23,10 +23,10 @@ const handler: PlasmoMessaging.MessageHandler = async (re allowed: await isDomainWhitelisted(req.sender.tab.url), hasPermission: await hasPermission(), }); - } catch (err: any) { + } catch (err) { res.send({ success: false, - error: err instanceof Error ? err.message : err, + error: err instanceof Error ? err.message : String(err), }); } }; diff --git a/src/background/messages/makeRequest.ts b/src/background/messages/makeRequest.ts index f497c3e..14e0b77 100644 --- a/src/background/messages/makeRequest.ts +++ b/src/background/messages/makeRequest.ts @@ -90,11 +90,11 @@ const handler: PlasmoMessaging.MessageHandler> = async (r finalUrl: response.url, }, }); - } catch (err: any) { + } catch (err) { console.error('failed request', err); res.send({ success: false, - error: err instanceof Error ? err.message : err, + error: err instanceof Error ? err.message : String(err), }); } }; diff --git a/src/background/messages/openPage.ts b/src/background/messages/openPage.ts index 217dd30..28104f5 100644 --- a/src/background/messages/openPage.ts +++ b/src/background/messages/openPage.ts @@ -29,10 +29,10 @@ const handler: PlasmoMessaging.MessageHandler = async (re res.send({ success: true, }); - } catch (err: any) { + } catch (err) { res.send({ success: false, - error: err instanceof Error ? err.message : err, + error: err instanceof Error ? err.message : String(err), }); } }; diff --git a/src/background/messages/prepareStream.ts b/src/background/messages/prepareStream.ts index 9023ab4..6fb4fbe 100644 --- a/src/background/messages/prepareStream.ts +++ b/src/background/messages/prepareStream.ts @@ -23,10 +23,10 @@ const handler: PlasmoMessaging.MessageHandler = async (re res.send({ success: true, }); - } catch (err: any) { + } catch (err) { res.send({ success: false, - error: err instanceof Error ? err.message : err, + error: err instanceof Error ? err.message : String(err), }); } };