add chrome for puppeteer downloader

This commit is contained in:
bossgeekgo
2024-02-14 09:55:20 +08:00
parent 5b5dc528d3
commit a2c70add1c
6 changed files with 91 additions and 6 deletions

View File

@@ -8,6 +8,7 @@
"start": "electron-vite preview",
"dev": "electron-vite dev",
"dev:geek-auto-start-chat-with-boss-only": "MAIN_BOSSGEEKGO_UI_RUN_MODE=geekAutoStartWithBoss electron-vite dev",
"dev:check-and-download-dependencies-for-init-only": "MAIN_BOSSGEEKGO_UI_RUN_MODE=checkAndDownloadDependenciesForInit electron-vite dev",
"build": "electron-vite build",
"format": "prettier --write .",
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts,.vue --fix",
@@ -21,10 +22,11 @@
"build:linux": "npm run build && electron-builder --linux"
},
"dependencies": {
"@bossgeekgo/geek-auto-start-chat-with-boss": "workspace:*",
"@bossgeekgo/dingtalk-plugin": "workspace:*",
"@bossgeekgo/geek-auto-start-chat-with-boss": "workspace:*",
"@electron-toolkit/preload": "^3.0.0",
"@electron-toolkit/utils": "^3.0.0",
"@puppeteer/browsers": "^2.0.0",
"electron-updater": "^6.1.7",
"element-plus": "^2.5.5",
"normalize.css": "^8.0.1",

View File

@@ -0,0 +1,48 @@
import * as path from 'node:path'
import * as os from 'node:os'
import * as fs from 'node:fs'
import type { InstalledBrowser } from '@puppeteer/browsers'
const expectBuildId = process.env.EXPECT_CHROME_FOR_PUPPETEER_BUILD_ID || '121.0.6167.85'
const cacheDir = path.join(
os.homedir(),
'.bossgeekgo',
'external-node-runtime-dependencies',
'static'
)
const checkAndDownloadPuppeteer = async (options: {
downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void
}) => {
const puppeteerManager = await import('@puppeteer/browsers')
const executablePath = puppeteerManager.computeExecutablePath({
browser: puppeteerManager.Browser.CHROME,
cacheDir,
buildId: expectBuildId
})
let installedBrowser: InstalledBrowser
if (!fs.existsSync(executablePath)) {
// maybe the exist installation is broken.
await puppeteerManager.uninstall({
cacheDir,
buildId: expectBuildId,
browser: puppeteerManager.Browser.CHROME,
})
installedBrowser = await puppeteerManager.install({
browser: puppeteerManager.Browser.CHROME,
cacheDir,
buildId: expectBuildId,
downloadProgressCallback: options.downloadProgressCallback
})
} else {
installedBrowser = (
await puppeteerManager.getInstalledBrowsers({
cacheDir
})
).find((it) => it.buildId === expectBuildId)!
}
return installedBrowser
}
export default checkAndDownloadPuppeteer

View File

@@ -0,0 +1,11 @@
import checkAndDownloadPuppeteer from './check-and-download-puppeteer'
export const checkAndDownloadDependenciesForInit = async () => {
const browser = await checkAndDownloadPuppeteer({
downloadProgressCallback(downloadedBytes: number, totalBytes: number) {
console.log(`${downloadedBytes} / ${totalBytes}`)
}
})
console.log(browser)
}

View File

@@ -1,5 +1,6 @@
import { runAutoChat } from './flow/GEEK_AUTO_START_CHAT_WITH_BOSS'
import { openSettingWindow } from './flow/OPEN_SETTING_WINDOW'
import { checkAndDownloadDependenciesForInit } from './flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/index';
const runMode = process.env.MAIN_BOSSGEEKGO_UI_RUN_MODE
switch (runMode) {
@@ -7,6 +8,10 @@ switch (runMode) {
runAutoChat()
break
}
case 'checkAndDownloadDependenciesForInit': {
checkAndDownloadDependenciesForInit()
break
}
default: {
openSettingWindow()
break

View File

@@ -96,6 +96,7 @@ export function createMainWindow(): void {
env: {
...process.env,
MAIN_BOSSGEEKGO_UI_RUN_MODE: 'geekAutoStartWithBoss'
// PUPPETEER_EXECUTABLE_PATH: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'
}
})
ipcMain.emit('geek-auto-start-chat-with-boss-started')

28
pnpm-lock.yaml generated
View File

@@ -61,6 +61,9 @@ importers:
'@electron-toolkit/utils':
specifier: ^3.0.0
version: 3.0.0(electron@28.2.0)
'@puppeteer/browsers':
specifier: ^2.0.0
version: 2.0.0
electron-updater:
specifier: ^6.1.7
version: 6.1.7
@@ -890,6 +893,22 @@ packages:
- supports-color
dev: false
/@puppeteer/browsers@2.0.0:
resolution: {integrity: sha512-3PS82/5+tnpEaUWonjAFFvlf35QHF15xqyGd34GBa5oP5EPVfFXRsbSxIGYf1M+vZlqBZ3oxT1kRg9OYhtt8ng==}
engines: {node: '>=18'}
hasBin: true
dependencies:
debug: 4.3.4
extract-zip: 2.0.1
progress: 2.0.3
proxy-agent: 6.3.1
tar-fs: 3.0.4
unbzip2-stream: 1.4.3
yargs: 17.7.2
transitivePeerDependencies:
- supports-color
dev: false
/@rollup/pluginutils@5.1.0:
resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
engines: {node: '>=14.0.0'}
@@ -1045,7 +1064,7 @@ packages:
dependencies:
'@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4
'@types/node': 18.19.9
'@types/node': 18.19.15
'@types/responselike': 1.0.3
/@types/debug@4.1.12:
@@ -1073,7 +1092,7 @@ packages:
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
'@types/node': 18.19.9
'@types/node': 18.19.15
/@types/lodash-es@4.17.12:
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
@@ -1092,7 +1111,6 @@ packages:
resolution: {integrity: sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA==}
dependencies:
undici-types: 5.26.5
optional: true
/@types/node@18.19.9:
resolution: {integrity: sha512-oZFKlC8l5YtzGQNT4zC2PiSSKzQVZ8bAwwd+EYdPLtyk0nSEq6O16SkK+rkkT2eflDAbormJgEF3QnH3oDrTSw==}
@@ -1102,7 +1120,7 @@ packages:
/@types/plist@3.0.5:
resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==}
dependencies:
'@types/node': 18.19.9
'@types/node': 18.19.15
xmlbuilder: 15.1.1
dev: true
optional: true
@@ -1110,7 +1128,7 @@ packages:
/@types/responselike@1.0.3:
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
dependencies:
'@types/node': 18.19.9
'@types/node': 18.19.15
/@types/semver@7.5.6:
resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}