feat: 完善跨平台发布与生产密钥隔离

This commit is contained in:
Wxw-Gu
2026-07-15 20:49:47 +08:00
parent eaea8d8435
commit d08db46479
2 changed files with 13 additions and 6 deletions
+4 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "wechatexplorer", "name": "wechatexplorer",
"version": "2.1.1", "version": "2.1.2",
"description": "macOS / Windows 微信聊天记录查看与 AI 群聊总结助手", "description": "macOS / Windows 微信聊天记录查看与 AI 群聊总结助手",
"keywords": [ "keywords": [
"wechat", "wechat",
@@ -35,10 +35,12 @@
"build": "npm run typecheck && npm run build:native-services && electron-vite build", "build": "npm run typecheck && npm run build:native-services && electron-vite build",
"postinstall": "electron-builder install-app-deps && node scripts/prepare-electron-runtime.cjs", "postinstall": "electron-builder install-app-deps && node scripts/prepare-electron-runtime.cjs",
"build:unpack": "npm run build && electron-builder --config electron-builder.yml --dir", "build:unpack": "npm run build && electron-builder --config electron-builder.yml --dir",
"build:win": "npm run typecheck && npm run build:wechat-connector:win && electron-vite build && electron-builder --config electron-builder.yml --win", "build:win": "npm run typecheck && npm run build:wechat-connector:win && electron-vite build && electron-builder --config electron-builder.yml --win --x64",
"build:mac:x64": "npm run typecheck && node scripts/build-wechat-connector.cjs --platform darwin --arch x64 && electron-vite build && electron-builder --config electron-builder.yml --mac --x64", "build:mac:x64": "npm run typecheck && node scripts/build-wechat-connector.cjs --platform darwin --arch x64 && electron-vite build && electron-builder --config electron-builder.yml --mac --x64",
"build:mac:arm64": "npm run typecheck && node scripts/build-wechat-connector.cjs --platform darwin --arch arm64 && electron-vite build && electron-builder --config electron-builder.yml --mac --arm64", "build:mac:arm64": "npm run typecheck && node scripts/build-wechat-connector.cjs --platform darwin --arch arm64 && electron-vite build && electron-builder --config electron-builder.yml --mac --arm64",
"release": "npm run release:mac && npm run release:win",
"release:mac": "npm run typecheck && npm run build:wechat-connector:mac && electron-vite build && electron-builder --config electron-builder.yml --mac --x64 --arm64 --publish always", "release:mac": "npm run typecheck && npm run build:wechat-connector:mac && electron-vite build && electron-builder --config electron-builder.yml --mac --x64 --arm64 --publish always",
"release:win": "npm run typecheck && npm run build:wechat-connector:win && electron-vite build && electron-builder --config electron-builder.yml --win --x64 --publish always",
"build:linux": "electron-vite build && electron-builder --config electron-builder.yml --linux" "build:linux": "electron-vite build && electron-builder --config electron-builder.yml --linux"
}, },
"dependencies": { "dependencies": {
+9 -4
View File
@@ -23,6 +23,11 @@ import { Contact, Message } from '../../shared/types'
const SIDEBAR_MIN_WIDTH = 260 const SIDEBAR_MIN_WIDTH = 260
const SIDEBAR_MAX_WIDTH = 380 const SIDEBAR_MAX_WIDTH = 380
function getDevelopmentDatabaseKey(): string {
if (!import.meta.env.DEV) return ''
return String(import.meta.env.VITE_DB_KEY || '').trim()
}
function EyeIcon({ hidden }: { hidden: boolean }): React.ReactElement { function EyeIcon({ hidden }: { hidden: boolean }): React.ReactElement {
return ( return (
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"> <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
@@ -154,7 +159,7 @@ const sortMessagesChronologically = (items: Message[]): Message[] =>
function App(): React.ReactElement { function App(): React.ReactElement {
const [isAuthenticated, setIsAuthenticated] = useState(false) const [isAuthenticated, setIsAuthenticated] = useState(false)
const [isDatabaseConnected, setIsDatabaseConnected] = useState(false) const [isDatabaseConnected, setIsDatabaseConnected] = useState(false)
const [dbKey, setDbKey] = useState(import.meta.env.VITE_DB_KEY || '') const [dbKey, setDbKey] = useState(getDevelopmentDatabaseKey)
const [contacts, setContacts] = useState<Contact[]>([]) const [contacts, setContacts] = useState<Contact[]>([])
const [selectedContact, setSelectedContact] = useState<Contact | null>(null) const [selectedContact, setSelectedContact] = useState<Contact | null>(null)
const [messages, setMessages] = useState<Message[]>([]) const [messages, setMessages] = useState<Message[]>([])
@@ -370,9 +375,9 @@ function App(): React.ReactElement {
setDbRootInput(settingsResult.settings.dbRoot) setDbRootInput(settingsResult.settings.dbRoot)
} }
const autoLoginEnabled = settingsResult.settings.autoLogin const autoLoginEnabled = settingsResult.settings.autoLogin
// 优先级 1: 构建期环境变量 VITE_DB_KEY(本地开发用) // 开发环境允许使用 VITE_DB_KEY;生产安装包只能读取目标电脑自己的 safeStorage。
const envKey = String(import.meta.env.VITE_DB_KEY || '').trim() const envKey = getDevelopmentDatabaseKey()
// 优先级 2: 上一次保存到 safeStorage 的密钥 // 生产环境以及未配置开发密钥时,读取上一次保存到 safeStorage 的密钥
let savedKey = '' let savedKey = ''
if (!envKey) { if (!envKey) {
const result = await window.api.getSavedDbKey() const result = await window.api.getSavedDbKey()