UNPKG

loglevel-plugin-remote

Version:

A loglevel plugin for sending browser logs to a server

1 lines 5.21 kB
!function(e,t){if("function"==typeof define&&define.amd)define(["module","exports"],t);else if("undefined"!=typeof exports)t(module,exports);else{var r={exports:{}};t(r,r.exports),e.remote=r.exports}}(this,function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f=window;if(!f)throw new Error("Plugin for browser usage only");var r=void 0;function s(e){try{return JSON.stringify(e)}catch(e){if(!r)try{var t={};t.a=t,JSON.stringify(t)}catch(e){r=e.message}if(e.message===r)return"[Circular]";throw e}}function w(c){var e="",l=0;return 1<c.length&&"string"==typeof c[0]&&(e=(e=c[0].replace(/(%?)(%([sdjo]))/g,function(e,t,r,n){if(t)return e;var o=c[l+=1],i="";switch(n){case"s":i+=o;break;case"d":i+=+o;break;case"j":i=s(o);break;case"o":var a=s(o);"{"!==a[0]&&"["!==a[0]&&(a="<"+a+">"),i=function(e){if(!Object.getOwnPropertyDescriptor||!Object.getPrototypeOf)return Object.prototype.toString.call(e).slice(8,-1);for(;e;){var t=Object.getOwnPropertyDescriptor(e,"constructor");if(void 0!==t&&"function"==typeof t.value&&""!==t.value.name)return t.value.name;e=Object.getPrototypeOf(e)}return""}(o)+a}return i})).replace(/%{2,2}/g,"%"),l+=1),c.length>l&&(e&&(e+=" "),e+=c.slice(l).join(" ")),e}var p=Object.prototype.hasOwnProperty;function k(){try{throw new Error}catch(e){return e.stack}}function n(t){var r=this,n=[],o=[];this.length=function(){return n.length},this.sent=function(){return o.length},this.push=function(e){n.push(e),n.length>t&&n.shift()},this.send=function(){return o.length||(o=n,n=[]),o},this.confirm=function(){o=[],r.content=""},this.fail=function(){var e=1+n.length+o.length-t;0<e&&(o.splice(0,e),n=o.concat(n),r.confirm())}}var o=!!k(),j=void 0,a=void 0,v=void 0;function c(e){return"["+e.timestamp+"] "+e.level.label.toUpperCase()+(e.logger?" ("+e.logger+")":"")+": "+e.message+(e.stacktrace?"\n"+e.stacktrace:"")}function l(){throw new Error("You can't set token for a not appled plugin")}var u=f.remote,g={url:"/logger",method:"POST",headers:{},token:"",onUnauthorized:function(){},timeout:0,interval:1e3,level:"trace",backoff:{multiplier:2,jitter:.1,limit:3e4},capacity:0,stacktrace:{levels:["trace","warn","error"],depth:3,excess:0},timestamp:function(){return(new Date).toISOString()},format:c},remote={noConflict:function(){return f.remote===remote&&(f.remote=u),remote},plain:c,json:function(e){return e.level=e.level.label,e},apply:function(e,t){if(!e||!e.getLogger)throw new TypeError("Argument is not a root loglevel object");if(j)throw new Error("You can assign a plugin only one time");if(!f.XMLHttpRequest)return e;j=e;var d=function e(){for(var t={},r=0;r<arguments.length;r+=1){var n=Object(arguments[r]);for(var o in n)p.call(n,o)&&(t[o]="object"!==i(n[o])||Array.isArray(n[o])?n[o]:e(t[o],n[o]))}return t}(g,t);d.capacity=d.capacity||500;var r=d.backoff,c="object"===(void 0===r?"undefined":i(r))?function(e){var t=e*r.multiplier;return t>r.limit&&(t=r.limit),t+=t*r.jitter*Math.random()}:r,l=d.interval,h=void 0,m=void 0,s=!1,u=!1,y=new n(d.capacity);function b(){if(!u&&!s&&void 0!==d.token){if(!y.sent()){if(!y.length())return;var e=y.send();y.content=m?'{"logs":['+e.join(",")+"]}":e.join("\n")}s=!0;var t=new f.XMLHttpRequest;t.open(d.method,d.url,!0),t.setRequestHeader("Content-Type",h),d.token&&t.setRequestHeader("Authorization","Bearer "+d.token);var r=d.headers;for(var n in r)if(p.call(r,n)){var o=r[n];o&&t.setRequestHeader(n,o)}var i=void 0;d.timeout&&(i=f.setTimeout(function(){s=!1,t.abort(),a()},d.timeout)),t.onreadystatechange=function(){if(4===t.readyState)if(s=!1,f.clearTimeout(i),200===t.status)l=d.interval,y.confirm(),a(!0);else{if(401===t.status){var e=d.token;d.token=void 0,d.onUnauthorized(e)}a()}},t.send(y.content)}function a(e){e||(l=c(l||1),y.fail()),u=!0,f.setTimeout(function(){u=!1,b()},l)}}return a=e.methodFactory,v=function(s,e,u){var f=a(s,e,u),p=o&&d.stacktrace.levels.some(function(e){return e===s}),v=j.levels[s.toUpperCase()],g=v>=j.levels[d.level.toUpperCase()];return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];if(g){var n=d.timestamp(),o=p?k():"";if(o){var i=o.split("\n");i.splice(0,d.stacktrace.excess+3);var a=d.stacktrace.depth;if(a&&i.length!==a+1)o=i.splice(0,a).join("\n"),i.length&&(o+="\n and "+i.length+" more");else o=i.join("\n")}var c=d.format({message:w(t),level:{label:s,value:v},logger:u||"",timestamp:n,stacktrace:o});void 0===m&&(h=(m="string"!=typeof c)?"application/json":"text/plain");var l="";if(m)try{l+=JSON.stringify(c)}catch(e){return f.apply(void 0,t),void j.getLogger("logger").error(e)}else l+=c;y.push(l),b()}f.apply(void 0,t)}},e.methodFactory=v,e.setLevel(e.getLevel()),remote.setToken=function(e){d.token=e,b()},e},disable:function(){if(!j)throw new Error("You can't disable a not appled plugin");if(v!==j.methodFactory)throw new Error("You can't disable a plugin after appling another plugin");j.methodFactory=a,j.setLevel(j.getLevel()),j=void 0,remote.setToken=l},setToken:l};t.default=remote,e.exports=t.default});