@editor-x/wme-logstream 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/core/Dispatcher.ts","../src/pipes/BasePipe.ts","../src/pipes/ConsolePipe.ts","../src/pipes/IndexedDBPipe.ts","../src/utils/idb.ts","../src/storage/IndexedDBManager.ts","../src/utils/session.ts","../src/utils/EventChannel.ts","../src/utils/window.ts","../src/storage/SessionManager.ts","../src/storage/ZipStreamer.ts","../src/core/LogStream.ts"],"sourcesContent":["import { BasePipe } from '../pipes/BasePipe.js';\nimport { LogPayload } from './LogPayload.js';\n\nexport class Dispatcher {\n private pipes: BasePipe[] = [];\n\n addPipe(pipe: BasePipe): void {\n this.pipes.push(pipe);\n }\n\n dispatch(payload: LogPayload): void {\n for (const pipe of this.pipes) {\n try {\n const result = pipe.write(payload);\n if (result instanceof Promise) {\n result.catch((err) => {\n console.error('Error writing to pipe:', err);\n });\n }\n } catch (err) {\n console.error('Error writing to pipe:', err);\n }\n }\n }\n\n async flush(): Promise<void> {\n const flushPromises = this.pipes.map(async (pipe) => {\n try {\n await pipe.flush();\n } catch (err) {\n console.error('Error flushing pipe:', err);\n }\n });\n await Promise.all(flushPromises);\n }\n}\n","import { LogPayload } from '../core/LogPayload.js';\n\nexport abstract class BasePipe {\n abstract write(payload: LogPayload): void | Promise<void>;\n abstract flush(): void | Promise<void>;\n}\n","import { BasePipe } from './BasePipe.js';\nimport { LogPayload, LogLevel } from '../core/LogPayload.js';\n\nexport interface ConsolePipeConfig {\n scriptPrefix?: string;\n brandColor?: string; // Hex color for the script prefix\n}\n\nexport class ConsolePipe extends BasePipe {\n private scriptPrefix: string;\n private brandColor: string;\n\n private styles: Record<LogLevel, string> = {\n TRACE: 'color: #888888; font-weight: normal;',\n DEBUG: 'color: #03A9F4; font-weight: bold;',\n INFO: 'color: #4CAF50; font-weight: bold;',\n WARN: 'color: #FF9800; font-weight: bold;',\n ERROR: 'color: #F44336; font-weight: bold;',\n FATAL:\n 'color: #FFFFFF; background-color: #B71C1C; font-weight: bold; padding: 2px 4px; border-radius: 2px;',\n };\n\n constructor(config?: ConsolePipeConfig) {\n super();\n this.scriptPrefix = config?.scriptPrefix ?? 'EditorX';\n this.brandColor = config?.brandColor ?? '#00E676';\n }\n\n write(payload: LogPayload): void {\n const timestampStr = new Date(payload.timestamp).toISOString().split('T')[1].slice(0, -1);\n const scopesStr = payload.scopes.map((s) => `[${s}]`).join('');\n const levelStr = payload.level;\n\n const prefixStyle = `color: ${this.brandColor}; font-weight: bold;`;\n const timeStyle = 'color: #9E9E9E;';\n const levelStyle = this.styles[levelStr];\n const scopeStyle = 'color: #9C27B0; font-weight: bold;';\n\n const format = `%c[${this.scriptPrefix}] %c${timestampStr} %c[${levelStr}]%c%c${scopesStr}%c ${payload.message}`;\n\n const args = [\n format,\n prefixStyle,\n timeStyle,\n levelStyle,\n '', // reset level style\n scopeStyle,\n '', // reset scope style\n ];\n\n if (payload.data !== undefined) {\n console.log(...args, payload.data);\n } else {\n console.log(...args);\n }\n }\n\n flush(): void {}\n}\n","import { BasePipe } from './BasePipe.js';\nimport { IndexedDBManager } from '../storage/IndexedDBManager.js';\nimport { LogPayload } from '../core/LogPayload.js';\n\nexport class IndexedDBPipe extends BasePipe {\n private dbManager: IndexedDBManager | null = null;\n private initPromise: Promise<IndexedDBManager> | null = null;\n private buffer: LogPayload[] = [];\n\n constructor(dbManagerOrPromise: IndexedDBManager | Promise<IndexedDBManager>) {\n super();\n if (dbManagerOrPromise instanceof Promise) {\n this.initPromise = dbManagerOrPromise.then((manager) => {\n this.dbManager = manager;\n for (const payload of this.buffer) {\n manager.writeLog(payload).catch(() => {});\n }\n this.buffer = [];\n return manager;\n });\n } else {\n this.dbManager = dbManagerOrPromise;\n }\n }\n\n async write(payload: LogPayload): Promise<void> {\n if (this.dbManager) {\n await this.dbManager.writeLog(payload);\n } else if (this.initPromise) {\n this.buffer.push(payload);\n }\n }\n\n async flush(): Promise<void> {\n if (this.dbManager) {\n await this.dbManager.flush();\n } else if (this.initPromise) {\n const manager = await this.initPromise;\n await manager.flush();\n }\n }\n}\n","export interface IDBOpenOptions {\n onUpgradeNeeded?: (db: IDBDatabase, event: IDBVersionChangeEvent) => void;\n onBlocked?: (event: Event) => void;\n}\n\n/**\n * Opens an IndexedDB connection and wraps the request in a Promise.\n */\nexport function openDB(\n name: string,\n version: number,\n options?: IDBOpenOptions,\n): Promise<IDBDatabase> {\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(name, version);\n\n if (options?.onUpgradeNeeded) {\n request.onupgradeneeded = (event) => {\n options.onUpgradeNeeded!(request.result, event);\n };\n }\n\n if (options?.onBlocked) {\n request.onblocked = (event) => {\n options.onBlocked!(event);\n };\n }\n\n request.onsuccess = () => {\n resolve(request.result);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n });\n}\n\n/**\n * Wraps a standard IDBRequest in a Promise.\n */\nexport function wrapRequest<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\n/**\n * Runs a transaction on the database and resolves when the transaction completes.\n */\nexport function runTransaction(\n db: IDBDatabase,\n storeNames: string | string[],\n mode: IDBTransactionMode,\n callback: (tx: IDBTransaction) => void,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeNames, mode);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n callback(tx);\n });\n}\n","import { LogPayload, SessionMetadata } from '../core/LogPayload.js';\nimport { openDB, wrapRequest, runTransaction } from '../utils/idb.js';\n\nexport interface IndexedDBManagerConfig {\n dbPrefix: string;\n scriptVersion: string;\n sessionId: string;\n wmeVersion: string | null;\n maxArchivedSessions?: number;\n flushIntervalMs?: number;\n}\n\nconst DEFAULT_CONFIG = {\n maxArchivedSessions: 15,\n flushIntervalMs: 2000,\n};\n\nexport class IndexedDBManager {\n private dbPrefix: string;\n private maxArchivedSessions: number;\n private scriptVersion: string;\n private sessionId: string;\n private wmeVersion: string | null;\n private flushIntervalMs: number;\n private db: IDBDatabase | null = null;\n private queue: LogPayload[] = [];\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private loggerVersion = '1.0.0';\n private schemaVersion = '1.0.0';\n\n constructor(config: IndexedDBManagerConfig) {\n const merged = Object.assign({}, DEFAULT_CONFIG, config);\n this.dbPrefix = merged.dbPrefix;\n this.maxArchivedSessions = merged.maxArchivedSessions;\n this.scriptVersion = merged.scriptVersion;\n this.sessionId = merged.sessionId;\n this.wmeVersion = merged.wmeVersion;\n this.flushIntervalMs = merged.flushIntervalMs;\n }\n\n /**\n * Returns the database name with prefix.\n */\n getDatabaseName(): string {\n return `LogStreamDB_${this.dbPrefix}`;\n }\n\n /**\n * Initializes the database connection and saves session metadata.\n */\n async init(): Promise<void> {\n const dbName = this.getDatabaseName();\n\n this.db = await openDB(dbName, 1, {\n onUpgradeNeeded: (db) => {\n if (!db.objectStoreNames.contains('sessions')) {\n db.createObjectStore('sessions', { keyPath: 'id' });\n }\n if (!db.objectStoreNames.contains('logs')) {\n const logStore = db.createObjectStore('logs', { keyPath: 'id', autoIncrement: true });\n logStore.createIndex('sessionId', 'sessionId', { unique: false });\n }\n },\n });\n\n const now = Date.now();\n const metadata: SessionMetadata = {\n id: this.sessionId,\n createdAt: now,\n lastUpdated: now,\n scriptVersion: this.scriptVersion,\n wmeVersion: this.wmeVersion ?? 'unknown',\n loggerVersion: this.loggerVersion,\n schemaVersion: this.schemaVersion,\n };\n\n try {\n await this.saveSessionMetadata(metadata);\n this.startHeartbeat();\n } catch (err) {\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n throw err;\n }\n }\n\n /**\n * Saves a session metadata record.\n */\n async saveSessionMetadata(metadata: SessionMetadata): Promise<void> {\n if (!this.db) throw new Error('Database not initialized');\n const transaction = this.db.transaction('sessions', 'readwrite');\n const store = transaction.objectStore('sessions');\n await wrapRequest(store.put(metadata));\n }\n\n /**\n * Periodically updates the current session's lastUpdated timestamp.\n */\n async touchSession(): Promise<void> {\n if (!this.db) return;\n const transaction = this.db.transaction('sessions', 'readwrite');\n const store = transaction.objectStore('sessions');\n const metadata = (await wrapRequest(store.get(this.sessionId))) as SessionMetadata;\n if (metadata) {\n metadata.lastUpdated = Date.now();\n await wrapRequest(store.put(metadata));\n }\n }\n\n /**\n * Starts the session heartbeat interval.\n */\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.heartbeatTimer = setInterval(() => {\n this.touchSession().catch(() => {});\n }, 10000); // 10-second heartbeat\n }\n\n /**\n * Stops the session heartbeat interval.\n */\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n /**\n * Writes a log entry, scheduling a flush or flushing immediately for high priority.\n */\n async writeLog(payload: LogPayload): Promise<void> {\n const enrichedPayload = {\n ...payload,\n sessionId: this.sessionId,\n };\n\n const isHighPriority =\n payload.level === 'WARN' || payload.level === 'ERROR' || payload.level === 'FATAL';\n\n if (isHighPriority) {\n this.queue.push(enrichedPayload);\n await this.flush();\n } else {\n this.queue.push(enrichedPayload);\n if (this.queue.length >= 50) {\n await this.flush();\n } else if (!this.flushTimer) {\n this.scheduleFlush();\n }\n }\n }\n\n /**\n * Schedules a background flush if not already scheduled.\n */\n private scheduleFlush(): void {\n if (this.flushTimer) return;\n this.flushTimer = setTimeout(() => {\n this.flush().catch(() => {});\n }, this.flushIntervalMs);\n }\n\n /**\n * Instantly flushes the in-memory queue to IndexedDB.\n */\n async flush(): Promise<void> {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n\n if (this.queue.length === 0) {\n return;\n }\n\n const batch = [...this.queue];\n this.queue = [];\n\n await this.writeLogsBatch(batch);\n }\n\n /**\n * Writes a batch of logs in a single transaction.\n */\n async writeLogsBatch(logs: LogPayload[]): Promise<void> {\n if (!this.db) throw new Error('Database not initialized');\n await runTransaction(this.db, 'logs', 'readwrite', (tx) => {\n const store = tx.objectStore('logs');\n for (const log of logs) {\n store.add(log);\n }\n });\n }\n\n /**\n * Retrieves all logs for a specific session.\n */\n async getLogsForSession(sessionId: string): Promise<LogPayload[]> {\n if (!this.db) throw new Error('Database not initialized');\n const transaction = this.db.transaction('logs', 'readonly');\n const store = transaction.objectStore('logs');\n const index = store.index('sessionId');\n return wrapRequest(index.getAll(IDBKeyRange.only(sessionId)));\n }\n\n /**\n * Retrieves all archived session records.\n */\n async getAllSessions(): Promise<SessionMetadata[]> {\n if (!this.db) throw new Error('Database not initialized');\n const transaction = this.db.transaction('sessions', 'readonly');\n const store = transaction.objectStore('sessions');\n const result = await wrapRequest(store.getAll());\n return result || [];\n }\n\n /**\n * Prunes older sessions, keeping maxArchivedSessions.\n * Protects active sessions in other tabs (updated in last 30s) and the current active session.\n */\n async pruneSessions(): Promise<void> {\n if (!this.db) throw new Error('Database not initialized');\n\n const sessions = await this.getAllSessions();\n if (sessions.length <= this.maxArchivedSessions) {\n return;\n }\n\n // Sort by createdAt ascending (oldest first)\n sessions.sort((a, b) => a.createdAt - b.createdAt);\n\n const now = Date.now();\n // Exclude active sessions:\n // 1. Current session\n // 2. Active sessions in other tabs (heartbeat within 2m / 120s)\n const candidates = sessions.filter((s) => {\n const isActiveSelf = s.id === this.sessionId;\n const isActiveOther = s.lastUpdated && now - s.lastUpdated < 120000;\n return !isActiveSelf && !isActiveOther;\n });\n\n const totalToPrune = sessions.length - this.maxArchivedSessions;\n if (totalToPrune <= 0) {\n return;\n }\n\n const sessionsToPrune = candidates.slice(0, totalToPrune);\n\n for (const session of sessionsToPrune) {\n const transaction = this.db.transaction('sessions', 'readwrite');\n const store = transaction.objectStore('sessions');\n await wrapRequest(store.delete(session.id));\n\n await new Promise<void>((resolve, reject) => {\n const transaction = this.db!.transaction('logs', 'readwrite');\n const store = transaction.objectStore('logs');\n const index = store.index('sessionId');\n const request = index.openCursor(IDBKeyRange.only(session.id));\n\n request.onsuccess = () => {\n const cursor = request.result;\n if (cursor) {\n cursor.delete();\n cursor.continue();\n } else {\n resolve();\n }\n };\n request.onerror = () => reject(request.error);\n });\n }\n }\n\n /**\n * Streams logs for a session via cursor.\n */\n async streamLogsForSession(sessionId: string, onLog: (log: LogPayload) => void): Promise<void> {\n if (!this.db) throw new Error('Database not initialized');\n\n return new Promise<void>((resolve, reject) => {\n const transaction = this.db!.transaction('logs', 'readonly');\n const store = transaction.objectStore('logs');\n const index = store.index('sessionId');\n const request = index.openCursor(IDBKeyRange.only(sessionId));\n\n request.onsuccess = () => {\n const cursor = request.result;\n if (cursor) {\n onLog(cursor.value);\n cursor.continue();\n } else {\n resolve();\n }\n };\n request.onerror = () => reject(request.error);\n });\n }\n\n /**\n * Flushes outstanding logs, stops heartbeat, and closes connection.\n */\n async close(): Promise<void> {\n this.stopHeartbeat();\n await this.flush();\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n }\n}\n","/**\n * Generates a unique, randomized Session ID string.\n */\nexport function generateSessionId(): string {\n return `session_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\n","export interface EventChannelMessage<T = any> {\n type: string;\n payload: T;\n}\n\nexport class EventChannel {\n private channel: BroadcastChannel;\n private listeners = new Map<string, Set<(payload: any) => void>>();\n\n constructor(name: string) {\n this.channel = new BroadcastChannel(name);\n this.channel.onmessage = (event: MessageEvent) => {\n const data = event.data as EventChannelMessage;\n if (data && typeof data.type === 'string') {\n const callbacks = this.listeners.get(data.type);\n if (callbacks) {\n for (const callback of callbacks) {\n try {\n callback(data.payload);\n } catch (e) {\n console.error('Error in EventChannel callback:', e);\n }\n }\n }\n }\n };\n }\n\n /**\n * Publishes an event to the BroadcastChannel.\n */\n publish<T>(type: string, payload: T): void {\n this.channel.postMessage({ type, payload });\n }\n\n /**\n * Subscribes to a specific event type. Returns an unsubscribe function.\n */\n subscribe<T>(type: string, callback: (payload: T) => void): () => void {\n if (!this.listeners.has(type)) {\n this.listeners.set(type, new Set());\n }\n this.listeners.get(type)!.add(callback);\n return () => {\n const callbacks = this.listeners.get(type);\n if (callbacks) {\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n this.listeners.delete(type);\n }\n }\n };\n }\n\n /**\n * Closes the underlying BroadcastChannel.\n */\n close(): void {\n this.channel.close();\n this.listeners.clear();\n }\n}\n","/**\n * Returns the actual active window object, prioritizing unsafeWindow in Tampermonkey.\n */\nexport function getWazeWindow(): any {\n if (typeof (globalThis as any).unsafeWindow !== 'undefined') {\n return (globalThis as any).unsafeWindow;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n return globalThis;\n}\n","import type { WmeSDK } from 'wme-sdk-typings';\nimport { generateSessionId } from '../utils/session.js';\nimport { EventChannel } from '../utils/EventChannel.js';\nimport { getWazeWindow } from '../utils/window.js';\n\nexport interface SessionManagerConfig {\n dbPrefix: string;\n scriptVersion: string;\n wmeSDK?: WmeSDK;\n}\n\nexport class SessionManager {\n private dbPrefix: string;\n private scriptVersion: string;\n private wmeSDK?: WmeSDK;\n private sessionId: string | null = null;\n private tabId: string;\n private channel: EventChannel | null = null;\n\n constructor(config: SessionManagerConfig) {\n this.dbPrefix = config.dbPrefix;\n this.scriptVersion = config.scriptVersion;\n this.wmeSDK = config.wmeSDK;\n this.tabId = `tab_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n }\n\n /**\n * Initializes the session, handling tab isolation and duplicates.\n */\n async initSession(): Promise<string> {\n const channelName = `wme-logstream-tab-isolation-${this.dbPrefix}`;\n this.channel = new EventChannel(channelName);\n\n let candidateId = sessionStorage.getItem('wme_logstream_session_id');\n\n if (!candidateId || (await this._probeConflict(candidateId))) {\n candidateId = generateSessionId();\n sessionStorage.setItem('wme_logstream_session_id', candidateId);\n }\n\n this.sessionId = candidateId;\n\n // Listen to respond to other tabs' probes\n this.channel.subscribe<{ sessionId: string; tabId: string }>('PROBE', (payload) => {\n if (payload.sessionId === this.sessionId && payload.tabId !== this.tabId) {\n // Send conflict response\n this.channel?.publish('CONFLICT', {\n sessionId: this.sessionId,\n });\n }\n });\n\n return this.sessionId;\n }\n\n private async _probeConflict(sessionId = this.sessionId): Promise<boolean> {\n if (!sessionId || !this.channel) {\n throw new Error('Session has not been initialized or channel is closed.');\n }\n\n return new Promise<boolean>((resolve) => {\n const timeout = setTimeout(() => {\n resolve(false);\n }, 50);\n\n const unsubscribeConflict = this.channel!.subscribe<{ sessionId: string }>(\n 'CONFLICT',\n (payload) => {\n if (payload.sessionId === sessionId) {\n unsubscribeConflict?.();\n clearTimeout(timeout);\n resolve(true);\n }\n },\n );\n\n this.channel!.publish('PROBE', {\n sessionId,\n tabId: this.tabId,\n });\n });\n }\n\n /**\n * Defensively extract the WME version from passed SDK or global window context.\n */\n getWmeVersion(): string | null {\n try {\n // 1. Try passed SDK\n if (typeof this.wmeSDK?.getWMEVersion === 'function') {\n return this.wmeSDK.getWMEVersion();\n }\n\n // 2. Try window.W.version or unsafeWindow.W.version via getWazeWindow\n const wazeWin = getWazeWindow();\n if (wazeWin?.W?.version) {\n return wazeWin.W.version;\n }\n } catch {\n // Safe fallback\n }\n return null;\n }\n\n /**\n * Returns current session ID if initialized\n */\n getSessionId(): string {\n if (!this.sessionId) {\n throw new Error('Session has not been initialized. Call initSession() first.');\n }\n return this.sessionId;\n }\n\n /**\n * Closes the session event channel\n */\n close() {\n if (this.channel) {\n this.channel.close();\n this.channel = null;\n }\n }\n}\n","import * as fflate from 'fflate';\nimport { IndexedDBManager } from './IndexedDBManager.js';\n\nexport class ZipStreamer {\n private dbManager: IndexedDBManager;\n\n constructor(dbManager: IndexedDBManager) {\n this.dbManager = dbManager;\n }\n\n /**\n * Exports all sessions and their logs from IndexedDB into a Zip compressed Blob.\n */\n async exportAllSessions(): Promise<Blob> {\n // Flush any pending logs to IndexedDB first\n await this.dbManager.flush();\n\n const sessions = await this.dbManager.getAllSessions();\n const chunks: BlobPart[] = [];\n\n return new Promise<Blob>((resolve, reject) => {\n const zip = new fflate.Zip();\n\n zip.ondata = (err, data, final) => {\n if (err) {\n reject(err);\n return;\n }\n chunks.push(data);\n if (final) {\n resolve(new Blob(chunks, { type: 'application/zip' }));\n }\n };\n\n const run = async () => {\n const encoder = new TextEncoder();\n\n for (const session of sessions) {\n const folderName = session.id.startsWith('session_')\n ? session.id\n : `session_${session.id}`;\n\n // 1. Add session details file\n const detailsFile = new fflate.ZipDeflate(`${folderName}/details.json`);\n zip.add(detailsFile);\n\n const detailsJson = JSON.stringify(session);\n detailsFile.push(encoder.encode(detailsJson), true);\n\n // 2. Add session logs file (streamed)\n const logsFile = new fflate.ZipDeflate(`${folderName}/logs.json`);\n zip.add(logsFile);\n\n // Write starting bracket\n logsFile.push(encoder.encode('['));\n\n let first = true;\n\n // Stream logs directly from IndexedDB cursor\n await this.dbManager.streamLogsForSession(session.id, (log) => {\n const logContent = (first ? '' : ',') + JSON.stringify(log);\n first = false;\n logsFile.push(encoder.encode(logContent));\n });\n\n // Write closing bracket and finalize this file\n logsFile.push(encoder.encode(']'), true);\n }\n\n // Finalize the zip archive\n zip.end();\n };\n\n run().catch(reject);\n });\n }\n}\n","import { create } from 'jsondiffpatch';\nimport { Dispatcher } from './Dispatcher.js';\nimport { BasePipe } from '../pipes/BasePipe.js';\nimport { LogPayload, LogLevel } from './LogPayload.js';\nimport { ConsolePipe, ConsolePipeConfig } from '../pipes/ConsolePipe.js';\nimport { IndexedDBPipe } from '../pipes/IndexedDBPipe.js';\nimport { IndexedDBManager } from '../storage/IndexedDBManager.js';\nimport { SessionManager } from '../storage/SessionManager.js';\nimport { ZipStreamer } from '../storage/ZipStreamer.js';\n\n/**\n * Configuration options for the standard LogStream constructor.\n */\nexport interface LogStreamConfig {\n /** The minimum log level required for a log to be processed. Defaults to 'INFO'. */\n minLogLevel?: LogLevel;\n /** Custom base pipes to dispatch logs to. */\n pipes?: BasePipe[];\n /** Optional pre-configured IndexedDBManager to enable export and download methods. */\n dbManager?: IndexedDBManager;\n}\n\n/**\n * Configuration options for creating a WME LogStream using the simplified factory method.\n */\nexport interface UnifiedLogStreamConfig {\n /** The minimum log level required for a log to be processed. Defaults to 'INFO'. */\n minLogLevel?: LogLevel;\n /** Whether to enable IndexedDB persistence and multi-tab isolation. Defaults to false. */\n persist?: boolean;\n /** Unique database prefix identifier. Required if `persist` is true. */\n dbPrefix?: string;\n /** Current userscript or extension version. Required if `persist` is true. */\n scriptVersion?: string;\n /** Native WME SDK instance to defensively query editor versions. */\n wmeSDK?: any;\n /** Maximum number of completed archived database sessions to preserve. Defaults to 5. */\n maxArchivedSessions?: number;\n /** Delay in milliseconds before flushing logs in queue to IndexedDB. Defaults to 2000. */\n flushIntervalMs?: number;\n /** Custom console styling prefix and color options. Set to `null` to disable console logging. */\n brand?: ConsolePipeConfig | null;\n}\n\nconst SEVERITY: Record<LogLevel, number> = {\n TRACE: 0,\n DEBUG: 1,\n INFO: 2,\n WARN: 3,\n ERROR: 4,\n FATAL: 5,\n};\n\nfunction cloneDeep<T>(val: T): T {\n if (val === undefined) return undefined as any;\n if (typeof structuredClone !== 'undefined') {\n try {\n return structuredClone(val);\n } catch {\n // Fallback on serialization error\n }\n }\n return JSON.parse(JSON.stringify(val));\n}\n\n/**\n * Prunes an object to a maximum depth, stringifying any nested objects/arrays at that depth limit.\n */\nfunction pruneToDepth(val: any, depth: number, maxDepth: number): any {\n if (typeof val !== 'object' || val === null) {\n return val;\n }\n if (depth >= maxDepth) {\n try {\n return JSON.stringify(val);\n } catch {\n return '[Object]';\n }\n }\n if (Array.isArray(val)) {\n return val.map((item) => pruneToDepth(item, depth + 1, maxDepth));\n }\n const result: any = {};\n for (const key of Object.keys(val)) {\n result[key] = pruneToDepth(val[key], depth + 1, maxDepth);\n }\n return result;\n}\n\n/**\n * The main logger class for WME LogStream.\n * Handles hierarchical scoping, console styling, state diff tracking, and persistent database exports.\n */\nexport class LogStream {\n private minLogLevel: LogLevel;\n private dispatcher: Dispatcher;\n private scopes: string[];\n private states: Map<string, any>;\n private patcher = create();\n private dbManagerPromise: Promise<IndexedDBManager> | null = null;\n\n /**\n * Initializes a LogStream instance.\n * Prefer using `LogStream.create()` for a simplified, zero-boilerplate setup.\n */\n constructor(\n config: LogStreamConfig,\n internal?: {\n dispatcher: Dispatcher;\n scopes: string[];\n states: Map<string, any>;\n dbManagerPromise?: Promise<IndexedDBManager> | null;\n },\n ) {\n this.minLogLevel = config.minLogLevel ?? 'INFO';\n if (internal) {\n this.dispatcher = internal.dispatcher;\n this.scopes = internal.scopes;\n this.states = internal.states;\n this.dbManagerPromise = internal.dbManagerPromise ?? null;\n } else {\n this.dispatcher = new Dispatcher();\n this.scopes = [];\n this.states = new Map();\n if (config.dbManager) {\n this.dbManagerPromise = Promise.resolve(config.dbManager);\n }\n if (config.pipes) {\n for (const pipe of config.pipes) {\n this.dispatcher.addPipe(pipe);\n }\n }\n }\n }\n\n /**\n * Synchronously creates a configured LogStream instance, initializing console outputs\n * and setting up background persistence/session managers if enabled.\n *\n * @param config The unified configuration options for console branding and persistence.\n * @returns A pre-configured LogStream instance ready to log immediately.\n */\n static create(config: UnifiedLogStreamConfig): LogStream {\n const pipes: BasePipe[] = [];\n let dbManagerPromise: Promise<IndexedDBManager> | null = null;\n\n if (config.brand !== null) {\n pipes.push(new ConsolePipe(config.brand));\n }\n\n if (config.persist) {\n if (!config.dbPrefix || !config.scriptVersion) {\n throw new Error('dbPrefix and scriptVersion are required when persist is true');\n }\n\n dbManagerPromise = (async () => {\n const sessionManager = new SessionManager({\n dbPrefix: config.dbPrefix!,\n scriptVersion: config.scriptVersion!,\n wmeSDK: config.wmeSDK,\n });\n\n const sessionId = await sessionManager.initSession();\n const wmeVersion = sessionManager.getWmeVersion();\n\n const dbManager = new IndexedDBManager({\n dbPrefix: config.dbPrefix!,\n scriptVersion: config.scriptVersion!,\n sessionId,\n wmeVersion,\n maxArchivedSessions: config.maxArchivedSessions,\n flushIntervalMs: config.flushIntervalMs,\n });\n\n await dbManager.init();\n await dbManager.pruneSessions();\n return dbManager;\n })();\n\n pipes.push(new IndexedDBPipe(dbManagerPromise));\n }\n\n const dispatcher = new Dispatcher();\n for (const pipe of pipes) {\n dispatcher.addPipe(pipe);\n }\n\n return new LogStream(\n {\n minLogLevel: config.minLogLevel,\n },\n {\n dispatcher,\n scopes: [],\n states: new Map(),\n dbManagerPromise,\n },\n );\n }\n\n /**\n * Spawns a child logger with a hierarchical scope prefix appended to the console/db entries.\n *\n * @param name The scope namespace (e.g. 'API', 'Auth').\n * @returns A new LogStream child instance carrying the hierarchical scope.\n */\n scope(name: string): LogStream {\n return new LogStream(\n { minLogLevel: this.minLogLevel },\n {\n dispatcher: this.dispatcher,\n scopes: [...this.scopes, name],\n states: this.states,\n dbManagerPromise: this.dbManagerPromise,\n },\n );\n }\n\n /** Logs a TRACE level message. */\n trace(message: string, data?: any): void {\n this.log('TRACE', message, data);\n }\n\n /** Logs a DEBUG level message. */\n debug(message: string, data?: any): void {\n this.log('DEBUG', message, data);\n }\n\n /** Logs an INFO level message. */\n info(message: string, data?: any): void {\n this.log('INFO', message, data);\n }\n\n /** Logs a WARN level message. */\n warn(message: string, data?: any): void {\n this.log('WARN', message, data);\n }\n\n /** Logs an ERROR level message. */\n error(message: string, data?: any): void {\n this.log('ERROR', message, data);\n }\n\n /** Logs a FATAL level message. */\n fatal(message: string, data?: any): void {\n this.log('FATAL', message, data);\n }\n\n /**\n * Compares the given state object against its previous version, calculating the deep-diff\n * and logging only modified properties as a DEBUG entry.\n *\n * @param name The state tracking key.\n * @param state The state object to track.\n * @param options Config options, e.g., max depth for nested objects.\n */\n stateDelta(name: string, state: any, options?: { maxDepth?: number }): void {\n const maxDepth = options?.maxDepth ?? 3;\n\n if (!this.states.has(name)) {\n this.states.set(name, cloneDeep(state));\n this.log('DEBUG', `State Delta: ${name} (initial)`, { delta: state });\n return;\n }\n\n const prevState = this.states.get(name);\n\n // Prune both objects up to maxDepth before diffing\n const prunedPrev = pruneToDepth(prevState, 0, maxDepth);\n const prunedState = pruneToDepth(state, 0, maxDepth);\n\n const delta = this.patcher.diff(prunedPrev, prunedState);\n\n if (delta !== undefined) {\n this.states.set(name, cloneDeep(state));\n this.log('DEBUG', `State Delta: ${name}`, { delta });\n }\n }\n\n /**\n * Returns a bound function that tracks changes to a specific state key over time.\n *\n * @param name The state tracking key.\n * @param options Config options, e.g., max depth for nested objects.\n * @returns A function accepting a state object to diff and log.\n */\n createStateTracker(name: string, options?: { maxDepth?: number }): (state: any) => void {\n return (state: any) => {\n this.stateDelta(name, state, options);\n };\n }\n\n /**\n * Asynchronously exports all stored database sessions and logs into a single compressed ZIP file.\n *\n * @returns A promise resolving to the compressed ZIP Blob.\n */\n async exportLogs(): Promise<Blob> {\n if (!this.dbManagerPromise) {\n throw new Error('Persistence (IndexedDB) is not enabled on this LogStream.');\n }\n const dbManager = await this.dbManagerPromise;\n const streamer = new ZipStreamer(dbManager);\n return streamer.exportAllSessions();\n }\n\n /**\n * Triggers a browser-native file download of the compressed log sessions.\n *\n * @param filename Custom download filename. Defaults to `wme-logs-<timestamp>.xlog`.\n */\n async downloadLogs(filename?: string): Promise<void> {\n const blob = await this.exportLogs();\n if (typeof document === 'undefined') {\n throw new Error('downloadLogs can only be called in a browser environment.');\n }\n const name = filename || `wme-logs-${Date.now()}.xlog`;\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n a.click();\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n\n /**\n * Triggers a flush of all buffered logs on registered pipes.\n */\n async flush(): Promise<void> {\n await this.dispatcher.flush();\n }\n\n /**\n * Closes underlying active database connections if persistence is enabled.\n */\n async close(): Promise<void> {\n if (this.dbManagerPromise) {\n const dbManager = await this.dbManagerPromise;\n await dbManager.close();\n }\n }\n\n private log(level: LogLevel, message: string, data?: any): void {\n if (SEVERITY[level] < SEVERITY[this.minLogLevel]) {\n return;\n }\n\n const payload: LogPayload = {\n timestamp: Date.now(),\n level,\n scopes: [...this.scopes],\n message,\n };\n\n if (data !== undefined) {\n payload.data = data;\n }\n\n this.dispatcher.dispatch(payload);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var EditorXLogStream=function(t){"use strict";function e(t){if("object"!=typeof t)return t;if(null===t)return null;if(Array.isArray(t))return t.map(e);if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return function(t){var e;const s=/^\/(.*)\/([gimyu]*)$/.exec(t.toString());if(!s)throw new Error("Invalid RegExp");return new RegExp(null!==(e=s[1])&&void 0!==e?e:"",s[2])}(t);const s={};for(const i in t)Object.prototype.hasOwnProperty.call(t,i)&&(s[i]=e(t[i]));return s}class s{setResult(t){return this.result=t,this.hasResult=!0,this}exit(){return this.exiting=!0,this}push(t,e){var s;return t.parent=this,void 0!==e&&(t.childName=e),t.root=this.root||this,t.options=t.options||this.options,this.children?(!function(t){if(0===t.length)throw new Error("Expected a non-empty array")}(this.children),(s=this.children,s[s.length-1]).next=t,this.children.push(t)):(this.children=[t],this.nextAfterChildren=this.next||null,this.next=t),t.next=this,this}}class i extends s{constructor(t,e){super(),this.left=t,this.right=e,this.pipe="diff"}prepareDeltaResult(t){var s,i,n,r;if("object"==typeof t&&((null===(s=this.options)||void 0===s?void 0:s.omitRemovedValues)&&Array.isArray(t)&&t.length>1&&(2===t.length||0===t[2]||3===t[2])&&(t[0]=0),null===(i=this.options)||void 0===i?void 0:i.cloneDiffValues)){const s="function"==typeof(null===(n=this.options)||void 0===n?void 0:n.cloneDiffValues)?null===(r=this.options)||void 0===r?void 0:r.cloneDiffValues:e;"object"==typeof t[0]&&(t[0]=s(t[0])),"object"==typeof t[1]&&(t[1]=s(t[1]))}return t}setResult(t){return this.prepareDeltaResult(t),super.setResult(t)}}class n extends s{constructor(t,e){super(),this.left=t,this.delta=e,this.pipe="patch"}}class r extends s{constructor(t){super(),this.delta=t,this.pipe="reverse"}}class o{constructor(t){this.name=t,this.filters=[]}process(t){if(!this.processor)throw new Error("add this pipe to a processor before using it");const e=this.debug,s=this.filters.length,i=t;for(let t=0;t<s;t++){const s=this.filters[t];if(s&&(e&&this.log(`filter: ${s.filterName}`),s(i),"object"==typeof i&&i.exiting)){i.exiting=!1;break}}!i.next&&this.resultCheck&&this.resultCheck(i)}log(t){console.log(`[jsondiffpatch] ${this.name} pipe, ${t}`)}append(...t){return this.filters.push(...t),this}prepend(...t){return this.filters.unshift(...t),this}indexOf(t){if(!t)throw new Error("a filter name is required");for(let e=0;e<this.filters.length;e++){const s=this.filters[e];if((null==s?void 0:s.filterName)===t)return e}throw new Error(`filter not found: ${t}`)}list(){return this.filters.map(t=>t.filterName)}after(t,...e){const s=this.indexOf(t);return this.filters.splice(s+1,0,...e),this}before(t,...e){const s=this.indexOf(t);return this.filters.splice(s,0,...e),this}replace(t,...e){const s=this.indexOf(t);return this.filters.splice(s,1,...e),this}remove(t){const e=this.indexOf(t);return this.filters.splice(e,1),this}clear(){return this.filters.length=0,this}shouldHaveResult(t){return!1===t?(this.resultCheck=null,this):(this.resultCheck||(this.resultCheck=t=>{if(!t.hasResult){console.log(t);const e=new Error(`${this.name} failed`);throw e.noResult=!0,e}}),this)}}class a{constructor(t){this.selfOptions=t||{},this.pipes={}}options(t){return t&&(this.selfOptions=t),this.selfOptions}pipe(t,e){let s=e;if("string"==typeof t){if(void 0===s)return this.pipes[t];this.pipes[t]=s}if(t&&t.name){if(s=t,s.processor===this)return s;this.pipes[s.name]=s}if(!s)throw new Error(`pipe is not defined: ${t}`);return s.processor=this,s}process(t,e){let s=t;s.options=this.options();let i,n=e||t.pipe||"default";for(;n;)void 0!==s.nextAfterChildren&&(s.next=s.nextAfterChildren,s.nextAfterChildren=null),"string"==typeof n&&(n=this.pipe(n)),n.process(s),i=n,n=null,s&&s.next&&(s=s.next,n=s.pipe||i);return s.hasResult?s.result:void 0}}const l=(t,e,s,i)=>t[s]===e[i];var h=(t,e,s,i)=>{const n=i||{},r=((t,e,s,i)=>{var n,r,o;const a=t.length,l=e.length;let h,c;const f=new Array(a+1);for(h=0;h<a+1;h++){const t=new Array(l+1);for(c=0;c<l+1;c++)t[c]=0;f[h]=t}for(f.match=s,h=1;h<a+1;h++){const a=f[h];if(void 0===a)throw new Error("LCS matrix row is undefined");const u=f[h-1];if(void 0===u)throw new Error("LCS matrix row is undefined");for(c=1;c<l+1;c++)s(t,e,h-1,c-1,i)?a[c]=(null!==(n=u[c-1])&&void 0!==n?n:0)+1:a[c]=Math.max(null!==(r=u[c])&&void 0!==r?r:0,null!==(o=a[c-1])&&void 0!==o?o:0)}return f})(t,e,s||l,n);return((t,e,s,i)=>{let n=e.length,r=s.length;const o={sequence:[],indices1:[],indices2:[]};for(;0!==n&&0!==r;){if(void 0===t.match)throw new Error("LCS matrix match function is undefined");if(t.match(e,s,n-1,r-1,i))o.sequence.unshift(e[n-1]),o.indices1.unshift(n-1),o.indices2.unshift(r-1),--n,--r;else{const e=t[n];if(void 0===e)throw new Error("LCS matrix row is undefined");const s=e[r-1];if(void 0===s)throw new Error("LCS matrix value is undefined");const i=t[n-1];if(void 0===i)throw new Error("LCS matrix row is undefined");const o=i[r];if(void 0===o)throw new Error("LCS matrix value is undefined");s>o?--r:--n}}return o})(r,t,e,n)};function c(t,e,s,i,n){const r=t[s],o=e[i];if(r===o)return!0;if("object"!=typeof r||"object"!=typeof o)return!1;const a=n.objectHash;if(!a)return n.matchByPosition&&s===i;n.hashCache1=n.hashCache1||[];let l=n.hashCache1[s];if(void 0===l&&(n.hashCache1[s]=l=a(r,s)),void 0===l)return!1;n.hashCache2=n.hashCache2||[];let h=n.hashCache2[i];return void 0===h&&(n.hashCache2[i]=h=a(o,i)),void 0!==h&&l===h}const f=function(t){var e,s,n,r,o;if(!t.leftIsArray)return;const a={objectHash:null===(e=t.options)||void 0===e?void 0:e.objectHash,matchByPosition:null===(s=t.options)||void 0===s?void 0:s.matchByPosition};let l,f,u,d=0,p=0;const g=t.left,v=t.right,w=g.length,m=v.length;let b,y;for(w>0&&m>0&&!a.objectHash&&"boolean"!=typeof a.matchByPosition&&(a.matchByPosition=!function(t,e,s,i){for(let n=0;n<s;n++){const s=t[n];for(let t=0;t<i;t++){const i=e[t];if(n!==t&&s===i)return!0}}return!1}(g,v,w,m));d<w&&d<m&&c(g,v,d,d,a);)l=d,b=new i(g[l],v[l]),t.push(b,l),d++;for(;p+d<w&&p+d<m&&c(g,v,w-1-p,m-1-p,a);)f=w-1-p,u=m-1-p,b=new i(g[f],v[u]),t.push(b,u),p++;if(d+p===w){if(w===m)return void t.setResult(void 0).exit();for(y=y||{_t:"a"},l=d;l<m-p;l++)y[l]=[v[l]],t.prepareDeltaResult(y[l]);return void t.setResult(y).exit()}if(d+p===m){for(y=y||{_t:"a"},l=d;l<w-p;l++){const e=`_${l}`;y[e]=[g[l],0,0],t.prepareDeltaResult(y[e])}return void t.setResult(y).exit()}a.hashCache1=void 0,a.hashCache2=void 0;const x=g.slice(d,w-p),R=v.slice(d,m-p),S=h(x,R,c,a),I=[];for(y=y||{_t:"a"},l=d;l<w-p;l++)if(S.indices1.indexOf(l-d)<0){const e=`_${l}`;y[e]=[g[l],0,0],t.prepareDeltaResult(y[e]),I.push(l)}let E=!0;(null===(n=t.options)||void 0===n?void 0:n.arrays)&&!1===t.options.arrays.detectMove&&(E=!1);let A=!1;(null===(o=null===(r=t.options)||void 0===r?void 0:r.arrays)||void 0===o?void 0:o.includeValueOnMove)&&(A=!0);const P=I.length;for(l=d;l<m-p;l++){const e=S.indices2.indexOf(l-d);if(e<0){let e=!1;if(E&&P>0)for(let s=0;s<P;s++){f=I[s];const n=void 0===f?void 0:y[`_${f}`];if(void 0!==f&&n&&c(x,R,f-d,l-d,a)){n.splice(1,2,l,3),n.splice(1,2,l,3),A||(n[0]=""),u=l,b=new i(g[f],v[u]),t.push(b,u),I.splice(s,1),e=!0;break}}e||(y[l]=[v[l]],t.prepareDeltaResult(y[l]))}else{if(void 0===S.indices1[e])throw new Error(`Invalid indexOnArray2: ${e}, seq.indices1: ${S.indices1}`);if(f=S.indices1[e]+d,void 0===S.indices2[e])throw new Error(`Invalid indexOnArray2: ${e}, seq.indices2: ${S.indices2}`);u=S.indices2[e]+d,b=new i(g[f],v[u]),t.push(b,u)}}t.setResult(y).exit()};f.filterName="arrays";const u={numerically:(t,e)=>t-e,numericallyBy:t=>(e,s)=>e[t]-s[t]},d=function(t){var e;if(!t.nested)return;const s=t.delta;if("a"!==s._t)return;let i,r;const o=s,a=t.left;let l=[],h=[];const c=[];for(i in o)if("_t"!==i)if("_"===i[0]){const t=i;if(void 0===o[t]||0!==o[t][2]&&3!==o[t][2])throw new Error(`only removal or move can be applied at original array indices, invalid diff type: ${null===(e=o[t])||void 0===e?void 0:e[2]}`);l.push(Number.parseInt(i.slice(1),10))}else{const t=i;1===o[t].length?h.push({index:Number.parseInt(t,10),value:o[t][0]}):c.push({index:Number.parseInt(t,10),delta:o[t]})}for(l=l.sort(u.numerically),i=l.length-1;i>=0;i--){if(r=l[i],void 0===r)continue;const t=o[`_${r}`],e=a.splice(r,1)[0];3===(null==t?void 0:t[2])&&h.push({index:t[1],value:e})}h=h.sort(u.numericallyBy("index"));const f=h.length;for(i=0;i<f;i++){const t=h[i];void 0!==t&&a.splice(t.index,0,t.value)}const d=c.length;if(d>0)for(i=0;i<d;i++){const e=c[i];if(void 0===e)continue;const s=new n(a[e.index],e.delta);t.push(s,e.index)}t.children?t.exit():t.setResult(a).exit()};d.filterName="arrays";const p=function(t){if(!t||!t.children)return;if("a"!==t.delta._t)return;const e=t.left,s=t.children.length;for(let i=0;i<s;i++){const s=t.children[i];if(void 0===s)continue;e[s.childName]=s.result}t.setResult(e).exit()};p.filterName="arraysCollectChildren";const g=function(t){if(!t.nested){const e=t.delta;if(3===e[2]){const s=e;t.newName=`_${s[1]}`,t.setResult([s[0],Number.parseInt(t.childName.substring(1),10),3]).exit()}return}const e=t.delta;if("a"!==e._t)return;const s=e;for(const e in s){if("_t"===e)continue;const i=new r(s[e]);t.push(i,e)}t.exit()};g.filterName="arrays";const v=(t,e,s)=>{if("string"==typeof e&&"_"===e[0])return Number.parseInt(e.substring(1),10);if(Array.isArray(s)&&0===s[2])return`_${e}`;let i=+e;for(const s in t){const n=t[s];if(Array.isArray(n))if(3===n[2]){const t=Number.parseInt(s.substring(1),10),r=n[1];if(r===+e)return t;t<=i&&r>i?i++:t>=i&&r<i&&i--}else if(0===n[2]){Number.parseInt(s.substring(1),10)<=i&&i++}else 1===n.length&&Number.parseInt(s,10)<=i&&i--}return i},w=t=>{if(!t||!t.children)return;const e=t.delta;if("a"!==e._t)return;const s=e,i=t.children.length,n={_t:"a"};for(let e=0;e<i;e++){const i=t.children[e];if(void 0===i)continue;let r=i.newName;if(void 0===r){if(void 0===i.childName)throw new Error("child.childName is undefined");r=v(s,i.childName,i.result)}n[r]!==i.result&&(n[r]=i.result)}t.setResult(n).exit()};w.filterName="arraysCollectChildren";const m=function(t){t.left instanceof Date?(t.right instanceof Date?t.left.getTime()!==t.right.getTime()?t.setResult([t.left,t.right]):t.setResult(void 0):t.setResult([t.left,t.right]),t.exit()):t.right instanceof Date&&t.setResult([t.left,t.right]).exit()};m.filterName="dates";const b=new Set(["__proto__"]),y=t=>{if(!t||!t.children)return;const e=t.children.length;let s=t.result;for(let i=0;i<e;i++){const e=t.children[i];if(void 0!==e&&void 0!==e.result){if(s=s||{},void 0===e.childName)throw new Error("diff child.childName is undefined");s[e.childName]=e.result}}s&&t.leftIsArray&&(s._t="a"),t.setResult(s).exit()};y.filterName="collectChildren";const x=t=>{var e;if(t.leftIsArray||"object"!==t.leftType)return;const s=t.left,n=t.right,r=null===(e=t.options)||void 0===e?void 0:e.propertyFilter;for(const e in s){if(!Object.prototype.hasOwnProperty.call(s,e))continue;if(r&&!r(e,t))continue;const o=new i(s[e],n[e]);t.push(o,e)}for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)&&(!r||r(e,t))&&void 0===s[e]){const s=new i(void 0,n[e]);t.push(s,e)}t.children&&0!==t.children.length?t.exit():t.setResult(void 0).exit()};x.filterName="objects";const R=function(t){if(!t.nested)return;const e=t.delta;if(e._t)return;const s=e;let i=!1;for(const e in s){if(b.has(e))continue;if(!Object.prototype.hasOwnProperty.call(s,e))continue;const r=t.left,o=null!==r&&"object"==typeof r&&Object.prototype.hasOwnProperty.call(r,e)?r[e]:void 0,a=new n(o,s[e]);t.push(a,e),i=!0}i?t.exit():t.setResult(t.left).exit()};R.filterName="objects";const S=function(t){if(!t||!t.children)return;if(t.delta._t)return;if(null===t.left||"object"!=typeof t.left)return void t.setResult(t.left).exit();const e=t.left,s=t.children.length;for(let i=0;i<s;i++){const s=t.children[i];if(void 0===s)continue;const n=s.childName;b.has(n)||(Object.prototype.hasOwnProperty.call(t.left,n)&&void 0===s.result?delete e[n]:e[n]!==s.result&&(e[n]=s.result))}t.setResult(e).exit()};S.filterName="collectChildren";const I=function(t){if(!t.nested)return;if(t.delta._t)return;const e=t.delta;let s=!1;for(const i in e){if(b.has(i))continue;if(!Object.prototype.hasOwnProperty.call(e,i))continue;const n=new r(e[i]);t.push(n,i),s=!0}s?t.exit():t.setResult({}).exit()};I.filterName="objects";const E=t=>{if(!t||!t.children)return;if(t.delta._t)return;const e=t.children.length,s={};for(let i=0;i<e;i++){const e=t.children[i];if(void 0===e)continue;const n=e.childName;b.has(n)||s[n]!==e.result&&(s[n]=e.result)}t.setResult(s).exit()};E.filterName="collectChildren";let A=null;function P(t,e){var s;if(!A){let i;if(!(null===(s=null==t?void 0:t.textDiff)||void 0===s?void 0:s.diffMatchPatch)){if(!e)return null;const t=new Error("The diff-match-patch library was not provided. Pass the library in through the options or use the `jsondiffpatch/with-text-diffs` entry-point.");throw t.diff_match_patch_not_found=!0,t}i=new t.textDiff.diffMatchPatch,A={diff:(t,e)=>i.patch_toText(i.patch_make(t,e)),patch:(t,e)=>{const s=i.patch_apply(i.patch_fromText(e),t);for(const t of s[1])if(!t){const t=new Error("text patch failed");throw t.textPatchFailed=!0,t}return s[0]}}}return A}const N=function(t){var e,s;if("string"!==t.leftType)return;const i=t.left,n=t.right,r=(null===(s=null===(e=t.options)||void 0===e?void 0:e.textDiff)||void 0===s?void 0:s.minLength)||60;if(i.length<r||n.length<r)return void t.setResult([i,n]).exit();const o=P(t.options);if(!o)return void t.setResult([i,n]).exit();const a=o.diff;t.setResult([a(i,n),0,2]).exit()};N.filterName="texts";const D=function(t){if(t.nested)return;const e=t.delta;if(2!==e[2])return;const s=e,i=P(t.options,!0).patch;t.setResult(i(t.left,s[0])).exit()};D.filterName="texts";const M=t=>{var e,s,i;const n=/^@@ +-(\d+),(\d+) +\+(\d+),(\d+) +@@$/,r=t.split("\n");for(let t=0;t<r.length;t++){const o=r[t];if(void 0===o)continue;const a=o.slice(0,1);if("@"===a){const e=n.exec(o);if(null!==e){r[t]=`@@ -${e[3]},${e[4]} +${e[1]},${e[2]} @@`}}else if("+"===a){if(r[t]=`-${null===(e=r[t])||void 0===e?void 0:e.slice(1)}`,"+"===(null===(s=r[t-1])||void 0===s?void 0:s.slice(0,1))){const e=r[t];r[t]=r[t-1],r[t-1]=e}}else"-"===a&&(r[t]=`+${null===(i=r[t])||void 0===i?void 0:i.slice(1)}`)}return r.join("\n")},C=function(t){if(t.nested)return;const e=t.delta;if(2!==e[2])return;const s=e;t.setResult([M(s[0]),0,2]).exit()};C.filterName="texts";const T=function(t){if(t.left!==t.right)if(void 0!==t.left)if(void 0!==t.right){if("function"==typeof t.left||"function"==typeof t.right)throw new Error("functions are not supported");t.leftType=null===t.left?"null":typeof t.left,t.rightType=null===t.right?"null":typeof t.right,t.leftType===t.rightType&&"boolean"!==t.leftType&&"number"!==t.leftType?("object"===t.leftType&&(t.leftIsArray=Array.isArray(t.left)),"object"===t.rightType&&(t.rightIsArray=Array.isArray(t.right)),t.leftIsArray===t.rightIsArray?t.left instanceof RegExp&&(t.right instanceof RegExp?t.setResult([t.left.toString(),t.right.toString()]).exit():t.setResult([t.left,t.right]).exit()):t.setResult([t.left,t.right]).exit()):t.setResult([t.left,t.right]).exit()}else t.setResult([t.left,0,0]).exit();else{if("function"==typeof t.right)throw new Error("functions are not supported");t.setResult([t.right]).exit()}else t.setResult(void 0).exit()};T.filterName="trivial";const O=function(t){if(void 0===t.delta)return void t.setResult(t.left).exit();if(t.nested=!Array.isArray(t.delta),t.nested)return;const e=t.delta;if(1!==e.length)if(2!==e.length)3===e.length&&0===e[2]&&t.setResult(void 0).exit();else{if(t.left instanceof RegExp){const s=/^\/(.*)\/([gimyu]+)$/.exec(e[1]);if(null==s?void 0:s[1])return void t.setResult(new RegExp(s[1],s[2])).exit()}t.setResult(e[1]).exit()}else t.setResult(e[0]).exit()};O.filterName="trivial";const j=function(t){if(void 0===t.delta)return void t.setResult(t.delta).exit();if(t.nested=!Array.isArray(t.delta),t.nested)return;const e=t.delta;1!==e.length?2!==e.length?3===e.length&&0===e[2]&&t.setResult([e[0]]).exit():t.setResult([e[1],e[0]]).exit():t.setResult([e[0],0,0]).exit()};j.filterName="trivial";class L{constructor(t){this.processor=new a(t),this.processor.pipe(new o("diff").append(y,T,m,N,x,f).shouldHaveResult()),this.processor.pipe(new o("patch").append(S,p,O,D,R,d).shouldHaveResult()),this.processor.pipe(new o("reverse").append(E,w,j,C,I,g).shouldHaveResult())}options(t){return this.processor.options(t)}diff(t,e){return this.processor.process(new i(t,e))}patch(t,e){return this.processor.process(new n(t,e))}reverse(t){return this.processor.process(new r(t))}unpatch(t,e){return this.patch(t,this.reverse(e))}clone(t){return e(t)}}class _{pipes=[];addPipe(t){this.pipes.push(t)}dispatch(t){for(const e of this.pipes)try{const s=e.write(t);s instanceof Promise&&s.catch(t=>{console.error("Error writing to pipe:",t)})}catch(t){console.error("Error writing to pipe:",t)}}async flush(){const t=this.pipes.map(async t=>{try{await t.flush()}catch(t){console.error("Error flushing pipe:",t)}});await Promise.all(t)}}class ${}class V extends ${scriptPrefix;brandColor;styles={TRACE:"color: #888888; font-weight: normal;",DEBUG:"color: #03A9F4; font-weight: bold;",INFO:"color: #4CAF50; font-weight: bold;",WARN:"color: #FF9800; font-weight: bold;",ERROR:"color: #F44336; font-weight: bold;",FATAL:"color: #FFFFFF; background-color: #B71C1C; font-weight: bold; padding: 2px 4px; border-radius: 2px;"};constructor(t){super(),this.scriptPrefix=t?.scriptPrefix??"EditorX",this.brandColor=t?.brandColor??"#00E676"}write(t){const e=new Date(t.timestamp).toISOString().split("T")[1].slice(0,-1),s=t.scopes.map(t=>`[${t}]`).join(""),i=t.level,n=`color: ${this.brandColor}; font-weight: bold;`,r=this.styles[i],o=[`%c[${this.scriptPrefix}] %c${e} %c[${i}]%c%c${s}%c ${t.message}`,n,"color: #9E9E9E;",r,"","color: #9C27B0; font-weight: bold;",""];void 0!==t.data?console.log(...o,t.data):console.log(...o)}flush(){}}class F extends ${dbManager=null;initPromise=null;buffer=[];constructor(t){super(),t instanceof Promise?this.initPromise=t.then(t=>{this.dbManager=t;for(const e of this.buffer)t.writeLog(e).catch(()=>{});return this.buffer=[],t}):this.dbManager=t}async write(t){this.dbManager?await this.dbManager.writeLog(t):this.initPromise&&this.buffer.push(t)}async flush(){if(this.dbManager)await this.dbManager.flush();else if(this.initPromise){const t=await this.initPromise;await t.flush()}}}function B(t){return new Promise((e,s)=>{t.onsuccess=()=>e(t.result),t.onerror=()=>s(t.error)})}const z={maxArchivedSessions:15,flushIntervalMs:2e3};class k{dbPrefix;maxArchivedSessions;scriptVersion;sessionId;wmeVersion;flushIntervalMs;db=null;queue=[];flushTimer=null;heartbeatTimer=null;loggerVersion="1.0.0";schemaVersion="1.0.0";constructor(t){const e=Object.assign({},z,t);this.dbPrefix=e.dbPrefix,this.maxArchivedSessions=e.maxArchivedSessions,this.scriptVersion=e.scriptVersion,this.sessionId=e.sessionId,this.wmeVersion=e.wmeVersion,this.flushIntervalMs=e.flushIntervalMs}getDatabaseName(){return`LogStreamDB_${this.dbPrefix}`}async init(){const t=this.getDatabaseName();var e,s,i;this.db=await(e=t,s=1,i={onUpgradeNeeded:t=>{t.objectStoreNames.contains("sessions")||t.createObjectStore("sessions",{keyPath:"id"}),t.objectStoreNames.contains("logs")||t.createObjectStore("logs",{keyPath:"id",autoIncrement:!0}).createIndex("sessionId","sessionId",{unique:!1})}},new Promise((t,n)=>{const r=indexedDB.open(e,s);i?.onUpgradeNeeded&&(r.onupgradeneeded=t=>{i.onUpgradeNeeded(r.result,t)}),i?.onBlocked&&(r.onblocked=t=>{i.onBlocked(t)}),r.onsuccess=()=>{t(r.result)},r.onerror=()=>{n(r.error)}}));const n=Date.now(),r={id:this.sessionId,createdAt:n,lastUpdated:n,scriptVersion:this.scriptVersion,wmeVersion:this.wmeVersion??"unknown",loggerVersion:this.loggerVersion,schemaVersion:this.schemaVersion};try{await this.saveSessionMetadata(r),this.startHeartbeat()}catch(t){throw this.db&&(this.db.close(),this.db=null),t}}async saveSessionMetadata(t){if(!this.db)throw new Error("Database not initialized");const e=this.db.transaction("sessions","readwrite").objectStore("sessions");await B(e.put(t))}async touchSession(){if(!this.db)return;const t=this.db.transaction("sessions","readwrite").objectStore("sessions"),e=await B(t.get(this.sessionId));e&&(e.lastUpdated=Date.now(),await B(t.put(e)))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval(()=>{this.touchSession().catch(()=>{})},1e4)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null)}async writeLog(t){const e={...t,sessionId:this.sessionId};"WARN"===t.level||"ERROR"===t.level||"FATAL"===t.level?(this.queue.push(e),await this.flush()):(this.queue.push(e),this.queue.length>=50?await this.flush():this.flushTimer||this.scheduleFlush())}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flush().catch(()=>{})},this.flushIntervalMs))}async flush(){if(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),0===this.queue.length)return;const t=[...this.queue];this.queue=[],await this.writeLogsBatch(t)}async writeLogsBatch(t){if(!this.db)throw new Error("Database not initialized");var e,s,i,n;await(e=this.db,s="logs",i="readwrite",n=e=>{const s=e.objectStore("logs");for(const e of t)s.add(e)},new Promise((t,r)=>{const o=e.transaction(s,i);o.oncomplete=()=>t(),o.onerror=()=>r(o.error),n(o)}))}async getLogsForSession(t){if(!this.db)throw new Error("Database not initialized");return B(this.db.transaction("logs","readonly").objectStore("logs").index("sessionId").getAll(IDBKeyRange.only(t)))}async getAllSessions(){if(!this.db)throw new Error("Database not initialized");const t=this.db.transaction("sessions","readonly").objectStore("sessions");return await B(t.getAll())||[]}async pruneSessions(){if(!this.db)throw new Error("Database not initialized");const t=await this.getAllSessions();if(t.length<=this.maxArchivedSessions)return;t.sort((t,e)=>t.createdAt-e.createdAt);const e=Date.now(),s=t.filter(t=>{const s=t.id===this.sessionId,i=t.lastUpdated&&e-t.lastUpdated<12e4;return!s&&!i}),i=t.length-this.maxArchivedSessions;if(i<=0)return;const n=s.slice(0,i);for(const t of n){const e=this.db.transaction("sessions","readwrite").objectStore("sessions");await B(e.delete(t.id)),await new Promise((e,s)=>{const i=this.db.transaction("logs","readwrite").objectStore("logs").index("sessionId").openCursor(IDBKeyRange.only(t.id));i.onsuccess=()=>{const t=i.result;t?(t.delete(),t.continue()):e()},i.onerror=()=>s(i.error)})}}async streamLogsForSession(t,e){if(!this.db)throw new Error("Database not initialized");return new Promise((s,i)=>{const n=this.db.transaction("logs","readonly").objectStore("logs").index("sessionId").openCursor(IDBKeyRange.only(t));n.onsuccess=()=>{const t=n.result;t?(e(t.value),t.continue()):s()},n.onerror=()=>i(n.error)})}async close(){this.stopHeartbeat(),await this.flush(),this.db&&(this.db.close(),this.db=null)}}class U{channel;listeners=new Map;constructor(t){this.channel=new BroadcastChannel(t),this.channel.onmessage=t=>{const e=t.data;if(e&&"string"==typeof e.type){const t=this.listeners.get(e.type);if(t)for(const s of t)try{s(e.payload)}catch(t){console.error("Error in EventChannel callback:",t)}}}}publish(t,e){this.channel.postMessage({type:t,payload:e})}subscribe(t,e){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(e),()=>{const s=this.listeners.get(t);s&&(s.delete(e),0===s.size&&this.listeners.delete(t))}}close(){this.channel.close(),this.listeners.clear()}}class q{dbPrefix;scriptVersion;wmeSDK;sessionId=null;tabId;channel=null;constructor(t){this.dbPrefix=t.dbPrefix,this.scriptVersion=t.scriptVersion,this.wmeSDK=t.wmeSDK,this.tabId=`tab_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}async initSession(){const t=`wme-logstream-tab-isolation-${this.dbPrefix}`;this.channel=new U(t);let e=sessionStorage.getItem("wme_logstream_session_id");return e&&!await this._probeConflict(e)||(e=`session_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,sessionStorage.setItem("wme_logstream_session_id",e)),this.sessionId=e,this.channel.subscribe("PROBE",t=>{t.sessionId===this.sessionId&&t.tabId!==this.tabId&&this.channel?.publish("CONFLICT",{sessionId:this.sessionId})}),this.sessionId}async _probeConflict(t=this.sessionId){if(!t||!this.channel)throw new Error("Session has not been initialized or channel is closed.");return new Promise(e=>{const s=setTimeout(()=>{e(!1)},50),i=this.channel.subscribe("CONFLICT",n=>{n.sessionId===t&&(i?.(),clearTimeout(s),e(!0))});this.channel.publish("PROBE",{sessionId:t,tabId:this.tabId})})}getWmeVersion(){try{if("function"==typeof this.wmeSDK?.getWMEVersion)return this.wmeSDK.getWMEVersion();const t=void 0!==globalThis.unsafeWindow?globalThis.unsafeWindow:"undefined"!=typeof window?window:globalThis;if(t?.W?.version)return t.W.version}catch{}return null}getSessionId(){if(!this.sessionId)throw new Error("Session has not been initialized. Call initSession() first.");return this.sessionId}close(){this.channel&&(this.channel.close(),this.channel=null)}}var H=Uint8Array,W=Uint16Array,K=Int32Array,G=new H([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),J=new H([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),X=new H([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Y=function(t,e){for(var s=new W(31),i=0;i<31;++i)s[i]=e+=1<<t[i-1];var n=new K(s[30]);for(i=1;i<30;++i)for(var r=s[i];r<s[i+1];++r)n[r]=r-s[i]<<5|i;return{b:s,r:n}},Z=Y(G,2),Q=Z.b,tt=Z.r;Q[28]=258,tt[258]=28;for(var et=Y(J,0).r,st=new W(32768),it=0;it<32768;++it){var nt=(43690&it)>>1|(21845&it)<<1;nt=(61680&(nt=(52428&nt)>>2|(13107&nt)<<2))>>4|(3855&nt)<<4,st[it]=((65280&nt)>>8|(255&nt)<<8)>>1}var rt=function(t,e,s){for(var i=t.length,n=0,r=new W(e);n<i;++n)t[n]&&++r[t[n]-1];var o,a=new W(e);for(n=1;n<e;++n)a[n]=a[n-1]+r[n-1]<<1;if(s){o=new W(1<<e);var l=15-e;for(n=0;n<i;++n)if(t[n])for(var h=n<<4|t[n],c=e-t[n],f=a[t[n]-1]++<<c,u=f|(1<<c)-1;f<=u;++f)o[st[f]>>l]=h}else for(o=new W(i),n=0;n<i;++n)t[n]&&(o[n]=st[a[t[n]-1]++]>>15-t[n]);return o},ot=new H(288);for(it=0;it<144;++it)ot[it]=8;for(it=144;it<256;++it)ot[it]=9;for(it=256;it<280;++it)ot[it]=7;for(it=280;it<288;++it)ot[it]=8;var at=new H(32);for(it=0;it<32;++it)at[it]=5;var lt=rt(ot,9,0),ht=rt(at,5,0),ct=function(t){return(t+7)/8|0},ft=function(t,e,s){return(null==s||s>t.length)&&(s=t.length),new H(t.subarray(e,s))},ut=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],dt=function(t,e,s){var i=new Error(e||ut[t]);if(i.code=t,Error.captureStackTrace&&Error.captureStackTrace(i,dt),!s)throw i;return i},pt=function(t,e,s){s<<=7&e;var i=e/8|0;t[i]|=s,t[i+1]|=s>>8},gt=function(t,e,s){s<<=7&e;var i=e/8|0;t[i]|=s,t[i+1]|=s>>8,t[i+2]|=s>>16},vt=function(t,e){for(var s=[],i=0;i<t.length;++i)t[i]&&s.push({s:i,f:t[i]});var n=s.length,r=s.slice();if(!n)return{t:St,l:0};if(1==n){var o=new H(s[0].s+1);return o[s[0].s]=1,{t:o,l:1}}s.sort(function(t,e){return t.f-e.f}),s.push({s:-1,f:25001});var a=s[0],l=s[1],h=0,c=1,f=2;for(s[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=n-1;)a=s[s[h].f<s[f].f?h++:f++],l=s[h!=c&&s[h].f<s[f].f?h++:f++],s[c++]={s:-1,f:a.f+l.f,l:a,r:l};var u=r[0].s;for(i=1;i<n;++i)r[i].s>u&&(u=r[i].s);var d=new W(u+1),p=wt(s[c-1],d,0);if(p>e){i=0;var g=0,v=p-e,w=1<<v;for(r.sort(function(t,e){return d[e.s]-d[t.s]||t.f-e.f});i<n;++i){var m=r[i].s;if(!(d[m]>e))break;g+=w-(1<<p-d[m]),d[m]=e}for(g>>=v;g>0;){var b=r[i].s;d[b]<e?g-=1<<e-d[b]++-1:++i}for(;i>=0&&g;--i){var y=r[i].s;d[y]==e&&(--d[y],++g)}p=e}return{t:new H(d),l:p}},wt=function(t,e,s){return-1==t.s?Math.max(wt(t.l,e,s+1),wt(t.r,e,s+1)):e[t.s]=s},mt=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new W(++e),i=0,n=t[0],r=1,o=function(t){s[i++]=t},a=1;a<=e;++a)if(t[a]==n&&a!=e)++r;else{if(!n&&r>2){for(;r>138;r-=138)o(32754);r>2&&(o(r>10?r-11<<5|28690:r-3<<5|12305),r=0)}else if(r>3){for(o(n),--r;r>6;r-=6)o(8304);r>2&&(o(r-3<<5|8208),r=0)}for(;r--;)o(n);r=1,n=t[a]}return{c:s.subarray(0,i),n:e}},bt=function(t,e){for(var s=0,i=0;i<e.length;++i)s+=t[i]*e[i];return s},yt=function(t,e,s){var i=s.length,n=ct(e+2);t[n]=255&i,t[n+1]=i>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var r=0;r<i;++r)t[n+r+4]=s[r];return 8*(n+4+i)},xt=function(t,e,s,i,n,r,o,a,l,h,c){pt(e,c++,s),++n[256];for(var f=vt(n,15),u=f.t,d=f.l,p=vt(r,15),g=p.t,v=p.l,w=mt(u),m=w.c,b=w.n,y=mt(g),x=y.c,R=y.n,S=new W(19),I=0;I<m.length;++I)++S[31&m[I]];for(I=0;I<x.length;++I)++S[31&x[I]];for(var E=vt(S,7),A=E.t,P=E.l,N=19;N>4&&!A[X[N-1]];--N);var D,M,C,T,O=h+5<<3,j=bt(n,ot)+bt(r,at)+o,L=bt(n,u)+bt(r,g)+o+14+3*N+bt(S,A)+2*S[16]+3*S[17]+7*S[18];if(l>=0&&O<=j&&O<=L)return yt(e,c,t.subarray(l,l+h));if(pt(e,c,1+(L<j)),c+=2,L<j){D=rt(u,d,0),M=u,C=rt(g,v,0),T=g;var _=rt(A,P,0);pt(e,c,b-257),pt(e,c+5,R-1),pt(e,c+10,N-4),c+=14;for(I=0;I<N;++I)pt(e,c+3*I,A[X[I]]);c+=3*N;for(var $=[m,x],V=0;V<2;++V){var F=$[V];for(I=0;I<F.length;++I){var B=31&F[I];pt(e,c,_[B]),c+=A[B],B>15&&(pt(e,c,F[I]>>5&127),c+=F[I]>>12)}}}else D=lt,M=ot,C=ht,T=at;for(I=0;I<a;++I){var z=i[I];if(z>255){gt(e,c,D[(B=z>>18&31)+257]),c+=M[B+257],B>7&&(pt(e,c,z>>23&31),c+=G[B]);var k=31&z;gt(e,c,C[k]),c+=T[k],k>3&&(gt(e,c,z>>5&8191),c+=J[k])}else gt(e,c,D[z]),c+=M[z]}return gt(e,c,D[256]),c+M[256]},Rt=new K([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),St=new H(0),It=function(){for(var t=new Int32Array(256),e=0;e<256;++e){for(var s=e,i=9;--i;)s=(1&s&&-306674912)^s>>>1;t[e]=s}return t}(),Et=function(t,e,s,i,n){if(!n&&(n={l:1},e.dictionary)){var r=e.dictionary.subarray(-32768),o=new H(r.length+t.length);o.set(r),o.set(t,r.length),t=o,n.w=r.length}return function(t,e,s,i,n,r){var o=r.z||t.length,a=new H(i+o+5*(1+Math.ceil(o/7e3))+n),l=a.subarray(i,a.length-n),h=r.l,c=7&(r.r||0);if(e){c&&(l[0]=r.r>>3);for(var f=Rt[e-1],u=f>>13,d=8191&f,p=(1<<s)-1,g=r.p||new W(32768),v=r.h||new W(p+1),w=Math.ceil(s/3),m=2*w,b=function(e){return(t[e]^t[e+1]<<w^t[e+2]<<m)&p},y=new K(25e3),x=new W(288),R=new W(32),S=0,I=0,E=r.i||0,A=0,P=r.w||0,N=0;E+2<o;++E){var D=b(E),M=32767&E,C=v[D];if(g[M]=C,v[D]=M,P<=E){var T=o-E;if((S>7e3||A>24576)&&(T>423||!h)){c=xt(t,l,0,y,x,R,I,A,N,E-N,c),A=S=I=0,N=E;for(var O=0;O<286;++O)x[O]=0;for(O=0;O<30;++O)R[O]=0}var j=2,L=0,_=d,$=M-C&32767;if(T>2&&D==b(E-$))for(var V=Math.min(u,T)-1,F=Math.min(32767,E),B=Math.min(258,T);$<=F&&--_&&M!=C;){if(t[E+j]==t[E+j-$]){for(var z=0;z<B&&t[E+z]==t[E+z-$];++z);if(z>j){if(j=z,L=$,z>V)break;var k=Math.min($,z-2),U=0;for(O=0;O<k;++O){var q=E-$+O&32767,X=q-g[q]&32767;X>U&&(U=X,C=q)}}}$+=(M=C)-(C=g[M])&32767}if(L){y[A++]=268435456|tt[j]<<18|et[L];var Y=31&tt[j],Z=31&et[L];I+=G[Y]+J[Z],++x[257+Y],++R[Z],P=E+j,++S}else y[A++]=t[E],++x[t[E]]}}for(E=Math.max(E,P);E<o;++E)y[A++]=t[E],++x[t[E]];c=xt(t,l,h,y,x,R,I,A,N,E-N,c),h||(r.r=7&c|l[c/8|0]<<3,c-=7,r.h=v,r.p=g,r.i=E,r.w=P)}else{for(E=r.w||0;E<o+h;E+=65535){var Q=E+65535;Q>=o&&(l[c/8|0]=h,Q=o),c=yt(l,c+1,t.subarray(E,Q))}r.i=o}return ft(a,0,i+ct(c)+n)}(t,null==e.level?6:e.level,null==e.mem?n.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):20:12+e.mem,s,i,n)},At=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8},Pt=function(){function t(t,e){if("function"==typeof t&&(e=t,t={}),this.ondata=e,this.o=t||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new H(98304),this.o.dictionary){var s=this.o.dictionary.subarray(-32768);this.b.set(s,32768-s.length),this.s.i=32768-s.length}}return t.prototype.p=function(t,e){this.ondata(Et(t,this.o,0,0,this.s),e)},t.prototype.push=function(t,e){this.ondata||dt(5),this.s.l&&dt(4);var s=t.length+this.s.z;if(s>this.b.length){if(s>2*this.b.length-32768){var i=new H(-32768&s);i.set(this.b.subarray(0,this.s.z)),this.b=i}var n=this.b.length-this.s.z;this.b.set(t.subarray(0,n),this.s.z),this.s.z=this.b.length,this.p(this.b,!1),this.b.set(this.b.subarray(-32768)),this.b.set(t.subarray(n),32768),this.s.z=t.length-n+32768,this.s.i=32766,this.s.w=32768}else this.b.set(t,this.s.z),this.s.z+=t.length;this.s.l=1&e,(this.s.z>this.s.w+8191||e)&&(this.p(this.b,e||!1),this.s.w=this.s.i,this.s.i-=2),e&&(this.s=this.o={},this.b=St)},t.prototype.flush=function(t){if(this.ondata||dt(5),this.s.l&&dt(4),this.p(this.b,!1),this.s.w=this.s.i,this.s.i-=2,t){var e=new H(6);e[0]=this.s.r>>3;var s=yt(e,this.s.r,St);this.s.r=0,this.ondata(e.subarray(0,s>>3),!1)}},t}(),Nt="undefined"!=typeof TextEncoder&&new TextEncoder,Dt="undefined"!=typeof TextDecoder&&new TextDecoder;try{Dt.decode(St,{stream:!0})}catch(t){}function Mt(t,e){if(Nt)return Nt.encode(t);for(var s=t.length,i=new H(t.length+(t.length>>1)),n=0,r=function(t){i[n++]=t},o=0;o<s;++o){if(n+5>i.length){var a=new H(n+8+(s-o<<1));a.set(i),i=a}var l=t.charCodeAt(o);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|63&l)):l>55295&&l<57344?(r(240|(l=65536+(1047552&l)|1023&t.charCodeAt(++o))>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|63&l)):(r(224|l>>12),r(128|l>>6&63),r(128|63&l))}return ft(i,0,n)}var Ct=function(t){var e=0;if(t)for(var s in t){var i=t[s].length;i>65535&&dt(9),e+=i+4}return e},Tt=function(t,e,s,i,n,r,o,a){var l=i.length,h=s.extra,c=a&&a.length,f=Ct(h);At(t,e,null!=o?33639248:67324752),e+=4,null!=o&&(t[e++]=20,t[e++]=s.os),t[e]=20,e+=2,t[e++]=s.flag<<1|(r<0&&8),t[e++]=n&&8,t[e++]=255&s.compression,t[e++]=s.compression>>8;var u=new Date(null==s.mtime?Date.now():s.mtime),d=u.getFullYear()-1980;if((d<0||d>119)&&dt(10),At(t,e,d<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,-1!=r&&(At(t,e,s.crc),At(t,e+4,r<0?-r-2:r),At(t,e+8,s.size)),At(t,e+12,l),At(t,e+14,f),e+=16,null!=o&&(At(t,e,c),At(t,e+6,s.attrs),At(t,e+10,o),e+=14),t.set(i,e),e+=l,f)for(var p in h){var g=h[p],v=g.length;At(t,e,+p),At(t,e+2,v),t.set(g,e+4),e+=4+v}return c&&(t.set(a,e),e+=c),e},Ot=function(){function t(t){var e;this.filename=t,this.c=(e=-1,{p:function(t){for(var s=e,i=0;i<t.length;++i)s=It[255&s^t[i]]^s>>>8;e=s},d:function(){return~e}}),this.size=0,this.compression=0}return t.prototype.process=function(t,e){this.ondata(null,t,e)},t.prototype.push=function(t,e){this.ondata||dt(5),this.c.p(t),this.size+=t.length,e&&(this.crc=this.c.d()),this.process(t,e||!1)},t}(),jt=function(){function t(t,e){var s,i=this;e||(e={}),Ot.call(this,t),this.d=new Pt(e,function(t,e){i.ondata(null,t,e)}),this.compression=8,this.flag=1==(s=e.level)?3:s<6?2:9==s?1:0}return t.prototype.process=function(t,e){try{this.d.push(t,e)}catch(t){this.ondata(t,null,e)}},t.prototype.push=function(t,e){Ot.prototype.push.call(this,t,e)},t}(),Lt=function(){function t(t){this.ondata=t,this.u=[],this.d=1}return t.prototype.add=function(t){var e=this;if(this.ondata||dt(5),2&this.d)this.ondata(dt(4+8*(1&this.d),0,1),null,!1);else{var s=Mt(t.filename),i=s.length,n=t.comment,r=n&&Mt(n),o=i!=t.filename.length||r&&n.length!=r.length,a=i+Ct(t.extra)+30;i>65535&&this.ondata(dt(11,0,1),null,!1);var l=new H(a);Tt(l,0,t,s,o,-1);var h=[l],c=function(){for(var t=0,s=h;t<s.length;t++){var i=s[t];e.ondata(null,i,!1)}h=[]},f=this.d;this.d=0;var u=this.u.length,d=function(t,e){var s={};for(var i in t)s[i]=t[i];for(var i in e)s[i]=e[i];return s}(t,{f:s,u:o,o:r,t:function(){t.terminate&&t.terminate()},r:function(){if(c(),f){var t=e.u[u+1];t?t.r():e.d=1}f=1}}),p=0;t.ondata=function(s,i,n){if(s)e.ondata(s,i,n),e.terminate();else if(p+=i.length,h.push(i),n){var r=new H(16);At(r,0,134695760),At(r,4,t.crc),At(r,8,p),At(r,12,t.size),h.push(r),d.c=p,d.b=a+p+16,d.crc=t.crc,d.size=t.size,f&&d.r(),f=1}else f&&c()},this.u.push(d)}},t.prototype.end=function(){var t=this;2&this.d?this.ondata(dt(4+8*(1&this.d),0,1),null,!0):(this.d?this.e():this.u.push({r:function(){1&t.d&&(t.u.splice(-1,1),t.e())},t:function(){}}),this.d=3)},t.prototype.e=function(){for(var t=0,e=0,s=0,i=0,n=this.u;i<n.length;i++){s+=46+(d=n[i]).f.length+Ct(d.extra)+(d.o?d.o.length:0)}for(var r,o,a,l,h,c=new H(s+22),f=0,u=this.u;f<u.length;f++){var d=u[f];Tt(c,t,d,d.f,d.u,-d.c-2,e,d.o),t+=46+d.f.length+Ct(d.extra)+(d.o?d.o.length:0),e+=d.b}r=c,o=t,a=this.u.length,l=s,h=e,At(r,o,101010256),At(r,o+8,a),At(r,o+10,a),At(r,o+12,l),At(r,o+16,h),this.ondata(null,c,!0),this.d=2},t.prototype.terminate=function(){for(var t=0,e=this.u;t<e.length;t++){e[t].t()}this.d=2},t}();class _t{dbManager;constructor(t){this.dbManager=t}async exportAllSessions(){await this.dbManager.flush();const t=await this.dbManager.getAllSessions(),e=[];return new Promise((s,i)=>{const n=new Lt;n.ondata=(t,n,r)=>{t?i(t):(e.push(n),r&&s(new Blob(e,{type:"application/zip"})))};(async()=>{const e=new TextEncoder;for(const s of t){const t=s.id.startsWith("session_")?s.id:`session_${s.id}`,i=new jt(`${t}/details.json`);n.add(i);const r=JSON.stringify(s);i.push(e.encode(r),!0);const o=new jt(`${t}/logs.json`);n.add(o),o.push(e.encode("["));let a=!0;await this.dbManager.streamLogsForSession(s.id,t=>{const s=(a?"":",")+JSON.stringify(t);a=!1,o.push(e.encode(s))}),o.push(e.encode("]"),!0)}n.end()})().catch(i)})}}const $t={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,FATAL:5};function Vt(t){if(void 0!==t){if("undefined"!=typeof structuredClone)try{return structuredClone(t)}catch{}return JSON.parse(JSON.stringify(t))}}function Ft(t,e,s){if("object"!=typeof t||null===t)return t;if(e>=s)try{return JSON.stringify(t)}catch{return"[Object]"}if(Array.isArray(t))return t.map(t=>Ft(t,e+1,s));const i={};for(const n of Object.keys(t))i[n]=Ft(t[n],e+1,s);return i}class Bt{minLogLevel;dispatcher;scopes;states;patcher=function(t){return new L(t)}();dbManagerPromise=null;constructor(t,e){if(this.minLogLevel=t.minLogLevel??"INFO",e)this.dispatcher=e.dispatcher,this.scopes=e.scopes,this.states=e.states,this.dbManagerPromise=e.dbManagerPromise??null;else if(this.dispatcher=new _,this.scopes=[],this.states=new Map,t.dbManager&&(this.dbManagerPromise=Promise.resolve(t.dbManager)),t.pipes)for(const e of t.pipes)this.dispatcher.addPipe(e)}static create(t){const e=[];let s=null;if(null!==t.brand&&e.push(new V(t.brand)),t.persist){if(!t.dbPrefix||!t.scriptVersion)throw new Error("dbPrefix and scriptVersion are required when persist is true");s=(async()=>{const e=new q({dbPrefix:t.dbPrefix,scriptVersion:t.scriptVersion,wmeSDK:t.wmeSDK}),s=await e.initSession(),i=e.getWmeVersion(),n=new k({dbPrefix:t.dbPrefix,scriptVersion:t.scriptVersion,sessionId:s,wmeVersion:i,maxArchivedSessions:t.maxArchivedSessions,flushIntervalMs:t.flushIntervalMs});return await n.init(),await n.pruneSessions(),n})(),e.push(new F(s))}const i=new _;for(const t of e)i.addPipe(t);return new Bt({minLogLevel:t.minLogLevel},{dispatcher:i,scopes:[],states:new Map,dbManagerPromise:s})}scope(t){return new Bt({minLogLevel:this.minLogLevel},{dispatcher:this.dispatcher,scopes:[...this.scopes,t],states:this.states,dbManagerPromise:this.dbManagerPromise})}trace(t,e){this.log("TRACE",t,e)}debug(t,e){this.log("DEBUG",t,e)}info(t,e){this.log("INFO",t,e)}warn(t,e){this.log("WARN",t,e)}error(t,e){this.log("ERROR",t,e)}fatal(t,e){this.log("FATAL",t,e)}stateDelta(t,e,s){const i=s?.maxDepth??3;if(!this.states.has(t))return this.states.set(t,Vt(e)),void this.log("DEBUG",`State Delta: ${t} (initial)`,{delta:e});const n=Ft(this.states.get(t),0,i),r=Ft(e,0,i),o=this.patcher.diff(n,r);void 0!==o&&(this.states.set(t,Vt(e)),this.log("DEBUG",`State Delta: ${t}`,{delta:o}))}createStateTracker(t,e){return s=>{this.stateDelta(t,s,e)}}async exportLogs(){if(!this.dbManagerPromise)throw new Error("Persistence (IndexedDB) is not enabled on this LogStream.");const t=await this.dbManagerPromise;return new _t(t).exportAllSessions()}async downloadLogs(t){const e=await this.exportLogs();if("undefined"==typeof document)throw new Error("downloadLogs can only be called in a browser environment.");const s=t||`wme-logs-${Date.now()}.xlog`,i=URL.createObjectURL(e),n=document.createElement("a");n.href=i,n.download=s,n.click(),setTimeout(()=>URL.revokeObjectURL(i),100)}async flush(){await this.dispatcher.flush()}async close(){if(this.dbManagerPromise){const t=await this.dbManagerPromise;await t.close()}}log(t,e,s){if($t[t]<$t[this.minLogLevel])return;const i={timestamp:Date.now(),level:t,scopes:[...this.scopes],message:e};void 0!==s&&(i.data=s),this.dispatcher.dispatch(i)}}return t.ConsolePipe=V,t.IndexedDBManager=k,t.IndexedDBPipe=F,t.LogStream=Bt,t.SessionManager=q,t.ZipStreamer=_t,t}({});
2
+ //# sourceMappingURL=index.iife.js.map