console-streamer
Version:
A reusable FE logger package built with React + Vite.
3 lines (2 loc) • 3.12 kB
JavaScript
(function(r,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("axios"),require("moment")):typeof define=="function"&&define.amd?define(["exports","axios","moment"],f):(r=typeof globalThis<"u"?globalThis:r||self,f(r.ConsoleStreamerPackage={},r.axios,r.moment))})(this,function(r,f,A){"use strict";let d="",g="development",p="Not_Authenticated_Logs",m="DEFAULT",h="",T=20,L=1e4,y="DEFAULT";const E=console.log,I=console.warn,c=console.error,N=console.info,R=console.debug;let t=[];async function S(e){if(e.length!==0){E(`Attempting to send ${e.length} log(s) to server...`);try{const n=await f.post(d,{logs:e,env:g,user:p,tenantId:m,bucketName:h,docType:y});!n.status||n.status<200||n.status>=300?c(`Failed to send logs to server. Status: ${n.status}`):E(`Successfully sent ${e.length} log(s).`)}catch(n){c("Error sending logs to server:",n)}}}function _(e){return e.map(n=>{if(typeof n=="object"&&n!==null)try{return JSON.stringify(n,o=>{if(typeof o=="bigint")return`${o.toString()}n`;if(o instanceof Error)return{message:o.message,stack:o.stack,name:o.name};const l=[];return JSON.stringify(o,(s,i)=>{if(console.log(s),typeof i=="object"&&i!==null){if(l.includes(i))return;l.push(i)}return i})})}catch(o){return console.log(o),"Unserializable Object"}return String(n)}).join(" ")}function a(e,n,o){const l=_(n),s={timestamp:A().utc().format("YYYY-MM-DDTHH:mm:ss.SSS[Z]"),user:p,level:e,message:l,userAgent:typeof navigator<"u"?navigator.userAgent:void 0,url:typeof window<"u"?window.location.href:void 0,environment:g};if(o instanceof Error?s.stackTrace=o.stack||"N/A":typeof o=="string"&&(s.message+=`
Details: ${o}`),t.push(s),t.length>=T){const i=[...t];t=[],S(i)}}console.warn=(...e)=>{I.apply(console,e),a("WARN",e)},console.error=(...e)=>{c.apply(console,e);const n=e.find(o=>o instanceof Error);a("ERROR",e,n)},console.info=(...e)=>{N.apply(console,e),a("INFO",e)},console.debug=(...e)=>{R.apply(console,e),a("DEBUG",e)};let u;function b(){u&&clearInterval(u),u=window.setInterval(()=>{if(t.length>0){const e=[...t];t=[],S(e)}},L)}function C(){u&&(clearInterval(u),u=void 0)}window.addEventListener("unhandledrejection",e=>{c("Unhandled Rejection:",e.reason);const n=e.reason instanceof Error?e.reason:String(e.reason);a("ERROR",["Unhandled Rejection:",e.reason],n instanceof Error?n:void 0)}),window.onerror=(e,n,o,l,s)=>{c("Global Error:",e,`Source: ${n}`,`Line: ${o}`,`Col: ${l}`,s);const i=typeof e=="string"?e:"Global event error",v=`Source: ${n}, Line: ${o}, Col: ${l}`;return a("ERROR",["Global Error:",i,v],s),!1};function F(e){if(d=e.logApiEndpoint,g=e?.environment??"development",p=e?.userEmail??"Not_Authenticated_Logs",m=e?.tenantId??"DEFAULT",h=e.bucketName,T=e?.maxBufferSize??20,L=e?.flushInterval??1e4,y=e?.docType??"DEFAULT",!h||!d){c("Missing required configuration for logging service.");return}E("Logging service initialized. API Endpoint:",d,"Environment:",g,"Tenant:",m,"User:",p,"DOC TYPE:",y),b()}function U(){E("Cleaning up logging service."),C(),t.length>0&&(S([...t]),t=[])}r.cleanupLogging=U,r.initLogging=F,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});