From 2e41a03c963358ee5434eac770cea38ba828f029 Mon Sep 17 00:00:00 2001 From: cc <98377878+hicccc77@users.noreply.github.com> Date: Wed, 14 Jan 2026 22:43:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=80=E6=9C=89=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=AE=8C=E5=85=A8=E5=90=8E=E5=8F=B0=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BB=A5=E8=A7=A3=E5=86=B3=E9=A1=B5=E9=9D=A2=E6=9C=AA?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BA=86=E5=A4=B4=E5=83=8F=E6=B8=B2=E6=9F=93=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BB=A5=E6=8F=90=E5=8D=87=E6=B8=B2=E6=9F=93=E9=80=9F?= =?UTF-8?q?=E5=BA=A6=20fix:=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=99=9A?= =?UTF-8?q?=E6=8B=9F=E6=9C=BA=E4=B8=8A=E6=97=A0=E6=B3=95=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=88=B0wxkey=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=9B=BE=E7=89=87=E5=AF=86=E9=92=A5=E6=89=AB=E6=8F=8F?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E4=BF=AE=E5=A4=8D=E5=B9=B4?= =?UTF-8?q?=E5=BA=A6=E6=8A=A5=E5=91=8A=E9=94=99=E8=AF=AF=EF=BC=9B=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BA=86=E5=B9=B4=E5=BA=A6=E6=8A=A5=E5=91=8A=E5=92=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=86=E6=9E=90=E4=B8=AD=E7=9A=84=E5=8F=91?= =?UTF-8?q?=E9=80=81=E8=80=85=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=83=A8=E5=88=86=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=81=B6=E5=8F=91=E7=9A=84=E6=9C=AA=E6=B8=B2=E6=9F=93=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E9=97=AE=E9=A2=98=EF=BC=9B=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E5=81=B6=E5=8F=91=E6=B8=B2=E6=9F=93=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86=E9=83=A8=E5=88=86=E5=9B=BE=E7=89=87=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=A7=A3=E5=AF=86=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- echotrace | 1 + electron/imageSearchWorker.ts | 8 + electron/main.ts | 6 +- electron/preload.ts | 3 +- electron/services/analyticsService.ts | 57 +- electron/services/chatService.ts | 72 +- electron/services/exportService.ts | 47 +- electron/services/groupAnalyticsService.ts | 2 + electron/services/imageDecryptService.ts | 108 +- electron/services/keyService.ts | 140 +- electron/services/wcdbCore.ts | 1317 ++++++++++ electron/services/wcdbService.ts | 1379 ++-------- electron/wcdbWorker.ts | 122 + package-lock.json | 2721 +------------------- package.json | 15 +- resources/wcdb_api.dll | Bin 578048 -> 585216 bytes src/App.tsx | 4 +- src/components/Avatar.scss | 79 + src/components/Avatar.tsx | 129 + src/pages/AnalyticsPage.tsx | 13 +- src/pages/AnalyticsWelcomePage.scss | 119 + src/pages/AnalyticsWelcomePage.tsx | 63 + src/pages/ChatPage.scss | 4 +- src/pages/ChatPage.tsx | 272 +- src/pages/GroupAnalyticsPage.tsx | 25 +- src/pages/SettingsPage.tsx | 1 + src/pages/WelcomePage.tsx | 3 +- src/stores/analyticsStore.ts | 48 +- src/types/electron.d.ts | 3 +- src/utils/AvatarLoadQueue.ts | 74 + vite.config.ts | 66 +- wx_key | 1 + 32 files changed, 2772 insertions(+), 4130 deletions(-) create mode 160000 echotrace create mode 100644 electron/services/wcdbCore.ts create mode 100644 electron/wcdbWorker.ts create mode 100644 src/components/Avatar.scss create mode 100644 src/components/Avatar.tsx create mode 100644 src/pages/AnalyticsWelcomePage.scss create mode 100644 src/pages/AnalyticsWelcomePage.tsx create mode 100644 src/utils/AvatarLoadQueue.ts create mode 160000 wx_key diff --git a/echotrace b/echotrace new file mode 160000 index 0000000..98280f0 --- /dev/null +++ b/echotrace @@ -0,0 +1 @@ +Subproject commit 98280f0d0d7b764b2f2027fc4d103024e8ed30fd diff --git a/electron/imageSearchWorker.ts b/electron/imageSearchWorker.ts index 2f99546..56826a2 100644 --- a/electron/imageSearchWorker.ts +++ b/electron/imageSearchWorker.ts @@ -62,6 +62,12 @@ function isThumbnailDat(fileName: string): boolean { return fileName.includes('.t.dat') || fileName.includes('_t.dat') } +function isHdDat(fileName: string): boolean { + const lower = fileName.toLowerCase() + const base = lower.endsWith('.dat') ? lower.slice(0, -4) : lower + return base.endsWith('_hd') || base.endsWith('_h') +} + function walkForDat( root: string, datName: string, @@ -101,6 +107,8 @@ function walkForDat( if (!isLikelyImageDatBase(baseLower)) continue if (!hasXVariant(baseLower)) continue if (!matchesDatName(lower, datName)) continue + // 排除高清图片格式 (_hd, _h) + if (isHdDat(lower)) continue matchedBases.add(baseLower) const isThumb = isThumbnailDat(lower) if (!allowThumbnail && isThumb) continue diff --git a/electron/main.ts b/electron/main.ts index a5a2001..84332c9 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -382,6 +382,8 @@ function registerIpcHandlers() { return true }) + + // 聊天相关 ipcMain.handle('chat:connect', async () => { return chatService.connect() @@ -468,8 +470,8 @@ function registerIpcHandlers() { }) // 数据分析相关 - ipcMain.handle('analytics:getOverallStatistics', async () => { - return analyticsService.getOverallStatistics() + ipcMain.handle('analytics:getOverallStatistics', async (_, force?: boolean) => { + return analyticsService.getOverallStatistics(force) }) ipcMain.handle('analytics:getContactRankings', async (_, limit?: number) => { diff --git a/electron/preload.ts b/electron/preload.ts index 1b9361e..897d9b7 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -69,7 +69,8 @@ contextBridge.exposeInMainWorld('electronAPI', { ipcRenderer.invoke('wcdb:testConnection', dbPath, hexKey, wxid), open: (dbPath: string, hexKey: string, wxid: string) => ipcRenderer.invoke('wcdb:open', dbPath, hexKey, wxid), - close: () => ipcRenderer.invoke('wcdb:close') + close: () => ipcRenderer.invoke('wcdb:close'), + }, // 密钥获取 diff --git a/electron/services/analyticsService.ts b/electron/services/analyticsService.ts index a033fb6..9e83f64 100644 --- a/electron/services/analyticsService.ts +++ b/electron/services/analyticsService.ts @@ -1,5 +1,8 @@ import { ConfigService } from './config' import { wcdbService } from './wcdbService' +import { join } from 'path' +import { readFile, writeFile } from 'fs/promises' +import { app } from 'electron' export interface ChatStatistics { totalMessages: number @@ -253,15 +256,31 @@ class AnalyticsService { sessionIds: string[], beginTimestamp = 0, endTimestamp = 0, - window?: any + window?: any, + force = false ): Promise<{ success: boolean; data?: any; source?: string; error?: string }> { const cacheKey = this.buildAggregateCacheKey(sessionIds, beginTimestamp, endTimestamp) - if (this.aggregateCache && this.aggregateCache.key === cacheKey) { + + if (force) { + if (this.aggregateCache) this.aggregateCache = null + if (this.fallbackAggregateCache) this.fallbackAggregateCache = null + } + + if (!force && this.aggregateCache && this.aggregateCache.key === cacheKey) { if (Date.now() - this.aggregateCache.updatedAt < 5 * 60 * 1000) { return { success: true, data: this.aggregateCache.data, source: 'cache' } } } + // 尝试从文件加载缓存 + if (!force) { + const fileCache = await this.loadCacheFromFile() + if (fileCache && fileCache.key === cacheKey) { + this.aggregateCache = fileCache + return { success: true, data: fileCache.data, source: 'file-cache' } + } + } + if (this.aggregatePromise && this.aggregatePromise.key === cacheKey) { return this.aggregatePromise.promise } @@ -291,7 +310,12 @@ class AnalyticsService { this.aggregatePromise = { key: cacheKey, promise } try { - return await promise + const result = await promise + // 如果计算成功,同时写入此文件缓存 + if (result.success && result.data && result.source !== 'cache') { + this.saveCacheToFile({ key: cacheKey, data: this.aggregateCache?.data, updatedAt: Date.now() }) + } + return result } finally { if (this.aggregatePromise && this.aggregatePromise.key === cacheKey) { this.aggregatePromise = null @@ -299,6 +323,25 @@ class AnalyticsService { } } + private getCacheFilePath(): string { + return join(app.getPath('userData'), 'analytics_cache.json') + } + + private async loadCacheFromFile(): Promise<{ key: string; data: any; updatedAt: number } | null> { + try { + const raw = await readFile(this.getCacheFilePath(), 'utf-8') + return JSON.parse(raw) + } catch { return null } + } + + private async saveCacheToFile(data: any) { + try { + await writeFile(this.getCacheFilePath(), JSON.stringify(data)) + } catch (e) { + console.error('保存统计缓存失败:', e) + } + } + private normalizeAggregateSessions( sessions: Record | undefined, idMap: Record | undefined @@ -326,7 +369,7 @@ class AnalyticsService { void results } - async getOverallStatistics(): Promise<{ success: boolean; data?: ChatStatistics; error?: string }> { + async getOverallStatistics(force = false): Promise<{ success: boolean; data?: ChatStatistics; error?: string }> { try { const conn = await this.ensureConnected() if (!conn.success || !conn.cleanedWxid) return { success: false, error: conn.error } @@ -340,7 +383,7 @@ class AnalyticsService { const win = BrowserWindow.getAllWindows()[0] this.setProgress(win, '正在执行原生数据聚合...', 30) - const result = await this.getAggregateWithFallback(sessionInfo.usernames, 0, 0, win) + const result = await this.getAggregateWithFallback(sessionInfo.usernames, 0, 0, win, force) if (!result.success || !result.data) { return { success: false, error: result.error || '聚合统计失败' } @@ -458,8 +501,8 @@ class AnalyticsService { const d = result.data - // SQLite strftime('%w') 返回 0=Sun, 1=Mon...6=Sat - // 前端期望 1=Mon...7=Sun + // SQLite strftime('%w') 返回 0=周日, 1=周一...6=周六 + // 前端期望 1=周一...7=周日 const weekdayDistribution: Record = {} for (const [w, count] of Object.entries(d.weekday)) { const sqliteW = parseInt(w, 10) diff --git a/electron/services/chatService.ts b/electron/services/chatService.ts index 9313233..17cabfe 100644 --- a/electron/services/chatService.ts +++ b/electron/services/chatService.ts @@ -667,24 +667,24 @@ class ChatService { const messages: Message[] = [] for (const row of rows) { - const content = this.decodeMessageContent( - this.getRowField(row, [ - 'message_content', - 'messageContent', - 'content', - 'msg_content', - 'msgContent', - 'WCDB_CT_message_content', - 'WCDB_CT_messageContent' - ]), - this.getRowField(row, [ - 'compress_content', - 'compressContent', - 'compressed_content', - 'WCDB_CT_compress_content', - 'WCDB_CT_compressContent' - ]) - ) + const rawMessageContent = this.getRowField(row, [ + 'message_content', + 'messageContent', + 'content', + 'msg_content', + 'msgContent', + 'WCDB_CT_message_content', + 'WCDB_CT_messageContent' + ]); + const rawCompressContent = this.getRowField(row, [ + 'compress_content', + 'compressContent', + 'compressed_content', + 'WCDB_CT_compress_content', + 'WCDB_CT_compressContent' + ]); + + const content = this.decodeMessageContent(rawMessageContent, rawCompressContent); const localType = this.getRowInt(row, ['local_type', 'localType', 'type', 'msg_type', 'msgType', 'WCDB_CT_local_type'], 1) const isSendRaw = this.getRowField(row, ['computed_is_send', 'computedIsSend', 'is_send', 'isSend', 'WCDB_CT_is_send']) let isSend = isSendRaw === null ? null : parseInt(isSendRaw, 10) @@ -696,6 +696,16 @@ class ChatService { const expectedIsSend = (senderLower === myWxidLower || senderLower === cleanedWxidLower) ? 1 : 0 if (isSend === null) { isSend = expectedIsSend + // [DEBUG] Issue #34: 记录 isSend 推断过程 + if (expectedIsSend === 0 && localType === 1) { + // 仅在被判为接收且是文本消息时记录,避免刷屏 + // console.log(`[ChatService] inferred isSend=0: sender=${senderUsername}, myWxid=${myWxid} (cleaned=${cleanedWxid})`) + } + } + } else if (senderUsername && !myWxid) { + // [DEBUG] Issue #34: 未配置 myWxid,无法判断是否发送 + if (messages.length < 5) { + console.warn(`[ChatService] Warning: myWxid not set. Cannot determine if message is sent by me. sender=${senderUsername}`) } } @@ -1481,9 +1491,9 @@ class ChatService { */ private decodeMessageContent(messageContent: any, compressContent: any): string { // 优先使用 compress_content - let content = this.decodeMaybeCompressed(compressContent) + let content = this.decodeMaybeCompressed(compressContent, 'compress_content') if (!content || content.length === 0) { - content = this.decodeMaybeCompressed(messageContent) + content = this.decodeMaybeCompressed(messageContent, 'message_content') } return content } @@ -1491,12 +1501,14 @@ class ChatService { /** * 尝试解码可能压缩的内容 */ - private decodeMaybeCompressed(raw: any): string { + private decodeMaybeCompressed(raw: any, fieldName: string = 'unknown'): string { if (!raw) return '' + // console.log(`[ChatService] Decoding ${fieldName}: type=${typeof raw}`, raw) + // 如果是 Buffer/Uint8Array if (Buffer.isBuffer(raw) || raw instanceof Uint8Array) { - return this.decodeBinaryContent(Buffer.from(raw)) + return this.decodeBinaryContent(Buffer.from(raw), String(raw)) } // 如果是字符串 @@ -1507,7 +1519,9 @@ class ChatService { if (this.looksLikeHex(raw)) { const bytes = Buffer.from(raw, 'hex') if (bytes.length > 0) { - return this.decodeBinaryContent(bytes) + const result = this.decodeBinaryContent(bytes, raw) + // console.log(`[ChatService] HEX decoded result: ${result}`) + return result } } @@ -1515,7 +1529,7 @@ class ChatService { if (this.looksLikeBase64(raw)) { try { const bytes = Buffer.from(raw, 'base64') - return this.decodeBinaryContent(bytes) + return this.decodeBinaryContent(bytes, raw) } catch { } } @@ -1529,7 +1543,7 @@ class ChatService { /** * 解码二进制内容(处理 zstd 压缩) */ - private decodeBinaryContent(data: Buffer): string { + private decodeBinaryContent(data: Buffer, fallbackValue?: string): string { if (data.length === 0) return '' try { @@ -1556,10 +1570,16 @@ class ChatService { return decoded.replace(/\uFFFD/g, '') } + // 如果提供了 fallbackValue,且解码结果看起来像二进制垃圾,则返回 fallbackValue + if (fallbackValue && replacementCount > 0) { + // console.log(`[ChatService] Binary garbage detected, using fallback: ${fallbackValue}`) + return fallbackValue + } + // 尝试 latin1 解码 return data.toString('latin1') } catch { - return '' + return fallbackValue || '' } } diff --git a/electron/services/exportService.ts b/electron/services/exportService.ts index 4a5550d..b022107 100644 --- a/electron/services/exportService.ts +++ b/electron/services/exportService.ts @@ -459,7 +459,7 @@ class ExportService { const [displayNames, avatarUrls] = await Promise.all([ wcdbService.getDisplayNames(Array.from(lookupUsernames)), - includeAvatars ? wcdbService.getAvatarUrls(Array.from(lookupUsernames)) : Promise.resolve({ success: true, map: {} }) + includeAvatars ? wcdbService.getAvatarUrls(Array.from(lookupUsernames)) : Promise.resolve({ success: true, map: {} as Record }) ]) for (const member of rawMembers) { @@ -590,7 +590,11 @@ class ExportService { } } if (!data) continue - const finalMime = mime || this.inferImageMime(fileInfo.ext) + + // 优先使用内容检测出的 MIME 类型 + const detectedMime = this.detectMimeType(data) + const finalMime = detectedMime || mime || this.inferImageMime(fileInfo.ext) + const base64 = data.toString('base64') result.set(member.username, `data:${finalMime};base64,${base64}`) } catch { @@ -601,6 +605,39 @@ class ExportService { return result } + private detectMimeType(buffer: Buffer): string | null { + if (buffer.length < 4) return null + + // PNG: 89 50 4E 47 + if (buffer[0] === 0x89 && buffer[1] === 0x50 && buffer[2] === 0x4E && buffer[3] === 0x47) { + return 'image/png' + } + + // JPEG: FF D8 FF + if (buffer[0] === 0xFF && buffer[1] === 0xD8 && buffer[2] === 0xFF) { + return 'image/jpeg' + } + + // GIF: 47 49 46 38 + if (buffer[0] === 0x47 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x38) { + return 'image/gif' + } + + // WEBP: RIFF ... WEBP + if (buffer.length >= 12 && + buffer[0] === 0x52 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x46 && + buffer[8] === 0x57 && buffer[9] === 0x45 && buffer[10] === 0x42 && buffer[11] === 0x50) { + return 'image/webp' + } + + // BMP: 42 4D + if (buffer[0] === 0x42 && buffer[1] === 0x4D) { + return 'image/bmp' + } + + return null + } + private inferImageMime(ext: string): string { switch (ext.toLowerCase()) { case '.png': @@ -659,7 +696,8 @@ class ExportService { const chatLabMessages: ChatLabMessage[] = allMessages.map((msg) => { const memberInfo = collected.memberSet.get(msg.senderUsername)?.member || { platformId: msg.senderUsername, - accountName: msg.senderUsername + accountName: msg.senderUsername, + groupNickname: undefined } return { sender: msg.senderUsername, @@ -811,7 +849,8 @@ class ExportService { displayName: sessionInfo.displayName, type: isGroup ? '群聊' : '私聊', lastTimestamp: collected.lastTime, - messageCount: allMessages.length + messageCount: allMessages.length, + avatar: undefined as string | undefined }, messages: allMessages } diff --git a/electron/services/groupAnalyticsService.ts b/electron/services/groupAnalyticsService.ts index 9758a7b..628e0bb 100644 --- a/electron/services/groupAnalyticsService.ts +++ b/electron/services/groupAnalyticsService.ts @@ -181,6 +181,8 @@ class GroupAnalyticsService { } } + + async getGroupActiveHours(chatroomId: string, startTime?: number, endTime?: number): Promise<{ success: boolean; data?: GroupActiveHours; error?: string }> { try { const conn = await this.ensureConnected() diff --git a/electron/services/imageDecryptService.ts b/electron/services/imageDecryptService.ts index 6797270..585b44e 100644 --- a/electron/services/imageDecryptService.ts +++ b/electron/services/imageDecryptService.ts @@ -1,14 +1,14 @@ import { app, BrowserWindow } from 'electron' import { basename, dirname, extname, join } from 'path' import { pathToFileURL } from 'url' -import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from 'fs' +import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, appendFileSync } from 'fs' import { writeFile } from 'fs/promises' import crypto from 'crypto' import { Worker } from 'worker_threads' import { ConfigService } from './config' import { wcdbService } from './wcdbService' -type DecryptResult = { +type DecryptResult = { success: boolean localPath?: string error?: string @@ -32,11 +32,45 @@ export class ImageDecryptService { private logInfo(message: string, meta?: Record): void { if (!this.configService.get('logEnabled')) return + const timestamp = new Date().toISOString() + const metaStr = meta ? ` ${JSON.stringify(meta)}` : '' + const logLine = `[${timestamp}] [ImageDecrypt] ${message}${metaStr}\n` + + // 同时输出到控制台 if (meta) { console.info(message, meta) } else { console.info(message) } + + // 写入日志文件 + this.writeLog(logLine) + } + + private logError(message: string, error?: unknown, meta?: Record): void { + if (!this.configService.get('logEnabled')) return + const timestamp = new Date().toISOString() + const errorStr = error ? ` Error: ${String(error)}` : '' + const metaStr = meta ? ` ${JSON.stringify(meta)}` : '' + const logLine = `[${timestamp}] [ImageDecrypt] ERROR: ${message}${errorStr}${metaStr}\n` + + // 同时输出到控制台 + console.error(message, error, meta) + + // 写入日志文件 + this.writeLog(logLine) + } + + private writeLog(line: string): void { + try { + const logDir = join(app.getPath('userData'), 'logs') + if (!existsSync(logDir)) { + mkdirSync(logDir, { recursive: true }) + } + appendFileSync(join(logDir, 'wcdb.log'), line, { encoding: 'utf8' }) + } catch (err) { + console.error('写入日志失败:', err) + } } async resolveCachedImage(payload: { sessionId?: string; imageMd5?: string; imageDatName?: string }): Promise { @@ -49,6 +83,7 @@ export class ImageDecryptService { for (const key of cacheKeys) { const cached = this.resolvedCache.get(key) if (cached && existsSync(cached) && this.isImageFile(cached)) { + this.logInfo('缓存命中(从Map)', { key, path: cached, isThumb: this.isThumbnailPath(cached) }) const dataUrl = this.fileToDataUrl(cached) const isThumb = this.isThumbnailPath(cached) const hasUpdate = isThumb ? (this.updateFlags.get(key) ?? false) : false @@ -68,6 +103,7 @@ export class ImageDecryptService { for (const key of cacheKeys) { const existing = this.findCachedOutput(key, false, payload.sessionId) if (existing) { + this.logInfo('缓存命中(文件系统)', { key, path: existing, isThumb: this.isThumbnailPath(existing) }) this.cacheResolvedPaths(key, payload.imageMd5, payload.imageDatName, existing) const dataUrl = this.fileToDataUrl(existing) const isThumb = this.isThumbnailPath(existing) @@ -81,6 +117,7 @@ export class ImageDecryptService { return { success: true, localPath: dataUrl || this.filePathToUrl(existing), hasUpdate } } } + this.logInfo('未找到缓存', { md5: payload.imageMd5, datName: payload.imageDatName }) return { success: false, error: '未找到缓存图片' } } @@ -120,15 +157,18 @@ export class ImageDecryptService { payload: { sessionId?: string; imageMd5?: string; imageDatName?: string; force?: boolean }, cacheKey: string ): Promise { + this.logInfo('开始解密图片', { md5: payload.imageMd5, datName: payload.imageDatName, force: payload.force }) try { const wxid = this.configService.get('myWxid') const dbPath = this.configService.get('dbPath') if (!wxid || !dbPath) { + this.logError('配置缺失', undefined, { wxid: !!wxid, dbPath: !!dbPath }) return { success: false, error: '未配置账号或数据库路径' } } const accountDir = this.resolveAccountDir(dbPath, wxid) if (!accountDir) { + this.logError('未找到账号目录', undefined, { dbPath, wxid }) return { success: false, error: '未找到账号目录' } } @@ -139,15 +179,19 @@ export class ImageDecryptService { payload.sessionId, { allowThumbnail: !payload.force, skipResolvedCache: Boolean(payload.force) } ) - + // 如果要求高清图但没找到,直接返回提示 if (!datPath && payload.force) { + this.logError('未找到高清图', undefined, { md5: payload.imageMd5, datName: payload.imageDatName }) return { success: false, error: '未找到高清图,请在微信中点开该图片查看后重试' } } if (!datPath) { + this.logError('未找到DAT文件', undefined, { md5: payload.imageMd5, datName: payload.imageDatName }) return { success: false, error: '未找到图片文件' } } + this.logInfo('找到DAT文件', { datPath }) + if (!extname(datPath).toLowerCase().includes('dat')) { this.cacheResolvedPaths(cacheKey, payload.imageMd5, payload.imageDatName, datPath) const dataUrl = this.fileToDataUrl(datPath) @@ -160,6 +204,7 @@ export class ImageDecryptService { // 查找已缓存的解密文件 const existing = this.findCachedOutput(cacheKey, payload.force, payload.sessionId) if (existing) { + this.logInfo('找到已解密文件', { existing, isHd: this.isHdPath(existing) }) const isHd = this.isHdPath(existing) // 如果要求高清但找到的是缩略图,继续解密高清图 if (!(payload.force && !isHd)) { @@ -192,13 +237,15 @@ export class ImageDecryptService { const aesKeyRaw = this.configService.get('imageAesKey') const aesKey = this.resolveAesKey(aesKeyRaw) + this.logInfo('开始解密DAT文件', { datPath, xorKey, hasAesKey: !!aesKey }) const decrypted = await this.decryptDatAuto(datPath, xorKey, aesKey) - + const ext = this.detectImageExtension(decrypted) || '.jpg' const outputPath = this.getCacheOutputPathFromDat(datPath, ext, payload.sessionId) await writeFile(outputPath, decrypted) - + this.logInfo('解密成功', { outputPath, size: decrypted.length }) + const isThumb = this.isThumbnailPath(datPath) this.cacheResolvedPaths(cacheKey, payload.imageMd5, payload.imageDatName, outputPath) if (!isThumb) { @@ -209,6 +256,7 @@ export class ImageDecryptService { this.emitCacheResolved(payload, cacheKey, localPath) return { success: true, localPath, isThumb } } catch (e) { + this.logError('解密失败', e, { md5: payload.imageMd5, datName: payload.imageDatName }) return { success: false, error: String(e) } } } @@ -233,7 +281,7 @@ export class ImageDecryptService { if (this.isAccountDir(entryPath)) return entryPath } } - } catch {} + } catch { } return null } @@ -244,10 +292,10 @@ export class ImageDecryptService { private getDecryptedCacheDir(wxid: string): string | null { const cachePath = this.configService.get('cachePath') if (!cachePath) return null - + const cleanedWxid = this.cleanAccountDirName(wxid) const cacheAccountDir = join(cachePath, cleanedWxid) - + // 检查缓存目录下是否有 hardlink.db if (existsSync(join(cacheAccountDir, 'hardlink.db'))) { return cacheAccountDir @@ -312,7 +360,7 @@ export class ImageDecryptService { allowThumbnail, skipResolvedCache }) - + // 优先通过 hardlink.db 查询 if (imageMd5) { this.logInfo('[ImageDecrypt] hardlink lookup (md5)', { imageMd5, sessionId }) @@ -474,7 +522,7 @@ export class ImageDecryptService { if (!hasUpdate) return this.updateFlags.set(cacheKey, true) this.emitImageUpdate(payload, cacheKey) - }).catch(() => {}) + }).catch(() => { }) } private looksLikeMd5(value: string): boolean { @@ -528,7 +576,7 @@ export class ImageDecryptService { this.logInfo('[ImageDecrypt] hardlink row miss', { md5, table: state.imageTable }) return null } - + const dir1 = this.getRowValue(row, 'dir1') const dir2 = this.getRowValue(row, 'dir2') const fileName = this.getRowValue(row, 'file_name') ?? this.getRowValue(row, 'fileName') @@ -549,7 +597,7 @@ export class ImageDecryptService { // dir1 和 dir2 是 rowid,需要从 dir2id 表查询对应的目录名 let dir1Name: string | null = null let dir2Name: string | null = null - + if (state.dirTable) { try { // 通过 rowid 查询目录名 @@ -562,7 +610,7 @@ export class ImageDecryptService { const value = this.getRowValue(dir1Result.rows[0], 'username') if (value) dir1Name = String(value) } - + const dir2Result = await wcdbService.execQuery( 'media', hardlinkPath, @@ -588,14 +636,14 @@ export class ImageDecryptService { join(accountDir, 'msg', 'attach', dir1Name, dir2Name, 'mg', fileName), join(accountDir, 'msg', 'attach', dir1Name, dir2Name, fileName), ] - + for (const fullPath of possiblePaths) { if (existsSync(fullPath)) { this.logInfo('[ImageDecrypt] hardlink path hit', { fullPath }) return fullPath } } - + this.logInfo('[ImageDecrypt] hardlink path miss', { possiblePaths }) return null } catch { @@ -829,14 +877,14 @@ export class ImageDecryptService { } } } - + // 新目录结构: Images/{normalizedKey}/{normalizedKey}_thumb.jpg 或 _hd.jpg const imageDir = join(root, normalizedKey) if (existsSync(imageDir)) { const hit = this.findCachedOutputInDir(imageDir, normalizedKey, extensions, preferHd) if (hit) return hit } - + // 兼容旧的平铺结构 for (const ext of extensions) { const candidate = join(root, `${cacheKey}${ext}`) @@ -846,7 +894,7 @@ export class ImageDecryptService { const candidate = join(root, `${cacheKey}_t${ext}`) if (existsSync(candidate)) return candidate } - + return null } @@ -863,6 +911,8 @@ export class ImageDecryptService { } const thumbPath = join(dirPath, `${normalizedKey}_thumb${ext}`) if (existsSync(thumbPath)) return thumbPath + + // 允许返回 _hd 格式(因为它有 _hd 变体后缀) if (!preferHd) { const hdPath = join(dirPath, `${normalizedKey}_hd${ext}`) if (existsSync(hdPath)) return hdPath @@ -875,14 +925,14 @@ export class ImageDecryptService { const name = basename(datPath) const lower = name.toLowerCase() const base = lower.endsWith('.dat') ? name.slice(0, -4) : name - + // 提取基础名称(去掉 _t, _h 等后缀) const normalizedBase = this.normalizeDatBase(base) - + // 判断是缩略图还是高清图 const isThumb = this.isThumbnailDat(lower) const suffix = isThumb ? '_thumb' : '_hd' - + const contactDir = this.sanitizeDirName(sessionId || 'unknown') const timeDir = this.resolveTimeDir(datPath) const outputDir = join(this.getCacheRoot(), contactDir, timeDir) @@ -960,8 +1010,9 @@ export class ImageDecryptService { const lower = entry.toLowerCase() if (!lower.endsWith('.dat')) continue if (this.isThumbnailDat(lower)) continue - if (!this.hasXVariant(lower.slice(0, -4))) continue const baseLower = lower.slice(0, -4) + // 只排除没有 _x 变体后缀的文件(允许 _hd、_h 等所有带变体的) + if (!this.hasXVariant(baseLower)) continue if (this.normalizeDatBase(baseLower) !== target) continue return join(dirPath, entry) } @@ -973,6 +1024,7 @@ export class ImageDecryptService { if (!lower.endsWith('.dat')) return false if (this.isThumbnailDat(lower)) return false const baseLower = lower.slice(0, -4) + // 只检查是否有 _x 变体后缀(允许 _hd、_h 等所有带变体的) return this.hasXVariant(baseLower) } @@ -1079,7 +1131,7 @@ export class ImageDecryptService { private async decryptDatAuto(datPath: string, xorKey: number, aesKey: Buffer | null): Promise { const version = this.getDatVersion(datPath) - + if (version === 0) { return this.decryptDatV3(datPath, xorKey) } @@ -1136,7 +1188,7 @@ export class ImageDecryptService { // 当 aesSize % 16 === 0 时,仍需要额外 16 字节的填充 const remainder = ((aesSize % 16) + 16) % 16 const alignedAesSize = aesSize + (16 - remainder) - + if (alignedAesSize > data.length) { throw new Error('文件格式异常:AES 数据长度超过文件实际长度') } @@ -1147,7 +1199,7 @@ export class ImageDecryptService { const decipher = crypto.createDecipheriv('aes-128-ecb', aesKey, null) decipher.setAutoPadding(false) const decrypted = Buffer.concat([decipher.update(aesData), decipher.final()]) - + // 使用 PKCS7 填充移除 unpadded = this.strictRemovePadding(decrypted) } @@ -1214,7 +1266,7 @@ export class ImageDecryptService { if (buffer[0] === 0x89 && buffer[1] === 0x50 && buffer[2] === 0x4e && buffer[3] === 0x47) return '.png' if (buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff) return '.jpg' if (buffer[0] === 0x52 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x46 && - buffer[8] === 0x57 && buffer[9] === 0x45 && buffer[10] === 0x42 && buffer[11] === 0x50) { + buffer[8] === 0x57 && buffer[9] === 0x45 && buffer[10] === 0x42 && buffer[11] === 0x50) { return '.webp' } return null @@ -1332,10 +1384,10 @@ export class ImageDecryptService { keyCount.set(key, (keyCount.get(key) || 0) + 1) filesChecked++ } - } catch {} + } catch { } } } - } catch {} + } catch { } } scanDir(dirPath) diff --git a/electron/services/keyService.ts b/electron/services/keyService.ts index d78edbb..8b51c8d 100644 --- a/electron/services/keyService.ts +++ b/electron/services/keyService.ts @@ -1,9 +1,10 @@ import { app } from 'electron' import { join, dirname, basename } from 'path' -import { existsSync, readdirSync, readFileSync, statSync } from 'fs' +import { existsSync, readdirSync, readFileSync, statSync, copyFileSync, mkdirSync } from 'fs' import { execFile, spawn } from 'child_process' import { promisify } from 'util' import crypto from 'crypto' +import os from 'os' const execFileAsync = promisify(execFile) @@ -57,18 +58,94 @@ export class KeyService { private readonly ERROR_SUCCESS = 0 private getDllPath(): string { - const resourcesPath = app.isPackaged - ? join(process.resourcesPath, 'resources') - : join(app.getAppPath(), 'resources') - return join(resourcesPath, 'wx_key.dll') + const isPackaged = typeof app !== 'undefined' && app ? app.isPackaged : process.env.NODE_ENV === 'production' + + // 候选路径列表 + const candidates: string[] = [] + + // 1. 显式环境变量 (最高优先级) + if (process.env.WX_KEY_DLL_PATH) { + candidates.push(process.env.WX_KEY_DLL_PATH) + } + + if (isPackaged) { + // 生产环境: 通常在 resources 目录下,但也可能直接在 resources 根目录 + candidates.push(join(process.resourcesPath, 'resources', 'wx_key.dll')) + candidates.push(join(process.resourcesPath, 'wx_key.dll')) + } else { + // 开发环境 + const cwd = process.cwd() + candidates.push(join(cwd, 'resources', 'wx_key.dll')) + candidates.push(join(app.getAppPath(), 'resources', 'wx_key.dll')) + } + + // 检查并返回第一个存在的路径 + for (const path of candidates) { + if (existsSync(path)) { + return path + } + } + + // 如果都没找到,返回最可能的路径以便报错信息有参考 + return candidates[0] + } + + // 检查路径是否为 UNC 路径或网络路径 + private isNetworkPath(path: string): boolean { + // UNC 路径以 \\ 开头 + if (path.startsWith('\\\\')) { + return true + } + // 检查是否为网络映射驱动器(简化检测:A: 表示驱动器) + // 注意:这是一个启发式检测,更准确的方式需要调用 GetDriveType Windows API + // 但对于大多数 VM 共享场景,UNC 路径检测已足够 + return false + } + + // 将 DLL 复制到本地临时目录 + private localizeNetworkDll(originalPath: string): string { + try { + const tempDir = join(os.tmpdir(), 'weflow_dll_cache') + if (!existsSync(tempDir)) { + mkdirSync(tempDir, { recursive: true }) + } + const localPath = join(tempDir, 'wx_key.dll') + + // 检查是否已经有本地副本,如果有就使用它 + if (existsSync(localPath)) { + console.log(`使用已存在的 DLL 本地副本: ${localPath}`) + return localPath + } + + console.log(`检测到网络路径 DLL,正在复制到本地: ${originalPath} -> ${localPath}`) + copyFileSync(originalPath, localPath) + console.log('DLL 本地化成功') + return localPath + } catch (e) { + console.error('DLL 本地化失败:', e) + // 如果本地化失败,返回原路径 + return originalPath + } } private ensureLoaded(): boolean { if (this.initialized) return true + + let dllPath = '' try { this.koffi = require('koffi') - const dllPath = this.getDllPath() - if (!existsSync(dllPath)) return false + dllPath = this.getDllPath() + + if (!existsSync(dllPath)) { + console.error(`wx_key.dll 不存在于路径: ${dllPath}`) + return false + } + + // 检查是否为网络路径,如果是则本地化 + if (this.isNetworkPath(dllPath)) { + console.log('检测到网络路径,将进行本地化处理') + dllPath = this.localizeNetworkDll(dllPath) + } this.lib = this.koffi.load(dllPath) this.initHook = this.lib.func('bool InitializeHook(uint32 targetPid)') @@ -80,7 +157,14 @@ export class KeyService { this.initialized = true return true } catch (e) { - console.error('加载 wx_key.dll 失败:', e) + const errorMsg = e instanceof Error ? e.message : String(e) + const errorStack = e instanceof Error ? e.stack : '' + console.error(`加载 wx_key.dll 失败`) + console.error(` 路径: ${dllPath}`) + console.error(` 错误: ${errorMsg}`) + if (errorStack) { + console.error(` 堆栈: ${errorStack}`) + } return false } } @@ -831,17 +915,40 @@ export class KeyService { return buffer.subarray(0, bytesRead[0]) } - private async getAesKeyFromMemory(pid: number, ciphertext: Buffer): Promise { + private async getAesKeyFromMemory( + pid: number, + ciphertext: Buffer, + onProgress?: (current: number, total: number, message: string) => void + ): Promise { if (!this.ensureKernel32()) return null const hProcess = this.OpenProcess(this.PROCESS_ALL_ACCESS, false, pid) if (!hProcess) return null try { - const regions = this.getMemoryRegions(hProcess) - const chunkSize = 4 * 1024 * 1024 + const allRegions = this.getMemoryRegions(hProcess) + + // 优化1: 只保留小内存区域(< 10MB)- 密钥通常在小区域,可大幅减少扫描时间 + const filteredRegions = allRegions.filter(([_, size]) => size <= 10 * 1024 * 1024) + + // 优化2: 优先级排序 - 按大小升序,先扫描小区域(密钥通常在较小区域) + const sortedRegions = filteredRegions.sort((a, b) => a[1] - b[1]) + + // 优化3: 计算总字节数用于精确进度报告 + const totalBytes = sortedRegions.reduce((sum, [_, size]) => sum + size, 0) + let processedBytes = 0 + + // 优化4: 减小分块大小到 1MB(参考 wx_key 项目) + const chunkSize = 1 * 1024 * 1024 const overlap = 65 - for (const [baseAddress, regionSize] of regions) { - if (regionSize > 100 * 1024 * 1024) continue + let currentRegion = 0 + + for (const [baseAddress, regionSize] of sortedRegions) { + currentRegion++ + const progress = totalBytes > 0 ? Math.floor((processedBytes / totalBytes) * 100) : 0 + onProgress?.(progress, 100, `扫描内存 ${progress}% (${currentRegion}/${sortedRegions.length})`) + + // 每个区域都让出主线程,确保UI流畅 + await new Promise(resolve => setImmediate(resolve)) let offset = 0 let trailing: Buffer | null = null while (offset < regionSize) { @@ -896,6 +1003,9 @@ export class KeyService { trailing = dataToScan.subarray(start < 0 ? 0 : start) offset += currentChunkSize } + + // 更新已处理字节数 + processedBytes += regionSize } return null } finally { @@ -933,7 +1043,9 @@ export class KeyService { if (!pid) return { success: false, error: '未检测到微信进程' } onProgress?.('正在扫描内存获取 AES 密钥...') - const aesKey = await this.getAesKeyFromMemory(pid, ciphertext) + const aesKey = await this.getAesKeyFromMemory(pid, ciphertext, (current, total, msg) => { + onProgress?.(`${msg} (${current}/${total})`) + }) if (!aesKey) { return { success: false, diff --git a/electron/services/wcdbCore.ts b/electron/services/wcdbCore.ts new file mode 100644 index 0000000..763fd87 --- /dev/null +++ b/electron/services/wcdbCore.ts @@ -0,0 +1,1317 @@ +import { join, dirname, basename } from 'path' +import { appendFileSync, existsSync, mkdirSync, readdirSync, statSync, readFileSync } from 'fs' + +export class WcdbCore { + private resourcesPath: string | null = null + private userDataPath: string | null = null + private logEnabled = false + private lib: any = null + private koffi: any = null + private initialized = false + private handle: number | null = null + private currentPath: string | null = null + private currentKey: string | null = null + private currentWxid: string | null = null + + // 函数引用 + private wcdbInit: any = null + private wcdbShutdown: any = null + private wcdbOpenAccount: any = null + private wcdbCloseAccount: any = null + private wcdbSetMyWxid: any = null + private wcdbFreeString: any = null + private wcdbGetSessions: any = null + private wcdbGetMessages: any = null + private wcdbGetMessageCount: any = null + private wcdbGetDisplayNames: any = null + private wcdbGetAvatarUrls: any = null + private wcdbGetGroupMemberCount: any = null + private wcdbGetGroupMemberCounts: any = null + private wcdbGetGroupMembers: any = null + private wcdbGetMessageTables: any = null + private wcdbGetMessageMeta: any = null + private wcdbGetContact: any = null + private wcdbGetMessageTableStats: any = null + private wcdbGetAggregateStats: any = null + private wcdbGetAvailableYears: any = null + private wcdbGetAnnualReportStats: any = null + private wcdbGetAnnualReportExtras: any = null + private wcdbGetGroupStats: any = null + private wcdbOpenMessageCursor: any = null + private wcdbOpenMessageCursorLite: any = null + private wcdbFetchMessageBatch: any = null + private wcdbCloseMessageCursor: any = null + private wcdbGetLogs: any = null + private wcdbExecQuery: any = null + private wcdbListMessageDbs: any = null + private wcdbListMediaDbs: any = null + private wcdbGetMessageById: any = null + private wcdbGetEmoticonCdnUrl: any = null + private wcdbGetDbStatus: any = null + private avatarUrlCache: Map = new Map() + private readonly avatarCacheTtlMs = 10 * 60 * 1000 + private logTimer: NodeJS.Timeout | null = null + private lastLogTail: string | null = null + + setPaths(resourcesPath: string, userDataPath: string): void { + this.resourcesPath = resourcesPath + this.userDataPath = userDataPath + } + + setLogEnabled(enabled: boolean): void { + this.logEnabled = enabled + if (this.isLogEnabled() && this.initialized) { + this.startLogPolling() + } else { + this.stopLogPolling() + } + } + + /** + * 获取 DLL 路径 + */ + private getDllPath(): string { + const envDllPath = process.env.WCDB_DLL_PATH + if (envDllPath && envDllPath.length > 0) { + return envDllPath + } + + // 基础路径探测 + const isPackaged = typeof process['resourcesPath'] !== 'undefined' + const resourcesPath = isPackaged ? process.resourcesPath : join(process.cwd(), 'resources') + + const candidates = [ + // 环境变量指定 resource 目录 + process.env.WCDB_RESOURCES_PATH ? join(process.env.WCDB_RESOURCES_PATH, 'wcdb_api.dll') : null, + // 显式 setPaths 设置的路径 + this.resourcesPath ? join(this.resourcesPath, 'wcdb_api.dll') : null, + // text/resources/wcdb_api.dll (打包常见结构) + join(resourcesPath, 'resources', 'wcdb_api.dll'), + // items/resourcesPath/wcdb_api.dll (扁平结构) + join(resourcesPath, 'wcdb_api.dll'), + // CWD fallback + join(process.cwd(), 'resources', 'wcdb_api.dll') + ].filter(Boolean) as string[] + + for (const path of candidates) { + if (existsSync(path)) return path + } + + return candidates[0] || 'wcdb_api.dll' + } + + private isLogEnabled(): boolean { + if (process.env.WEFLOW_WORKER === '1') return false + if (process.env.WCDB_LOG_ENABLED === '1') return true + return this.logEnabled + } + + private writeLog(message: string, force = false): void { + if (!force && !this.isLogEnabled()) return + try { + const base = this.userDataPath || process.env.WCDB_LOG_DIR || process.cwd() + const dir = join(base, 'logs') + if (!existsSync(dir)) mkdirSync(dir, { recursive: true }) + const line = `[${new Date().toISOString()}] ${message}\n` + appendFileSync(join(dir, 'wcdb.log'), line, { encoding: 'utf8' }) + } catch { } + } + + /** + * 递归查找 session.db 文件 + */ + private findSessionDb(dir: string, depth = 0): string | null { + if (depth > 5) return null + + try { + const entries = readdirSync(dir) + + for (const entry of entries) { + if (entry.toLowerCase() === 'session.db') { + const fullPath = join(dir, entry) + if (statSync(fullPath).isFile()) { + return fullPath + } + } + } + + for (const entry of entries) { + const fullPath = join(dir, entry) + try { + if (statSync(fullPath).isDirectory()) { + const found = this.findSessionDb(fullPath, depth + 1) + if (found) return found + } + } catch { } + } + } catch (e) { + console.error('查找 session.db 失败:', e) + } + + return null + } + + private resolveDbStoragePath(basePath: string, wxid: string): string | null { + if (!basePath) return null + const normalized = basePath.replace(/[\\\\/]+$/, '') + if (normalized.toLowerCase().endsWith('db_storage') && existsSync(normalized)) { + return normalized + } + const direct = join(normalized, 'db_storage') + if (existsSync(direct)) { + return direct + } + if (wxid) { + const viaWxid = join(normalized, wxid, 'db_storage') + if (existsSync(viaWxid)) { + return viaWxid + } + // 兼容目录名包含额外后缀(如 wxid_xxx_1234) + try { + const entries = readdirSync(normalized) + const lowerWxid = wxid.toLowerCase() + const candidates = entries.filter((entry) => { + const entryPath = join(normalized, entry) + try { + if (!statSync(entryPath).isDirectory()) return false + } catch { + return false + } + const lowerEntry = entry.toLowerCase() + return lowerEntry === lowerWxid || lowerEntry.startsWith(`${lowerWxid}_`) + }) + for (const entry of candidates) { + const candidate = join(normalized, entry, 'db_storage') + if (existsSync(candidate)) { + return candidate + } + } + } catch { } + } + return null + } + + /** + * 初始化 WCDB + */ + async initialize(): Promise { + if (this.initialized) return true + + try { + this.koffi = require('koffi') + const dllPath = this.getDllPath() + + if (!existsSync(dllPath)) { + console.error('WCDB DLL 不存在:', dllPath) + return false + } + + this.lib = this.koffi.load(dllPath) + + // 定义类型 + // wcdb_status wcdb_init() + this.wcdbInit = this.lib.func('int32 wcdb_init()') + + // wcdb_status wcdb_shutdown() + this.wcdbShutdown = this.lib.func('int32 wcdb_shutdown()') + + // wcdb_status wcdb_open_account(const char* session_db_path, const char* hex_key, wcdb_handle* out_handle) + // wcdb_handle 是 int64_t + this.wcdbOpenAccount = this.lib.func('int32 wcdb_open_account(const char* path, const char* key, _Out_ int64* handle)') + + // wcdb_status wcdb_close_account(wcdb_handle handle) + // C 接口是 int64, koffi 返回 handle 是 number 类型 + this.wcdbCloseAccount = this.lib.func('int32 wcdb_close_account(int64 handle)') + + // wcdb_status wcdb_set_my_wxid(wcdb_handle handle, const char* wxid) + try { + this.wcdbSetMyWxid = this.lib.func('int32 wcdb_set_my_wxid(int64 handle, const char* wxid)') + } catch { + this.wcdbSetMyWxid = null + } + + // void wcdb_free_string(char* ptr) + this.wcdbFreeString = this.lib.func('void wcdb_free_string(void* ptr)') + + // wcdb_status wcdb_get_sessions(wcdb_handle handle, char** out_json) + this.wcdbGetSessions = this.lib.func('int32 wcdb_get_sessions(int64 handle, _Out_ void** outJson)') + + // wcdb_status wcdb_get_messages(wcdb_handle handle, const char* username, int32_t limit, int32_t offset, char** out_json) + this.wcdbGetMessages = this.lib.func('int32 wcdb_get_messages(int64 handle, const char* username, int32 limit, int32 offset, _Out_ void** outJson)') + + // wcdb_status wcdb_get_message_count(wcdb_handle handle, const char* username, int32_t* out_count) + this.wcdbGetMessageCount = this.lib.func('int32 wcdb_get_message_count(int64 handle, const char* username, _Out_ int32* outCount)') + + // wcdb_status wcdb_get_display_names(wcdb_handle handle, const char* usernames_json, char** out_json) + this.wcdbGetDisplayNames = this.lib.func('int32 wcdb_get_display_names(int64 handle, const char* usernamesJson, _Out_ void** outJson)') + + // wcdb_status wcdb_get_avatar_urls(wcdb_handle handle, const char* usernames_json, char** out_json) + this.wcdbGetAvatarUrls = this.lib.func('int32 wcdb_get_avatar_urls(int64 handle, const char* usernamesJson, _Out_ void** outJson)') + + // wcdb_status wcdb_get_group_member_count(wcdb_handle handle, const char* chatroom_id, int32_t* out_count) + this.wcdbGetGroupMemberCount = this.lib.func('int32 wcdb_get_group_member_count(int64 handle, const char* chatroomId, _Out_ int32* outCount)') + + // wcdb_status wcdb_get_group_member_counts(wcdb_handle handle, const char* chatroom_ids_json, char** out_json) + try { + this.wcdbGetGroupMemberCounts = this.lib.func('int32 wcdb_get_group_member_counts(int64 handle, const char* chatroomIdsJson, _Out_ void** outJson)') + } catch { + this.wcdbGetGroupMemberCounts = null + } + + // wcdb_status wcdb_get_group_members(wcdb_handle handle, const char* chatroom_id, char** out_json) + this.wcdbGetGroupMembers = this.lib.func('int32 wcdb_get_group_members(int64 handle, const char* chatroomId, _Out_ void** outJson)') + + // wcdb_status wcdb_get_message_tables(wcdb_handle handle, const char* session_id, char** out_json) + this.wcdbGetMessageTables = this.lib.func('int32 wcdb_get_message_tables(int64 handle, const char* sessionId, _Out_ void** outJson)') + + // wcdb_status wcdb_get_message_meta(wcdb_handle handle, const char* db_path, const char* table_name, int32_t limit, int32_t offset, char** out_json) + this.wcdbGetMessageMeta = this.lib.func('int32 wcdb_get_message_meta(int64 handle, const char* dbPath, const char* tableName, int32 limit, int32 offset, _Out_ void** outJson)') + + // wcdb_status wcdb_get_contact(wcdb_handle handle, const char* username, char** out_json) + this.wcdbGetContact = this.lib.func('int32 wcdb_get_contact(int64 handle, const char* username, _Out_ void** outJson)') + + // wcdb_status wcdb_get_message_table_stats(wcdb_handle handle, const char* session_id, char** out_json) + this.wcdbGetMessageTableStats = this.lib.func('int32 wcdb_get_message_table_stats(int64 handle, const char* sessionId, _Out_ void** outJson)') + + // wcdb_status wcdb_get_aggregate_stats(wcdb_handle handle, const char* session_ids_json, int32_t begin_timestamp, int32_t end_timestamp, char** out_json) + this.wcdbGetAggregateStats = this.lib.func('int32 wcdb_get_aggregate_stats(int64 handle, const char* sessionIdsJson, int32 begin, int32 end, _Out_ void** outJson)') + + // wcdb_status wcdb_get_available_years(wcdb_handle handle, const char* session_ids_json, char** out_json) + try { + this.wcdbGetAvailableYears = this.lib.func('int32 wcdb_get_available_years(int64 handle, const char* sessionIdsJson, _Out_ void** outJson)') + } catch { + this.wcdbGetAvailableYears = null + } + + // wcdb_status wcdb_get_annual_report_stats(wcdb_handle handle, const char* session_ids_json, int32_t begin_timestamp, int32_t end_timestamp, char** out_json) + try { + this.wcdbGetAnnualReportStats = this.lib.func('int32 wcdb_get_annual_report_stats(int64 handle, const char* sessionIdsJson, int32 begin, int32 end, _Out_ void** outJson)') + } catch { + this.wcdbGetAnnualReportStats = null + } + + // wcdb_status wcdb_get_annual_report_extras(wcdb_handle handle, const char* session_ids_json, int32_t begin_timestamp, int32_t end_timestamp, int32_t peak_day_begin, int32_t peak_day_end, char** out_json) + try { + this.wcdbGetAnnualReportExtras = this.lib.func('int32 wcdb_get_annual_report_extras(int64 handle, const char* sessionIdsJson, int32 begin, int32 end, int32 peakBegin, int32 peakEnd, _Out_ void** outJson)') + } catch { + this.wcdbGetAnnualReportExtras = null + } + + // wcdb_status wcdb_get_group_stats(wcdb_handle handle, const char* chatroom_id, int32_t begin_timestamp, int32_t end_timestamp, char** out_json) + try { + this.wcdbGetGroupStats = this.lib.func('int32 wcdb_get_group_stats(int64 handle, const char* chatroomId, int32 begin, int32 end, _Out_ void** outJson)') + } catch { + this.wcdbGetGroupStats = null + } + + // wcdb_status wcdb_open_message_cursor(wcdb_handle handle, const char* session_id, int32_t batch_size, int32_t ascending, int32_t begin_timestamp, int32_t end_timestamp, wcdb_cursor* out_cursor) + this.wcdbOpenMessageCursor = this.lib.func('int32 wcdb_open_message_cursor(int64 handle, const char* sessionId, int32 batchSize, int32 ascending, int32 beginTimestamp, int32 endTimestamp, _Out_ int64* outCursor)') + + // wcdb_status wcdb_open_message_cursor_lite(wcdb_handle handle, const char* session_id, int32_t batch_size, int32_t ascending, int32_t begin_timestamp, int32_t end_timestamp, wcdb_cursor* out_cursor) + try { + this.wcdbOpenMessageCursorLite = this.lib.func('int32 wcdb_open_message_cursor_lite(int64 handle, const char* sessionId, int32 batchSize, int32 ascending, int32 beginTimestamp, int32 endTimestamp, _Out_ int64* outCursor)') + } catch { + this.wcdbOpenMessageCursorLite = null + } + + // wcdb_status wcdb_fetch_message_batch(wcdb_handle handle, wcdb_cursor cursor, char** out_json, int32_t* out_has_more) + this.wcdbFetchMessageBatch = this.lib.func('int32 wcdb_fetch_message_batch(int64 handle, int64 cursor, _Out_ void** outJson, _Out_ int32* outHasMore)') + + // wcdb_status wcdb_close_message_cursor(wcdb_handle handle, wcdb_cursor cursor) + this.wcdbCloseMessageCursor = this.lib.func('int32 wcdb_close_message_cursor(int64 handle, int64 cursor)') + + // wcdb_status wcdb_get_logs(char** out_json) + this.wcdbGetLogs = this.lib.func('int32 wcdb_get_logs(_Out_ void** outJson)') + + // wcdb_status wcdb_exec_query(wcdb_handle handle, const char* db_kind, const char* db_path, const char* sql, char** out_json) + this.wcdbExecQuery = this.lib.func('int32 wcdb_exec_query(int64 handle, const char* kind, const char* path, const char* sql, _Out_ void** outJson)') + + // wcdb_status wcdb_get_emoticon_cdn_url(wcdb_handle handle, const char* db_path, const char* md5, char** out_url) + this.wcdbGetEmoticonCdnUrl = this.lib.func('int32 wcdb_get_emoticon_cdn_url(int64 handle, const char* dbPath, const char* md5, _Out_ void** outUrl)') + + // wcdb_status wcdb_list_message_dbs(wcdb_handle handle, char** out_json) + this.wcdbListMessageDbs = this.lib.func('int32 wcdb_list_message_dbs(int64 handle, _Out_ void** outJson)') + + // wcdb_status wcdb_list_media_dbs(wcdb_handle handle, char** out_json) + this.wcdbListMediaDbs = this.lib.func('int32 wcdb_list_media_dbs(int64 handle, _Out_ void** outJson)') + + // wcdb_status wcdb_get_message_by_id(wcdb_handle handle, const char* session_id, int32 local_id, char** out_json) + this.wcdbGetMessageById = this.lib.func('int32 wcdb_get_message_by_id(int64 handle, const char* sessionId, int32 localId, _Out_ void** outJson)') + + // wcdb_status wcdb_get_db_status(wcdb_handle handle, char** out_json) + try { + this.wcdbGetDbStatus = this.lib.func('int32 wcdb_get_db_status(int64 handle, _Out_ void** outJson)') + } catch { + this.wcdbGetDbStatus = null + } + + // 初始化 + const initResult = this.wcdbInit() + if (initResult !== 0) { + console.error('WCDB 初始化失败:', initResult) + return false + } + + this.initialized = true + return true + } catch (e) { + console.error('WCDB 初始化异常:', e) + return false + } + } + + /** + * 测试数据库连接 + */ + async testConnection(dbPath: string, hexKey: string, wxid: string): Promise<{ success: boolean; error?: string; sessionCount?: number }> { + try { + // 如果当前已经有相同参数的活动连接,直接返回成功 + if (this.handle !== null && + this.currentPath === dbPath && + this.currentKey === hexKey && + this.currentWxid === wxid) { + return { success: true, sessionCount: 0 } + } + + if (!this.initialized) { + const initOk = await this.initialize() + if (!initOk) { + return { success: false, error: 'WCDB 初始化失败' } + } + } + + // 构建 db_storage 目录路径 + const dbStoragePath = this.resolveDbStoragePath(dbPath, wxid) + this.writeLog(`testConnection dbPath=${dbPath} wxid=${wxid} dbStorage=${dbStoragePath || 'null'}`) + + if (!dbStoragePath || !existsSync(dbStoragePath)) { + return { success: false, error: `数据库目录不存在: ${dbPath}` } + } + + // 递归查找 session.db + const sessionDbPath = this.findSessionDb(dbStoragePath) + this.writeLog(`testConnection sessionDb=${sessionDbPath || 'null'}`) + + if (!sessionDbPath) { + return { success: false, error: `未找到 session.db 文件` } + } + + // 分配输出参数内存 + const handleOut = [0] + const result = this.wcdbOpenAccount(sessionDbPath, hexKey, handleOut) + + if (result !== 0) { + await this.printLogs() + let errorMsg = '数据库打开失败' + if (result === -1) errorMsg = '参数错误' + else if (result === -2) errorMsg = '密钥错误' + else if (result === -3) errorMsg = '数据库打开失败' + this.writeLog(`testConnection openAccount failed code=${result}`) + return { success: false, error: `${errorMsg} (错误码: ${result})` } + } + + const tempHandle = handleOut[0] + if (tempHandle <= 0) { + return { success: false, error: '无效的数据库句柄' } + } + + // 测试成功,使用 shutdown 清理所有资源(包括测试句柄) + // 这会中断当前活动连接,但 testConnection 本应该是独立测试 + try { + this.wcdbShutdown() + this.handle = null + this.currentPath = null + this.currentKey = null + this.currentWxid = null + this.initialized = false + } catch (closeErr) { + console.error('关闭测试数据库时出错:', closeErr) + } + + return { success: true, sessionCount: 0 } + } catch (e) { + console.error('测试连接异常:', e) + this.writeLog(`testConnection exception: ${String(e)}`) + return { success: false, error: String(e) } + } + } + + /** + * 打印 DLL 内部日志(仅在出错时调用) + */ + private async printLogs(force = false): Promise { + try { + if (!this.wcdbGetLogs) return + const outPtr = [null as any] + const result = this.wcdbGetLogs(outPtr) + if (result === 0 && outPtr[0]) { + try { + const jsonStr = this.koffi.decode(outPtr[0], 'char', -1) + this.writeLog(`wcdb_logs: ${jsonStr}`, force) + this.wcdbFreeString(outPtr[0]) + } catch (e) { + // ignore + } + } + } catch (e) { + console.error('获取日志失败:', e) + this.writeLog(`wcdb_logs failed: ${String(e)}`, force) + } + } + + private startLogPolling(): void { + if (this.logTimer || !this.isLogEnabled()) return + this.logTimer = setInterval(() => { + void this.pollLogs() + }, 2000) + } + + private stopLogPolling(): void { + if (this.logTimer) { + clearInterval(this.logTimer) + this.logTimer = null + } + this.lastLogTail = null + } + + private async pollLogs(): Promise { + try { + if (!this.wcdbGetLogs || !this.isLogEnabled()) return + const outPtr = [null as any] + const result = this.wcdbGetLogs(outPtr) + if (result !== 0 || !outPtr[0]) return + let jsonStr = '' + try { + jsonStr = this.koffi.decode(outPtr[0], 'char', -1) + } finally { + try { this.wcdbFreeString(outPtr[0]) } catch { } + } + const logs = JSON.parse(jsonStr) as string[] + if (!Array.isArray(logs) || logs.length === 0) return + let startIdx = 0 + if (this.lastLogTail) { + const idx = logs.lastIndexOf(this.lastLogTail) + if (idx >= 0) startIdx = idx + 1 + } + for (let i = startIdx; i < logs.length; i += 1) { + this.writeLog(`wcdb: ${logs[i]}`) + } + this.lastLogTail = logs[logs.length - 1] + } catch (e) { + // ignore polling errors + } + } + + private decodeJsonPtr(outPtr: any): string | null { + if (!outPtr) return null + try { + const jsonStr = this.koffi.decode(outPtr, 'char', -1) + this.wcdbFreeString(outPtr) + return jsonStr + } catch (e) { + try { this.wcdbFreeString(outPtr) } catch { } + return null + } + } + + private ensureReady(): boolean { + return this.initialized && this.handle !== null + } + + private normalizeTimestamp(input: number): number { + if (!input || input <= 0) return 0 + const asNumber = Number(input) + if (!Number.isFinite(asNumber)) return 0 + // Treat >1e12 as milliseconds. + const seconds = asNumber > 1e12 ? Math.floor(asNumber / 1000) : Math.floor(asNumber) + const maxInt32 = 2147483647 + return Math.min(Math.max(seconds, 0), maxInt32) + } + + private normalizeRange(beginTimestamp: number, endTimestamp: number): { begin: number; end: number } { + const normalizedBegin = this.normalizeTimestamp(beginTimestamp) + let normalizedEnd = this.normalizeTimestamp(endTimestamp) + if (normalizedEnd <= 0) { + normalizedEnd = this.normalizeTimestamp(Date.now()) + } + if (normalizedBegin > 0 && normalizedEnd < normalizedBegin) { + normalizedEnd = normalizedBegin + } + return { begin: normalizedBegin, end: normalizedEnd } + } + + isReady(): boolean { + return this.ensureReady() + } + + /** + * 打开数据库 + */ + async open(dbPath: string, hexKey: string, wxid: string): Promise { + try { + if (!this.initialized) { + const initOk = await this.initialize() + if (!initOk) return false + } + + // 检查是否已经是当前连接的参数,如果是则直接返回成功,实现"始终保持链接" + if (this.handle !== null && + this.currentPath === dbPath && + this.currentKey === hexKey && + this.currentWxid === wxid) { + return true + } + + // 如果参数不同,则先关闭原来的连接 + if (this.handle !== null) { + this.close() + // 重新初始化,因为 close 呼叫了 shutdown + const initOk = await this.initialize() + if (!initOk) return false + } + + const dbStoragePath = this.resolveDbStoragePath(dbPath, wxid) + this.writeLog(`open dbPath=${dbPath} wxid=${wxid} dbStorage=${dbStoragePath || 'null'}`) + + if (!dbStoragePath || !existsSync(dbStoragePath)) { + console.error('数据库目录不存在:', dbPath) + this.writeLog(`open failed: dbStorage not found for ${dbPath}`) + return false + } + + const sessionDbPath = this.findSessionDb(dbStoragePath) + this.writeLog(`open sessionDb=${sessionDbPath || 'null'}`) + if (!sessionDbPath) { + console.error('未找到 session.db 文件') + this.writeLog('open failed: session.db not found') + return false + } + + const handleOut = [0] + const result = this.wcdbOpenAccount(sessionDbPath, hexKey, handleOut) + + if (result !== 0) { + console.error('打开数据库失败:', result) + await this.printLogs() + this.writeLog(`open failed: openAccount code=${result}`) + return false + } + + const handle = handleOut[0] + if (handle <= 0) { + return false + } + + this.handle = handle + this.currentPath = dbPath + this.currentKey = hexKey + this.currentWxid = wxid + this.initialized = true + if (this.wcdbSetMyWxid && wxid) { + try { + this.wcdbSetMyWxid(this.handle, wxid) + } catch (e) { + console.warn('设置 wxid 失败:', e) + } + } + if (this.isLogEnabled()) { + this.startLogPolling() + } + this.writeLog(`open ok handle=${handle}`) + return true + } catch (e) { + console.error('打开数据库异常:', e) + this.writeLog(`open exception: ${String(e)}`) + return false + } + } + + /** + * 关闭数据库 + * 注意:wcdb_close_account 可能导致崩溃,使用 shutdown 代替 + */ + close(): void { + if (this.handle !== null || this.initialized) { + try { + // 不调用 closeAccount,直接 shutdown + this.wcdbShutdown() + } catch (e) { + console.error('WCDB shutdown 出错:', e) + } + this.handle = null + this.currentPath = null + this.currentKey = null + this.currentWxid = null + this.initialized = false + this.stopLogPolling() + } + } + + /** + * 关闭服务(与 close 相同) + */ + shutdown(): void { + this.close() + } + + /** + * 检查是否已连接 + */ + isConnected(): boolean { + return this.initialized && this.handle !== null + } + + async getSessions(): Promise<{ success: boolean; sessions?: any[]; error?: string }> { + if (!this.ensureReady()) { + this.writeLog('getSessions skipped: not connected') + return { success: false, error: 'WCDB 未连接' } + } + try { + // 使用 setImmediate 让事件循环有机会处理其他任务,避免长时间阻塞 + await new Promise(resolve => setImmediate(resolve)) + + const outPtr = [null as any] + const result = this.wcdbGetSessions(this.handle, outPtr) + + // DLL 调用后再次让出控制权 + await new Promise(resolve => setImmediate(resolve)) + + if (result !== 0 || !outPtr[0]) { + this.writeLog(`getSessions failed: code=${result}`) + return { success: false, error: `获取会话失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析会话失败' } + this.writeLog(`getSessions ok size=${jsonStr.length}`) + const sessions = JSON.parse(jsonStr) + return { success: true, sessions } + } catch (e) { + this.writeLog(`getSessions exception: ${String(e)}`) + return { success: false, error: String(e) } + } + } + + async getMessages(sessionId: string, limit: number, offset: number): Promise<{ success: boolean; messages?: any[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetMessages(this.handle, sessionId, limit, offset, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取消息失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析消息失败' } + const messages = JSON.parse(jsonStr) + return { success: true, messages } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getMessageCount(sessionId: string): Promise<{ success: boolean; count?: number; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outCount = [0] + const result = this.wcdbGetMessageCount(this.handle, sessionId, outCount) + if (result !== 0) { + return { success: false, error: `获取消息总数失败: ${result}` } + } + return { success: true, count: outCount[0] } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getDisplayNames(usernames: string[]): Promise<{ success: boolean; map?: Record; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (usernames.length === 0) return { success: true, map: {} } + try { + // 让出控制权,避免阻塞事件循环 + await new Promise(resolve => setImmediate(resolve)) + + const outPtr = [null as any] + const result = this.wcdbGetDisplayNames(this.handle, JSON.stringify(usernames), outPtr) + + // DLL 调用后再次让出控制权 + await new Promise(resolve => setImmediate(resolve)) + + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取昵称失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析昵称失败' } + const map = JSON.parse(jsonStr) + return { success: true, map } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getAvatarUrls(usernames: string[]): Promise<{ success: boolean; map?: Record; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (usernames.length === 0) return { success: true, map: {} } + try { + const now = Date.now() + const resultMap: Record = {} + const toFetch: string[] = [] + const seen = new Set() + + for (const username of usernames) { + if (!username || seen.has(username)) continue + seen.add(username) + const cached = this.avatarUrlCache.get(username) + // 只使用有效的缓存(URL不为空) + if (cached && cached.url && cached.url.trim() && now - cached.updatedAt < this.avatarCacheTtlMs) { + resultMap[username] = cached.url + continue + } + toFetch.push(username) + } + + if (toFetch.length === 0) { + return { success: true, map: resultMap } + } + + // 让出控制权,避免阻塞事件循环 + await new Promise(resolve => setImmediate(resolve)) + + const outPtr = [null as any] + const result = this.wcdbGetAvatarUrls(this.handle, JSON.stringify(toFetch), outPtr) + + // DLL 调用后再次让出控制权 + await new Promise(resolve => setImmediate(resolve)) + + if (result !== 0 || !outPtr[0]) { + console.warn(`[wcdbCore] getAvatarUrls DLL调用失败: result=${result}, usernames=${toFetch.length}`) + if (Object.keys(resultMap).length > 0) { + return { success: true, map: resultMap, error: `获取头像失败: ${result}` } + } + return { success: false, error: `获取头像失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) { + console.error('[wcdbCore] getAvatarUrls 解析JSON失败') + return { success: false, error: '解析头像失败' } + } + const map = JSON.parse(jsonStr) as Record + let successCount = 0 + let emptyCount = 0 + for (const username of toFetch) { + const url = map[username] + if (url && url.trim()) { + resultMap[username] = url + // 只缓存有效的URL + this.avatarUrlCache.set(username, { url, updatedAt: now }) + successCount++ + } else { + emptyCount++ + // 不缓存空URL,下次可以重新尝试 + } + } + console.log(`[wcdbCore] getAvatarUrls 成功: ${successCount}个, 空结果: ${emptyCount}个, 总请求: ${toFetch.length}`) + return { success: true, map: resultMap } + } catch (e) { + console.error('[wcdbCore] getAvatarUrls 异常:', e) + return { success: false, error: String(e) } + } + } + + async getGroupMemberCount(chatroomId: string): Promise<{ success: boolean; count?: number; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outCount = [0] + const result = this.wcdbGetGroupMemberCount(this.handle, chatroomId, outCount) + if (result !== 0) { + return { success: false, error: `获取群成员数量失败: ${result}` } + } + return { success: true, count: outCount[0] } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getGroupMemberCounts(chatroomIds: string[]): Promise<{ success: boolean; map?: Record; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (chatroomIds.length === 0) return { success: true, map: {} } + if (!this.wcdbGetGroupMemberCounts) { + const map: Record = {} + for (const chatroomId of chatroomIds) { + const result = await this.getGroupMemberCount(chatroomId) + if (result.success && typeof result.count === 'number') { + map[chatroomId] = result.count + } + } + return { success: true, map } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetGroupMemberCounts(this.handle, JSON.stringify(chatroomIds), outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取群成员数量失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析群成员数量失败' } + const map = JSON.parse(jsonStr) + return { success: true, map } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getGroupMembers(chatroomId: string): Promise<{ success: boolean; members?: any[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetGroupMembers(this.handle, chatroomId, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取群成员失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析群成员失败' } + const members = JSON.parse(jsonStr) + return { success: true, members } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getMessageTables(sessionId: string): Promise<{ success: boolean; tables?: any[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetMessageTables(this.handle, sessionId, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取消息表失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析消息表失败' } + const tables = JSON.parse(jsonStr) + return { success: true, tables } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getMessageTableStats(sessionId: string): Promise<{ success: boolean; tables?: any[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetMessageTableStats(this.handle, sessionId, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取表统计失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析表统计失败' } + const tables = JSON.parse(jsonStr) + return { success: true, tables } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getMessageMeta(dbPath: string, tableName: string, limit: number, offset: number): Promise<{ success: boolean; rows?: any[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetMessageMeta(this.handle, dbPath, tableName, limit, offset, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取消息元数据失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析消息元数据失败' } + const rows = JSON.parse(jsonStr) + return { success: true, rows } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getContact(username: string): Promise<{ success: boolean; contact?: any; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetContact(this.handle, username, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取联系人失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析联系人失败' } + const contact = JSON.parse(jsonStr) + return { success: true, contact } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getAggregateStats(sessionIds: string[], beginTimestamp: number = 0, endTimestamp: number = 0): Promise<{ success: boolean; data?: any; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const normalizedBegin = this.normalizeTimestamp(beginTimestamp) + let normalizedEnd = this.normalizeTimestamp(endTimestamp) + if (normalizedEnd <= 0) { + normalizedEnd = this.normalizeTimestamp(Date.now()) + } + if (normalizedBegin > 0 && normalizedEnd < normalizedBegin) { + normalizedEnd = normalizedBegin + } + + const callAggregate = (ids: string[]) => { + const idsAreNumeric = ids.length > 0 && ids.every((id) => /^\d+$/.test(id)) + const payloadIds = idsAreNumeric ? ids.map((id) => Number(id)) : ids + + const outPtr = [null as any] + const result = this.wcdbGetAggregateStats(this.handle, JSON.stringify(payloadIds), normalizedBegin, normalizedEnd, outPtr) + + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取聚合统计失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) { + return { success: false, error: '解析聚合统计失败' } + } + + const data = JSON.parse(jsonStr) + return { success: true, data } + } + + let result = callAggregate(sessionIds) + if (result.success && result.data && result.data.total === 0 && result.data.idMap) { + const idMap = result.data.idMap as Record + const reverseMap: Record = {} + for (const [id, name] of Object.entries(idMap)) { + if (!name) continue + reverseMap[name] = id + } + const numericIds = sessionIds + .map((id) => reverseMap[id]) + .filter((id) => typeof id === 'string' && /^\d+$/.test(id)) + if (numericIds.length > 0) { + const retry = callAggregate(numericIds) + if (retry.success && retry.data) { + result = retry + } + } + } + + return result + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getAvailableYears(sessionIds: string[]): Promise<{ success: boolean; data?: number[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (!this.wcdbGetAvailableYears) { + return { success: false, error: '未支持获取年度列表' } + } + if (sessionIds.length === 0) return { success: true, data: [] } + try { + const outPtr = [null as any] + const result = this.wcdbGetAvailableYears(this.handle, JSON.stringify(sessionIds), outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取年度列表失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析年度列表失败' } + const data = JSON.parse(jsonStr) + return { success: true, data } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getAnnualReportStats(sessionIds: string[], beginTimestamp: number = 0, endTimestamp: number = 0): Promise<{ success: boolean; data?: any; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (!this.wcdbGetAnnualReportStats) { + return this.getAggregateStats(sessionIds, beginTimestamp, endTimestamp) + } + try { + const { begin, end } = this.normalizeRange(beginTimestamp, endTimestamp) + const outPtr = [null as any] + const result = this.wcdbGetAnnualReportStats(this.handle, JSON.stringify(sessionIds), begin, end, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取年度统计失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析年度统计失败' } + const data = JSON.parse(jsonStr) + return { success: true, data } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getAnnualReportExtras( + sessionIds: string[], + beginTimestamp: number = 0, + endTimestamp: number = 0, + peakDayBegin: number = 0, + peakDayEnd: number = 0 + ): Promise<{ success: boolean; data?: any; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (!this.wcdbGetAnnualReportExtras) { + return { success: false, error: '未支持年度扩展统计' } + } + if (sessionIds.length === 0) return { success: true, data: {} } + try { + const { begin, end } = this.normalizeRange(beginTimestamp, endTimestamp) + const outPtr = [null as any] + const result = this.wcdbGetAnnualReportExtras( + this.handle, + JSON.stringify(sessionIds), + begin, + end, + this.normalizeTimestamp(peakDayBegin), + this.normalizeTimestamp(peakDayEnd), + outPtr + ) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取年度扩展统计失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析年度扩展统计失败' } + const data = JSON.parse(jsonStr) + return { success: true, data } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getGroupStats(chatroomId: string, beginTimestamp: number = 0, endTimestamp: number = 0): Promise<{ success: boolean; data?: any; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (!this.wcdbGetGroupStats) { + return this.getAggregateStats([chatroomId], beginTimestamp, endTimestamp) + } + try { + const { begin, end } = this.normalizeRange(beginTimestamp, endTimestamp) + const outPtr = [null as any] + const result = this.wcdbGetGroupStats(this.handle, chatroomId, begin, end, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取群聊统计失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析群聊统计失败' } + const data = JSON.parse(jsonStr) + return { success: true, data } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async openMessageCursor(sessionId: string, batchSize: number, ascending: boolean, beginTimestamp: number, endTimestamp: number): Promise<{ success: boolean; cursor?: number; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outCursor = [0] + const result = this.wcdbOpenMessageCursor( + this.handle, + sessionId, + batchSize, + ascending ? 1 : 0, + beginTimestamp, + endTimestamp, + outCursor + ) + if (result !== 0 || outCursor[0] <= 0) { + await this.printLogs(true) + this.writeLog( + `openMessageCursor failed: sessionId=${sessionId} batchSize=${batchSize} ascending=${ascending ? 1 : 0} begin=${beginTimestamp} end=${endTimestamp} result=${result} cursor=${outCursor[0]}`, + true + ) + return { success: false, error: `创建游标失败: ${result},请查看日志` } + } + return { success: true, cursor: outCursor[0] } + } catch (e) { + await this.printLogs(true) + this.writeLog(`openMessageCursor exception: ${String(e)}`, true) + return { success: false, error: '创建游标异常,请查看日志' } + } + } + + async openMessageCursorLite(sessionId: string, batchSize: number, ascending: boolean, beginTimestamp: number, endTimestamp: number): Promise<{ success: boolean; cursor?: number; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + if (!this.wcdbOpenMessageCursorLite) { + return this.openMessageCursor(sessionId, batchSize, ascending, beginTimestamp, endTimestamp) + } + try { + const outCursor = [0] + const result = this.wcdbOpenMessageCursorLite( + this.handle, + sessionId, + batchSize, + ascending ? 1 : 0, + beginTimestamp, + endTimestamp, + outCursor + ) + if (result !== 0 || outCursor[0] <= 0) { + await this.printLogs(true) + this.writeLog( + `openMessageCursorLite failed: sessionId=${sessionId} batchSize=${batchSize} ascending=${ascending ? 1 : 0} begin=${beginTimestamp} end=${endTimestamp} result=${result} cursor=${outCursor[0]}`, + true + ) + return { success: false, error: `创建游标失败: ${result},请查看日志` } + } + return { success: true, cursor: outCursor[0] } + } catch (e) { + await this.printLogs(true) + this.writeLog(`openMessageCursorLite exception: ${String(e)}`, true) + return { success: false, error: '创建游标异常,请查看日志' } + } + } + + async fetchMessageBatch(cursor: number): Promise<{ success: boolean; rows?: any[]; hasMore?: boolean; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const outHasMore = [0] + const result = this.wcdbFetchMessageBatch(this.handle, cursor, outPtr, outHasMore) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取批次失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析批次失败' } + const rows = JSON.parse(jsonStr) + return { success: true, rows, hasMore: outHasMore[0] === 1 } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async closeMessageCursor(cursor: number): Promise<{ success: boolean; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const result = this.wcdbCloseMessageCursor(this.handle, cursor) + if (result !== 0) { + return { success: false, error: `关闭游标失败: ${result}` } + } + return { success: true } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async execQuery(kind: string, path: string | null, sql: string): Promise<{ success: boolean; rows?: any[]; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbExecQuery(this.handle, kind, path, sql, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `执行查询失败: ${result}` } + } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析查询结果失败' } + const rows = JSON.parse(jsonStr) + return { success: true, rows } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getEmoticonCdnUrl(dbPath: string, md5: string): Promise<{ success: boolean; url?: string; error?: string }> { + if (!this.ensureReady()) { + return { success: false, error: 'WCDB 未连接' } + } + try { + const outPtr = [null as any] + const result = this.wcdbGetEmoticonCdnUrl(this.handle, dbPath, md5, outPtr) + if (result !== 0 || !outPtr[0]) { + return { success: false, error: `获取表情 URL 失败: ${result}` } + } + const urlStr = this.decodeJsonPtr(outPtr[0]) + if (urlStr === null) return { success: false, error: '解析表情 URL 失败' } + return { success: true, url: urlStr || undefined } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async listMessageDbs(): Promise<{ success: boolean; data?: string[]; error?: string }> { + if (!this.ensureReady()) return { success: false, error: 'WCDB 未连接' } + try { + const outPtr = [null as any] + const result = this.wcdbListMessageDbs(this.handle, outPtr) + if (result !== 0 || !outPtr[0]) return { success: false, error: `获取消息库列表失败: ${result}` } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析消息库列表失败' } + const data = JSON.parse(jsonStr) + return { success: true, data } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async listMediaDbs(): Promise<{ success: boolean; data?: string[]; error?: string }> { + if (!this.ensureReady()) return { success: false, error: 'WCDB 未连接' } + try { + const outPtr = [null as any] + const result = this.wcdbListMediaDbs(this.handle, outPtr) + if (result !== 0 || !outPtr[0]) return { success: false, error: `获取媒体库列表失败: ${result}` } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析媒体库列表失败' } + const data = JSON.parse(jsonStr) + return { success: true, data } + } catch (e) { + return { success: false, error: String(e) } + } + } + + async getMessageById(sessionId: string, localId: number): Promise<{ success: boolean; message?: any; error?: string }> { + if (!this.ensureReady()) return { success: false, error: 'WCDB 未连接' } + try { + const outPtr = [null as any] + const result = this.wcdbGetMessageById(this.handle, sessionId, localId, outPtr) + if (result !== 0 || !outPtr[0]) return { success: false, error: `查询消息失败: ${result}` } + const jsonStr = this.decodeJsonPtr(outPtr[0]) + if (!jsonStr) return { success: false, error: '解析消息失败' } + const message = JSON.parse(jsonStr) + // 处理 wcdb_get_message_by_id 返回空对象的情况 + if (Object.keys(message).length === 0) return { success: false, error: '未找到消息' } + return { success: true, message } + } catch (e) { + return { success: false, error: String(e) } + } + } +} + diff --git a/electron/services/wcdbService.ts b/electron/services/wcdbService.ts index 7e9a5d5..eacd90b 100644 --- a/electron/services/wcdbService.ts +++ b/electron/services/wcdbService.ts @@ -1,1285 +1,346 @@ -import { join, dirname, basename } from 'path' -import { appendFileSync, existsSync, mkdirSync, readdirSync, statSync, readFileSync } from 'fs' +import { Worker } from 'worker_threads' +import { join } from 'path' +import { existsSync } from 'fs' +/** + * Worker 消息接口 + */ +interface WorkerMessage { + id: number + result?: any + error?: string +} + +/** + * WCDB 服务 (客户端代理) + * 负责与后台 Worker 线程通信,执行数据库操作 + * 避免主进程阻塞 + */ export class WcdbService { + private worker: Worker | null = null + private messageId = 0 + private pending = new Map void; reject: (err: any) => void }>() private resourcesPath: string | null = null private userDataPath: string | null = null private logEnabled = false - private lib: any = null - private koffi: any = null - private initialized = false - private handle: number | null = null - private currentPath: string | null = null - private currentKey: string | null = null - private currentWxid: string | null = null - // 函数引用 - private wcdbInit: any = null - private wcdbShutdown: any = null - private wcdbOpenAccount: any = null - private wcdbCloseAccount: any = null - private wcdbSetMyWxid: any = null - private wcdbFreeString: any = null - private wcdbGetSessions: any = null - private wcdbGetMessages: any = null - private wcdbGetMessageCount: any = null - private wcdbGetDisplayNames: any = null - private wcdbGetAvatarUrls: any = null - private wcdbGetGroupMemberCount: any = null - private wcdbGetGroupMemberCounts: any = null - private wcdbGetGroupMembers: any = null - private wcdbGetMessageTables: any = null - private wcdbGetMessageMeta: any = null - private wcdbGetContact: any = null - private wcdbGetMessageTableStats: any = null - private wcdbGetAggregateStats: any = null - private wcdbGetAvailableYears: any = null - private wcdbGetAnnualReportStats: any = null - private wcdbGetAnnualReportExtras: any = null - private wcdbGetGroupStats: any = null - private wcdbOpenMessageCursor: any = null - private wcdbOpenMessageCursorLite: any = null - private wcdbFetchMessageBatch: any = null - private wcdbCloseMessageCursor: any = null - private wcdbGetLogs: any = null - private wcdbExecQuery: any = null - private wcdbListMessageDbs: any = null - private wcdbListMediaDbs: any = null - private wcdbGetMessageById: any = null - private wcdbGetEmoticonCdnUrl: any = null - private avatarUrlCache: Map = new Map() - private readonly avatarCacheTtlMs = 10 * 60 * 1000 - private logTimer: NodeJS.Timeout | null = null - private lastLogTail: string | null = null + constructor() { + this.initWorker() + } + /** + * 初始化 Worker 线程 + */ + private initWorker() { + if (this.worker) return + + const isDev = process.env.NODE_ENV === 'development' + const workerPath = isDev + ? join(__dirname, '../dist-electron/wcdbWorker.js') + : join(__dirname, 'wcdbWorker.js') + + let finalPath = workerPath + if (isDev && !existsSync(finalPath)) { + finalPath = join(__dirname, 'wcdbWorker.js') + } + + try { + this.worker = new Worker(finalPath) + + this.worker.on('message', (msg: WorkerMessage) => { + const { id, result, error } = msg + const p = this.pending.get(id) + if (p) { + this.pending.delete(id) + if (error) p.reject(new Error(error)) + else p.resolve(result) + } + }) + + this.worker.on('error', (err) => { + console.error('WCDB Worker 错误:', err) + }) + + this.worker.on('exit', (code) => { + if (code !== 0) console.error(`WCDB Worker 异常退出,退出码: ${code}`) + this.worker = null + }) + + // 如果已有路径配置,重新发送给新的 worker + if (this.resourcesPath && this.userDataPath) { + this.setPaths(this.resourcesPath, this.userDataPath) + } + this.setLogEnabled(this.logEnabled) + + } catch (e) { + console.error('创建 WCDB Worker 失败:', e) + } + } + + /** + * 发送消息到 Worker 并等待响应 + */ + private callWorker(type: string, payload: any = {}): Promise { + if (!this.worker) this.initWorker() + if (!this.worker) return Promise.reject(new Error('WCDB Worker 不可用')) + + return new Promise((resolve, reject) => { + const id = ++this.messageId + this.pending.set(id, { resolve, reject }) + this.worker!.postMessage({ id, type, payload }) + }) + } + + /** + * 设置资源路径 + */ setPaths(resourcesPath: string, userDataPath: string): void { this.resourcesPath = resourcesPath this.userDataPath = userDataPath + this.callWorker('setPaths', { resourcesPath, userDataPath }).catch(console.error) } + /** + * 启用/禁用日志 + */ setLogEnabled(enabled: boolean): void { this.logEnabled = enabled - if (this.isLogEnabled() && this.initialized) { - this.startLogPolling() - } else { - this.stopLogPolling() - } + this.callWorker('setLogEnabled', { enabled }).catch(console.error) } /** - * 获取 DLL 路径 + * 检查服务是否就绪 */ - private getDllPath(): string { - const envDllPath = process.env.WCDB_DLL_PATH - if (envDllPath && envDllPath.length > 0) { - return envDllPath - } - - const envResourcesPath = process.env.WCDB_RESOURCES_PATH - if (envResourcesPath && envResourcesPath.length > 0) { - return join(envResourcesPath, 'wcdb_api.dll') - } - - if (this.resourcesPath && this.resourcesPath.length > 0) { - return join(this.resourcesPath, 'wcdb_api.dll') - } - - const fallbackBase = process.resourcesPath || join(process.cwd(), 'resources') - return join(fallbackBase, 'wcdb_api.dll') + isReady(): boolean { + return !!this.worker } - private isLogEnabled(): boolean { - if (process.env.WEFLOW_WORKER === '1') return false - if (process.env.WCDB_LOG_ENABLED === '1') return true - return this.logEnabled - } - - private writeLog(message: string, force = false): void { - if (!force && !this.isLogEnabled()) return - try { - const base = this.userDataPath || process.env.WCDB_LOG_DIR || process.cwd() - const dir = join(base, 'logs') - if (!existsSync(dir)) mkdirSync(dir, { recursive: true }) - const line = `[${new Date().toISOString()}] ${message}\n` - appendFileSync(join(dir, 'wcdb.log'), line, { encoding: 'utf8' }) - } catch { } - } - - /** - * 递归查找 session.db 文件 - */ - private findSessionDb(dir: string, depth = 0): string | null { - if (depth > 5) return null - - try { - const entries = readdirSync(dir) - - for (const entry of entries) { - if (entry.toLowerCase() === 'session.db') { - const fullPath = join(dir, entry) - if (statSync(fullPath).isFile()) { - return fullPath - } - } - } - - for (const entry of entries) { - const fullPath = join(dir, entry) - try { - if (statSync(fullPath).isDirectory()) { - const found = this.findSessionDb(fullPath, depth + 1) - if (found) return found - } - } catch { } - } - } catch (e) { - console.error('查找 session.db 失败:', e) - } - - return null - } - - private resolveDbStoragePath(basePath: string, wxid: string): string | null { - if (!basePath) return null - const normalized = basePath.replace(/[\\\\/]+$/, '') - if (normalized.toLowerCase().endsWith('db_storage') && existsSync(normalized)) { - return normalized - } - const direct = join(normalized, 'db_storage') - if (existsSync(direct)) { - return direct - } - if (wxid) { - const viaWxid = join(normalized, wxid, 'db_storage') - if (existsSync(viaWxid)) { - return viaWxid - } - // 兼容目录名包含额外后缀(如 wxid_xxx_1234) - try { - const entries = readdirSync(normalized) - const lowerWxid = wxid.toLowerCase() - const candidates = entries.filter((entry) => { - const entryPath = join(normalized, entry) - try { - if (!statSync(entryPath).isDirectory()) return false - } catch { - return false - } - const lowerEntry = entry.toLowerCase() - return lowerEntry === lowerWxid || lowerEntry.startsWith(`${lowerWxid}_`) - }) - for (const entry of candidates) { - const candidate = join(normalized, entry, 'db_storage') - if (existsSync(candidate)) { - return candidate - } - } - } catch { } - } - return null - } - - /** - * 初始化 WCDB - */ - async initialize(): Promise { - if (this.initialized) return true - - try { - this.koffi = require('koffi') - const dllPath = this.getDllPath() - - if (!existsSync(dllPath)) { - console.error('WCDB DLL 不存在:', dllPath) - return false - } - - this.lib = this.koffi.load(dllPath) - - // 定义类型 - // wcdb_status wcdb_init() - this.wcdbInit = this.lib.func('int32 wcdb_init()') - - // wcdb_status wcdb_shutdown() - this.wcdbShutdown = this.lib.func('int32 wcdb_shutdown()') - - // wcdb_status wcdb_open_account(const char* session_db_path, const char* hex_key, wcdb_handle* out_handle) - // wcdb_handle 是 int64_t - this.wcdbOpenAccount = this.lib.func('int32 wcdb_open_account(const char* path, const char* key, _Out_ int64* handle)') - - // wcdb_status wcdb_close_account(wcdb_handle handle) - // C 接口是 int64, koffi 返回 handle 是 number 类型 - this.wcdbCloseAccount = this.lib.func('int32 wcdb_close_account(int64 handle)') - - // wcdb_status wcdb_set_my_wxid(wcdb_handle handle, const char* wxid) - try { - this.wcdbSetMyWxid = this.lib.func('int32 wcdb_set_my_wxid(int64 handle, const char* wxid)') - } catch { - this.wcdbSetMyWxid = null - } - - // void wcdb_free_string(char* ptr) - this.wcdbFreeString = this.lib.func('void wcdb_free_string(void* ptr)') - - // wcdb_status wcdb_get_sessions(wcdb_handle handle, char** out_json) - this.wcdbGetSessions = this.lib.func('int32 wcdb_get_sessions(int64 handle, _Out_ void** outJson)') - - // wcdb_status wcdb_get_messages(wcdb_handle handle, const char* username, int32_t limit, int32_t offset, char** out_json) - this.wcdbGetMessages = this.lib.func('int32 wcdb_get_messages(int64 handle, const char* username, int32 limit, int32 offset, _Out_ void** outJson)') - - // wcdb_status wcdb_get_message_count(wcdb_handle handle, const char* username, int32_t* out_count) - this.wcdbGetMessageCount = this.lib.func('int32 wcdb_get_message_count(int64 handle, const char* username, _Out_ int32* outCount)') - - // wcdb_status wcdb_get_display_names(wcdb_handle handle, const char* usernames_json, char** out_json) - this.wcdbGetDisplayNames = this.lib.func('int32 wcdb_get_display_names(int64 handle, const char* usernamesJson, _Out_ void** outJson)') - - // wcdb_status wcdb_get_avatar_urls(wcdb_handle handle, const char* usernames_json, char** out_json) - this.wcdbGetAvatarUrls = this.lib.func('int32 wcdb_get_avatar_urls(int64 handle, const char* usernamesJson, _Out_ void** outJson)') - - // wcdb_status wcdb_get_group_member_count(wcdb_handle handle, const char* chatroom_id, int32_t* out_count) - this.wcdbGetGroupMemberCount = this.lib.func('int32 wcdb_get_group_member_count(int64 handle, const char* chatroomId, _Out_ int32* outCount)') - - // wcdb_status wcdb_get_group_member_counts(wcdb_handle handle, const char* chatroom_ids_json, char** out_json) - try { - this.wcdbGetGroupMemberCounts = this.lib.func('int32 wcdb_get_group_member_counts(int64 handle, const char* chatroomIdsJson, _Out_ void** outJson)') - } catch { - this.wcdbGetGroupMemberCounts = null - } - - // wcdb_status wcdb_get_group_members(wcdb_handle handle, const char* chatroom_id, char** out_json) - this.wcdbGetGroupMembers = this.lib.func('int32 wcdb_get_group_members(int64 handle, const char* chatroomId, _Out_ void** outJson)') - - // wcdb_status wcdb_get_message_tables(wcdb_handle handle, const char* session_id, char** out_json) - this.wcdbGetMessageTables = this.lib.func('int32 wcdb_get_message_tables(int64 handle, const char* sessionId, _Out_ void** outJson)') - - // wcdb_status wcdb_get_message_meta(wcdb_handle handle, const char* db_path, const char* table_name, int32_t limit, int32_t offset, char** out_json) - this.wcdbGetMessageMeta = this.lib.func('int32 wcdb_get_message_meta(int64 handle, const char* dbPath, const char* tableName, int32 limit, int32 offset, _Out_ void** outJson)') - - // wcdb_status wcdb_get_contact(wcdb_handle handle, const char* username, char** out_json) - this.wcdbGetContact = this.lib.func('int32 wcdb_get_contact(int64 handle, const char* username, _Out_ void** outJson)') - - // wcdb_status wcdb_get_message_table_stats(wcdb_handle handle, const char* session_id, char** out_json) - this.wcdbGetMessageTableStats = this.lib.func('int32 wcdb_get_message_table_stats(int64 handle, const char* sessionId, _Out_ void** outJson)') - - // wcdb_status wcdb_get_aggregate_stats(wcdb_handle handle, const char* session_ids_json, int32_t begin_timestamp, int32_t end_timestamp, char** out_json) - this.wcdbGetAggregateStats = this.lib.func('int32 wcdb_get_aggregate_stats(int64 handle, const char* sessionIdsJson, int32 begin, int32 end, _Out_ void** outJson)') - - // wcdb_status wcdb_get_available_years(wcdb_handle handle, const char* session_ids_json, char** out_json) - try { - this.wcdbGetAvailableYears = this.lib.func('int32 wcdb_get_available_years(int64 handle, const char* sessionIdsJson, _Out_ void** outJson)') - } catch { - this.wcdbGetAvailableYears = null - } - - // wcdb_status wcdb_get_annual_report_stats(wcdb_handle handle, const char* session_ids_json, int32_t begin_timestamp, int32_t end_timestamp, char** out_json) - try { - this.wcdbGetAnnualReportStats = this.lib.func('int32 wcdb_get_annual_report_stats(int64 handle, const char* sessionIdsJson, int32 begin, int32 end, _Out_ void** outJson)') - } catch { - this.wcdbGetAnnualReportStats = null - } - - // wcdb_status wcdb_get_annual_report_extras(wcdb_handle handle, const char* session_ids_json, int32_t begin_timestamp, int32_t end_timestamp, int32_t peak_day_begin, int32_t peak_day_end, char** out_json) - try { - this.wcdbGetAnnualReportExtras = this.lib.func('int32 wcdb_get_annual_report_extras(int64 handle, const char* sessionIdsJson, int32 begin, int32 end, int32 peakBegin, int32 peakEnd, _Out_ void** outJson)') - } catch { - this.wcdbGetAnnualReportExtras = null - } - - // wcdb_status wcdb_get_group_stats(wcdb_handle handle, const char* chatroom_id, int32_t begin_timestamp, int32_t end_timestamp, char** out_json) - try { - this.wcdbGetGroupStats = this.lib.func('int32 wcdb_get_group_stats(int64 handle, const char* chatroomId, int32 begin, int32 end, _Out_ void** outJson)') - } catch { - this.wcdbGetGroupStats = null - } - - // wcdb_status wcdb_open_message_cursor(wcdb_handle handle, const char* session_id, int32_t batch_size, int32_t ascending, int32_t begin_timestamp, int32_t end_timestamp, wcdb_cursor* out_cursor) - this.wcdbOpenMessageCursor = this.lib.func('int32 wcdb_open_message_cursor(int64 handle, const char* sessionId, int32 batchSize, int32 ascending, int32 beginTimestamp, int32 endTimestamp, _Out_ int64* outCursor)') - - // wcdb_status wcdb_open_message_cursor_lite(wcdb_handle handle, const char* session_id, int32_t batch_size, int32_t ascending, int32_t begin_timestamp, int32_t end_timestamp, wcdb_cursor* out_cursor) - try { - this.wcdbOpenMessageCursorLite = this.lib.func('int32 wcdb_open_message_cursor_lite(int64 handle, const char* sessionId, int32 batchSize, int32 ascending, int32 beginTimestamp, int32 endTimestamp, _Out_ int64* outCursor)') - } catch { - this.wcdbOpenMessageCursorLite = null - } - - // wcdb_status wcdb_fetch_message_batch(wcdb_handle handle, wcdb_cursor cursor, char** out_json, int32_t* out_has_more) - this.wcdbFetchMessageBatch = this.lib.func('int32 wcdb_fetch_message_batch(int64 handle, int64 cursor, _Out_ void** outJson, _Out_ int32* outHasMore)') - - // wcdb_status wcdb_close_message_cursor(wcdb_handle handle, wcdb_cursor cursor) - this.wcdbCloseMessageCursor = this.lib.func('int32 wcdb_close_message_cursor(int64 handle, int64 cursor)') - - // wcdb_status wcdb_get_logs(char** out_json) - this.wcdbGetLogs = this.lib.func('int32 wcdb_get_logs(_Out_ void** outJson)') - - // wcdb_status wcdb_exec_query(wcdb_handle handle, const char* db_kind, const char* db_path, const char* sql, char** out_json) - this.wcdbExecQuery = this.lib.func('int32 wcdb_exec_query(int64 handle, const char* kind, const char* path, const char* sql, _Out_ void** outJson)') - - // wcdb_status wcdb_get_emoticon_cdn_url(wcdb_handle handle, const char* db_path, const char* md5, char** out_url) - this.wcdbGetEmoticonCdnUrl = this.lib.func('int32 wcdb_get_emoticon_cdn_url(int64 handle, const char* dbPath, const char* md5, _Out_ void** outUrl)') - - // wcdb_status wcdb_list_message_dbs(wcdb_handle handle, char** out_json) - this.wcdbListMessageDbs = this.lib.func('int32 wcdb_list_message_dbs(int64 handle, _Out_ void** outJson)') - - // wcdb_status wcdb_list_media_dbs(wcdb_handle handle, char** out_json) - this.wcdbListMediaDbs = this.lib.func('int32 wcdb_list_media_dbs(int64 handle, _Out_ void** outJson)') - - // wcdb_status wcdb_get_message_by_id(wcdb_handle handle, const char* session_id, int32 local_id, char** out_json) - this.wcdbGetMessageById = this.lib.func('int32 wcdb_get_message_by_id(int64 handle, const char* sessionId, int32 localId, _Out_ void** outJson)') - - // 初始化 - const initResult = this.wcdbInit() - if (initResult !== 0) { - console.error('WCDB 初始化失败:', initResult) - return false - } - - this.initialized = true - return true - } catch (e) { - console.error('WCDB 初始化异常:', e) - return false - } - } + // ========================================== + // 代理方法 (Proxy Methods) + // ========================================== /** * 测试数据库连接 */ async testConnection(dbPath: string, hexKey: string, wxid: string): Promise<{ success: boolean; error?: string; sessionCount?: number }> { - try { - // 如果当前已经有相同参数的活动连接,直接返回成功 - if (this.handle !== null && - this.currentPath === dbPath && - this.currentKey === hexKey && - this.currentWxid === wxid) { - return { success: true, sessionCount: 0 } - } - - if (!this.initialized) { - const initOk = await this.initialize() - if (!initOk) { - return { success: false, error: 'WCDB 初始化失败' } - } - } - - // 构建 db_storage 目录路径 - const dbStoragePath = this.resolveDbStoragePath(dbPath, wxid) - this.writeLog(`testConnection dbPath=${dbPath} wxid=${wxid} dbStorage=${dbStoragePath || 'null'}`) - - if (!dbStoragePath || !existsSync(dbStoragePath)) { - return { success: false, error: `数据库目录不存在: ${dbPath}` } - } - - // 递归查找 session.db - const sessionDbPath = this.findSessionDb(dbStoragePath) - this.writeLog(`testConnection sessionDb=${sessionDbPath || 'null'}`) - - if (!sessionDbPath) { - return { success: false, error: `未找到 session.db 文件` } - } - - // 分配输出参数内存 - const handleOut = [0] - const result = this.wcdbOpenAccount(sessionDbPath, hexKey, handleOut) - - if (result !== 0) { - await this.printLogs() - let errorMsg = '数据库打开失败' - if (result === -1) errorMsg = '参数错误' - else if (result === -2) errorMsg = '密钥错误' - else if (result === -3) errorMsg = '数据库打开失败' - this.writeLog(`testConnection openAccount failed code=${result}`) - return { success: false, error: `${errorMsg} (错误码: ${result})` } - } - - const tempHandle = handleOut[0] - if (tempHandle <= 0) { - return { success: false, error: '无效的数据库句柄' } - } - - // 测试成功,使用 shutdown 清理所有资源(包括测试句柄) - // 这会中断当前活动连接,但 testConnection 本应该是独立测试 - try { - this.wcdbShutdown() - this.handle = null - this.currentPath = null - this.currentKey = null - this.currentWxid = null - this.initialized = false - } catch (closeErr) { - console.error('关闭测试数据库时出错:', closeErr) - } - - return { success: true, sessionCount: 0 } - } catch (e) { - console.error('测试连接异常:', e) - this.writeLog(`testConnection exception: ${String(e)}`) - return { success: false, error: String(e) } - } - } - - /** - * 打印 DLL 内部日志(仅在出错时调用) - */ - private async printLogs(force = false): Promise { - try { - if (!this.wcdbGetLogs) return - const outPtr = [null as any] - const result = this.wcdbGetLogs(outPtr) - if (result === 0 && outPtr[0]) { - try { - const jsonStr = this.koffi.decode(outPtr[0], 'char', -1) - this.writeLog(`wcdb_logs: ${jsonStr}`, force) - this.wcdbFreeString(outPtr[0]) - } catch (e) { - // ignore - } - } - } catch (e) { - console.error('获取日志失败:', e) - this.writeLog(`wcdb_logs failed: ${String(e)}`, force) - } - } - - private startLogPolling(): void { - if (this.logTimer || !this.isLogEnabled()) return - this.logTimer = setInterval(() => { - void this.pollLogs() - }, 2000) - } - - private stopLogPolling(): void { - if (this.logTimer) { - clearInterval(this.logTimer) - this.logTimer = null - } - this.lastLogTail = null - } - - private async pollLogs(): Promise { - try { - if (!this.wcdbGetLogs || !this.isLogEnabled()) return - const outPtr = [null as any] - const result = this.wcdbGetLogs(outPtr) - if (result !== 0 || !outPtr[0]) return - let jsonStr = '' - try { - jsonStr = this.koffi.decode(outPtr[0], 'char', -1) - } finally { - try { this.wcdbFreeString(outPtr[0]) } catch { } - } - const logs = JSON.parse(jsonStr) as string[] - if (!Array.isArray(logs) || logs.length === 0) return - let startIdx = 0 - if (this.lastLogTail) { - const idx = logs.lastIndexOf(this.lastLogTail) - if (idx >= 0) startIdx = idx + 1 - } - for (let i = startIdx; i < logs.length; i += 1) { - this.writeLog(`wcdb: ${logs[i]}`) - } - this.lastLogTail = logs[logs.length - 1] - } catch (e) { - // ignore polling errors - } - } - - private decodeJsonPtr(outPtr: any): string | null { - if (!outPtr) return null - try { - const jsonStr = this.koffi.decode(outPtr, 'char', -1) - this.wcdbFreeString(outPtr) - return jsonStr - } catch (e) { - try { this.wcdbFreeString(outPtr) } catch { } - return null - } - } - - private ensureReady(): boolean { - return this.initialized && this.handle !== null - } - - private normalizeTimestamp(input: number): number { - if (!input || input <= 0) return 0 - const asNumber = Number(input) - if (!Number.isFinite(asNumber)) return 0 - // Treat >1e12 as milliseconds. - const seconds = asNumber > 1e12 ? Math.floor(asNumber / 1000) : Math.floor(asNumber) - const maxInt32 = 2147483647 - return Math.min(Math.max(seconds, 0), maxInt32) - } - - private normalizeRange(beginTimestamp: number, endTimestamp: number): { begin: number; end: number } { - const normalizedBegin = this.normalizeTimestamp(beginTimestamp) - let normalizedEnd = this.normalizeTimestamp(endTimestamp) - if (normalizedEnd <= 0) { - normalizedEnd = this.normalizeTimestamp(Date.now()) - } - if (normalizedBegin > 0 && normalizedEnd < normalizedBegin) { - normalizedEnd = normalizedBegin - } - return { begin: normalizedBegin, end: normalizedEnd } - } - - isReady(): boolean { - return this.ensureReady() + return this.callWorker('testConnection', { dbPath, hexKey, wxid }) } /** * 打开数据库 */ async open(dbPath: string, hexKey: string, wxid: string): Promise { - try { - if (!this.initialized) { - const initOk = await this.initialize() - if (!initOk) return false - } - - // 检查是否已经是当前连接的参数,如果是则直接返回成功,实现"始终保持链接" - if (this.handle !== null && - this.currentPath === dbPath && - this.currentKey === hexKey && - this.currentWxid === wxid) { - return true - } - - // 如果参数不同,则先关闭原来的连接 - if (this.handle !== null) { - this.close() - // 重新初始化,因为 close 呼叫了 shutdown - const initOk = await this.initialize() - if (!initOk) return false - } - - const dbStoragePath = this.resolveDbStoragePath(dbPath, wxid) - this.writeLog(`open dbPath=${dbPath} wxid=${wxid} dbStorage=${dbStoragePath || 'null'}`) - - if (!dbStoragePath || !existsSync(dbStoragePath)) { - console.error('数据库目录不存在:', dbPath) - this.writeLog(`open failed: dbStorage not found for ${dbPath}`) - return false - } - - const sessionDbPath = this.findSessionDb(dbStoragePath) - this.writeLog(`open sessionDb=${sessionDbPath || 'null'}`) - if (!sessionDbPath) { - console.error('未找到 session.db 文件') - this.writeLog('open failed: session.db not found') - return false - } - - const handleOut = [0] - const result = this.wcdbOpenAccount(sessionDbPath, hexKey, handleOut) - - if (result !== 0) { - console.error('打开数据库失败:', result) - await this.printLogs() - this.writeLog(`open failed: openAccount code=${result}`) - return false - } - - const handle = handleOut[0] - if (handle <= 0) { - return false - } - - this.handle = handle - this.currentPath = dbPath - this.currentKey = hexKey - this.currentWxid = wxid - this.initialized = true - if (this.wcdbSetMyWxid && wxid) { - try { - this.wcdbSetMyWxid(this.handle, wxid) - } catch (e) { - console.warn('设置 wxid 失败:', e) - } - } - if (this.isLogEnabled()) { - this.startLogPolling() - } - this.writeLog(`open ok handle=${handle}`) - return true - } catch (e) { - console.error('打开数据库异常:', e) - this.writeLog(`open exception: ${String(e)}`) - return false - } + return this.callWorker('open', { dbPath, hexKey, wxid }) } /** - * 关闭数据库 - * 注意:wcdb_close_account 可能导致崩溃,使用 shutdown 代替 + * 关闭数据库连接 */ - close(): void { - if (this.handle !== null || this.initialized) { - try { - // 不调用 closeAccount,直接 shutdown - this.wcdbShutdown() - } catch (e) { - console.error('WCDB shutdown 出错:', e) - } - this.handle = null - this.currentPath = null - this.currentKey = null - this.currentWxid = null - this.initialized = false - this.stopLogPolling() - } + async close(): Promise { + return this.callWorker('close') } /** - * 关闭服务(与 close 相同) + * 关闭服务 */ shutdown(): void { this.close() + if (this.worker) { + this.worker.terminate() + this.worker = null + } } /** - * 检查是否已连接 + * 获取数据库连接状态 + * 注意:此方法现在是异步的 */ - isConnected(): boolean { - return this.initialized && this.handle !== null + async isConnected(): Promise { + return this.callWorker('isConnected') } + /** + * 获取会话列表 + */ async getSessions(): Promise<{ success: boolean; sessions?: any[]; error?: string }> { - if (!this.ensureReady()) { - this.writeLog('getSessions skipped: not connected') - return { success: false, error: 'WCDB 未连接' } - } - try { - // 使用 setImmediate 让事件循环有机会处理其他任务,避免长时间阻塞 - await new Promise(resolve => setImmediate(resolve)) - - const outPtr = [null as any] - const result = this.wcdbGetSessions(this.handle, outPtr) - - // DLL 调用后再次让出控制权 - await new Promise(resolve => setImmediate(resolve)) - - if (result !== 0 || !outPtr[0]) { - this.writeLog(`getSessions failed: code=${result}`) - return { success: false, error: `获取会话失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析会话失败' } - this.writeLog(`getSessions ok size=${jsonStr.length}`) - const sessions = JSON.parse(jsonStr) - return { success: true, sessions } - } catch (e) { - this.writeLog(`getSessions exception: ${String(e)}`) - return { success: false, error: String(e) } - } + return this.callWorker('getSessions') } + /** + * 获取消息列表 + */ async getMessages(sessionId: string, limit: number, offset: number): Promise<{ success: boolean; messages?: any[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetMessages(this.handle, sessionId, limit, offset, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取消息失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析消息失败' } - const messages = JSON.parse(jsonStr) - return { success: true, messages } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getMessages', { sessionId, limit, offset }) } + /** + * 获取消息总数 + */ async getMessageCount(sessionId: string): Promise<{ success: boolean; count?: number; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outCount = [0] - const result = this.wcdbGetMessageCount(this.handle, sessionId, outCount) - if (result !== 0) { - return { success: false, error: `获取消息总数失败: ${result}` } - } - return { success: true, count: outCount[0] } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getMessageCount', { sessionId }) } + /** + * 获取联系人昵称 + */ async getDisplayNames(usernames: string[]): Promise<{ success: boolean; map?: Record; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (usernames.length === 0) return { success: true, map: {} } - try { - // 让出控制权,避免阻塞事件循环 - await new Promise(resolve => setImmediate(resolve)) - - const outPtr = [null as any] - const result = this.wcdbGetDisplayNames(this.handle, JSON.stringify(usernames), outPtr) - - // DLL 调用后再次让出控制权 - await new Promise(resolve => setImmediate(resolve)) - - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取昵称失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析昵称失败' } - const map = JSON.parse(jsonStr) - return { success: true, map } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getDisplayNames', { usernames }) } + /** + * 获取头像 URL + */ async getAvatarUrls(usernames: string[]): Promise<{ success: boolean; map?: Record; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (usernames.length === 0) return { success: true, map: {} } - try { - const now = Date.now() - const resultMap: Record = {} - const toFetch: string[] = [] - const seen = new Set() - - for (const username of usernames) { - if (!username || seen.has(username)) continue - seen.add(username) - const cached = this.avatarUrlCache.get(username) - if (cached && cached.url && now - cached.updatedAt < this.avatarCacheTtlMs) { - resultMap[username] = cached.url - continue - } - toFetch.push(username) - } - - if (toFetch.length === 0) { - return { success: true, map: resultMap } - } - - // 让出控制权,避免阻塞事件循环 - await new Promise(resolve => setImmediate(resolve)) - - const outPtr = [null as any] - const result = this.wcdbGetAvatarUrls(this.handle, JSON.stringify(toFetch), outPtr) - - // DLL 调用后再次让出控制权 - await new Promise(resolve => setImmediate(resolve)) - - if (result !== 0 || !outPtr[0]) { - if (Object.keys(resultMap).length > 0) { - return { success: true, map: resultMap, error: `获取头像失败: ${result}` } - } - return { success: false, error: `获取头像失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析头像失败' } - const map = JSON.parse(jsonStr) as Record - for (const username of toFetch) { - const url = map[username] - if (url) { - resultMap[username] = url - this.avatarUrlCache.set(username, { url, updatedAt: now }) - } - } - return { success: true, map: resultMap } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getAvatarUrls', { usernames }) } + /** + * 获取群成员数量 + */ async getGroupMemberCount(chatroomId: string): Promise<{ success: boolean; count?: number; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outCount = [0] - const result = this.wcdbGetGroupMemberCount(this.handle, chatroomId, outCount) - if (result !== 0) { - return { success: false, error: `获取群成员数量失败: ${result}` } - } - return { success: true, count: outCount[0] } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getGroupMemberCount', { chatroomId }) } + /** + * 批量获取群成员数量 + */ async getGroupMemberCounts(chatroomIds: string[]): Promise<{ success: boolean; map?: Record; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (chatroomIds.length === 0) return { success: true, map: {} } - if (!this.wcdbGetGroupMemberCounts) { - const map: Record = {} - for (const chatroomId of chatroomIds) { - const result = await this.getGroupMemberCount(chatroomId) - if (result.success && typeof result.count === 'number') { - map[chatroomId] = result.count - } - } - return { success: true, map } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetGroupMemberCounts(this.handle, JSON.stringify(chatroomIds), outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取群成员数量失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析群成员数量失败' } - const map = JSON.parse(jsonStr) - return { success: true, map } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getGroupMemberCounts', { chatroomIds }) } + /** + * 获取群成员列表 + */ async getGroupMembers(chatroomId: string): Promise<{ success: boolean; members?: any[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetGroupMembers(this.handle, chatroomId, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取群成员失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析群成员失败' } - const members = JSON.parse(jsonStr) - return { success: true, members } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getGroupMembers', { chatroomId }) } + /** + * 获取消息表列表 + */ async getMessageTables(sessionId: string): Promise<{ success: boolean; tables?: any[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetMessageTables(this.handle, sessionId, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取消息表失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析消息表失败' } - const tables = JSON.parse(jsonStr) - return { success: true, tables } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getMessageTables', { sessionId }) } + /** + * 获取消息表统计 + */ async getMessageTableStats(sessionId: string): Promise<{ success: boolean; tables?: any[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetMessageTableStats(this.handle, sessionId, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取表统计失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析表统计失败' } - const tables = JSON.parse(jsonStr) - return { success: true, tables } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getMessageTableStats', { sessionId }) } + /** + * 获取消息元数据 + */ async getMessageMeta(dbPath: string, tableName: string, limit: number, offset: number): Promise<{ success: boolean; rows?: any[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetMessageMeta(this.handle, dbPath, tableName, limit, offset, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取消息元数据失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析消息元数据失败' } - const rows = JSON.parse(jsonStr) - return { success: true, rows } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getMessageMeta', { dbPath, tableName, limit, offset }) } + /** + * 获取联系人详情 + */ async getContact(username: string): Promise<{ success: boolean; contact?: any; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetContact(this.handle, username, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取联系人失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析联系人失败' } - const contact = JSON.parse(jsonStr) - return { success: true, contact } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getContact', { username }) } + /** + * 获取聚合统计数据 + */ async getAggregateStats(sessionIds: string[], beginTimestamp: number = 0, endTimestamp: number = 0): Promise<{ success: boolean; data?: any; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const normalizedBegin = this.normalizeTimestamp(beginTimestamp) - let normalizedEnd = this.normalizeTimestamp(endTimestamp) - if (normalizedEnd <= 0) { - normalizedEnd = this.normalizeTimestamp(Date.now()) - } - if (normalizedBegin > 0 && normalizedEnd < normalizedBegin) { - normalizedEnd = normalizedBegin - } - - const callAggregate = (ids: string[]) => { - const idsAreNumeric = ids.length > 0 && ids.every((id) => /^\d+$/.test(id)) - const payloadIds = idsAreNumeric ? ids.map((id) => Number(id)) : ids - - const outPtr = [null as any] - const result = this.wcdbGetAggregateStats(this.handle, JSON.stringify(payloadIds), normalizedBegin, normalizedEnd, outPtr) - - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取聚合统计失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) { - return { success: false, error: '解析聚合统计失败' } - } - - const data = JSON.parse(jsonStr) - return { success: true, data } - } - - let result = callAggregate(sessionIds) - if (result.success && result.data && result.data.total === 0 && result.data.idMap) { - const idMap = result.data.idMap as Record - const reverseMap: Record = {} - for (const [id, name] of Object.entries(idMap)) { - if (!name) continue - reverseMap[name] = id - } - const numericIds = sessionIds - .map((id) => reverseMap[id]) - .filter((id) => typeof id === 'string' && /^\d+$/.test(id)) - if (numericIds.length > 0) { - const retry = callAggregate(numericIds) - if (retry.success && retry.data) { - result = retry - } - } - } - - return result - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getAggregateStats', { sessionIds, beginTimestamp, endTimestamp }) } + /** + * 获取可用年份 + */ async getAvailableYears(sessionIds: string[]): Promise<{ success: boolean; data?: number[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (!this.wcdbGetAvailableYears) { - return { success: false, error: '未支持获取年度列表' } - } - if (sessionIds.length === 0) return { success: true, data: [] } - try { - const outPtr = [null as any] - const result = this.wcdbGetAvailableYears(this.handle, JSON.stringify(sessionIds), outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取年度列表失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析年度列表失败' } - const data = JSON.parse(jsonStr) - return { success: true, data } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getAvailableYears', { sessionIds }) } + /** + * 获取年度报告统计 + */ async getAnnualReportStats(sessionIds: string[], beginTimestamp: number = 0, endTimestamp: number = 0): Promise<{ success: boolean; data?: any; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (!this.wcdbGetAnnualReportStats) { - return this.getAggregateStats(sessionIds, beginTimestamp, endTimestamp) - } - try { - const { begin, end } = this.normalizeRange(beginTimestamp, endTimestamp) - const outPtr = [null as any] - const result = this.wcdbGetAnnualReportStats(this.handle, JSON.stringify(sessionIds), begin, end, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取年度统计失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析年度统计失败' } - const data = JSON.parse(jsonStr) - return { success: true, data } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getAnnualReportStats', { sessionIds, beginTimestamp, endTimestamp }) } - async getAnnualReportExtras( - sessionIds: string[], - beginTimestamp: number = 0, - endTimestamp: number = 0, - peakDayBegin: number = 0, - peakDayEnd: number = 0 - ): Promise<{ success: boolean; data?: any; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (!this.wcdbGetAnnualReportExtras) { - return { success: false, error: '未支持年度扩展统计' } - } - if (sessionIds.length === 0) return { success: true, data: {} } - try { - const { begin, end } = this.normalizeRange(beginTimestamp, endTimestamp) - const outPtr = [null as any] - const result = this.wcdbGetAnnualReportExtras( - this.handle, - JSON.stringify(sessionIds), - begin, - end, - this.normalizeTimestamp(peakDayBegin), - this.normalizeTimestamp(peakDayEnd), - outPtr - ) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取年度扩展统计失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析年度扩展统计失败' } - const data = JSON.parse(jsonStr) - return { success: true, data } - } catch (e) { - return { success: false, error: String(e) } - } + /** + * 获取年度报告扩展数据 + */ + async getAnnualReportExtras(sessionIds: string[], beginTimestamp: number, endTimestamp: number, peakDayBegin: number, peakDayEnd: number): Promise<{ success: boolean; data?: any; error?: string }> { + return this.callWorker('getAnnualReportExtras', { sessionIds, beginTimestamp, endTimestamp, peakDayBegin, peakDayEnd }) } + /** + * 获取群聊统计 + */ async getGroupStats(chatroomId: string, beginTimestamp: number = 0, endTimestamp: number = 0): Promise<{ success: boolean; data?: any; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (!this.wcdbGetGroupStats) { - return this.getAggregateStats([chatroomId], beginTimestamp, endTimestamp) - } - try { - const { begin, end } = this.normalizeRange(beginTimestamp, endTimestamp) - const outPtr = [null as any] - const result = this.wcdbGetGroupStats(this.handle, chatroomId, begin, end, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取群聊统计失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析群聊统计失败' } - const data = JSON.parse(jsonStr) - return { success: true, data } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getGroupStats', { chatroomId, beginTimestamp, endTimestamp }) } + /** + * 打开消息游标 + */ async openMessageCursor(sessionId: string, batchSize: number, ascending: boolean, beginTimestamp: number, endTimestamp: number): Promise<{ success: boolean; cursor?: number; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outCursor = [0] - const result = this.wcdbOpenMessageCursor( - this.handle, - sessionId, - batchSize, - ascending ? 1 : 0, - beginTimestamp, - endTimestamp, - outCursor - ) - if (result !== 0 || outCursor[0] <= 0) { - await this.printLogs(true) - this.writeLog( - `openMessageCursor failed: sessionId=${sessionId} batchSize=${batchSize} ascending=${ascending ? 1 : 0} begin=${beginTimestamp} end=${endTimestamp} result=${result} cursor=${outCursor[0]}`, - true - ) - return { success: false, error: `创建游标失败: ${result},请查看日志` } - } - return { success: true, cursor: outCursor[0] } - } catch (e) { - await this.printLogs(true) - this.writeLog(`openMessageCursor exception: ${String(e)}`, true) - return { success: false, error: '创建游标异常,请查看日志' } - } + return this.callWorker('openMessageCursor', { sessionId, batchSize, ascending, beginTimestamp, endTimestamp }) } + /** + * 打开轻量级消息游标 + */ async openMessageCursorLite(sessionId: string, batchSize: number, ascending: boolean, beginTimestamp: number, endTimestamp: number): Promise<{ success: boolean; cursor?: number; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - if (!this.wcdbOpenMessageCursorLite) { - return this.openMessageCursor(sessionId, batchSize, ascending, beginTimestamp, endTimestamp) - } - try { - const outCursor = [0] - const result = this.wcdbOpenMessageCursorLite( - this.handle, - sessionId, - batchSize, - ascending ? 1 : 0, - beginTimestamp, - endTimestamp, - outCursor - ) - if (result !== 0 || outCursor[0] <= 0) { - await this.printLogs(true) - this.writeLog( - `openMessageCursorLite failed: sessionId=${sessionId} batchSize=${batchSize} ascending=${ascending ? 1 : 0} begin=${beginTimestamp} end=${endTimestamp} result=${result} cursor=${outCursor[0]}`, - true - ) - return { success: false, error: `创建游标失败: ${result},请查看日志` } - } - return { success: true, cursor: outCursor[0] } - } catch (e) { - await this.printLogs(true) - this.writeLog(`openMessageCursorLite exception: ${String(e)}`, true) - return { success: false, error: '创建游标异常,请查看日志' } - } + return this.callWorker('openMessageCursorLite', { sessionId, batchSize, ascending, beginTimestamp, endTimestamp }) } + /** + * 获取下一批消息 + */ async fetchMessageBatch(cursor: number): Promise<{ success: boolean; rows?: any[]; hasMore?: boolean; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const outHasMore = [0] - const result = this.wcdbFetchMessageBatch(this.handle, cursor, outPtr, outHasMore) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取批次失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析批次失败' } - const rows = JSON.parse(jsonStr) - return { success: true, rows, hasMore: outHasMore[0] === 1 } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('fetchMessageBatch', { cursor }) } + /** + * 关闭消息游标 + */ async closeMessageCursor(cursor: number): Promise<{ success: boolean; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const result = this.wcdbCloseMessageCursor(this.handle, cursor) - if (result !== 0) { - return { success: false, error: `关闭游标失败: ${result}` } - } - return { success: true } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('closeMessageCursor', { cursor }) } + /** + * 执行 SQL 查询 + */ async execQuery(kind: string, path: string | null, sql: string): Promise<{ success: boolean; rows?: any[]; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbExecQuery(this.handle, kind, path, sql, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `执行查询失败: ${result}` } - } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析查询结果失败' } - const rows = JSON.parse(jsonStr) - return { success: true, rows } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('execQuery', { kind, path, sql }) } + /** + * 获取表情包 CDN URL + */ async getEmoticonCdnUrl(dbPath: string, md5: string): Promise<{ success: boolean; url?: string; error?: string }> { - if (!this.ensureReady()) { - return { success: false, error: 'WCDB 未连接' } - } - try { - const outPtr = [null as any] - const result = this.wcdbGetEmoticonCdnUrl(this.handle, dbPath, md5, outPtr) - if (result !== 0 || !outPtr[0]) { - return { success: false, error: `获取表情 URL 失败: ${result}` } - } - const urlStr = this.decodeJsonPtr(outPtr[0]) - if (urlStr === null) return { success: false, error: '解析表情 URL 失败' } - return { success: true, url: urlStr || undefined } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getEmoticonCdnUrl', { dbPath, md5 }) } + /** + * 列出消息数据库 + */ async listMessageDbs(): Promise<{ success: boolean; data?: string[]; error?: string }> { - if (!this.ensureReady()) return { success: false, error: 'WCDB 未连接' } - try { - const outPtr = [null as any] - const result = this.wcdbListMessageDbs(this.handle, outPtr) - if (result !== 0 || !outPtr[0]) return { success: false, error: `获取消息库列表失败: ${result}` } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析消息库列表失败' } - const data = JSON.parse(jsonStr) - return { success: true, data } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('listMessageDbs') } + /** + * 列出媒体数据库 + */ async listMediaDbs(): Promise<{ success: boolean; data?: string[]; error?: string }> { - if (!this.ensureReady()) return { success: false, error: 'WCDB 未连接' } - try { - const outPtr = [null as any] - const result = this.wcdbListMediaDbs(this.handle, outPtr) - if (result !== 0 || !outPtr[0]) return { success: false, error: `获取媒体库列表失败: ${result}` } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析媒体库列表失败' } - const data = JSON.parse(jsonStr) - return { success: true, data } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('listMediaDbs') } + /** + * 根据 ID 获取消息 + */ async getMessageById(sessionId: string, localId: number): Promise<{ success: boolean; message?: any; error?: string }> { - if (!this.ensureReady()) return { success: false, error: 'WCDB 未连接' } - try { - const outPtr = [null as any] - const result = this.wcdbGetMessageById(this.handle, sessionId, localId, outPtr) - if (result !== 0 || !outPtr[0]) return { success: false, error: `查询消息失败: ${result}` } - const jsonStr = this.decodeJsonPtr(outPtr[0]) - if (!jsonStr) return { success: false, error: '解析消息失败' } - const message = JSON.parse(jsonStr) - // 处理 wcdb_get_message_by_id 返回空对象的情况 - if (Object.keys(message).length === 0) return { success: false, error: '未找到消息' } - return { success: true, message } - } catch (e) { - return { success: false, error: String(e) } - } + return this.callWorker('getMessageById', { sessionId, localId }) } + } export const wcdbService = new WcdbService() diff --git a/electron/wcdbWorker.ts b/electron/wcdbWorker.ts new file mode 100644 index 0000000..4958419 --- /dev/null +++ b/electron/wcdbWorker.ts @@ -0,0 +1,122 @@ +import { parentPort, workerData } from 'worker_threads' +import { WcdbCore } from './services/wcdbCore' + +const core = new WcdbCore() + +if (parentPort) { + parentPort.on('message', async (msg) => { + const { id, type, payload } = msg + + try { + let result: any + + switch (type) { + case 'setPaths': + core.setPaths(payload.resourcesPath, payload.userDataPath) + result = { success: true } + break + case 'setLogEnabled': + core.setLogEnabled(payload.enabled) + result = { success: true } + break + case 'testConnection': + result = await core.testConnection(payload.dbPath, payload.hexKey, payload.wxid) + break + case 'open': + result = await core.open(payload.dbPath, payload.hexKey, payload.wxid) + break + case 'close': + core.close() + result = { success: true } + break + case 'isConnected': + result = core.isConnected() + break + case 'getSessions': + result = await core.getSessions() + break + case 'getMessages': + result = await core.getMessages(payload.sessionId, payload.limit, payload.offset) + break + case 'getMessageCount': + result = await core.getMessageCount(payload.sessionId) + break + case 'getDisplayNames': + result = await core.getDisplayNames(payload.usernames) + break + case 'getAvatarUrls': + result = await core.getAvatarUrls(payload.usernames) + break + case 'getGroupMemberCount': + result = await core.getGroupMemberCount(payload.chatroomId) + break + case 'getGroupMemberCounts': + result = await core.getGroupMemberCounts(payload.chatroomIds) + break + case 'getGroupMembers': + result = await core.getGroupMembers(payload.chatroomId) + break + case 'getMessageTables': + result = await core.getMessageTables(payload.sessionId) + break + case 'getMessageTableStats': + result = await core.getMessageTableStats(payload.sessionId) + break + case 'getMessageMeta': + result = await core.getMessageMeta(payload.dbPath, payload.tableName, payload.limit, payload.offset) + break + case 'getContact': + result = await core.getContact(payload.username) + break + case 'getAggregateStats': + result = await core.getAggregateStats(payload.sessionIds, payload.beginTimestamp, payload.endTimestamp) + break + case 'getAvailableYears': + result = await core.getAvailableYears(payload.sessionIds) + break + case 'getAnnualReportStats': + result = await core.getAnnualReportStats(payload.sessionIds, payload.beginTimestamp, payload.endTimestamp) + break + case 'getAnnualReportExtras': + result = await core.getAnnualReportExtras(payload.sessionIds, payload.beginTimestamp, payload.endTimestamp, payload.peakDayBegin, payload.peakDayEnd) + break + case 'getGroupStats': + result = await core.getGroupStats(payload.chatroomId, payload.beginTimestamp, payload.endTimestamp) + break + case 'openMessageCursor': + result = await core.openMessageCursor(payload.sessionId, payload.batchSize, payload.ascending, payload.beginTimestamp, payload.endTimestamp) + break + case 'openMessageCursorLite': + result = await core.openMessageCursorLite(payload.sessionId, payload.batchSize, payload.ascending, payload.beginTimestamp, payload.endTimestamp) + break + case 'fetchMessageBatch': + result = await core.fetchMessageBatch(payload.cursor) + break + case 'closeMessageCursor': + result = await core.closeMessageCursor(payload.cursor) + break + case 'execQuery': + result = await core.execQuery(payload.kind, payload.path, payload.sql) + break + case 'getEmoticonCdnUrl': + result = await core.getEmoticonCdnUrl(payload.dbPath, payload.md5) + break + case 'listMessageDbs': + result = await core.listMessageDbs() + break + case 'listMediaDbs': + result = await core.listMediaDbs() + break + case 'getMessageById': + result = await core.getMessageById(payload.sessionId, payload.localId) + break + default: + result = { success: false, error: `Unknown method: ${type}` } + } + + parentPort!.postMessage({ id, result }) + } catch (e) { + parentPort!.postMessage({ id, error: String(e) }) + } + }) +} diff --git a/package-lock.json b/package-lock.json index 9099308..6c3e749 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,6 @@ "version": "1.0.4", "hasInstallScript": true, "dependencies": { - "@lancedb/lancedb": "^0.23.1-beta.1", - "@lancedb/lancedb-win32-x64-msvc": "^0.22.3", - "@xenova/transformers": "^2.17.2", "better-sqlite3": "^12.5.0", "echarts": "^5.5.1", "echarts-for-react": "^3.0.2", @@ -23,8 +20,6 @@ "jszip": "^3.10.1", "koffi": "^2.9.0", "lucide-react": "^0.562.0", - "node-llama-cpp": "^3.1.0", - "onnxruntime-node": "^1.16.1", "react": "^19.2.3", "react-dom": "^19.2.3", "react-router-dom": "^7.1.1", @@ -1136,15 +1131,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@huggingface/jinja": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/@huggingface/jinja/-/jinja-0.2.2.tgz", - "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/@img/colour": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/@img/colour/-/colour-1.0.0.tgz", @@ -1824,94 +1810,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "license": "MIT" - }, - "node_modules/@lancedb/lancedb": { - "version": "0.23.1-beta.1", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb/-/lancedb-0.23.1-beta.1.tgz", - "integrity": "sha512-l7mLIA6qGlQHM6YfjUxvph8XzTvkBF8nqGT47nI7xVl1SuJiqv70J+cSHwkj0TXex716UCyiLM94EO3c33m98A==", - "cpu": [ - "x64", - "arm64" - ], - "license": "Apache-2.0", - "os": [ - "darwin", - "linux", - "win32" - ], - "dependencies": { - "reflect-metadata": "^0.2.2" - }, - "engines": { - "node": ">= 18" - }, - "optionalDependencies": { - "@lancedb/lancedb-darwin-arm64": "0.23.1-beta.1", - "@lancedb/lancedb-darwin-x64": "0.23.1-beta.1", - "@lancedb/lancedb-linux-arm64-gnu": "0.23.1-beta.1", - "@lancedb/lancedb-linux-arm64-musl": "0.23.1-beta.1", - "@lancedb/lancedb-linux-x64-gnu": "0.23.1-beta.1", - "@lancedb/lancedb-linux-x64-musl": "0.23.1-beta.1", - "@lancedb/lancedb-win32-arm64-msvc": "0.23.1-beta.1", - "@lancedb/lancedb-win32-x64-msvc": "0.23.1-beta.1" - }, - "peerDependencies": { - "apache-arrow": ">=15.0.0 <=18.1.0" - } - }, - "node_modules/@lancedb/lancedb-win32-x64-msvc": { - "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-win32-x64-msvc/-/lancedb-win32-x64-msvc-0.22.3.tgz", - "integrity": "sha512-/1feFnjz5MIhzXOEU4+1OeGwpAFYczGfefuOGZRsmGWDdt4V6/fza7Hkkxyb2OnTzqpBfy6BdW2+iBguE1JMyQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "os": [ - "win32" - ], - "engines": { - "node": ">= 18" - } - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-darwin-arm64": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-darwin-x64": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-linux-arm64-gnu": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-linux-arm64-musl": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-linux-x64-gnu": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-linux-x64-musl": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-win32-arm64-msvc": { - "optional": true - }, - "node_modules/@lancedb/lancedb/node_modules/@lancedb/lancedb-win32-x64-msvc": { - "optional": true - }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -1990,138 +1888,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@node-llama-cpp/linux-arm64": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/linux-arm64/-/linux-arm64-3.15.0.tgz", - "integrity": "sha512-IaHIllWlj6tGjhhCtyp1w6xA7AHaGJiVaXAZ+78hDs8X1SL9ySBN2Qceju8AQJALePtynbAfjgjTqjQ7Hyk+IQ==", - "cpu": [ - "arm64", - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/linux-armv7l": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/linux-armv7l/-/linux-armv7l-3.15.0.tgz", - "integrity": "sha512-ZuZ3q6mejQnEP4o22la7zBv7jNR+IZfgItDm3KjAl04HUXTKJ43HpNwjnf9GyYYd+dEgtoX0MESvWz4RnGH8Jw==", - "cpu": [ - "arm", - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/linux-x64": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/linux-x64/-/linux-x64-3.15.0.tgz", - "integrity": "sha512-etUuTqSyNefRObqc5+JZviNTkuef2XEtHcQLaamEIWwjI1dj7nTD2YMZPBP7H3M3E55HSIY82vqCQ1bp6ZILiA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/linux-x64-vulkan": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/linux-x64-vulkan/-/linux-x64-vulkan-3.15.0.tgz", - "integrity": "sha512-htVIthQKq/rr8v5e7NiVtcHsstqTBAAC50kUymmDMbrzAu6d/EHacCJpNbU57b1UUa1nKN5cBqr6Jr+QqEalMA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/mac-arm64-metal": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/mac-arm64-metal/-/mac-arm64-metal-3.15.0.tgz", - "integrity": "sha512-3Vkq6bpyQZaIzoaLLP7H2Tt8ty5BS0zxUY2pX0ox2S9P4fp8Au0CCJuUJF4V+EKi+/PTn70A6R1QCkRMfMQJig==", - "cpu": [ - "arm64", - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/mac-x64": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/mac-x64/-/mac-x64-3.15.0.tgz", - "integrity": "sha512-BUrmLu0ySveEYv2YzFIjqnWWAqjTZfRHuzoFLaZwqIJ86Jzycm9tzxJub4wfJCj6ixeuWyI1sUdNGIw4/2E03Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/win-arm64": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/win-arm64/-/win-arm64-3.15.0.tgz", - "integrity": "sha512-GwhqaPNpbtGDmw0Ex13hwq4jqzSZr7hw5QpRWhSKB1dHiYj6C1NLM1Vz5xiDZX+69WI/ndb+FEqGiIYFQpfmiQ==", - "cpu": [ - "arm64", - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@node-llama-cpp/win-x64": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/@node-llama-cpp/win-x64/-/win-x64-3.15.0.tgz", - "integrity": "sha512-gWhtc8l3HOry5guO46YfFohLQnF0NfL4On0GAO8E27JiYYxHO9nHSCfFif4+U03+FfHquZXL0znJ1qPVOiwOPw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@npmcli/agent": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/@npmcli/agent/-/agent-3.0.0.tgz", @@ -2174,347 +1940,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@octokit/app": { - "version": "16.1.2", - "resolved": "https://registry.npmmirror.com/@octokit/app/-/app-16.1.2.tgz", - "integrity": "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==", - "license": "MIT", - "dependencies": { - "@octokit/auth-app": "^8.1.2", - "@octokit/auth-unauthenticated": "^7.0.3", - "@octokit/core": "^7.0.6", - "@octokit/oauth-app": "^8.0.3", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/types": "^16.0.0", - "@octokit/webhooks": "^14.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/auth-app": { - "version": "8.1.2", - "resolved": "https://registry.npmmirror.com/@octokit/auth-app/-/auth-app-8.1.2.tgz", - "integrity": "sha512-db8VO0PqXxfzI6GdjtgEFHY9tzqUql5xMFXYA12juq8TeTgPAuiiP3zid4h50lwlIP457p5+56PnJOgd2GGBuw==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-app": "^9.0.3", - "@octokit/auth-oauth-user": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "toad-cache": "^3.7.0", - "universal-github-app-jwt": "^2.2.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "9.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/auth-oauth-app/-/auth-oauth-app-9.0.3.tgz", - "integrity": "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-device": "^8.0.3", - "@octokit/auth-oauth-user": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/auth-oauth-device/-/auth-oauth-device-8.0.3.tgz", - "integrity": "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==", - "license": "MIT", - "dependencies": { - "@octokit/oauth-methods": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/@octokit/auth-oauth-user/-/auth-oauth-user-6.0.2.tgz", - "integrity": "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-device": "^8.0.3", - "@octokit/oauth-methods": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/auth-token": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-6.0.0.tgz", - "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-7.0.3.tgz", - "integrity": "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==", - "license": "MIT", - "dependencies": { - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/core": { - "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/@octokit/core/-/core-7.0.6.tgz", - "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.3", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "before-after-hook": "^4.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/endpoint": { - "version": "11.0.2", - "resolved": "https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-11.0.2.tgz", - "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/graphql": { - "version": "9.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/graphql/-/graphql-9.0.3.tgz", - "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", - "license": "MIT", - "dependencies": { - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/oauth-app": { - "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/oauth-app/-/oauth-app-8.0.3.tgz", - "integrity": "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-app": "^9.0.2", - "@octokit/auth-oauth-user": "^6.0.1", - "@octokit/auth-unauthenticated": "^7.0.2", - "@octokit/core": "^7.0.5", - "@octokit/oauth-authorization-url": "^8.0.0", - "@octokit/oauth-methods": "^6.0.1", - "@types/aws-lambda": "^8.10.83", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-8.0.0.tgz", - "integrity": "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==", - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/oauth-methods": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/@octokit/oauth-methods/-/oauth-methods-6.0.2.tgz", - "integrity": "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==", - "license": "MIT", - "dependencies": { - "@octokit/oauth-authorization-url": "^8.0.0", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "27.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", - "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", - "license": "MIT" - }, - "node_modules/@octokit/openapi-webhooks-types": { - "version": "12.1.0", - "resolved": "https://registry.npmmirror.com/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-12.1.0.tgz", - "integrity": "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-graphql": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-6.0.0.tgz", - "integrity": "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "14.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", - "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "17.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", - "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-retry/-/plugin-retry-8.0.3.tgz", - "integrity": "sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==", - "license": "MIT", - "dependencies": { - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=7" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "11.0.3", - "resolved": "https://registry.npmmirror.com/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", - "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": "^7.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "10.0.7", - "resolved": "https://registry.npmmirror.com/@octokit/request/-/request-10.0.7.tgz", - "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^11.0.2", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "fast-content-type-parse": "^3.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/request-error": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/@octokit/request-error/-/request-error-7.1.0.tgz", - "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/types": { - "version": "16.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/types/-/types-16.0.0.tgz", - "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^27.0.0" - } - }, - "node_modules/@octokit/webhooks": { - "version": "14.2.0", - "resolved": "https://registry.npmmirror.com/@octokit/webhooks/-/webhooks-14.2.0.tgz", - "integrity": "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-webhooks-types": "12.1.0", - "@octokit/request-error": "^7.0.0", - "@octokit/webhooks-methods": "^6.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@octokit/webhooks-methods/-/webhooks-methods-6.0.0.tgz", - "integrity": "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==", - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -2858,218 +2283,6 @@ "node": ">=14" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, - "node_modules/@reflink/reflink": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink/-/reflink-0.1.19.tgz", - "integrity": "sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@reflink/reflink-darwin-arm64": "0.1.19", - "@reflink/reflink-darwin-x64": "0.1.19", - "@reflink/reflink-linux-arm64-gnu": "0.1.19", - "@reflink/reflink-linux-arm64-musl": "0.1.19", - "@reflink/reflink-linux-x64-gnu": "0.1.19", - "@reflink/reflink-linux-x64-musl": "0.1.19", - "@reflink/reflink-win32-arm64-msvc": "0.1.19", - "@reflink/reflink-win32-x64-msvc": "0.1.19" - } - }, - "node_modules/@reflink/reflink-darwin-arm64": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-darwin-arm64/-/reflink-darwin-arm64-0.1.19.tgz", - "integrity": "sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-darwin-x64": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-darwin-x64/-/reflink-darwin-x64-0.1.19.tgz", - "integrity": "sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-linux-arm64-gnu": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-linux-arm64-gnu/-/reflink-linux-arm64-gnu-0.1.19.tgz", - "integrity": "sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-linux-arm64-musl": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-linux-arm64-musl/-/reflink-linux-arm64-musl-0.1.19.tgz", - "integrity": "sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-linux-x64-gnu": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-linux-x64-gnu/-/reflink-linux-x64-gnu-0.1.19.tgz", - "integrity": "sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-linux-x64-musl": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-linux-x64-musl/-/reflink-linux-x64-musl-0.1.19.tgz", - "integrity": "sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-win32-arm64-msvc": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-win32-arm64-msvc/-/reflink-win32-arm64-msvc-0.1.19.tgz", - "integrity": "sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@reflink/reflink-win32-x64-msvc": { - "version": "0.1.19", - "resolved": "https://registry.npmmirror.com/@reflink/reflink-win32-x64-msvc/-/reflink-win32-x64-msvc-0.1.19.tgz", - "integrity": "sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -3440,23 +2653,6 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@swc/helpers": { - "version": "0.5.18", - "resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.18.tgz", - "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true - }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -3470,19 +2666,6 @@ "node": ">=10" } }, - "node_modules/@tinyhttp/content-disposition": { - "version": "2.2.2", - "resolved": "https://registry.npmmirror.com/@tinyhttp/content-disposition/-/content-disposition-2.2.2.tgz", - "integrity": "sha512-crXw1txzrS36huQOyQGYFvhTeLeG0Si1xu+/l6kXUVYpE0TjFjEZRqTbuadQLfKGZ0jaI+jJoRyqaWwxOSHW2g==", - "license": "MIT", - "engines": { - "node": ">=12.20.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" - } - }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz", @@ -3493,12 +2676,6 @@ "node": ">= 10" } }, - "node_modules/@types/aws-lambda": { - "version": "8.10.159", - "resolved": "https://registry.npmmirror.com/@types/aws-lambda/-/aws-lambda-8.10.159.tgz", - "integrity": "sha512-SAP22WSGNN12OQ8PlCzGzRCZ7QDCwI85dQZbmpz7+mAk+L7j+wI7qnvmdKh+o7A5LaOp6QnOZ2NJphAZQTTHQg==", - "license": "MIT" - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3567,20 +2744,6 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/command-line-args": { - "version": "5.2.3", - "resolved": "https://registry.npmmirror.com/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", - "license": "MIT", - "peer": true - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.4", - "resolved": "https://registry.npmmirror.com/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", - "license": "MIT", - "peer": true - }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz", @@ -3625,12 +2788,6 @@ "@types/node": "*" } }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "license": "MIT" - }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", @@ -3642,6 +2799,7 @@ "version": "25.0.3", "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.0.3.tgz", "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -3729,89 +2887,6 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@xenova/transformers": { - "version": "2.17.2", - "resolved": "https://registry.npmmirror.com/@xenova/transformers/-/transformers-2.17.2.tgz", - "integrity": "sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==", - "license": "Apache-2.0", - "dependencies": { - "@huggingface/jinja": "^0.2.2", - "onnxruntime-web": "1.14.0", - "sharp": "^0.32.0" - }, - "optionalDependencies": { - "onnxruntime-node": "1.14.0" - } - }, - "node_modules/@xenova/transformers/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "license": "MIT" - }, - "node_modules/@xenova/transformers/node_modules/onnxruntime-node": { - "version": "1.14.0", - "resolved": "https://registry.npmmirror.com/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", - "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", - "license": "MIT", - "optional": true, - "os": [ - "win32", - "darwin", - "linux" - ], - "dependencies": { - "onnxruntime-common": "~1.14.0" - } - }, - "node_modules/@xenova/transformers/node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@xenova/transformers/node_modules/tar-fs": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-3.1.1.tgz", - "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^4.0.1", - "bare-path": "^3.0.0" - } - }, - "node_modules/@xenova/transformers/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/@xmldom/xmldom": { "version": "0.8.11", "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz", @@ -3839,15 +2914,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/adm-zip": { - "version": "0.5.16", - "resolved": "https://registry.npmmirror.com/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", - "license": "MIT", - "engines": { - "node": ">=12.0" - } - }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.4.tgz", @@ -3951,22 +3017,11 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3976,6 +3031,7 @@ "version": "4.3.0", "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3987,51 +3043,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/apache-arrow": { - "version": "18.1.0", - "resolved": "https://registry.npmmirror.com/apache-arrow/-/apache-arrow-18.1.0.tgz", - "integrity": "sha512-v/ShMp57iBnBp4lDgV8Jx3d3Q5/Hac25FWmQ98eMahUiHPXcvwIMKJD0hBIgclm/FCG+LwPkAKtkRO1O/W0YGg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@swc/helpers": "^0.5.11", - "@types/command-line-args": "^5.2.3", - "@types/command-line-usage": "^5.0.4", - "@types/node": "^20.13.0", - "command-line-args": "^5.2.1", - "command-line-usage": "^7.0.1", - "flatbuffers": "^24.3.25", - "json-bignum": "^0.0.3", - "tslib": "^2.6.2" - }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" - } - }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "20.19.28", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.28.tgz", - "integrity": "sha512-VyKBr25BuFDzBFCK5sUM6ZXiWfqgCTwTAOK8qzGV/m9FCirXYDlmczJ+d5dXBAQALGCdRRdbteKYfJ84NGEusw==", - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/apache-arrow/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true - }, - "node_modules/apache-arrow/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT", - "peer": true - }, "node_modules/app-builder-bin": { "version": "5.0.0-alpha.10", "resolved": "https://registry.npmmirror.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz", @@ -4546,6 +3557,7 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/aproba/-/aproba-2.1.0.tgz", "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "dev": true, "license": "ISC" }, "node_modules/archiver": { @@ -4632,6 +3644,7 @@ "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "deprecated": "This package is no longer supported.", + "dev": true, "license": "ISC", "dependencies": { "delegates": "^1.0.0", @@ -4647,16 +3660,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", @@ -4696,28 +3699,11 @@ "node": ">=0.12.0" } }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmmirror.com/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "license": "MIT", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/async-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, "node_modules/at-least-node": { @@ -4740,31 +3726,6 @@ "when-exit": "^2.1.4" } }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmmirror.com/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4772,97 +3733,6 @@ "dev": true, "license": "MIT" }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmmirror.com/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/bare-fs": { - "version": "4.5.2", - "resolved": "https://registry.npmmirror.com/bare-fs/-/bare-fs-4.5.2.tgz", - "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" - }, - "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } - } - }, - "node_modules/bare-os": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "bare": ">=1.14.0" - } - }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/bare-stream": { - "version": "2.7.0", - "resolved": "https://registry.npmmirror.com/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/bare-url": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/bare-url/-/bare-url-2.3.2.tgz", - "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-path": "^3.0.0" - } - }, "node_modules/base64-arraybuffer": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", @@ -4902,12 +3772,6 @@ "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/before-after-hook": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/before-after-hook/-/before-after-hook-4.0.0.tgz", - "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", - "license": "Apache-2.0" - }, "node_modules/better-sqlite3": { "version": "12.5.0", "resolved": "https://registry.npmmirror.com/better-sqlite3/-/better-sqlite3-12.5.0.tgz", @@ -4964,13 +3828,9 @@ "resolved": "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT" - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmmirror.com/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/brace-expansion": { "version": "1.1.12", @@ -5149,15 +4009,6 @@ "node": ">= 10.0.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmmirror.com/cacache/-/cacache-19.0.1.tgz", @@ -5306,6 +4157,7 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5340,6 +4192,7 @@ "version": "4.1.2", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5352,28 +4205,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "license": "MIT", - "peer": true, - "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, - "node_modules/chmodrp": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/chmodrp/-/chmodrp-1.0.2.tgz", - "integrity": "sha512-TdngOlFV1FLTzU0o1w8MB6/BFywhtLC0SzRTGJU7T9lmdjlCWeMRt1iVo0Ki+ldwNk0BqNiKoc8xpLZEQ8mY1w==", - "license": "MIT" - }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", @@ -5394,6 +4225,7 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -5449,6 +4281,7 @@ "version": "2.9.2", "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5479,6 +4312,7 @@ "version": "8.0.1", "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -5512,84 +4346,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cmake-js": { - "version": "7.4.0", - "resolved": "https://registry.npmmirror.com/cmake-js/-/cmake-js-7.4.0.tgz", - "integrity": "sha512-Lw0JxEHrmk+qNj1n9W9d4IvkDdYTBn7l2BW6XmtLj7WPpIo2shvxUy+YokfjMxAAOELNonQwX3stkPhM5xSC2Q==", - "license": "MIT", - "dependencies": { - "axios": "^1.6.5", - "debug": "^4", - "fs-extra": "^11.2.0", - "memory-stream": "^1.0.0", - "node-api-headers": "^1.1.0", - "npmlog": "^6.0.2", - "rc": "^1.2.7", - "semver": "^7.5.4", - "tar": "^6.2.0", - "url-join": "^4.0.1", - "which": "^2.0.2", - "yargs": "^17.7.2" - }, - "bin": { - "cmake-js": "bin/cmake-js" - }, - "engines": { - "node": ">= 14.15.0" - } - }, - "node_modules/cmake-js/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/cmake-js/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/cmake-js/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5602,22 +4363,14 @@ "version": "1.1.4", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, "license": "ISC", "bin": { "color-support": "bin.js" @@ -5627,6 +4380,7 @@ "version": "1.0.8", "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -5635,58 +4389,6 @@ "node": ">= 0.8" } }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "7.3.0", - "resolved": "https://registry.npmmirror.com/typical/-/typical-7.3.0.tgz", - "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmmirror.com/commander/-/commander-5.1.0.tgz", @@ -5850,6 +4552,7 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, "license": "ISC" }, "node_modules/convert-source-map": { @@ -5922,6 +4625,7 @@ "version": "7.0.6", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -6043,7 +4747,9 @@ "version": "1.1.4", "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6060,7 +4766,9 @@ "version": "1.2.1", "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -6077,6 +4785,7 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -6086,6 +4795,7 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, "license": "MIT" }, "node_modules/detect-libc": { @@ -6101,7 +4811,9 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/dir-compare": { "version": "4.2.0", @@ -6258,6 +4970,7 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6615,6 +5328,7 @@ "version": "8.0.0", "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/encoding": { @@ -6647,15 +5361,6 @@ "node": ">=6" } }, - "node_modules/env-var": { - "version": "7.5.0", - "resolved": "https://registry.npmmirror.com/env-var/-/env-var-7.5.0.tgz", - "integrity": "sha512-mKZOzLRN0ETzau2W2QXefbFjo5EF4yWq28OyKb9ICdeNhHJlOE/pHHnz4hdYJ9cNZXcJHo5xN4OT4pzuSHSNvA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/err-code/-/err-code-2.0.3.tgz", @@ -6667,6 +5372,7 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6676,6 +5382,7 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6685,6 +5392,7 @@ "version": "1.1.1", "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6697,6 +5405,7 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6712,7 +5421,9 @@ "version": "4.1.1", "resolved": "https://registry.npmmirror.com/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/esbuild": { "version": "0.25.12", @@ -6760,6 +5471,7 @@ "version": "3.2.0", "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6769,7 +5481,9 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">=10" }, @@ -6777,21 +5491,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz", @@ -6840,34 +5539,12 @@ "license": "MIT", "optional": true }, - "node_modules/fast-content-type-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", - "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "license": "MIT" - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6940,33 +5617,6 @@ "node": ">=10" } }, - "node_modules/filename-reserved-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/filenamify": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/filenamify/-/filenamify-6.0.0.tgz", - "integrity": "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==", - "license": "MIT", - "dependencies": { - "filename-reserved-regex": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", @@ -6981,46 +5631,6 @@ "node": ">=8" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/flatbuffers": { - "version": "24.12.23", - "resolved": "https://registry.npmmirror.com/flatbuffers/-/flatbuffers-24.12.23.tgz", - "integrity": "sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", @@ -7055,6 +5665,7 @@ "version": "4.0.5", "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -7127,6 +5738,7 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7143,6 +5755,7 @@ "resolved": "https://registry.npmmirror.com/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "deprecated": "This package is no longer supported.", + "dev": true, "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -7172,27 +5785,17 @@ "version": "2.0.5", "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -7217,6 +5820,7 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -7287,7 +5891,9 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, "license": "BSD-3-Clause", + "optional": true, "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", @@ -7304,7 +5910,9 @@ "version": "1.0.4", "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -7320,6 +5928,7 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7360,16 +5969,11 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/guid-typescript": { - "version": "1.0.9", - "resolved": "https://registry.npmmirror.com/guid-typescript/-/guid-typescript-1.0.9.tgz", - "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==", - "license": "ISC" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7379,7 +5983,9 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -7391,6 +5997,7 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7403,6 +6010,7 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -7418,12 +6026,14 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, "license": "ISC" }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7588,15 +6198,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", @@ -7671,238 +6272,6 @@ "node": ">= 12" } }, - "node_modules/ipull": { - "version": "3.9.3", - "resolved": "https://registry.npmmirror.com/ipull/-/ipull-3.9.3.tgz", - "integrity": "sha512-ZMkxaopfwKHwmEuGDYx7giNBdLxbHbRCWcQVA1D2eqE4crUguupfxej6s7UqbidYEwT69dkyumYkY8DPHIxF9g==", - "license": "MIT", - "dependencies": { - "@tinyhttp/content-disposition": "^2.2.0", - "async-retry": "^1.3.3", - "chalk": "^5.3.0", - "ci-info": "^4.0.0", - "cli-spinners": "^2.9.2", - "commander": "^10.0.0", - "eventemitter3": "^5.0.1", - "filenamify": "^6.0.0", - "fs-extra": "^11.1.1", - "is-unicode-supported": "^2.0.0", - "lifecycle-utils": "^2.0.1", - "lodash.debounce": "^4.0.8", - "lowdb": "^7.0.1", - "pretty-bytes": "^6.1.0", - "pretty-ms": "^8.0.0", - "sleep-promise": "^9.1.0", - "slice-ansi": "^7.1.0", - "stdout-update": "^4.0.1", - "strip-ansi": "^7.1.0" - }, - "bin": { - "ipull": "dist/cli/cli.js" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/ido-pluto/ipull?sponsor=1" - }, - "optionalDependencies": { - "@reflink/reflink": "^0.1.16" - } - }, - "node_modules/ipull/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ipull/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ipull/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ipull/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ipull/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/ipull/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/ipull/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipull/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipull/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/ipull/node_modules/lifecycle-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/lifecycle-utils/-/lifecycle-utils-2.1.0.tgz", - "integrity": "sha512-AnrXnE2/OF9PHCyFg0RSqsnQTzV991XaZA/buhFDoc58xU7rhSCDgCz/09Lqpsn4MpoPHt7TRAXV1kWZypFVsA==", - "license": "MIT" - }, - "node_modules/ipull/node_modules/parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipull/node_modules/pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", - "license": "MIT", - "dependencies": { - "parse-ms": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipull/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/ipull/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/ipull/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.4", - "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "license": "MIT" - }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-3.0.1.tgz", @@ -7931,6 +6300,7 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8014,6 +6384,7 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/jackspeak": { @@ -8088,15 +6459,6 @@ "node": ">=6" } }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", - "peer": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", @@ -8121,7 +6483,9 @@ "version": "5.0.1", "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC" + "dev": true, + "license": "ISC", + "optional": true }, "node_modules/json5": { "version": "2.2.3", @@ -8273,12 +6637,6 @@ "immediate": "~3.0.5" } }, - "node_modules/lifecycle-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/lifecycle-utils/-/lifecycle-utils-3.0.1.tgz", - "integrity": "sha512-Qt/Jl5dsNIsyCAZsHB6x3mbwHFn0HJbdmvF49sVX/bHgX2cW7+G+U+I67Zw+TPM1Sr21Gb2nfJMd2g6iUcI1EQ==", - "license": "MIT" - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", @@ -8286,19 +6644,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -8369,27 +6714,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "license": "Apache-2.0" - }, - "node_modules/lowdb": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/lowdb/-/lowdb-7.0.1.tgz", - "integrity": "sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==", - "license": "MIT", - "dependencies": { - "steno": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -8446,7 +6770,9 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" }, @@ -8458,20 +6784,12 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, - "node_modules/memory-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/memory-stream/-/memory-stream-1.0.0.tgz", - "integrity": "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==", - "license": "MIT", - "dependencies": { - "readable-stream": "^3.4.0" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", @@ -8504,6 +6822,7 @@ "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8513,6 +6832,7 @@ "version": "2.1.35", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -8735,6 +7055,7 @@ "version": "1.0.4", "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -8811,12 +7132,6 @@ "license": "MIT", "optional": true }, - "node_modules/node-api-headers": { - "version": "1.7.0", - "resolved": "https://registry.npmmirror.com/node-api-headers/-/node-api-headers-1.7.0.tgz", - "integrity": "sha512-uJMGdkhVwu9+I3UsVvI3KW6ICAy/yDfsu5Br9rSnTtY3WpoaComXvKloiV5wtx0Md2rn0B9n29Ys2WMNwWxj9A==", - "license": "MIT" - }, "node_modules/node-api-version": { "version": "0.2.1", "resolved": "https://registry.npmmirror.com/node-api-version/-/node-api-version-0.2.1.tgz", @@ -8915,442 +7230,6 @@ "node": ">=18" } }, - "node_modules/node-llama-cpp": { - "version": "3.15.0", - "resolved": "https://registry.npmmirror.com/node-llama-cpp/-/node-llama-cpp-3.15.0.tgz", - "integrity": "sha512-xQKl+MvKiA5QNi/CTwqLKMos7hefhRVyzJuNIAEwl7zvOoF+gNMOXEsR4Ojwl7qvgpcjsVeGKWSK3Rb6zoUP1w==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@huggingface/jinja": "^0.5.3", - "async-retry": "^1.3.3", - "bytes": "^3.1.2", - "chalk": "^5.4.1", - "chmodrp": "^1.0.2", - "cmake-js": "^7.4.0", - "cross-spawn": "^7.0.6", - "env-var": "^7.5.0", - "filenamify": "^6.0.0", - "fs-extra": "^11.3.0", - "ignore": "^7.0.4", - "ipull": "^3.9.2", - "is-unicode-supported": "^2.1.0", - "lifecycle-utils": "^3.0.1", - "log-symbols": "^7.0.0", - "nanoid": "^5.1.5", - "node-addon-api": "^8.3.1", - "octokit": "^5.0.3", - "ora": "^8.2.0", - "pretty-ms": "^9.2.0", - "proper-lockfile": "^4.1.2", - "semver": "^7.7.1", - "simple-git": "^3.27.0", - "slice-ansi": "^7.1.0", - "stdout-update": "^4.0.1", - "strip-ansi": "^7.1.0", - "validate-npm-package-name": "^6.0.0", - "which": "^5.0.0", - "yargs": "^17.7.2" - }, - "bin": { - "nlc": "dist/cli/cli.js", - "node-llama-cpp": "dist/cli/cli.js" - }, - "engines": { - "node": ">=20.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/giladgd" - }, - "optionalDependencies": { - "@node-llama-cpp/linux-arm64": "3.15.0", - "@node-llama-cpp/linux-armv7l": "3.15.0", - "@node-llama-cpp/linux-x64": "3.15.0", - "@node-llama-cpp/linux-x64-cuda": "3.15.0", - "@node-llama-cpp/linux-x64-cuda-ext": "3.15.0", - "@node-llama-cpp/linux-x64-vulkan": "3.15.0", - "@node-llama-cpp/mac-arm64-metal": "3.15.0", - "@node-llama-cpp/mac-x64": "3.15.0", - "@node-llama-cpp/win-arm64": "3.15.0", - "@node-llama-cpp/win-x64": "3.15.0", - "@node-llama-cpp/win-x64-cuda": "3.15.0", - "@node-llama-cpp/win-x64-cuda-ext": "3.15.0", - "@node-llama-cpp/win-x64-vulkan": "3.15.0" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/node-llama-cpp/node_modules/@huggingface/jinja": { - "version": "0.5.3", - "resolved": "https://registry.npmmirror.com/@huggingface/jinja/-/jinja-0.5.3.tgz", - "integrity": "sha512-asqfZ4GQS0hD876Uw4qiUb7Tr/V5Q+JZuo2L+BtdrD4U40QU58nIRq3ZSgAzJgT874VLjhGVacaYfrdpXtEvtA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-llama-cpp/node_modules/@node-llama-cpp/linux-x64-cuda": { - "optional": true - }, - "node_modules/node-llama-cpp/node_modules/@node-llama-cpp/linux-x64-cuda-ext": { - "optional": true - }, - "node_modules/node-llama-cpp/node_modules/@node-llama-cpp/win-x64-cuda": { - "optional": true - }, - "node_modules/node-llama-cpp/node_modules/@node-llama-cpp/win-x64-cuda-ext": { - "optional": true - }, - "node_modules/node-llama-cpp/node_modules/@node-llama-cpp/win-x64-vulkan": { - "optional": true - }, - "node_modules/node-llama-cpp/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/node-llama-cpp/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/node-llama-cpp/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/node-llama-cpp/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" - }, - "node_modules/node-llama-cpp/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/node-llama-cpp/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-llama-cpp/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/node-llama-cpp/node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/nanoid": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.6.tgz", - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, - "node_modules/node-llama-cpp/node_modules/node-addon-api": { - "version": "8.5.0", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-8.5.0.tgz", - "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", - "license": "MIT", - "engines": { - "node": "^18 || ^20 || >= 21" - } - }, - "node_modules/node-llama-cpp/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/ora": { - "version": "8.2.0", - "resolved": "https://registry.npmmirror.com/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/ora/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", - "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-llama-cpp/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/node-llama-cpp/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-llama-cpp/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/node-llama-cpp/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/node-llama-cpp/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz", @@ -9403,6 +7282,7 @@ "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "deprecated": "This package is no longer supported.", + "dev": true, "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", @@ -9418,33 +7298,13 @@ "version": "1.1.1", "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "license": "MIT", + "optional": true, "engines": { "node": ">= 0.4" } }, - "node_modules/octokit": { - "version": "5.0.5", - "resolved": "https://registry.npmmirror.com/octokit/-/octokit-5.0.5.tgz", - "integrity": "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==", - "license": "MIT", - "dependencies": { - "@octokit/app": "^16.1.2", - "@octokit/core": "^7.0.6", - "@octokit/oauth-app": "^8.0.3", - "@octokit/plugin-paginate-graphql": "^6.0.0", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/plugin-rest-endpoint-methods": "^17.0.0", - "@octokit/plugin-retry": "^8.0.3", - "@octokit/plugin-throttling": "^11.0.3", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "@octokit/webhooks": "^14.0.0" - }, - "engines": { - "node": ">= 20" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", @@ -9470,64 +7330,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/onnx-proto": { - "version": "4.0.4", - "resolved": "https://registry.npmmirror.com/onnx-proto/-/onnx-proto-4.0.4.tgz", - "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", - "license": "MIT", - "dependencies": { - "protobufjs": "^6.8.8" - } - }, - "node_modules/onnxruntime-common": { - "version": "1.14.0", - "resolved": "https://registry.npmmirror.com/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", - "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==", - "license": "MIT" - }, - "node_modules/onnxruntime-node": { - "version": "1.23.2", - "resolved": "https://registry.npmmirror.com/onnxruntime-node/-/onnxruntime-node-1.23.2.tgz", - "integrity": "sha512-OBTsG0W8ddBVOeVVVychpVBS87A9YV5sa2hJ6lc025T97Le+J4v++PwSC4XFs1C62SWyNdof0Mh4KvnZgtt4aw==", - "hasInstallScript": true, - "license": "MIT", - "os": [ - "win32", - "darwin", - "linux" - ], - "dependencies": { - "adm-zip": "^0.5.16", - "global-agent": "^3.0.0", - "onnxruntime-common": "1.23.2" - } - }, - "node_modules/onnxruntime-node/node_modules/onnxruntime-common": { - "version": "1.23.2", - "resolved": "https://registry.npmmirror.com/onnxruntime-common/-/onnxruntime-common-1.23.2.tgz", - "integrity": "sha512-5LFsC9Dukzp2WV6kNHYLNzp8sT6V02IubLCbzw2Xd6X5GOlr65gAX6xiJwyi2URJol/s71gaQLC5F2C25AAR2w==", - "license": "MIT" - }, - "node_modules/onnxruntime-web": { - "version": "1.14.0", - "resolved": "https://registry.npmmirror.com/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", - "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", - "license": "MIT", - "dependencies": { - "flatbuffers": "^1.12.0", - "guid-typescript": "^1.0.9", - "long": "^4.0.0", - "onnx-proto": "^4.0.4", - "onnxruntime-common": "~1.14.0", - "platform": "^1.3.6" - } - }, - "node_modules/onnxruntime-web/node_modules/flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmmirror.com/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==", - "license": "SEE LICENSE IN LICENSE.txt" - }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", @@ -9604,18 +7406,6 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "license": "(MIT AND Zlib)" }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -9630,6 +7420,7 @@ "version": "3.1.1", "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9702,12 +7493,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/platform": { - "version": "1.3.6", - "resolved": "https://registry.npmmirror.com/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "license": "MIT" - }, "node_modules/plist": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/plist/-/plist-3.1.0.tgz", @@ -9790,33 +7575,6 @@ "node": ">=10" } }, - "node_modules/pretty-bytes": { - "version": "6.1.1", - "resolved": "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz", - "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", - "license": "MIT", - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", - "license": "MIT", - "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/proc-log": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/proc-log/-/proc-log-5.0.0.tgz", @@ -9864,49 +7622,6 @@ "node": ">=10" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/protobufjs": { - "version": "6.11.4", - "resolved": "https://registry.npmmirror.com/protobufjs/-/protobufjs-6.11.4.tgz", - "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.3.tgz", @@ -10101,16 +7816,11 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10181,6 +7891,7 @@ "version": "0.12.0", "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -10207,7 +7918,9 @@ "version": "2.15.4", "resolved": "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, "license": "BSD-3-Clause", + "optional": true, "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", @@ -10351,13 +8064,17 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "license": "MIT" + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmmirror.com/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "type-fest": "^0.13.1" }, @@ -10372,7 +8089,9 @@ "version": "0.13.1", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, "license": "(MIT OR CC0-1.0)", + "optional": true, "engines": { "node": ">=10" }, @@ -10384,6 +8103,7 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, "license": "ISC" }, "node_modules/set-cookie-parser": { @@ -10447,6 +8167,7 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -10459,6 +8180,7 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10468,6 +8190,7 @@ "version": "3.0.7", "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, "license": "ISC" }, "node_modules/simple-concat": { @@ -10515,30 +8238,6 @@ "simple-concat": "^1.0.0" } }, - "node_modules/simple-git": { - "version": "3.30.0", - "resolved": "https://registry.npmmirror.com/simple-git/-/simple-git-3.30.0.tgz", - "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", - "license": "MIT", - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/git-js?sponsor=1" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -10558,12 +8257,6 @@ "integrity": "sha512-2NCmWxY7A9pYKGXNBfteo4hy14gWu47rg5692peVMst6lQLPKrVjhY+UTEsPI5ceFRJSl3gVgMYaUi/hKuaiKw==", "license": "ISC" }, - "node_modules/sleep-promise": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/sleep-promise/-/sleep-promise-9.1.0.tgz", - "integrity": "sha512-UHYzVpz9Xn8b+jikYSD6bqvf754xL2uBUzDFwiU6NcdZeifPr6UfgU43xpkPu67VMS88+TI2PSI7Eohgqf2fKA==", - "license": "MIT" - }, "node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -10656,7 +8349,9 @@ "version": "1.1.3", "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" + "dev": true, + "license": "BSD-3-Clause", + "optional": true }, "node_modules/ssri": { "version": "12.0.0", @@ -10681,118 +8376,6 @@ "node": ">= 6" } }, - "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stdout-update": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/stdout-update/-/stdout-update-4.0.1.tgz", - "integrity": "sha512-wiS21Jthlvl1to+oorePvcyrIkiG/6M3D3VTmDUlJm7Cy6SbFhKkAvX+YBuHLxck/tO3mrdpC/cNesigQc3+UQ==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^6.2.0", - "ansi-styles": "^6.2.1", - "string-width": "^7.1.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/stdout-update/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/stdout-update/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/stdout-update/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" - }, - "node_modules/stdout-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stdout-update/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/steno": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/steno/-/steno-4.0.2.tgz", - "integrity": "sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmmirror.com/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", @@ -10806,6 +8389,7 @@ "version": "4.2.3", "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -10836,6 +8420,7 @@ "version": "6.0.1", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10899,6 +8484,7 @@ "version": "7.2.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -10907,34 +8493,11 @@ "node": ">=8" } }, - "node_modules/table-layout": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/table-layout/-/table-layout-4.1.1.tgz", - "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", - "license": "MIT", - "peer": true, - "dependencies": { - "array-back": "^6.2.2", - "wordwrapjs": "^5.1.0" - }, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, "license": "ISC", "dependencies": { "chownr": "^2.0.0", @@ -10986,6 +8549,7 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -10998,6 +8562,7 @@ "version": "3.3.6", "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -11010,6 +8575,7 @@ "version": "5.0.0", "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "license": "ISC", "engines": { "node": ">=8" @@ -11019,6 +8585,7 @@ "version": "2.1.2", "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, "license": "MIT", "dependencies": { "minipass": "^3.0.0", @@ -11032,6 +8599,7 @@ "version": "3.3.6", "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -11044,6 +8612,7 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, "license": "ISC" }, "node_modules/temp-file": { @@ -11095,15 +8664,6 @@ "node": ">= 10.0.0" } }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, "node_modules/text-segmentation": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz", @@ -11201,15 +8761,6 @@ "node": ">=8.0" } }, - "node_modules/toad-cache": { - "version": "3.7.0", - "resolved": "https://registry.npmmirror.com/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -11254,7 +8805,7 @@ "version": "5.9.3", "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -11264,16 +8815,6 @@ "node": ">=14.17" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/uint8array-extras": { "version": "1.5.0", "resolved": "https://registry.npmmirror.com/uint8array-extras/-/uint8array-extras-1.5.0.tgz", @@ -11290,6 +8831,7 @@ "version": "7.16.0", "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, "license": "MIT" }, "node_modules/unique-filename": { @@ -11318,18 +8860,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/universal-github-app-jwt": { - "version": "2.2.2", - "resolved": "https://registry.npmmirror.com/universal-github-app-jwt/-/universal-github-app-jwt-2.2.2.tgz", - "integrity": "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==", - "license": "MIT" - }, - "node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", - "license": "ISC" - }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", @@ -11381,12 +8911,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "license": "MIT" - }, "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", @@ -11409,15 +8933,6 @@ "base64-arraybuffer": "^1.0.2" } }, - "node_modules/validate-npm-package-name": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/verror": { "version": "1.10.1", "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.1.tgz", @@ -11591,6 +9106,7 @@ "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -11606,25 +9122,17 @@ "version": "1.1.5", "resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/wordwrapjs": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/wordwrapjs/-/wordwrapjs-5.1.1.tgz", - "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.17" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -11677,6 +9185,7 @@ "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -11693,6 +9202,7 @@ "version": "17.7.2", "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -11711,6 +9221,7 @@ "version": "21.1.1", "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -11740,18 +9251,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yoctocolors": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.2.tgz", - "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zip-stream": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz", diff --git a/package.json b/package.json index 48ae0a5..5b102ed 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "weflow", - "version": "1.0.4", - "description": "WeFlow - 微信聊天记录查看工具", + "version": "1.1.0", + "description": "WeFlow", "main": "dist-electron/main.js", "author": "cc", "scripts": { - "postinstall": "electron-rebuild -f -w @lancedb/lancedb,onnxruntime-node", - "rebuild": "electron-rebuild -f -w @lancedb/lancedb,onnxruntime-node", + "postinstall": "echo 'No native modules to rebuild'", + "rebuild": "echo 'No native modules to rebuild'", "dev": "vite", "build": "vue-tsc && vite build && electron-builder", "preview": "vite preview", @@ -14,8 +14,6 @@ "electron:build": "npm run build" }, "dependencies": { - "@lancedb/lancedb": "^0.23.1-beta.1", - "@lancedb/lancedb-win32-x64-msvc": "^0.22.3", "better-sqlite3": "^12.5.0", "echarts": "^5.5.1", "echarts-for-react": "^3.0.2", @@ -27,7 +25,6 @@ "jszip": "^3.10.1", "koffi": "^2.9.0", "lucide-react": "^0.562.0", - "onnxruntime-node": "^1.16.1", "react": "^19.2.3", "react-dom": "^19.2.3", "react-router-dom": "^7.1.1", @@ -51,10 +48,6 @@ }, "build": { "appId": "com.WeFlow.app", - "asarUnpack": [ - "**/node_modules/@lancedb/lancedb/**/*", - "**/node_modules/onnxruntime-node/**/*" - ], "publish": { "provider": "github", "releaseType": "release" diff --git a/resources/wcdb_api.dll b/resources/wcdb_api.dll index 70e4eb7aa833055fc77212badfe5c5ac8866a3bc..3428494ea1254a0ac45832262aff6b015e9a56b2 100644 GIT binary patch literal 585216 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

7?d4=g> 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%0DUG$o%Pudz6o8++T|;n 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%0AcHb5gBF^0v@+nJ&j-F* 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 z756≫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Ž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

U0tW9;dYu243_`JV~^1*@6?bn3ag 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

<@%0?E>Q48}tGq(@EGL*mv~~><`?( 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∈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 N=} /> } /> } /> - } /> + } /> + } /> } /> } /> } /> diff --git a/src/components/Avatar.scss b/src/components/Avatar.scss new file mode 100644 index 0000000..34b11b2 --- /dev/null +++ b/src/components/Avatar.scss @@ -0,0 +1,79 @@ +.avatar-component { + position: relative; + display: inline-block; + overflow: hidden; + background-color: var(--bg-tertiary, #f5f5f5); + flex-shrink: 0; + border-radius: 4px; + /* Default radius */ + + &.circle { + border-radius: 50%; + } + + &.rounded { + border-radius: 6px; + } + + /* Image styling */ + img.avatar-image { + width: 100%; + height: 100%; + object-fit: cover; + opacity: 0; + transition: opacity 0.3s ease-in-out; + border-radius: inherit; + + &.loaded { + opacity: 1; + } + + &.instant { + transition: none !important; + opacity: 1 !important; + } + } + + /* Placeholder/Letter styling */ + .avatar-placeholder { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-weight: 500; + color: var(--text-secondary, #666); + background-color: var(--bg-tertiary, #e0e0e0); + font-size: 1.2em; + text-transform: uppercase; + user-select: none; + border-radius: inherit; + } + + /* Loading Skeleton */ + .avatar-skeleton { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(90deg, + var(--bg-tertiary, #f0f0f0) 25%, + var(--bg-secondary, #e0e0e0) 50%, + var(--bg-tertiary, #f0f0f0) 75%); + background-size: 200% 100%; + animation: shimmer 1.5s infinite; + z-index: 1; + border-radius: inherit; + } + + @keyframes shimmer { + 0% { + background-position: 200% 0; + } + + 100% { + background-position: -200% 0; + } + } +} \ No newline at end of file diff --git a/src/components/Avatar.tsx b/src/components/Avatar.tsx new file mode 100644 index 0000000..7406bd5 --- /dev/null +++ b/src/components/Avatar.tsx @@ -0,0 +1,129 @@ +import React, { useState, useEffect, useRef, useMemo } from 'react' +import { User } from 'lucide-react' +import { avatarLoadQueue } from '../utils/AvatarLoadQueue' +import './Avatar.scss' + +// 全局缓存已成功加载过的头像 URL,用于控制后续是否显示动画 +const loadedAvatarCache = new Set() + +interface AvatarProps { + src?: string + name?: string + size?: number | string + shape?: 'circle' | 'square' | 'rounded' + className?: string + lazy?: boolean + onClick?: () => void +} + +export const Avatar = React.memo(function Avatar({ + src, + name, + size = 48, + shape = 'rounded', + className = '', + lazy = true, + onClick +}: AvatarProps) { + // 如果 URL 已在缓存中,则直接标记为已加载,不显示骨架屏和淡入动画 + const isCached = useMemo(() => src ? loadedAvatarCache.has(src) : false, [src]) + const [imageLoaded, setImageLoaded] = useState(isCached) + const [imageError, setImageError] = useState(false) + const [shouldLoad, setShouldLoad] = useState(!lazy || isCached) + const [isInQueue, setIsInQueue] = useState(false) + const imgRef = useRef(null) + const containerRef = useRef(null) + + const getAvatarLetter = (): string => { + if (!name) return '?' + const chars = [...name] + return chars[0] || '?' + } + + // Intersection Observer for lazy loading + useEffect(() => { + if (!lazy || shouldLoad || isInQueue || !src || !containerRef.current || isCached) return + + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting && !isInQueue) { + setIsInQueue(true) + avatarLoadQueue.enqueue(src).then(() => { + setShouldLoad(true) + }).catch(() => { + // 加载失败不要立刻显示错误,让浏览器渲染去报错 + setShouldLoad(true) + }).finally(() => { + setIsInQueue(false) + }) + observer.disconnect() + } + }) + }, + { rootMargin: '100px' } + ) + + observer.observe(containerRef.current) + + return () => observer.disconnect() + }, [src, lazy, shouldLoad, isInQueue, isCached]) + + // Reset state when src changes + useEffect(() => { + const cached = src ? loadedAvatarCache.has(src) : false + setImageLoaded(cached) + setImageError(false) + if (lazy && !cached) { + setShouldLoad(false) + setIsInQueue(false) + } else { + setShouldLoad(true) + } + }, [src, lazy]) + + // Check if image is already cached/loaded + useEffect(() => { + if (shouldLoad && imgRef.current?.complete && imgRef.current?.naturalWidth > 0) { + setImageLoaded(true) + } + }, [src, shouldLoad]) + + const style = { + width: typeof size === 'number' ? `${size}px` : size, + height: typeof size === 'number' ? `${size}px` : size, + } + + const hasValidUrl = !!src && !imageError && shouldLoad + + return ( +

+ {hasValidUrl ? ( + <> + {!imageLoaded &&
} + {name { + if (src) loadedAvatarCache.add(src) + setImageLoaded(true) + }} + onError={() => setImageError(true)} + loading={lazy ? "lazy" : "eager"} + /> + + ) : ( +
+ {name ? {getAvatarLetter()} : } +
+ )} +
+ ) +}) diff --git a/src/pages/AnalyticsPage.tsx b/src/pages/AnalyticsPage.tsx index 7c6cf45..2bf1868 100644 --- a/src/pages/AnalyticsPage.tsx +++ b/src/pages/AnalyticsPage.tsx @@ -1,10 +1,12 @@ import { useState, useEffect } from 'react' +import { useLocation } from 'react-router-dom' import { Users, Clock, MessageSquare, Send, Inbox, Calendar, Loader2, RefreshCw, User, Medal } from 'lucide-react' import ReactECharts from 'echarts-for-react' import { useAnalyticsStore } from '../stores/analyticsStore' import { useThemeStore } from '../stores/themeStore' import './AnalyticsPage.scss' import './DataManagementPage.scss' +import { Avatar } from '../components/Avatar' function AnalyticsPage() { const [isLoading, setIsLoading] = useState(false) @@ -28,7 +30,7 @@ function AnalyticsPage() { try { setLoadingStatus('正在统计消息数据...') - const statsResult = await window.electronAPI.analytics.getOverallStatistics() + const statsResult = await window.electronAPI.analytics.getOverallStatistics(forceRefresh) if (statsResult.success && statsResult.data) { setStatistics(statsResult.data) } else { @@ -55,7 +57,12 @@ function AnalyticsPage() { } } - useEffect(() => { loadData() }, []) + const location = useLocation() + + useEffect(() => { + const force = location.state?.forceRefresh === true + loadData(force) + }, [location.state]) const handleRefresh = () => loadData(true) @@ -289,7 +296,7 @@ function AnalyticsPage() {
{index + 1}
- {contact.avatarUrl ? :
} + {index < 3 &&
}
diff --git a/src/pages/AnalyticsWelcomePage.scss b/src/pages/AnalyticsWelcomePage.scss new file mode 100644 index 0000000..7a61efb --- /dev/null +++ b/src/pages/AnalyticsWelcomePage.scss @@ -0,0 +1,119 @@ +.analytics-welcome-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + padding: 40px; + background: var(--bg-primary); + color: var(--text-primary); + animation: fadeIn 0.4s ease-out; + + .welcome-content { + text-align: center; + max-width: 600px; + + .icon-wrapper { + width: 80px; + height: 80px; + margin: 0 auto 24px; + background: rgba(7, 193, 96, 0.1); + border-radius: 20px; + display: flex; + align-items: center; + justify-content: center; + color: #07c160; + + svg { + width: 40px; + height: 40px; + } + } + + h1 { + font-size: 28px; + margin-bottom: 12px; + font-weight: 600; + } + + p { + color: var(--text-secondary); + margin-bottom: 40px; + font-size: 16px; + line-height: 1.6; + } + + .action-cards { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; + margin-top: 20px; + + button { + display: flex; + flex-direction: column; + align-items: center; + padding: 30px 20px; + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: 12px; + cursor: pointer; + transition: all 0.2s ease; + text-align: center; + + &:hover:not(:disabled) { + transform: translateY(-2px); + border-color: #07c160; + box-shadow: 0 4px 12px rgba(7, 193, 96, 0.1); + + .card-icon { + color: #07c160; + background: rgba(7, 193, 96, 0.1); + } + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + filter: grayscale(100%); + } + + .card-icon { + width: 50px; + height: 50px; + border-radius: 12px; + background: var(--bg-tertiary); + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 16px; + color: var(--text-secondary); + transition: all 0.2s ease; + } + + h3 { + font-size: 18px; + margin-bottom: 8px; + color: var(--text-primary); + } + + span { + font-size: 13px; + color: var(--text-tertiary); + } + } + } + } +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} \ No newline at end of file diff --git a/src/pages/AnalyticsWelcomePage.tsx b/src/pages/AnalyticsWelcomePage.tsx new file mode 100644 index 0000000..ea85aff --- /dev/null +++ b/src/pages/AnalyticsWelcomePage.tsx @@ -0,0 +1,63 @@ +import { useNavigate } from 'react-router-dom' +import { BarChart2, History, RefreshCcw } from 'lucide-react' +import { useAnalyticsStore } from '../stores/analyticsStore' +import './AnalyticsWelcomePage.scss' + +function AnalyticsWelcomePage() { + const navigate = useNavigate() + // 检查是否有任何缓存数据加载或基本的存储状态表明它已准备好。 + // 实际上,如果 store 没有持久化,`isLoaded` 可能会在应用刷新时重置。 + // 如果用户点击“加载缓存”但缓存为空,AnalyticsPage 的逻辑(loadData 不带 force)将尝试从后端缓存加载。 + // 如果后端缓存也为空,则会重新计算。 + + // 我们也可以检查 `lastLoadTime` 来显示“上次更新:xxx”(如果已持久化)。 + const { lastLoadTime } = useAnalyticsStore() + + const handleLoadCache = () => { + navigate('/analytics/view') + } + + const handleNewAnalysis = () => { + navigate('/analytics/view', { state: { forceRefresh: true } }) + } + + const formatLastTime = (ts: number | null) => { + if (!ts) return '无记录' + return new Date(ts).toLocaleString() + } + + return ( +
+
+
+ +
+

私聊数据分析

+

+ WeFlow 可以分析您的聊天记录,生成详细的统计报表。
+ 您可以选择加载上次的分析结果(速度快),或者开始新的分析(数据最新)。 +

+ +
+ + + +
+
+
+ ) +} + +export default AnalyticsWelcomePage diff --git a/src/pages/ChatPage.scss b/src/pages/ChatPage.scss index e53857c..2c7d462 100644 --- a/src/pages/ChatPage.scss +++ b/src/pages/ChatPage.scss @@ -1426,10 +1426,12 @@ height: 6px; opacity: 0.5; } + 50% { height: 16px; opacity: 1; } + 100% { height: 6px; opacity: 0.5; @@ -1875,4 +1877,4 @@ opacity: 1; transform: translateX(0); } -} +} \ No newline at end of file diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index 767cf6d..03f8c0a 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -1,5 +1,6 @@ import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react' import { Search, MessageSquare, AlertCircle, Loader2, RefreshCw, X, ChevronDown, Info, Calendar, Database, Hash, Play, Pause, Image as ImageIcon } from 'lucide-react' +import { createPortal } from 'react-dom' import { useChatStore } from '../stores/chatStore' import type { ChatSession, Message } from '../types/models' import { getEmojiPath } from 'wechat-emojis' @@ -23,65 +24,10 @@ interface SessionDetail { messageTables: { dbName: string; tableName: string; count: number }[] } -// 全局头像加载队列管理器(限制并发,避免卡顿) -class AvatarLoadQueue { - private queue: Array<{ url: string; resolve: () => void; reject: () => void }> = [] - private loading = new Set() - private readonly maxConcurrent = 1 // 一次只加载1个头像,避免卡顿 - private readonly delayBetweenBatches = 100 // 批次间延迟100ms,给UI喘息时间 - - async enqueue(url: string): Promise { - // 如果已经在加载中,直接返回 - if (this.loading.has(url)) { - return Promise.resolve() - } - - return new Promise((resolve, reject) => { - this.queue.push({ url, resolve, reject }) - this.processQueue() - }) - } - - private async processQueue() { - // 如果已达到最大并发数,等待 - if (this.loading.size >= this.maxConcurrent) { - return - } - - // 如果队列为空,返回 - if (this.queue.length === 0) { - return - } - - // 取出一个任务 - const task = this.queue.shift() - if (!task) return - - this.loading.add(task.url) - - // 加载图片 - const img = new Image() - img.onload = () => { - this.loading.delete(task.url) - task.resolve() - // 延迟一下再处理下一个,避免一次性加载太多 - setTimeout(() => this.processQueue(), this.delayBetweenBatches) - } - img.onerror = () => { - this.loading.delete(task.url) - task.reject() - setTimeout(() => this.processQueue(), this.delayBetweenBatches) - } - img.src = task.url - } - - clear() { - this.queue = [] - this.loading.clear() - } -} - -const avatarLoadQueue = new AvatarLoadQueue() +// 全局头像加载队列管理器已移至 src/utils/AvatarLoadQueue.ts +// 全局头像加载队列管理器已移至 src/utils/AvatarLoadQueue.ts +import { avatarLoadQueue } from '../utils/AvatarLoadQueue' +import { Avatar } from '../components/Avatar' // 头像组件 - 支持骨架屏加载和懒加载(优化:限制并发,使用 memo 避免不必要的重渲染) // 会话项组件(使用 memo 优化,避免不必要的重渲染) @@ -107,7 +53,12 @@ const SessionItem = React.memo(function SessionItem({ className={`session-item ${isActive ? 'active' : ''}`} onClick={() => onSelect(session)} > - +
{session.displayName || session.username} @@ -138,109 +89,7 @@ const SessionItem = React.memo(function SessionItem({ ) }) -const SessionAvatar = React.memo(function SessionAvatar({ session, size = 48 }: { session: ChatSession; size?: number }) { - const [imageLoaded, setImageLoaded] = useState(false) - const [imageError, setImageError] = useState(false) - const [shouldLoad, setShouldLoad] = useState(false) - const [isInQueue, setIsInQueue] = useState(false) - const imgRef = useRef(null) - const containerRef = useRef(null) - const isGroup = session.username.includes('@chatroom') - const getAvatarLetter = (): string => { - const name = session.displayName || session.username - if (!name) return '?' - const chars = [...name] - return chars[0] || '?' - } - - // 使用 Intersection Observer 实现懒加载(优化性能) - useEffect(() => { - if (!containerRef.current || shouldLoad || isInQueue) return - if (!session.avatarUrl) { - // 没有头像URL,不需要加载 - return - } - - const observer = new IntersectionObserver( - (entries) => { - entries.forEach((entry) => { - if (entry.isIntersecting && !isInQueue) { - // 加入加载队列,而不是立即加载 - setIsInQueue(true) - avatarLoadQueue.enqueue(session.avatarUrl!).then(() => { - setShouldLoad(true) - }).catch(() => { - setImageError(true) - }).finally(() => { - setIsInQueue(false) - }) - observer.disconnect() - } - }) - }, - { - rootMargin: '50px' // 减少预加载距离,只提前50px - } - ) - - observer.observe(containerRef.current) - - return () => { - observer.disconnect() - } - }, [session.avatarUrl, shouldLoad, isInQueue]) - - // 当 avatarUrl 变化时重置状态 - useEffect(() => { - setImageLoaded(false) - setImageError(false) - setShouldLoad(false) - setIsInQueue(false) - }, [session.avatarUrl]) - - // 检查图片是否已经从缓存加载完成 - useEffect(() => { - if (shouldLoad && imgRef.current?.complete && imgRef.current?.naturalWidth > 0) { - setImageLoaded(true) - } - }, [session.avatarUrl, shouldLoad]) - - const hasValidUrl = session.avatarUrl && !imageError && shouldLoad - - return ( -
- {hasValidUrl ? ( - <> - {!imageLoaded &&
} - setImageLoaded(true)} - onError={() => setImageError(true)} - loading="lazy" - /> - - ) : ( - {getAvatarLetter()} - )} -
- ) -}, (prevProps, nextProps) => { - // 自定义比较函数,只在关键属性变化时重渲染 - return ( - prevProps.session.username === nextProps.session.username && - prevProps.session.displayName === nextProps.session.displayName && - prevProps.session.avatarUrl === nextProps.session.avatarUrl && - prevProps.size === nextProps.size - ) -}) function ChatPage(_props: ChatPageProps) { const { @@ -380,10 +229,8 @@ function ChatPage(_props: ChatPageProps) { // 确保 nextSessions 也是数组 if (Array.isArray(nextSessions)) { setSessions(nextSessions) - // 延迟启动联系人信息加载,确保UI先渲染完成 - setTimeout(() => { - void enrichSessionsContactInfo(nextSessions) - }, 500) + // 立即启动联系人信息加载,不再延迟 500ms + void enrichSessionsContactInfo(nextSessions) } else { console.error('mergeSessions returned non-array:', nextSessions) setSessions(sessionsArray) @@ -420,8 +267,7 @@ function ChatPage(_props: ChatPageProps) { console.log(`[性能监控] 开始加载联系人信息,会话数: ${sessions.length}`) const totalStart = performance.now() - // 延迟启动,等待UI渲染完成 - await new Promise(resolve => setTimeout(resolve, 500)) + // 移除初始 500ms 延迟,让后台加载与 UI 渲染并行 // 检查是否被取消 if (enrichCancelledRef.current) { @@ -430,8 +276,8 @@ function ChatPage(_props: ChatPageProps) { } try { - // 找出需要加载联系人信息的会话(没有缓存的) - const needEnrich = sessions.filter(s => !s.avatarUrl && (!s.displayName || s.displayName === s.username)) + // 找出需要加载联系人信息的会话(没有头像或者没有显示名称的) + const needEnrich = sessions.filter(s => !s.avatarUrl || !s.displayName || s.displayName === s.username) if (needEnrich.length === 0) { console.log('[性能监控] 所有联系人信息已缓存,跳过加载') isEnrichingRef.current = false @@ -584,9 +430,15 @@ function ChatPage(_props: ChatPageProps) { } if (result.success && result.contacts) { - // 将更新加入队列,而不是立即更新 + // 将更新加入队列,用于侧边栏更新 for (const [username, contact] of Object.entries(result.contacts)) { contactUpdateQueueRef.current.set(username, contact) + + // 【核心优化】同步更新全局发送者头像缓存,供 MessageBubble 使用 + senderAvatarCache.set(username, { + avatarUrl: contact.avatarUrl, + displayName: contact.displayName + }) } // 触发批量更新 flushContactUpdates() @@ -660,6 +512,31 @@ function ChatPage(_props: ChatPageProps) { if (result.success && result.messages) { if (offset === 0) { setMessages(result.messages) + + // 预取发送者信息:在关闭加载遮罩前处理 + const unreadCount = session?.unreadCount ?? 0 + const isGroup = sessionId.includes('@chatroom') + if (isGroup && result.messages.length > 0) { + const unknownSenders = [...new Set(result.messages + .filter(m => m.isSend !== 1 && m.senderUsername && !senderAvatarCache.has(m.senderUsername)) + .map(m => m.senderUsername as string) + )] + if (unknownSenders.length > 0) { + console.log(`[性能监控] 预取消息发送者信息: ${unknownSenders.length} 个`) + // 在批量请求前,先将这些发送者标记为加载中,防止 MessageBubble 触发重复请求 + const batchPromise = loadContactInfoBatch(unknownSenders) + unknownSenders.forEach(username => { + if (!senderAvatarLoading.has(username)) { + senderAvatarLoading.set(username, batchPromise.then(() => senderAvatarCache.get(username) || null)) + } + }) + // 确保在请求完成后清理 loading 状态 + batchPromise.finally(() => { + unknownSenders.forEach(username => senderAvatarLoading.delete(username)) + }) + } + } + // 首次加载滚动到底部 requestAnimationFrame(() => { if (messageListRef.current) { @@ -668,6 +545,27 @@ function ChatPage(_props: ChatPageProps) { }) } else { appendMessages(result.messages, true) + + // 加载更多也同样处理发送者信息预取 + const isGroup = sessionId.includes('@chatroom') + if (isGroup) { + const unknownSenders = [...new Set(result.messages + .filter(m => m.isSend !== 1 && m.senderUsername && !senderAvatarCache.has(m.senderUsername)) + .map(m => m.senderUsername as string) + )] + if (unknownSenders.length > 0) { + const batchPromise = loadContactInfoBatch(unknownSenders) + unknownSenders.forEach(username => { + if (!senderAvatarLoading.has(username)) { + senderAvatarLoading.set(username, batchPromise.then(() => senderAvatarCache.get(username) || null)) + } + }) + batchPromise.finally(() => { + unknownSenders.forEach(username => senderAvatarLoading.delete(username)) + }) + } + } + // 加载更多后保持位置:让之前的第一条消息保持在原来的视觉位置 if (firstMsgEl && listEl) { requestAnimationFrame(() => { @@ -1101,8 +999,10 @@ function ChatPage(_props: ChatPageProps) {
)} + {/* ... (previous content) ... */} {isLoadingSessions ? (
+ {/* ... (skeleton items) ... */} {[1, 2, 3, 4, 5].map(i => (
@@ -1118,12 +1018,10 @@ function ChatPage(_props: ChatPageProps) { className="session-list" ref={sessionListRef} onScroll={() => { - // 标记正在滚动,暂停联系人信息加载 isScrollingRef.current = true if (sessionScrollTimeoutRef.current) { clearTimeout(sessionScrollTimeoutRef.current) } - // 滚动结束后200ms才认为滚动停止 sessionScrollTimeoutRef.current = window.setTimeout(() => { isScrollingRef.current = false sessionScrollTimeoutRef.current = null @@ -1147,6 +1045,8 @@ function ChatPage(_props: ChatPageProps) {

请先在数据管理页面解密数据库

)} + +
{/* 拖动调节条 */} @@ -1157,7 +1057,12 @@ function ChatPage(_props: ChatPageProps) { {currentSession ? ( <>
- +

{currentSession.displayName || currentSession.username}

{isGroupChat(currentSession.username) && ( @@ -1767,13 +1672,14 @@ function MessageBubble({ message, session, showTime, myAvatarUrl, isGroupChat }: )}
- {showImagePreview && ( + {showImagePreview && createPortal(
setShowImagePreview(false)}> 图片预览 e.stopPropagation()} /> -
+
, + document.body )} ) @@ -1920,11 +1826,15 @@ function MessageBubble({ message, session, showTime, myAvatarUrl, isGroupChat }: )}
- {avatarUrl ? ( - - ) : ( - {avatarLetter} - )} +
{/* 群聊中显示发送者名称 */} diff --git a/src/pages/GroupAnalyticsPage.tsx b/src/pages/GroupAnalyticsPage.tsx index 846b6e6..cd4d973 100644 --- a/src/pages/GroupAnalyticsPage.tsx +++ b/src/pages/GroupAnalyticsPage.tsx @@ -1,5 +1,6 @@ import { useState, useEffect, useRef } from 'react' import { Users, BarChart3, Clock, Image, Loader2, RefreshCw, User, Medal, Search, X, ChevronLeft, Copy, Check } from 'lucide-react' +import { Avatar } from '../components/Avatar' import ReactECharts from 'echarts-for-react' import DateRangePicker from '../components/DateRangePicker' import './GroupAnalyticsPage.scss' @@ -177,7 +178,7 @@ function GroupAnalyticsPage() { const getMediaOption = () => { if (!mediaStats || mediaStats.typeCounts.length === 0) return {} - + // 定义颜色映射 const colorMap: Record = { 1: '#3b82f6', // 文本 - 蓝色 @@ -188,13 +189,13 @@ function GroupAnalyticsPage() { 49: '#14b8a6', // 链接/文件 - 青色 [-1]: '#6b7280', // 其他 - 灰色 } - + const data = mediaStats.typeCounts.map(item => ({ name: item.name, value: item.count, itemStyle: { color: colorMap[item.type] || '#6b7280' } })) - + return { tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' }, series: [{ @@ -202,8 +203,8 @@ function GroupAnalyticsPage() { radius: ['40%', '70%'], center: ['50%', '50%'], itemStyle: { borderRadius: 8, borderColor: 'rgba(255,255,255,0.1)', borderWidth: 2 }, - label: { - show: true, + label: { + show: true, formatter: (params: { name: string; percent: number }) => { // 只显示占比大于3%的标签 return params.percent > 3 ? `${params.name}\n${params.percent.toFixed(1)}%` : '' @@ -256,11 +257,7 @@ function GroupAnalyticsPage() {
- {selectedMember.avatarUrl ? ( - - ) : ( -
- )} +

{selectedMember.displayName}

@@ -334,7 +331,7 @@ function GroupAnalyticsPage() { onClick={() => handleGroupSelect(group)} >
- {group.avatarUrl ? :
} +
{group.displayName} @@ -352,7 +349,7 @@ function GroupAnalyticsPage() {
- {selectedGroup?.avatarUrl ? :
} +

{selectedGroup?.displayName}

{selectedGroup?.memberCount} 位成员

@@ -424,7 +421,7 @@ function GroupAnalyticsPage() { {members.map(member => (
handleMemberClick(member)}>
- {member.avatarUrl ? :
} +
{member.displayName}
@@ -437,7 +434,7 @@ function GroupAnalyticsPage() {
{index + 1}
- {item.member.avatarUrl ? :
} + {index < 3 &&
}
diff --git a/src/pages/SettingsPage.tsx b/src/pages/SettingsPage.tsx index 2f80c91..989522f 100644 --- a/src/pages/SettingsPage.tsx +++ b/src/pages/SettingsPage.tsx @@ -484,6 +484,7 @@ function SettingsPage() { {isFetchingImageKey ? '获取中...' : '自动获取图片密钥'} {imageKeyStatus &&
{imageKeyStatus}
} + {isFetchingImageKey &&
正在扫描内存,请稍候...
}
diff --git a/src/pages/WelcomePage.tsx b/src/pages/WelcomePage.tsx index c346569..f728565 100644 --- a/src/pages/WelcomePage.tsx +++ b/src/pages/WelcomePage.tsx @@ -506,7 +506,7 @@ function WelcomePage({ standalone = false }: WelcomePageProps) { {dbKeyStatus &&
{dbKeyStatus}
}
获取密钥会自动识别最近登录的账号
-
如果获取秘钥失败 请在微信打开后等待10秒后再登录
+
点击自动获取后微信将重新启动,当页面提示可以登录微信了再点击登录
)} @@ -533,6 +533,7 @@ function WelcomePage({ standalone = false }: WelcomePageProps) { {imageKeyStatus &&
{imageKeyStatus}
}
如获取失败,请先打开朋友圈图片再重试
+ {isFetchingImageKey &&
正在扫描内存,请稍候...
}
)} diff --git a/src/stores/analyticsStore.ts b/src/stores/analyticsStore.ts index 98ae4a1..7cc9559 100644 --- a/src/stores/analyticsStore.ts +++ b/src/stores/analyticsStore.ts @@ -1,4 +1,5 @@ import { create } from 'zustand' +import { persist } from 'zustand/middleware' interface ChatStatistics { totalMessages: number @@ -36,11 +37,11 @@ interface AnalyticsState { statistics: ChatStatistics | null rankings: ContactRanking[] timeDistribution: TimeDistribution | null - + // 状态 isLoaded: boolean lastLoadTime: number | null - + // Actions setStatistics: (data: ChatStatistics) => void setRankings: (data: ContactRanking[]) => void @@ -49,22 +50,29 @@ interface AnalyticsState { clearCache: () => void } -export const useAnalyticsStore = create((set) => ({ - statistics: null, - rankings: [], - timeDistribution: null, - isLoaded: false, - lastLoadTime: null, +export const useAnalyticsStore = create()( + persist( + (set) => ({ + statistics: null, + rankings: [], + timeDistribution: null, + isLoaded: false, + lastLoadTime: null, - setStatistics: (data) => set({ statistics: data }), - setRankings: (data) => set({ rankings: data }), - setTimeDistribution: (data) => set({ timeDistribution: data }), - markLoaded: () => set({ isLoaded: true, lastLoadTime: Date.now() }), - clearCache: () => set({ - statistics: null, - rankings: [], - timeDistribution: null, - isLoaded: false, - lastLoadTime: null - }), -})) + setStatistics: (data) => set({ statistics: data }), + setRankings: (data) => set({ rankings: data }), + setTimeDistribution: (data) => set({ timeDistribution: data }), + markLoaded: () => set({ isLoaded: true, lastLoadTime: Date.now() }), + clearCache: () => set({ + statistics: null, + rankings: [], + timeDistribution: null, + isLoaded: false, + lastLoadTime: null + }), + }), + { + name: 'analytics-storage', + } + ) +) diff --git a/src/types/electron.d.ts b/src/types/electron.d.ts index 11c2a41..d50e4b5 100644 --- a/src/types/electron.d.ts +++ b/src/types/electron.d.ts @@ -45,6 +45,7 @@ export interface ElectronAPI { testConnection: (dbPath: string, hexKey: string, wxid: string) => Promise<{ success: boolean; error?: string; sessionCount?: number }> open: (dbPath: string, hexKey: string, wxid: string) => Promise close: () => Promise + } key: { autoGetDbKey: () => Promise<{ success: boolean; key?: string; error?: string; logs?: string[] }> @@ -104,7 +105,7 @@ export interface ElectronAPI { onCacheResolved: (callback: (payload: { cacheKey: string; imageMd5?: string; imageDatName?: string; localPath: string }) => void) => () => void } analytics: { - getOverallStatistics: () => Promise<{ + getOverallStatistics: (force?: boolean) => Promise<{ success: boolean data?: { totalMessages: number diff --git a/src/utils/AvatarLoadQueue.ts b/src/utils/AvatarLoadQueue.ts new file mode 100644 index 0000000..85e297b --- /dev/null +++ b/src/utils/AvatarLoadQueue.ts @@ -0,0 +1,74 @@ + +// 全局头像加载队列管理器(限制并发,避免卡顿) +export class AvatarLoadQueue { + private queue: Array<{ url: string; resolve: () => void; reject: (error: Error) => void }> = [] + private loading = new Map>() + private activeCount = 0 + private readonly maxConcurrent = 3 + private readonly delayBetweenBatches = 10 + + private static instance: AvatarLoadQueue + + public static getInstance(): AvatarLoadQueue { + if (!AvatarLoadQueue.instance) { + AvatarLoadQueue.instance = new AvatarLoadQueue() + } + return AvatarLoadQueue.instance + } + + async enqueue(url: string): Promise { + if (!url) return Promise.resolve() + + // 核心修复:防止重复并发请求同一个 URL + const existingPromise = this.loading.get(url) + if (existingPromise) { + return existingPromise + } + + const loadPromise = new Promise((resolve, reject) => { + this.queue.push({ url, resolve, reject }) + this.processQueue() + }) + + this.loading.set(url, loadPromise) + loadPromise.finally(() => { + this.loading.delete(url) + }) + + return loadPromise + } + + private async processQueue() { + if (this.activeCount >= this.maxConcurrent || this.queue.length === 0) { + return + } + + const task = this.queue.shift() + if (!task) return + + this.activeCount++ + + const img = new Image() + img.onload = () => { + this.activeCount-- + task.resolve() + setTimeout(() => this.processQueue(), this.delayBetweenBatches) + } + img.onerror = () => { + this.activeCount-- + task.reject(new Error(`Failed: ${task.url}`)) + setTimeout(() => this.processQueue(), this.delayBetweenBatches) + } + img.src = task.url + + this.processQueue() + } + + clear() { + this.queue = [] + this.loading.clear() + this.activeCount = 0 + } +} + +export const avatarLoadQueue = AvatarLoadQueue.getInstance() diff --git a/vite.config.ts b/vite.config.ts index 640fd47..52a386c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -16,14 +16,7 @@ export default defineConfig({ } }, optimizeDeps: { - exclude: [ - '@lancedb/lancedb', - '@lancedb/lancedb-win32-x64-msvc', - 'node-llama-cpp', - 'onnxruntime-node', - '@xenova/transformers', - '@huggingface/transformers' - ] + exclude: [] }, plugins: [ react(), @@ -33,16 +26,10 @@ export default defineConfig({ vite: { build: { outDir: 'dist-electron', - rollupOptions: { + rollupOptions: { external: [ 'better-sqlite3', 'koffi', - 'node-llama-cpp', - '@lancedb/lancedb', - '@lancedb/lancedb-win32-x64-msvc', - 'onnxruntime-node', - '@xenova/transformers', - '@huggingface/transformers', 'fsevents' ] } @@ -57,12 +44,6 @@ export default defineConfig({ rollupOptions: { external: [ 'koffi', - 'node-llama-cpp', - '@lancedb/lancedb', - '@lancedb/lancedb-win32-x64-msvc', - 'onnxruntime-node', - '@xenova/transformers', - '@huggingface/transformers', 'fsevents' ], output: { @@ -73,30 +54,6 @@ export default defineConfig({ } } }, - { - entry: 'electron/cloneEmbeddingWorker.ts', - vite: { - build: { - outDir: 'dist-electron', - rollupOptions: { - external: [ - 'koffi', - 'node-llama-cpp', - '@lancedb/lancedb', - '@lancedb/lancedb-win32-x64-msvc', - 'onnxruntime-node', - '@xenova/transformers', - '@huggingface/transformers', - 'fsevents' - ], - output: { - entryFileNames: 'cloneEmbeddingWorker.js', - inlineDynamicImports: true - } - } - } - } - }, { entry: 'electron/imageSearchWorker.ts', vite: { @@ -111,6 +68,25 @@ export default defineConfig({ } } }, + { + entry: 'electron/wcdbWorker.ts', + vite: { + build: { + outDir: 'dist-electron', + rollupOptions: { + external: [ + 'better-sqlite3', + 'koffi', + 'fsevents' + ], + output: { + entryFileNames: 'wcdbWorker.js', + inlineDynamicImports: true + } + } + } + } + }, { entry: 'electron/preload.ts', onstart(options) { diff --git a/wx_key b/wx_key new file mode 160000 index 0000000..40be59d --- /dev/null +++ b/wx_key @@ -0,0 +1 @@ +Subproject commit 40be59dc472ac283b3de0e3a0ad87e029610082a