UNPKG

@zencemarketing/web-sdk

Version:

ZenceMarketing Web SDK for push notifications, popups, and custom event tracking.

90 lines (77 loc) 2.16 kB
type LogLevel = "none" | "error" | "warn" | "info" | "debug"; interface LoggerConfig { level: LogLevel; remoteLogging?: boolean; remoteUrl?: string; sdkVersion?: string; } export class SDKLogger { private level: LogLevel; private remoteLogging: boolean; private remoteUrl?: string; private sdkVersion?: string; constructor(config: LoggerConfig) { this.level = config.level; this.remoteLogging = config.remoteLogging || false; this.remoteUrl = config.remoteUrl; this.sdkVersion = config.sdkVersion; } setLevel(level: LogLevel) { this.level = level; } setEnabled(enabled: boolean) { this.level = enabled ? this.level : "none"; } setRemoteLogging(enabled: boolean) { this.remoteLogging = enabled; } private shouldLog(level: LogLevel): boolean { if (this.level === "none") return false; const order: LogLevel[] = ["error", "warn", "info", "debug"]; return order.indexOf(level) <= order.indexOf(this.level); } private sendRemoteLog(level: string, ...args: any[]) { if (this.remoteLogging && this.remoteUrl) { try { fetch(this.remoteUrl, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ level, message: args, sdkVersion: this.sdkVersion, timestamp: new Date().toISOString(), }), }); } catch (e) { console.warn("Remote log failed:", e); } } } error(...args: any[]) { if (this.shouldLog("error")) { console.error("[SDK ERROR]", ...args); this.sendRemoteLog("error", ...args); } } warn(...args: any[]) { if (this.shouldLog("warn")) { console.warn("[SDK WARN]", ...args); this.sendRemoteLog("warn", ...args); } } info(...args: any[]) { if (this.shouldLog("info")) { console.info("[SDK INFO]", ...args); this.sendRemoteLog("info", ...args); } } debug(...args: any[]) { if (this.shouldLog("debug")) { console.debug("[SDK DEBUG]", ...args); this.sendRemoteLog("debug", ...args); } } }