Files
2fa-account-tool/preload.js
2026-02-01 15:10:25 +08:00

68 lines
2.4 KiB
JavaScript

const { contextBridge, ipcRenderer } = require('electron');
// 加载jsQR库
let jsQRLib = null;
try {
// 直接require jsqr模块
const jsqrModule = require('jsqr');
// 处理ES module的default export
jsQRLib = jsqrModule.default || jsqrModule;
console.log('jsQR loaded successfully:', typeof jsQRLib);
} catch (e) {
console.error('Failed to load jsQR:', e);
}
contextBridge.exposeInMainWorld('api', {
// Vault operations
getVaults: () => ipcRenderer.invoke('db:getVaults'),
addVault: (vault) => ipcRenderer.invoke('db:addVault', vault),
updateVault: (id, vault) => ipcRenderer.invoke('db:updateVault', id, vault),
deleteVault: (id) => ipcRenderer.invoke('db:deleteVault', id),
// Account operations
getAccounts: (page, limit, vaultId) => ipcRenderer.invoke('db:getAccounts', page, limit, vaultId),
getAccountCount: (vaultId) => ipcRenderer.invoke('db:getAccountCount', vaultId),
addAccount: (account) => ipcRenderer.invoke('db:addAccount', account),
updateAccount: (id, account) => ipcRenderer.invoke('db:updateAccount', id, account),
deleteAccount: (id) => ipcRenderer.invoke('db:deleteAccount', id),
moveAccountToVault: (accountId, vaultId) => ipcRenderer.invoke('db:moveAccountToVault', accountId, vaultId),
searchAccounts: (query, vaultId) => ipcRenderer.invoke('db:searchAccounts', query, vaultId),
// Clipboard
copyToClipboard: (text) => ipcRenderer.invoke('clipboard:write', text),
// Screenshot
captureScreen: () => ipcRenderer.invoke('screen:capture'),
// QR Code parsing
decodeQR: (imageData, width, height) => {
if (!jsQRLib) {
console.error('jsQR not loaded');
return null;
}
try {
// 确保是Uint8ClampedArray格式
const data = imageData instanceof Uint8ClampedArray
? imageData
: new Uint8ClampedArray(imageData);
console.log('Decoding QR, image size:', width, 'x', height, 'data length:', data.length);
const result = jsQRLib(data, width, height);
if (result) {
console.log('QR code found:', result.data);
return result.data;
} else {
console.log('No QR code found in image');
return null;
}
} catch (e) {
console.error('QR decode error:', e);
return null;
}
},
hasJsQR: () => !!jsQRLib,
});