Files
Wand-Enhancer-k1tbyte/web-panel/bridge/scripts/default/installed-apps-sync/logger.js
T
kitbyte f2e88e9247 fix(renderer-scripts): await the bridge bind and retry it on poll
ipcRenderer.invoke rejects asynchronously, so marking the bridge bound before
awaiting left set-value dead for the session while the log reported success.

Compare installed-app snapshots structurally instead of by an explicit field
list, which had already drifted from the bridge copy and hid location changes.
2026-08-29 16:56:51 +03:00

48 lines
1.2 KiB
JavaScript
Vendored

import { LOG_FILE_NAME, LOG_PREFIX } from "./constants.js"
import { getRequire } from "./runtime.js"
// Logging runs inside Wand's own process; a failure here must never take the app down.
export function createLogger(WandEnhancer) {
let filePath = null
try {
const require = getRequire()
const os = require?.("node:os")
const path = require?.("node:path")
if (os && path) {
filePath = path.join(os.tmpdir(), LOG_FILE_NAME)
globalThis.__wandInstalledAppsSyncLogFile = filePath
}
} catch {}
return function log(level, message, detail) {
const method =
level === "error" ? "error" : level === "warn" ? "warn" : "info"
const line = `[${new Date().toISOString()}] [${level}] ${message}${detail ? ` :: ${detail}` : ""}`
try {
console[method](LOG_PREFIX, message, detail || "")
} catch {}
try {
if (WandEnhancer?.log) {
WandEnhancer.log(`${LOG_PREFIX} ${message}`, detail || "")
}
} catch {}
writeFile(filePath, line)
}
}
function writeFile(filePath, line) {
if (!filePath) {
return
}
try {
const require = getRequire()
const fs = require?.("node:fs")
fs?.appendFileSync(filePath, `${line}\n`)
} catch {}
}