From 33d8fcdaddfbc9c95db80cd59731e9467aeb9480 Mon Sep 17 00:00:00 2001 From: Xavier Abad <77491413+xabg2@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:18:31 +0100 Subject: [PATCH 1/4] chore: update dependencies and project config --- .wxt/eslintrc-auto-import.json | 29 +- .wxt/types/imports.d.ts | 66 +- .wxt/types/paths.d.ts | 1 + .wxt/wxt.d.ts | 1 + package.json | 31 +- postcss.config.js | 3 +- {src/public => public}/icon/128.png | Bin {src/public => public}/icon/16.png | Bin {src/public => public}/icon/192.png | Bin {src/public => public}/icon/48.png | Bin {src/public => public}/icon/512.png | Bin {src/public => public}/icon/internxt-logo.svg | 0 {src/public => public}/icon/inxt-logo.png | Bin .../images/establishing-connection.svg | 0 .../images/vpn-connected.svg | 0 .../images/vpn-disconnected.svg | 0 {src/public => public}/wxt.svg | 0 src/entrypoints/background.ts | 4 +- .../components/ConnectionDetails.tsx | 2 +- .../dropdown/components/DropdownItem.tsx | 2 +- src/entrypoints/content/index.ts | 4 + src/entrypoints/popup/style.css | 149 +- src/entrypoints/services/storage.service.ts | 9 + src/entrypoints/utils/handleUserToken.ts | 4 +- tailwind.config.js | 210 - wxt.config.ts | 8 +- yarn.lock | 4688 +++++++---------- 27 files changed, 2167 insertions(+), 3044 deletions(-) rename {src/public => public}/icon/128.png (100%) rename {src/public => public}/icon/16.png (100%) rename {src/public => public}/icon/192.png (100%) rename {src/public => public}/icon/48.png (100%) rename {src/public => public}/icon/512.png (100%) rename {src/public => public}/icon/internxt-logo.svg (100%) rename {src/public => public}/icon/inxt-logo.png (100%) rename {src/public => public}/images/establishing-connection.svg (100%) rename {src/public => public}/images/vpn-connected.svg (100%) rename {src/public => public}/images/vpn-disconnected.svg (100%) rename {src/public => public}/wxt.svg (100%) delete mode 100644 tailwind.config.js diff --git a/.wxt/eslintrc-auto-import.json b/.wxt/eslintrc-auto-import.json index cef02ce..51111e9 100644 --- a/.wxt/eslintrc-auto-import.json +++ b/.wxt/eslintrc-auto-import.json @@ -1,16 +1,43 @@ { "globals": { + "AutoMount": true, + "AutoMountOptions": true, + "Browser": true, + "ContentScriptAnchoredOptions": true, + "ContentScriptAppendMode": true, "ContentScriptContext": true, + "ContentScriptInlinePositioningOptions": true, + "ContentScriptModalPositioningOptions": true, + "ContentScriptOverlayAlignment": true, + "ContentScriptOverlayPositioningOptions": true, + "ContentScriptPositioningOptions": true, + "ContentScriptUi": true, + "ContentScriptUiOptions": true, + "IframeContentScriptUi": true, + "IframeContentScriptUiOptions": true, + "InjectScriptOptions": true, + "IntegratedContentScriptUi": true, + "IntegratedContentScriptUiOptions": true, "InvalidMatchPattern": true, "MatchPattern": true, "MigrationError": true, + "ScriptPublicPath": true, + "ShadowRootContentScriptUi": true, + "ShadowRootContentScriptUiOptions": true, + "StopAutoMount": true, + "StorageArea": true, + "StorageAreaChanges": true, + "StorageItemKey": true, + "WxtAppConfig": true, + "WxtStorage": true, + "WxtStorageItem": true, + "WxtWindowEventMap": true, "browser": true, "createIframeUi": true, "createIntegratedUi": true, "createShadowRootUi": true, "defineAppConfig": true, "defineBackground": true, - "defineConfig": true, "defineContentScript": true, "defineUnlistedScript": true, "defineWxtPlugin": true, diff --git a/.wxt/types/imports.d.ts b/.wxt/types/imports.d.ts index e83be98..8662de0 100644 --- a/.wxt/types/imports.d.ts +++ b/.wxt/types/imports.d.ts @@ -1,23 +1,51 @@ // Generated by wxt export {} declare global { - const ContentScriptContext: typeof import('wxt/client')['ContentScriptContext'] - const InvalidMatchPattern: typeof import('wxt/sandbox')['InvalidMatchPattern'] - const MatchPattern: typeof import('wxt/sandbox')['MatchPattern'] - const MigrationError: typeof import('wxt/storage')['MigrationError'] - const browser: typeof import('wxt/browser')['browser'] - const createIframeUi: typeof import('wxt/client')['createIframeUi'] - const createIntegratedUi: typeof import('wxt/client')['createIntegratedUi'] - const createShadowRootUi: typeof import('wxt/client')['createShadowRootUi'] - const defineAppConfig: typeof import('wxt/sandbox')['defineAppConfig'] - const defineBackground: typeof import('wxt/sandbox')['defineBackground'] - const defineConfig: typeof import('wxt')['defineConfig'] - const defineContentScript: typeof import('wxt/sandbox')['defineContentScript'] - const defineUnlistedScript: typeof import('wxt/sandbox')['defineUnlistedScript'] - const defineWxtPlugin: typeof import('wxt/sandbox')['defineWxtPlugin'] - const fakeBrowser: typeof import('wxt/testing')['fakeBrowser'] - const i18n: typeof import('#i18n')['i18n'] - const injectScript: typeof import('wxt/client')['injectScript'] - const storage: typeof import('wxt/storage')['storage'] - const useAppConfig: typeof import('wxt/client')['useAppConfig'] + const ContentScriptContext: typeof import('wxt/utils/content-script-context').ContentScriptContext + const InvalidMatchPattern: typeof import('wxt/utils/match-patterns').InvalidMatchPattern + const MatchPattern: typeof import('wxt/utils/match-patterns').MatchPattern + const browser: typeof import('wxt/browser').browser + const createIframeUi: typeof import('wxt/utils/content-script-ui/iframe').createIframeUi + const createIntegratedUi: typeof import('wxt/utils/content-script-ui/integrated').createIntegratedUi + const createShadowRootUi: typeof import('wxt/utils/content-script-ui/shadow-root').createShadowRootUi + const defineAppConfig: typeof import('wxt/utils/define-app-config').defineAppConfig + const defineBackground: typeof import('wxt/utils/define-background').defineBackground + const defineContentScript: typeof import('wxt/utils/define-content-script').defineContentScript + const defineUnlistedScript: typeof import('wxt/utils/define-unlisted-script').defineUnlistedScript + const defineWxtPlugin: typeof import('wxt/utils/define-wxt-plugin').defineWxtPlugin + const fakeBrowser: typeof import('wxt/testing').fakeBrowser + const i18n: typeof import('#i18n').i18n + const injectScript: typeof import('wxt/utils/inject-script').injectScript + const storage: typeof import('wxt/utils/storage').storage + const useAppConfig: typeof import('wxt/utils/app-config').useAppConfig +} +// for type re-export +declare global { + // @ts-ignore + export type { Browser } from 'wxt/browser' + import('wxt/browser') + // @ts-ignore + export type { StorageArea, WxtStorage, WxtStorageItem, StorageItemKey, StorageAreaChanges, MigrationError } from 'wxt/utils/storage' + import('wxt/utils/storage') + // @ts-ignore + export type { WxtWindowEventMap } from 'wxt/utils/content-script-context' + import('wxt/utils/content-script-context') + // @ts-ignore + export type { IframeContentScriptUi, IframeContentScriptUiOptions } from 'wxt/utils/content-script-ui/iframe' + import('wxt/utils/content-script-ui/iframe') + // @ts-ignore + export type { IntegratedContentScriptUi, IntegratedContentScriptUiOptions } from 'wxt/utils/content-script-ui/integrated' + import('wxt/utils/content-script-ui/integrated') + // @ts-ignore + export type { ShadowRootContentScriptUi, ShadowRootContentScriptUiOptions } from 'wxt/utils/content-script-ui/shadow-root' + import('wxt/utils/content-script-ui/shadow-root') + // @ts-ignore + export type { ContentScriptUi, ContentScriptUiOptions, ContentScriptOverlayAlignment, ContentScriptAppendMode, ContentScriptInlinePositioningOptions, ContentScriptOverlayPositioningOptions, ContentScriptModalPositioningOptions, ContentScriptPositioningOptions, ContentScriptAnchoredOptions, AutoMountOptions, StopAutoMount, AutoMount } from 'wxt/utils/content-script-ui/types' + import('wxt/utils/content-script-ui/types') + // @ts-ignore + export type { WxtAppConfig } from 'wxt/utils/define-app-config' + import('wxt/utils/define-app-config') + // @ts-ignore + export type { ScriptPublicPath, InjectScriptOptions } from 'wxt/utils/inject-script' + import('wxt/utils/inject-script') } diff --git a/.wxt/types/paths.d.ts b/.wxt/types/paths.d.ts index dd3ace4..1acde12 100644 --- a/.wxt/types/paths.d.ts +++ b/.wxt/types/paths.d.ts @@ -3,6 +3,7 @@ import "wxt/browser"; declare module "wxt/browser" { export type PublicPath = + | "" | "/" | "/background.js" | "/content-scripts/content.js" diff --git a/.wxt/wxt.d.ts b/.wxt/wxt.d.ts index b5ca013..3a4ed91 100644 --- a/.wxt/wxt.d.ts +++ b/.wxt/wxt.d.ts @@ -4,4 +4,5 @@ /// /// /// +/// /// diff --git a/package.json b/package.json index f0f877a..163313f 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "type": "module", "scripts": { "dev": "wxt -p 3001", + "dev:prod": "wxt -p 3001 --mode production", "dev:firefox": "wxt -b firefox", "build": "wxt build", "build:staging": "wxt build --mode staging", @@ -17,29 +18,31 @@ "dependencies": { "@phosphor-icons/react": "^2.1.5", "@webext-core/storage": "^1.2.0", - "@wxt-dev/i18n": "^0.2.3", + "@wxt-dev/i18n": "=0.2.4", "axios": "^1.6.8", "chrome-extension-async": "^3.4.1", "crypto-js": "^4.2.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "react": "^19.2.3", + "react-dom": "^19.2.3", + "vite": "7.3.0" }, "devDependencies": { - "@types/chrome": "^0.0.267", + "@tailwindcss/postcss": "^4.1.18", + "@types/chrome": "^0.1.32", "@types/crypto-js": "^4.2.2", - "@types/node": "^20.12.7", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", - "@vitejs/plugin-react": "^4.2.1", + "@types/node": "^25.0.3", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.50.0", + "@typescript-eslint/parser": "^8.50.0", + "@vitejs/plugin-react": "^5.1.2", "autoprefixer": "^10.4.19", - "eslint": "^8.57.0", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint": "^9.39.2", + "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.6", "postcss": "^8.4.38", - "tailwindcss": "^3.4.3", + "tailwindcss": "^4.1.18", "typescript": "^5.2.2", - "wxt": "^0.19.27" + "wxt": "0.20.13" } } diff --git a/postcss.config.js b/postcss.config.js index 2e7af2b..a7f73a2 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,5 @@ export default { plugins: { - tailwindcss: {}, - autoprefixer: {}, + '@tailwindcss/postcss': {}, }, } diff --git a/src/public/icon/128.png b/public/icon/128.png similarity index 100% rename from src/public/icon/128.png rename to public/icon/128.png diff --git a/src/public/icon/16.png b/public/icon/16.png similarity index 100% rename from src/public/icon/16.png rename to public/icon/16.png diff --git a/src/public/icon/192.png b/public/icon/192.png similarity index 100% rename from src/public/icon/192.png rename to public/icon/192.png diff --git a/src/public/icon/48.png b/public/icon/48.png similarity index 100% rename from src/public/icon/48.png rename to public/icon/48.png diff --git a/src/public/icon/512.png b/public/icon/512.png similarity index 100% rename from src/public/icon/512.png rename to public/icon/512.png diff --git a/src/public/icon/internxt-logo.svg b/public/icon/internxt-logo.svg similarity index 100% rename from src/public/icon/internxt-logo.svg rename to public/icon/internxt-logo.svg diff --git a/src/public/icon/inxt-logo.png b/public/icon/inxt-logo.png similarity index 100% rename from src/public/icon/inxt-logo.png rename to public/icon/inxt-logo.png diff --git a/src/public/images/establishing-connection.svg b/public/images/establishing-connection.svg similarity index 100% rename from src/public/images/establishing-connection.svg rename to public/images/establishing-connection.svg diff --git a/src/public/images/vpn-connected.svg b/public/images/vpn-connected.svg similarity index 100% rename from src/public/images/vpn-connected.svg rename to public/images/vpn-connected.svg diff --git a/src/public/images/vpn-disconnected.svg b/public/images/vpn-disconnected.svg similarity index 100% rename from src/public/images/vpn-disconnected.svg rename to public/images/vpn-disconnected.svg diff --git a/src/public/wxt.svg b/public/wxt.svg similarity index 100% rename from src/public/wxt.svg rename to public/wxt.svg diff --git a/src/entrypoints/background.ts b/src/entrypoints/background.ts index b4e1aa6..0b77067 100644 --- a/src/entrypoints/background.ts +++ b/src/entrypoints/background.ts @@ -1,4 +1,3 @@ -import { WebRequest } from 'wxt/browser' import { handleUserToken } from './utils/handleUserToken' import { clearProxySettings } from './popup/proxy.service' @@ -67,6 +66,7 @@ export default defineBackground(() => { localCache.token = userToken?.token ?? null localCache.connection = connection ?? null } + startInterval() initializeLocalCache() @@ -83,7 +83,7 @@ export default defineBackground(() => { }) browser.webRequest.onAuthRequired.addListener( - function (details: WebRequest.OnAuthRequiredDetailsType) { + function (details) { if (details.isProxy) { return { authCredentials: { diff --git a/src/entrypoints/components/ConnectionDetails.tsx b/src/entrypoints/components/ConnectionDetails.tsx index b8207b4..6d63e39 100644 --- a/src/entrypoints/components/ConnectionDetails.tsx +++ b/src/entrypoints/components/ConnectionDetails.tsx @@ -16,7 +16,7 @@ export const ConnectionDetails = ({ dropdownSections, userIp, isAuthenticated, -}: ConnectionDetailsProps): JSX.Element => { +}: ConnectionDetailsProps) => { const buttonLabel = dropdownSections .flatMap((s) => s.items) diff --git a/src/entrypoints/components/dropdown/components/DropdownItem.tsx b/src/entrypoints/components/dropdown/components/DropdownItem.tsx index 1f372f8..8f80ac5 100644 --- a/src/entrypoints/components/dropdown/components/DropdownItem.tsx +++ b/src/entrypoints/components/dropdown/components/DropdownItem.tsx @@ -13,7 +13,7 @@ export const DropdownItem = ({ onItemClicked, isLocked, isSelectedItem, -}: DropdownItemProps): JSX.Element => { +}: DropdownItemProps) => { return ( {isOpen && ( -
+
{sections.map((section) => (
{isLocked ? ( - + ) : ( - + )}

{item.label}

- {isSelectedItem && } + {isSelectedItem && } ) } diff --git a/src/entrypoints/popup/App.tsx b/src/entrypoints/popup/App.tsx index 872db43..de10f3a 100644 --- a/src/entrypoints/popup/App.tsx +++ b/src/entrypoints/popup/App.tsx @@ -56,7 +56,7 @@ export const App = () => { 'userData', 'userToken', 'connection', - ])) as StorageData + ])) satisfies StorageData setUserData(storageData.userData ?? defaultUserDataInfo) setStatus(storageData.vpnStatus ?? 'OFF') @@ -204,7 +204,7 @@ export const App = () => { }, ].map((section) => { const allItemsUnavailable = section.items.every( - (item) => !availableLocations.includes(item.value) + (item) => !availableLocations.includes(item.value), ) return {