diff --git a/.gitignore b/.gitignore index 55d42dd7..186b7685 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ doctor-storybook.log public/app public/electron.js public/preload.js +public/preload.cjs public/renderer.js diff --git a/package.json b/package.json index 893cfed3..854f7d83 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "type": "module", "dependencies": { "@dnd-kit/core": "^6.2.0", - "@dnd-kit/modifiers": "^8.0.0", + "@dnd-kit/modifiers": "^9.0.0", "@electron/remote": "^2.0.9", "@emotion/react": "^11.13.5", "@emotion/styled": "^11.13.5", @@ -33,7 +33,7 @@ "@webcam/react": "^1.0.1", "axios": "^1.7.8", "base32-decode": "^1.0.0", - "base32-encode": "1.2.0", + "base32-encode": "2.0.0", "chart.js": "4.4.7", "color": "^4.2.3", "compare-versions": "^6.1.1", @@ -99,17 +99,17 @@ "build:default": "GENERATE_SOURCEMAP=false CI=false react-scripts build", "prebuild": "node -e \"let pkg=require('./package.json'); pkg.homepage='/'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\"", "postbuild": "run-script-os", - "postbuild:win32": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && del /q build\\app && del /q build\\preload.js && del /q build\\renderer.js && del /q build\\electron.js", - "postbuild:default": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && rm -rf build/app && rm -rf build/preload.js && rm -rf build/renderer.js && rm -rf build/electron.js", + "postbuild:win32": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && del /q build\\app && del /q build\\preload.cjs && del /q build\\renderer.js && del /q build\\electron.js", + "postbuild:default": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && rm -rf build/app && rm -rf build/preload.cjs && rm -rf build/renderer.js && rm -rf build/electron.js", "buildhass": "GENERATE_SOURCEMAP=false CI=false react-scripts build", "prebuildhass": "node -e \"let pkg=require('./package.json'); pkg.homepage='./'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\"", - "postbuildhass": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && rm -rf build/app && rm -rf build/preload.js && rm -rf build/renderer.js && rm -rf build/electron.js", + "postbuildhass": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && rm -rf build/app && rm -rf build/preload.cjs && rm -rf build/renderer.js && rm -rf build/electron.js", "buildgh": "GENERATE_SOURCEMAP=false PUBLIC_URL=/LedFx-Frontend-v2/ CI=false react-scripts build", "prebuildgh": "node -e \"let pkg=require('./package.json'); pkg.homepage='/LedFx-Frontend-v2/'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\"", - "postbuildgh": "rm -rf build/app && rm -rf build/preload.js && rm -rf build/renderer.js && rm -rf build/electron.js", + "postbuildgh": "rm -rf build/app && rm -rf build/preload.cjs && rm -rf build/renderer.js && rm -rf build/electron.js", "buildledfx": "cross-env GENERATE_SOURCEMAP=false PUBLIC_URL=/ CI=false react-scripts build", "prebuildledfx": "node -e \"let pkg=require('./package.json'); pkg.homepage='/'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\"", - "postbuildledfx": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && del /q /s \"build\\app\" && rmdir /q /s \"build\\app\" && del /q \"build\\preload.js\" && del /q \"build\\renderer.js\" && del /q \"build\\electron.js\"", + "postbuildledfx": "node -e \"let pkg=require('./package.json'); pkg.homepage='.'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\" && del /q /s \"build\\app\" && rmdir /q /s \"build\\app\" && del /q \"build\\preload.cjs\" && del /q \"build\\renderer.js\" && del /q \"build\\electron.js\"", "test": "react-scripts test", "eject": "react-scripts eject", "predeploy": "yarn buildgh", @@ -136,7 +136,7 @@ "dev": "concurrently \"cross-env BROWSER=none yarn start\" \"yarn electron\"", "compile-electron": "run-script-os", "compile-electron:win32": "copy app\\*.ts build\\*.js", - "compile-electron:default": "cp ./app/electron.ts ./build/electron.js && cp ./app/preload.ts ./build/preload.js && cp ./app/renderer.ts ./build/renderer.js && cp ./app/serviceWorker.ts ./build/serviceWorker.js", + "compile-electron:default": "cp ./app/electron.ts ./build/electron.js && cp ./app/preload.ts ./build/preload.cjs && cp ./app/renderer.ts ./build/renderer.js && cp ./app/serviceWorker.ts ./build/serviceWorker.js", "electron": "wait-on http://127.0.0.1:3000 && concurrently \"npx tsc --project tsconfig.electron.json --watch\" \"wait-on public/electron.js && electron .\"", "postinstall": "electron-builder install-app-deps", "prebuild-storybook": "run-script-os", @@ -218,7 +218,7 @@ "eslint-plugin-storybook": "^0.11.1", "gh-pages": "^6.1.1", "prettier": "^3.4.1", - "react-is": "^18.2.0", + "react-is": "^19.0.0", "run-script-os": "^1.1.6", "storybook": "8.4.7", "wait-on": "^8.0.0", diff --git a/src/app/app/handlers.mts b/src/app/app/handlers.mts index 03f882ea..20f06011 100644 --- a/src/app/app/handlers.mts +++ b/src/app/app/handlers.mts @@ -41,6 +41,7 @@ export const handlers = async ( handleVerifyOTP(wind, parameters) break case 'generate-mfa-qr': + console.log('Generate MFA QR') generateMfaQr(wind) break case 'get-platform': diff --git a/src/app/app/utils/win.mts b/src/app/app/utils/win.mts index 65e7f643..ccea1325 100644 --- a/src/app/app/utils/win.mts +++ b/src/app/app/utils/win.mts @@ -29,8 +29,8 @@ function createWindow(win?: any, args = {}) { nodeIntegration: true, contextIsolation: true, preload: isDev - ? path.join(__dirname, '../preload.js') - : path.join(__dirname, '../../preload.js'), + ? path.join(__dirname, '../../preload.cjs') + : path.join(__dirname, '../../preload.cjs'), ...args } }) diff --git a/src/app/electron.ts b/src/app/electron.ts index 251b06b6..cf81f77f 100644 --- a/src/app/electron.ts +++ b/src/app/electron.ts @@ -44,10 +44,10 @@ const ready = () => : createWindow(win) const remoteMain = await import('@electron/remote/main/index.js') - if (!wind) return - remoteMain.enable(wind.webContents) + + wind && remoteMain.enable(wind.webContents) - wind.webContents.setWindowOpenHandler(({ url }) => { + wind && wind.webContents.setWindowOpenHandler(({ url }) => { if (url.includes(' https://accounts.spotify.com/authorize') // || url.includes(`${backendUrl}/connect/github?callback`) ) { @@ -57,15 +57,15 @@ const ready = () => return { action: 'allow' } }) - if (isCC) startInstance(wind, 'instance1', subprocesses) + if (isCC && wind) startInstance(wind, 'instance1', subprocesses) - createTray(isCC, wind, thePath, __dirname) + wind && createTray(isCC, wind, thePath, __dirname) ipcMain.on('toMain', async (event, parameters) => wind && handlers(wind, subprocesses, event, parameters) ) - wind.on('close', () => { + wind && wind.on('close', () => { wind && closeAllSubs(wind, subpy, subprocesses) wind = null; }) diff --git a/src/app/preload.ts b/src/app/preload.cts similarity index 56% rename from src/app/preload.ts rename to src/app/preload.cts index 759be7cb..17e1005d 100644 --- a/src/app/preload.ts +++ b/src/app/preload.cts @@ -1,20 +1,21 @@ -import { contextBridge, ipcRenderer } from 'electron' +/* eslint-disable @typescript-eslint/no-require-imports */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +const { contextBridge, ipcRenderer } = require('electron') contextBridge.exposeInMainWorld('api', { send: (channel: string, data: any) => { // Whitelist channels - const validChannels = ['toMain']; + const validChannels = ['toMain'] if (validChannels.includes(channel)) { - ipcRenderer.send(channel, data); + ipcRenderer.send(channel, data) } }, receive: (channel: string, func: any) => { - const validChannels = ['fromMain']; + const validChannels = ['fromMain'] if (validChannels.includes(channel)) { // Deliberately strip event as it includes `sender` - ipcRenderer.on(channel, (event, ...args) => func(...args)); + ipcRenderer.on(channel, (event, ...args) => func(...args)) } }, - yz: true, -}); - + yz: true +}) diff --git a/src/app/renderer.ts b/src/app/renderer.ts index d3bdade6..d781ec13 100644 --- a/src/app/renderer.ts +++ b/src/app/renderer.ts @@ -1,6 +1,6 @@ // This file is required by the index.html file and will // be executed in the renderer process for that window. // No Node.js APIs are available in this process because -// `nodeIntegration` is turned off. Use `preload.js` to +// `nodeIntegration` is turned off. Use `preload.cjs` to // selectively enable features needed in the rendering // process.