@datadog/browser-logs
Advanced tools
Comparing version 1.21.0 to 1.24.0
@@ -1,1 +0,1 @@ | ||
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([,function(e,t,n){"use strict";n.r(t),n.d(t,"datadogLogs",(function(){return it})),n.d(t,"makeLogsGlobal",(function(){return at}));var r=function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function o(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function i(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var i=arguments[t],a=0,s=i.length;a<s;a++,o++)r[o]=i[a];return r}var a,s,u,c=1e3,l=60*c,f=60*l;!function(e){e.BEFORE_UNLOAD="beforeunload",e.CLICK="click",e.KEY_DOWN="keydown",e.LOAD="load",e.POP_STATE="popstate",e.SCROLL="scroll",e.TOUCH_START="touchstart",e.VISIBILITY_CHANGE="visibilitychange",e.DOM_CONTENT_LOADED="DOMContentLoaded"}(a||(a={})),function(e){e.DOCUMENT="document",e.XHR="xhr",e.BEACON="beacon",e.FETCH="fetch",e.CSS="css",e.JS="js",e.IMAGE="image",e.FONT="font",e.MEDIA="media",e.OTHER="other"}(s||(s={})),function(e){e.FETCH="fetch",e.XHR="xhr"}(u||(u={}));var d,p=function(e){return Array.isArray(e)},g=function(e){return!Array.isArray(e)&&"object"==typeof e};function h(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce((function(e,t){return p(e)&&p(t)?i(Array(Math.max(e.length,t.length))).map((function(n,r){return h(e[r],t[r])})):g(e)&&g(t)?Object.keys(t).reduce((function(n,o){var i;return r(r({},n),((i={})[o]=h(e[o],t[o]),i))}),e):void 0===t?e:t}),e)}function v(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];t.forEach((function(t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}))}function m(e){return e?(parseInt(e,10)^16*Math.random()>>parseInt(e,10)/4).toString(16):(1e7+"-1000-4000-8000-100000000000").replace(/[018]/g,m)}function b(){}function y(e,t,n){if(null==e)return JSON.stringify(e);var r=[!1,void 0];w(e)&&(r=[!0,e.toJSON],delete e.toJSON);var o,i,a=[!1,void 0];"object"==typeof e&&w(o=Object.getPrototypeOf(e))&&(a=[!0,o.toJSON],delete o.toJSON);try{i=JSON.stringify(e,void 0,n)}catch(e){i="<error: unable to serialize object>"}finally{r[0]&&(e.toJSON=r[1]),a[0]&&(o.toJSON=a[1])}return i}function w(e){return"object"==typeof e&&null!==e&&e.hasOwnProperty("toJSON")}function E(){return void 0===d&&(d=performance.timing.navigationStart),d}function x(e){if(e.origin)return e.origin;var t=e.host.replace(/(:80|:443)$/,"");return e.protocol+"//"+t}var T,O=c;function S(e,t,n,r){var o=new Date;o.setTime(o.getTime()+n);var i="expires="+o.toUTCString(),a=r&&r.crossSite?"none":"strict",s=r&&r.domain?";domain="+r.domain:"",u=r&&r.secure?";secure":"";document.cookie=e+"="+t+";"+i+";path=/;samesite="+a+s+u}function C(e){return function(e,t){var n=e.match("(?:^|;)\\s*"+t+"\\s*=\\s*([^;]+)");return n?n[1]:void 0}(document.cookie,e)}function L(e){if(void 0===document.cookie||null===document.cookie)return!1;try{return S("dd_cookie_test","test",c,{secure:e}),"test"===C("dd_cookie_test")}catch(e){return console.error(e),!1}}function k(e){return R(e,x(window.location)).href}function _(e,t){return M(e)===M(t)}function M(e){return x(R(e))}function R(e,t){if(function(){if(void 0!==T)return T;try{var e=new URL("http://test/path");return T="http://test/path"===e.href}catch(e){T=!1}return T}())return void 0!==t?new URL(e,t):new URL(e);if(void 0===t&&!/:/.test(e))throw new Error("Invalid URL: '"+e+"'");var n=document,r=n.createElement("a");if(void 0!==t){var o=(n=document.implementation.createHTMLDocument("")).createElement("base");o.href=t,n.head.appendChild(o),n.body.appendChild(r)}return r.href=e,r}var I={allowedTracingOrigins:[],isCollectingError:!0,maxErrorsByMinute:3e3,maxInternalMonitoringMessagesPerPage:15,resourceSampleRate:100,sampleRate:100,silentMultipleInit:!1,trackInteractions:!1,requestErrorResponseLengthLimit:32768,flushTimeout:30*c,maxBatchSize:50,maxMessageSize:262144,batchBytesLimit:16384};function B(e,t){var n={applicationId:e.applicationId,buildMode:t.buildMode,clientToken:e.clientToken,env:e.env,proxyHost:e.proxyHost,sdkVersion:t.sdkVersion,service:e.service,site:e.site||Ce[e.datacenter||t.datacenter],version:e.version},o=Array.isArray(e.enableExperimentalFeatures)?e.enableExperimentalFeatures:[],i=r({cookieOptions:{},isEnabled:function(e){return t=e,-1!==o.indexOf(t);var t},logsEndpoint:A("browser",n),proxyHost:e.proxyHost,rumEndpoint:A("rum",n),service:e.service,traceEndpoint:A("public-trace",n)},I);if(e.internalMonitoringApiKey&&(i.internalMonitoringEndpoint=A("browser",n,"browser-agent-internal-monitoring")),"allowedTracingOrigins"in e&&(i.allowedTracingOrigins=e.allowedTracingOrigins),"isCollectingError"in e&&(i.isCollectingError=!!e.isCollectingError),"sampleRate"in e&&(i.sampleRate=e.sampleRate),"resourceSampleRate"in e&&(i.resourceSampleRate=e.resourceSampleRate),"trackInteractions"in e&&(i.trackInteractions=!!e.trackInteractions),i.cookieOptions.secure=j(e),i.cookieOptions.crossSite=!!e.useCrossSiteSessionCookie,e.trackSessionAcrossSubdomains&&(i.cookieOptions.domain=function(){for(var e=window.location.hostname.split("."),t=e.pop();e.length&&!C("dd_site_test");)t=e.pop()+"."+t,S("dd_site_test","test",c,{domain:t});return t}()),n.buildMode===Se.E2E_TEST&&(void 0!==e.internalMonitoringEndpoint&&(i.internalMonitoringEndpoint=e.internalMonitoringEndpoint),void 0!==e.logsEndpoint&&(i.logsEndpoint=e.logsEndpoint),void 0!==e.rumEndpoint&&(i.rumEndpoint=e.rumEndpoint)),n.buildMode===Se.STAGING&&void 0!==e.replica){var a=r(r({},n),{applicationId:e.replica.applicationId,clientToken:e.replica.clientToken,site:Ce[ge.US]});i.replica={applicationId:e.replica.applicationId,internalMonitoringEndpoint:A("browser",a,"browser-agent-internal-monitoring"),logsEndpoint:A("browser",a),rumEndpoint:A("rum",a)}}return i}function A(e,t,n){var r="sdk_version:"+t.sdkVersion+(t.env?",env:"+t.env:"")+(t.service?",service:"+t.service:"")+(t.version?",version:"+t.version:""),o=e+"-http-intake.logs."+t.site,i=t.proxyHost?t.proxyHost:o,a=t.proxyHost?"ddhost="+o+"&":"",s=""+(t.applicationId?"_dd.application_id="+t.applicationId+"&":"")+a+"ddsource="+(n||"browser")+"&ddtags="+r;return"https://"+i+"/v1/input/"+t.clientToken+"?"+s}function N(e,t){return 0===function(e){var t=R(e).pathname;return"/"===t[0]?t:"/"+t}(e).indexOf("/v1/input/")&&(_(e,t.logsEndpoint)||_(e,t.rumEndpoint)||_(e,t.traceEndpoint)||!!t.internalMonitoringEndpoint&&_(e,t.internalMonitoringEndpoint)||!!t.replica&&(_(e,t.replica.logsEndpoint)||_(e,t.replica.rumEndpoint)||_(e,t.replica.internalMonitoringEndpoint)))}function j(e){return!!e.useSecureSessionCookie||!!e.useCrossSiteSessionCookie}var D="?",P=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function z(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var H=function(){var e,t,n,r,o,i,a=[];function s(e,t,n){var r;for(var o in a)if(z(a,o))try{a[o](e,t,n)}catch(e){r=e}if(r)throw r}function u(e,r,o,i,a){if(t)U.augmentStackTraceWithInitialElement(t,r,o,""+e),l();else if(a)s(U(a),!0,a);else{var u,c={url:r,column:i,line:o},f=e;if("[object String]"==={}.toString.call(e)){var d=f.match(P);d&&(u=d[1],f=d[2])}s({name:u,message:f,stack:[c]},!0)}return!!n&&n.apply(this,arguments)}function c(e){var t=e.reason||"Empty reason";s(U(t),!0,t)}function l(){var n=t,r=e;t=void 0,e=void 0,s(n,!1,r)}function f(n){if(t){if(e===n)return;l()}var r=U(n);throw t=r,e=n,setTimeout((function(){e===n&&l()}),r.incomplete?2e3:0),n}return f.subscribe=function(e){!function(){if(r)return;n=window.onerror,window.onerror=Z(u),r=!0}(),function(){if(i)return;o=null!==window.onunhandledrejection?window.onunhandledrejection:void 0,window.onunhandledrejection=Z(c),i=!0}(),a.push(e)},f.unsubscribe=function(e){for(var t=a.length-1;t>=0;t-=1)a[t]===e&&a.splice(t,1);0===a.length&&(r&&(window.onerror=n,r=!1),i&&(window.onunhandledrejection=o,i=!1))},f.traceKitWindowOnError=u,f}(),U=function(){var e=!1;function t(e){if(e.stack){for(var t,n,r,o,i=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,u=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),f=[],d=0,p=l.length;d<p;d+=1){if(i.exec(l[d])){var g=(r=i.exec(l[d]))[2]&&0===r[2].indexOf("native");t=r[2]&&0===r[2].indexOf("eval"),n=c.exec(r[2]),t&&n&&(r[2]=n[1],r[3]=n[2],r[4]=n[3]),o={args:g?[r[2]]:[],column:r[4]?+r[4]:void 0,func:r[1]||D,line:r[3]?+r[3]:void 0,url:g?void 0:r[2]}}else if(s.exec(l[d]))o={args:[],column:(r=s.exec(l[d]))[4]?+r[4]:void 0,func:r[1]||D,line:+r[3],url:r[2]};else{if(!a.exec(l[d]))continue;t=(r=a.exec(l[d]))[3]&&r[3].indexOf(" > eval")>-1,n=u.exec(r[3]),t&&n?(r[3]=n[1],r[4]=n[2],r[5]=void 0):0!==d||r[5]||void 0===e.columnNumber||(f[0].column=e.columnNumber+1),o={args:r[2]?r[2].split(","):[],column:r[5]?+r[5]:void 0,func:r[1]||D,line:r[4]?+r[4]:void 0,url:r[3]}}!o.func&&o.line&&(o.func=D),f.push(o)}if(f.length)return{stack:f,message:e.message,name:e.name}}}function n(e,t,n,r){var o={url:t,line:n?+n:void 0};if(o.url&&o.line){e.incomplete=!1;var i=e.stack;if(i.length>0&&i[0].url===o.url){if(i[0].line===o.line)return!1;if(!i[0].line&&i[0].func===o.func)return i[0].line=o.line,i[0].context=o.context,!1}return i.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,t){for(var o,i,a=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,s=[],u={},c=!1,l=r.caller;l&&!c;l=l.caller)l!==U&&l!==H&&(i={args:[],column:void 0,func:D,line:void 0,url:void 0},o=a.exec(l.toString()),l.name?i.func=l.name:o&&(i.func=o[1]),void 0===i.func&&(i.func=o?o.input.substring(0,o.input.indexOf("{")):void 0),u[""+l]?c=!0:u[""+l]=!0,s.push(i));t&&s.splice(0,t);var f={stack:s,message:e.message,name:e.name};return n(f,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),f}function o(n,o){var i,a=void 0===o?0:+o;try{if(i=function(e){var t=e.stacktrace;if(t){for(var n,r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,o=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,i=t.split("\n"),a=[],s=0;s<i.length;s+=2){var u=void 0;r.exec(i[s])?u={args:[],column:void 0,func:(n=r.exec(i[s]))[3],line:+n[1],url:n[2]}:o.exec(i[s])&&(u={args:(n=o.exec(i[s]))[5]?n[5].split(","):[],column:+n[2],func:n[3]||n[4],line:+n[1],url:n[6]}),u&&(!u.func&&u.line&&(u.func=D),u.context=[i[s+1]],a.push(u))}if(a.length)return{stack:a,message:e.message,name:e.name}}}(n))return i}catch(t){if(e)throw t}try{if(i=t(n))return i}catch(t){if(e)throw t}try{if(i=function(e){var t=e.message.split("\n");if(!(t.length<4)){var n,r=/^\s*Line (\d+) of linked script ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,o=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,i=/^\s*Line (\d+) of function script\s*$/i,a=[],s=window&&window.document&&window.document.getElementsByTagName("script"),u=[];for(var c in s)z(s,c)&&!s[c].src&&u.push(s[c]);for(var l=2;l<t.length;l+=2){var f=void 0;if(r.exec(t[l]))f={args:[],column:void 0,func:(n=r.exec(t[l]))[3],line:+n[1],url:n[2]};else if(o.exec(t[l]))f={args:[],column:void 0,func:(n=o.exec(t[l]))[4],line:+n[1],url:n[3]};else if(i.exec(t[l])){n=i.exec(t[l]),f={url:window.location.href.replace(/#.*$/,""),args:[],column:void 0,func:"",line:+n[1]}}f&&(f.func||(f.func=D),f.context=[t[l+1]],a.push(f))}if(a.length)return{stack:a,message:t[0],name:e.name}}}(n))return i}catch(t){if(e)throw t}try{if(i=r(n,a+1))return i}catch(t){if(e)throw t}return{message:n.message,name:n.name,stack:[]}}return o.augmentStackTraceWithInitialElement=n,o.computeStackTraceFromStackProp=t,o.ofCaller=function(e){var t=1+(void 0===e?0:+e);try{throw new Error}catch(e){return U(e,t+1)}},o}();var G=/[^\u0000-\u007F]/,F=function(){function e(e,t,n){void 0===n&&(n=!1),this.endpointUrl=e,this.bytesLimit=t,this.withBatchTime=n}return e.prototype.send=function(e,t){var n=this.withBatchTime?function(e){return e+(-1===e.indexOf("?")?"?":"&")+"batch_time="+(new Date).getTime()}(this.endpointUrl):this.endpointUrl;if(navigator.sendBeacon&&t<this.bytesLimit&&navigator.sendBeacon(n,e))return;var r=new XMLHttpRequest;r.open("POST",n,!0),r.send(e)},e}();var K,q=function(){function e(e,t,n,r,o,i){void 0===i&&(i=b),this.request=e,this.maxSize=t,this.bytesLimit=n,this.maxMessageSize=r,this.flushTimeout=o,this.beforeUnloadCallback=i,this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0,this.flushOnVisibilityHidden(),this.flushPeriodically()}return e.prototype.add=function(e){this.addOrUpdate(e)},e.prototype.upsert=function(e,t){this.addOrUpdate(e,t)},e.prototype.flush=function(){if(0!==this.bufferMessageCount){var e=i(this.pushOnlyBuffer,(t=this.upsertBuffer,n=[],Object.keys(t).forEach((function(e){n.push(t[e])})),n));this.request.send(e.join("\n"),this.bufferBytesSize),this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0}var t,n},e.prototype.sizeInBytes=function(e){return G.test(e)?void 0!==window.TextEncoder?(new TextEncoder).encode(e).length:new Blob([e]).size:e.length},e.prototype.addOrUpdate=function(e,t){var n=this.process(e),r=n.processedMessage,o=n.messageBytesSize;o>=this.maxMessageSize?console.warn("Discarded a message whose size was bigger than the maximum allowed size "+this.maxMessageSize+"KB."):(this.hasMessageFor(t)&&this.remove(t),this.willReachedBytesLimitWith(o)&&this.flush(),this.push(r,o,t),this.isFull()&&this.flush())},e.prototype.process=function(e){var t=y(e);return{processedMessage:t,messageBytesSize:this.sizeInBytes(t)}},e.prototype.push=function(e,t,n){this.bufferMessageCount>0&&(this.bufferBytesSize+=1),void 0!==n?this.upsertBuffer[n]=e:this.pushOnlyBuffer.push(e),this.bufferBytesSize+=t,this.bufferMessageCount+=1},e.prototype.remove=function(e){var t=this.upsertBuffer[e];delete this.upsertBuffer[e];var n=this.sizeInBytes(t);this.bufferBytesSize-=n,this.bufferMessageCount-=1,this.bufferMessageCount>0&&(this.bufferBytesSize-=1)},e.prototype.hasMessageFor=function(e){return void 0!==e&&void 0!==this.upsertBuffer[e]},e.prototype.willReachedBytesLimitWith=function(e){return this.bufferBytesSize+e+1>=this.bytesLimit},e.prototype.isFull=function(){return this.bufferMessageCount===this.maxSize||this.bufferBytesSize>=this.bytesLimit},e.prototype.flushPeriodically=function(){var e=this;setTimeout((function(){e.flush(),e.flushPeriodically()}),this.flushTimeout)},e.prototype.flushOnVisibilityHidden=function(){var e=this;navigator.sendBeacon&&(window.addEventListener(a.BEFORE_UNLOAD,Z(this.beforeUnloadCallback)),document.addEventListener(a.VISIBILITY_CHANGE,Z((function(){"hidden"===document.visibilityState&&e.flush()}))),window.addEventListener(a.BEFORE_UNLOAD,Z((function(){return e.flush()}))))},e}();!function(e){e.info="info",e.error="error"}(K||(K={}));var $,V,X,J={maxMessagesPerPage:0,sentMessageCount:0};function W(e){if(e.internalMonitoringEndpoint){var t=function(e){var t,n=r(e.internalMonitoringEndpoint);void 0!==e.replica&&(t=r(e.replica.internalMonitoringEndpoint));function r(t){return new q(new F(t,e.batchBytesLimit),e.maxBatchSize,e.batchBytesLimit,e.maxMessageSize,e.flushTimeout)}return{add:function(e){var r=function(e){return h({date:(new Date).getTime(),view:{referrer:document.referrer,url:window.location.href}},void 0!==$?$():{},e)}(e);n.add(r),t&&t.add(r)}}}(e);v(J,{batch:t,maxMessagesPerPage:e.maxInternalMonitoringMessagesPerPage,sentMessageCount:0})}return{setExternalContextProvider:function(e){$=e}}}function Y(e,t,n){var r=n.value;n.value=function(){var e=J.batch?Z(r):r;return e.apply(this,arguments)}}function Z(e){return function(){try{return e.apply(this,arguments)}catch(e){ne(e);try{Q(e)}catch(e){ne(e)}}}}function Q(e){ee(r(r({},function(e){if(e instanceof Error){var t=U(e);return{error:{kind:t.name,stack:Ee(t)},message:t.message}}return{error:{stack:"Not an instance of error"},message:"Uncaught "+y(e)}}(e)),{status:K.error}))}function ee(e){J.batch&&J.sentMessageCount<J.maxMessagesPerPage&&(J.sentMessageCount+=1,J.batch.add(e))}function te(e){J.debugMode=e}function ne(e){J.debugMode&&console.warn("[INTERNAL ERROR]",e)}var re=[],oe=[];function ie(){return V||(!function(){if(!window.fetch)return;X=window.fetch,window.fetch=Z((function(e,t){var n=this,r=t&&t.method||"object"==typeof e&&e.method||"GET",i=k("object"==typeof e&&e.url||e),a={init:t,method:r,startTime:performance.now(),url:i},s=function(e){return t=n,r=void 0,s=function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return a.duration=performance.now()-a.startTime,"stack"in e||e instanceof Error?(a.status=0,a.response=Ee(U(e)),oe.forEach((function(e){return e(a)})),[3,6]):[3,1];case 1:if(!("status"in e))return[3,6];t=void 0,r.label=2;case 2:return r.trys.push([2,4,,5]),[4,e.clone().text()];case 3:return t=r.sent(),[3,5];case 4:return n=r.sent(),t="Unable to retrieve response: "+n,[3,5];case 5:a.response=t,a.responseType=e.type,a.status=e.status,oe.forEach((function(e){return e(a)})),r.label=6;case 6:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,n){function o(e){try{u(s.next(e))}catch(e){n(e)}}function a(e){try{u(s.throw(e))}catch(e){n(e)}}function u(t){t.done?e(t.value):new i((function(e){e(t.value)})).then(o,a)}u((s=s.apply(t,r||[])).next())}));var t,r,i,s};re.forEach((function(e){return e(a)}));var u=X.call(this,e,a.init);return u.then(Z(s),Z(s)),u}))}(),V={beforeSend:function(e){re.push(e)},onRequestComplete:function(e){oe.push(e)}}),V}var ae,se,ue,ce,le,fe,de,pe,ge,he=function(){function e(){this.observers=[]}return e.prototype.subscribe=function(e){this.observers.push(e)},e.prototype.notify=function(e){this.observers.forEach((function(t){return t(e)}))},e}(),ve=[],me=[];function be(){return ae||(se=XMLHttpRequest.prototype.open,ue=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=Z((function(e,t){return this._datadog_xhr={method:e,startTime:-1,url:k(t)},se.apply(this,arguments)})),XMLHttpRequest.prototype.send=Z((function(e){var t=this;if(this._datadog_xhr){this._datadog_xhr.startTime=performance.now();var n=this.onreadystatechange;this.onreadystatechange=function(){this.readyState===XMLHttpRequest.DONE&&Z(o)(),n&&n.apply(this,arguments)};var r=!1,o=function(){r||(r=!0,t._datadog_xhr.duration=performance.now()-t._datadog_xhr.startTime,t._datadog_xhr.response=t.response,t._datadog_xhr.status=t.status,me.forEach((function(e){return e(t._datadog_xhr)})))};this.addEventListener("loadend",Z(o)),ve.forEach((function(e){return e(t._datadog_xhr,t)}))}return ue.apply(this,arguments)})),ae={beforeSend:function(e){ve.push(e)},onRequestComplete:function(e){me.push(e)}}),ae}function ye(e){if(!le){var t=new he;!function(e,t){function n(n,r){N(r.url,e)||!function(e){return 0===e.status&&"opaque"!==e.responseType}(r)&&!function(e){return e.status>=500}(r)||t.notify({context:{error:{origin:ce.NETWORK,stack:xe(r.response,e)||"Failed to load"},http:{method:r.method,status_code:r.status,url:r.url}},message:Te(n)+" error "+r.method+" "+r.url,startTime:r.startTime})}be().onRequestComplete((function(e){return n(u.XHR,e)})),ie().onRequestComplete((function(e){return n(u.FETCH,e)}))}(e,t),function(e){fe=console.error,console.error=Z((function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];fe.apply(console,i([t],n)),e.notify({context:{error:{origin:ce.CONSOLE}},message:i(["console error:",t],n).map(we).join(" "),startTime:performance.now()})}))}(t),function(e){de=function(t,n,r){e.notify(function(e,t){var n,r;void 0!==e.message||t instanceof Error?(n=e.message||"Empty message",r=Ee(e)):(n="Uncaught "+y(t),r="No stack, consider using an instance of Error");return{message:n,context:{error:{stack:r,kind:e.name,origin:ce.SOURCE}},startTime:performance.now()}}(t,r))},H.subscribe(de)}(t),le=function(e,t){var n=0,r=new he;return t.subscribe((function(t){n<e.maxErrorsByMinute?(n+=1,r.notify(t)):n===e.maxErrorsByMinute&&(n+=1,r.notify({context:{error:{origin:ce.AGENT}},message:"Reached max number of errors by minute: "+e.maxErrorsByMinute,startTime:performance.now()}))})),setInterval((function(){return n=0}),l),r}(e,t)}return le}function we(e){return"string"==typeof e?e:e instanceof Error?Ee(U(e)):y(e,0,2)}function Ee(e){var t=(e.name||"Error")+": "+e.message;return e.stack.forEach((function(e){var n="?"===e.func?"<anonymous>":e.func,r=e.args&&e.args.length>0?"("+e.args.join(", ")+")":"",o=e.line?":"+e.line:"",i=e.line&&e.column?":"+e.column:"";t+="\n at "+n+r+" @ "+e.url+o+i})),t}function xe(e,t){return e&&e.length>t.requestErrorResponseLengthLimit?e.substring(0,t.requestErrorResponseLengthLimit)+"...":e}function Te(e){return u.XHR===e?"XHR":"Fetch"}function Oe(e){console.warn("'"+e+"' not yet available, please call '.init()' first.")}!function(e){e.AGENT="agent",e.CONSOLE="console",e.NETWORK="network",e.SOURCE="source",e.LOGGER="logger"}(ce||(ce={})),function(e){e.US="us",e.EU="eu"}(ge||(ge={}));var Se,Ce=((pe={})[ge.EU]="datadoghq.eu",pe[ge.US]="datadoghq.com",pe);function Le(){return"file:"!==window.location.protocol||(console.error("Execution is not allowed in the current context."),!1)}!function(e){e.RELEASE="release",e.STAGING="staging",e.E2E_TEST="e2e-test"}(Se||(Se={}));var ke,_e,Me={buildMode:"release",datacenter:"us",sdkVersion:"1.21.0"};!function(e){e.debug="debug",e.info="info",e.warn="warn",e.error="error"}(_e||(_e={}));var Re,Ie,Be=((ke={})[_e.debug]=0,ke[_e.info]=1,ke[_e.warn]=2,ke[_e.error]=3,ke);Object.keys(_e);function Ae(e,t,n,o){var i,a={};o.setExternalContextProvider((function(){return h({session_id:n.getId()},a,De())}));var s=function(e,t,n){var r,o=i(e.logsEndpoint);void 0!==e.replica&&(r=i(e.replica.logsEndpoint));function i(t){return new q(new F(t,e.batchBytesLimit),e.maxBatchSize,e.batchBytesLimit,e.maxMessageSize,e.flushTimeout)}return{add:function(i){var a=function(r){return h({date:(new Date).getTime(),service:e.service,session_id:t.getId(),view:{referrer:document.referrer,url:window.location.href}},n(),De(),r)}(i);o.add(a),r&&r.add(a)}}}(t,n,(function(){return a})),u=((i={})[Re.console]=function(e){return console.log(e.status+": "+e.message)},i[Re.http]=function(e){return s.add(e)},i[Re.silent]=b,i),c=new je(n,u);Ie={},e.subscribe((function(e){return c.error(e.message,h(r({date:(t=e.startTime,Math.floor(E()+t))},e.context),De(e.startTime)));var t}));var l={setLoggerGlobalContext:function(e){a=e},addLoggerGlobalContext:function(e,t){a[e]=t},removeLoggerGlobalContext:function(e){delete a[e]}};return l.createLogger=function(e,t){return function(n,o){return void 0===o&&(o={}),Ie[n]=new je(e,t,o.handler,o.level,r(r({},o.context),{logger:{name:n}})),Ie[n]}}(n,u),l.getLogger=Ne,l.logger=c,l}function Ne(e){return Ie[e]}!function(e){e.http="http",e.console="console",e.silent="silent"}(Re||(Re={}));var je=function(){function e(e,t,n,r,o){void 0===n&&(n=Re.http),void 0===r&&(r=_e.debug),void 0===o&&(o={}),this.session=e,this.handlers=t,this.level=r,this.loggerContext=o,this.handler=this.handlers[n]}return e.prototype.log=function(e,t,n){void 0===t&&(t={}),void 0===n&&(n=_e.info),this.session.isTracked()&&Be[n]>=Be[this.level]&&this.handler(r({message:e,status:n},h({},this.loggerContext,t)))},e.prototype.debug=function(e,t){void 0===t&&(t={}),this.log(e,t,_e.debug)},e.prototype.info=function(e,t){void 0===t&&(t={}),this.log(e,t,_e.info)},e.prototype.warn=function(e,t){void 0===t&&(t={}),this.log(e,t,_e.warn)},e.prototype.error=function(e,t){void 0===t&&(t={});var n={error:{origin:ce.LOGGER}};this.log(e,h({},n,t),_e.error)},e.prototype.setContext=function(e){this.loggerContext=e},e.prototype.addContext=function(e,t){this.loggerContext[e]=t},e.prototype.removeContext=function(e){delete this.loggerContext[e]},e.prototype.setHandler=function(e){this.handler=this.handlers[e]},e.prototype.setLevel=function(e){this.level=e},function(e,t,n,r){var o,i=arguments.length,a=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);i>3&&a&&Object.defineProperty(t,n,a)}([Y],e.prototype,"log",null),e}();function De(e){var t=window.DD_RUM;return t&&t.getInternalContext?t.getInternalContext(e):void 0}var Pe="_dd",ze="_dd_r",He="_dd_l",Ue="rum",Ge="logs";var Fe="_dd_s",Ke=15*l,qe=4*f,$e=l;function Ve(e,t,n){var r=function(e,t){var n,r,o=!1,i=function(){o=!0,window.clearTimeout(n),n=window.setTimeout((function(){o=!1}),O)};return{get:function(){return o?r:(r=C(e),i(),r)},set:function(n,o){S(e,n,o,t),r=n,i()}}}(Fe,e);!function(e){var t=e.get(),n=C(Pe),r=C(ze),o=C(He);if(!t){var i={};n&&(i.id=n),o&&/^[01]$/.test(o)&&(i[Ge]=o),r&&/^[012]$/.test(r)&&(i[Ue]=r),Ye(i,e)}}(r);var o=new he,i=We(r).id,s=function(e,t,n){var r,o=!n||void 0===n.leading||n.leading,i=!n||void 0===n.trailing||n.trailing,a=!1,s=!1;return{throttled:function(){var n=this;a?s=!0:(o?e.apply(this):s=!0,a=!0,r=window.setTimeout((function(){i&&s&&e.apply(n),a=!1,s=!1}),t))},cancel:function(){window.clearTimeout(r),a=!1,s=!1}}}((function(){var e=We(r),a=n(e[t]),s=a.trackingType,u=a.isTracked;e[t]=s,u&&!e.id&&(e.id=m(),e.created=String(Date.now())),Ye(e,r),u&&i!==e.id&&(i=e.id,o.notify())}),O).throttled;return s(),function(e){var t=Z(e),n={capture:!0,passive:!0};[a.CLICK,a.TOUCH_START,a.KEY_DOWN,a.SCROLL].forEach((function(e){document.addEventListener(e,t,n),Qe.push((function(){return document.removeEventListener(e,t,n)}))}))}(s),function(e){var t=Z((function(){"visible"===document.visibilityState&&e()})),n=window.setInterval(t,$e);document.addEventListener(a.VISIBILITY_CHANGE,t),Qe.push((function(){clearInterval(n),document.removeEventListener(a.VISIBILITY_CHANGE,t)}))}((function(){Ye(We(r),r)})),{getId:function(){return We(r).id},getTrackingType:function(){return We(r)[t]},renewObservable:o}}var Xe=/^([a-z]+)=([a-z0-9-]+)$/,Je="&";function We(e){var t=function(e){var t=e.get(),n={};(function(e){return void 0!==e&&(-1!==e.indexOf(Je)||Xe.test(e))})(t)&&t.split(Je).forEach((function(e){var t=Xe.exec(e);if(null!==t){var r=t[1],o=t[2];n[r]=o}}));return n}(e);return function(e){return(void 0===e.created||Date.now()-Number(e.created)<qe)&&(void 0===e.expire||Date.now()<Number(e.expire))}(t)?t:(Ze(e),{})}function Ye(e,t){if(n=e,0!==Object.keys(n).length){var n;e.expire=String(Date.now()+Ke);var r=function(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}(e).map((function(e){return e[0]+"="+e[1]})).join(Je);t.set(r,Ke)}else Ze(t)}function Ze(e){e.set("",0)}var Qe=[];var et,tt="logs";function nt(e,t){if(!t){var n=rt(e)===et.TRACKED;return{getId:function(){},isTracked:function(){return n}}}var r=Ve(e.cookieOptions,tt,(function(t){return function(e,t){var n=function(e){return e===et.NOT_TRACKED||e===et.TRACKED}(t)?t:rt(e);return{trackingType:n,isTracked:n===et.TRACKED}}(e,t)}));return{getId:r.getId,isTracked:function(){return r.getTrackingType()===et.TRACKED}}}function rt(e){return 0!==(t=e.sampleRate)&&100*Math.random()<=t?et.TRACKED:et.NOT_TRACKED;var t}!function(e){e.NOT_TRACKED="0",e.TRACKED="1"}(et||(et={}));var ot={debug:function(e,t){Oe("logs.logger.debug")},error:function(e,t){Oe("logs.logger.error")},info:function(e,t){Oe("logs.logger.info")},log:function(e,t,n){Oe("logs.logger.log")},warn:function(e,t){Oe("logs.logger.warn")},setContext:function(e){Oe("logs.logger.setContext")},addContext:function(e,t){Oe("logs.logger.addContext")},removeContext:function(e){Oe("logs.logger.removeContext")},setHandler:function(e){Oe("logs.logger.setHandler")},setLevel:function(e){Oe("logs.logger.setLevel")}},it=at({logger:ot,init:function(e){Oe("core.init")},addLoggerGlobalContext:function(e,t){Oe("addLoggerGlobalContext")},removeLoggerGlobalContext:function(e){Oe("removeLoggerGlobalContext")},setLoggerGlobalContext:function(e){Oe("setLoggerGlobalContext")},createLogger:function(e,t){return Oe("createLogger"),ot},getLogger:function(e){Oe("getLogger")}});function at(e){var t=function(e){var t=r({},e);return Object.defineProperty(t,"_setDebug",{get:function(){return te},enumerable:!1}),t}(e),n=!1;return t.init=Z((function(e){if(Le()&&function(e){if(n)return e.silentMultipleInit||console.error("DD_LOGS is already initialized."),!1;if(!e||!e.publicApiKey&&!e.clientToken)return console.error("Client Token is not configured, we will not send any data."),!1;if(void 0!==e.sampleRate&&(t=e.sampleRate,!(function(e){return"number"==typeof e}(t)&&t>=0&&t<=100)))return console.error("Sample Rate should be a number between 0 and 100"),!1;var t;return!0}(e)){e.publicApiKey&&(e.clientToken=e.publicApiKey,console.warn("Public API Key is deprecated. Please use Client Token instead."));var o=!1!==e.forwardErrorsToLogs,i=function(e,t){var n=B(e,t),r=W(n);return{configuration:n,errorObservable:n.isCollectingError?ye(n):new he,internalMonitoring:r}}(r(r({},e),{isCollectingError:o}),Me),a=i.errorObservable,s=i.configuration,u=i.internalMonitoring,c=Ae(a,s,nt(s,L(j(e))),u);v(t,c),n=!0}})),t}(function(){if("object"==typeof globalThis)return globalThis;Object.defineProperty(Object.prototype,"_dd_temp_",{get:function(){return this},configurable:!0});var e=_dd_temp_;return delete Object.prototype._dd_temp_,"object"!=typeof e&&(e="object"==typeof self?self:"object"==typeof window?window:{}),e}()).DD_LOGS=it}]); | ||
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([,function(e,t,n){"use strict";n.r(t),n.d(t,"datadogLogs",(function(){return st})),n.d(t,"makeLogsGlobal",(function(){return ut}));var r=function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function o(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function i(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var i=arguments[t],a=0,s=i.length;a<s;a++,o++)r[o]=i[a];return r}var a,s,u,c=1e3,f=60*c,l=60*f;!function(e){e.BEFORE_UNLOAD="beforeunload",e.CLICK="click",e.KEY_DOWN="keydown",e.LOAD="load",e.POP_STATE="popstate",e.SCROLL="scroll",e.TOUCH_START="touchstart",e.VISIBILITY_CHANGE="visibilitychange",e.DOM_CONTENT_LOADED="DOMContentLoaded"}(a||(a={})),function(e){e.DOCUMENT="document",e.XHR="xhr",e.BEACON="beacon",e.FETCH="fetch",e.CSS="css",e.JS="js",e.IMAGE="image",e.FONT="font",e.MEDIA="media",e.OTHER="other"}(s||(s={})),function(e){e.FETCH="fetch",e.XHR="xhr"}(u||(u={}));var d,p=function(e){return Array.isArray(e)},h=function(e){return!Array.isArray(e)&&"object"==typeof e&&null!==e};function v(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r=t.length-1;r>=0;r-=1){var o=t[r];if(void 0!==o){if(void 0===e)if(h(o))e={};else{if(!p(o)){e=o;break}e=[]}if(h(e)&&h(o))for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(e[i]=v(o[i],e[i]));else{if(!p(e)||!p(o))break;e.length=Math.max(e.length,o.length);for(var a=0;a<o.length;a+=1)e[a]=v(o[a],e[a])}}}return e}function g(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return v.apply(void 0,i([e],t.filter((function(e){return null!==e}))))}function m(e){return e?(parseInt(e,10)^16*Math.random()>>parseInt(e,10)/4).toString(16):(1e7+"-1000-4000-8000-100000000000").replace(/[018]/g,m)}function y(){}function b(e,t,n){if(null==e)return JSON.stringify(e);var r=[!1,void 0];w(e)&&(r=[!0,e.toJSON],delete e.toJSON);var o,i,a=[!1,void 0];"object"==typeof e&&w(o=Object.getPrototypeOf(e))&&(a=[!0,o.toJSON],delete o.toJSON);try{i=JSON.stringify(e,void 0,n)}catch(e){i="<error: unable to serialize object>"}finally{r[0]&&(e.toJSON=r[1]),a[0]&&(o.toJSON=a[1])}return i}function w(e){return"object"==typeof e&&null!==e&&e.hasOwnProperty("toJSON")}function E(){return void 0===d&&(d=performance.timing.navigationStart),d}function T(e){if(e.origin)return e.origin;var t=e.host.replace(/(:80|:443)$/,"");return e.protocol+"//"+t}var x,O=c;function S(e,t,n,r){var o=new Date;o.setTime(o.getTime()+n);var i="expires="+o.toUTCString(),a=r&&r.crossSite?"none":"strict",s=r&&r.domain?";domain="+r.domain:"",u=r&&r.secure?";secure":"";document.cookie=e+"="+t+";"+i+";path=/;samesite="+a+s+u}function k(e){return function(e,t){var n=e.match("(?:^|;)\\s*"+t+"\\s*=\\s*([^;]+)");return n?n[1]:void 0}(document.cookie,e)}function M(e){if(void 0===document.cookie||null===document.cookie)return!1;try{return S("dd_cookie_test","test",c,e),"test"===k("dd_cookie_test")}catch(e){return console.error(e),!1}}function _(e){return C(e,T(window.location)).href}function R(e,t){return L(e)===L(t)}function L(e){return T(C(e))}function C(e,t){if(function(){if(void 0!==x)return x;try{var e=new URL("http://test/path");return x="http://test/path"===e.href}catch(e){x=!1}return x}())return void 0!==t?new URL(e,t):new URL(e);if(void 0===t&&!/:/.test(e))throw new Error("Invalid URL: '"+e+"'");var n=document,r=n.createElement("a");if(void 0!==t){var o=(n=document.implementation.createHTMLDocument("")).createElement("base");o.href=t,n.head.appendChild(o),n.body.appendChild(r)}return r.href=e,r}var I={allowedTracingOrigins:[],maxErrorsByMinute:3e3,maxInternalMonitoringMessagesPerPage:15,resourceSampleRate:100,sampleRate:100,silentMultipleInit:!1,trackInteractions:!1,requestErrorResponseLengthLimit:32768,flushTimeout:30*c,maxBatchSize:50,maxMessageSize:262144,batchBytesLimit:16384};function N(e){var t={};return t.secure=function(e){return!!e.useSecureSessionCookie||!!e.useCrossSiteSessionCookie}(e),t.crossSite=!!e.useCrossSiteSessionCookie,e.trackSessionAcrossSubdomains&&(t.domain=function(){for(var e=window.location.hostname.split("."),t=e.pop();e.length&&!k("dd_site_test");)t=e.pop()+"."+t,S("dd_site_test","test",c,{domain:t});return t}()),t}function B(e,t,n){var r="sdk_version:"+t.sdkVersion+(t.env?",env:"+t.env:"")+(t.service?",service:"+t.service:"")+(t.version?",version:"+t.version:""),o=e+"-http-intake.logs."+t.site,i=t.proxyHost?t.proxyHost:o,a=t.proxyHost?"ddhost="+o+"&":"",s=""+(t.applicationId?"_dd.application_id="+t.applicationId+"&":"")+a+"ddsource="+(n||"browser")+"&ddtags="+r;return"https://"+i+"/v1/input/"+t.clientToken+"?"+s}function A(e,t){return-1!==function(e){var t=C(e).pathname;return"/"===t[0]?t:"/"+t}(e).indexOf("/v1/input/")&&(R(e,t.logsEndpoint)||R(e,t.rumEndpoint)||R(e,t.traceEndpoint)||!!t.internalMonitoringEndpoint&&R(e,t.internalMonitoringEndpoint)||!!t.replica&&(R(e,t.replica.logsEndpoint)||R(e,t.replica.rumEndpoint)||R(e,t.replica.internalMonitoringEndpoint)))}var D="?",j=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var U=function(){var e,t,n,r,o,i,a=[];function s(e,t,n){var r;for(var o in a)if(P(a,o))try{a[o](e,t,n)}catch(e){r=e}if(r)throw r}function u(e,r,o,i,a){if(t)z.augmentStackTraceWithInitialElement(t,r,o,""+e),f();else if(a)s(z(a),!0,a);else{var u,c={url:r,column:i,line:o},l=e;if("[object String]"==={}.toString.call(e)){var d=l.match(j);d&&(u=d[1],l=d[2])}s({name:u,message:l,stack:[c]},!0)}return!!n&&n.apply(this,arguments)}function c(e){var t=e.reason||"Empty reason";s(z(t),!0,t)}function f(){var n=t,r=e;t=void 0,e=void 0,s(n,!1,r)}function l(n){if(t){if(e===n)return;f()}var r=z(n);throw t=r,e=n,setTimeout((function(){e===n&&f()}),r.incomplete?2e3:0),n}return l.subscribe=function(e){!function(){if(r)return;n=window.onerror,window.onerror=Y(u),r=!0}(),function(){if(i)return;o=null!==window.onunhandledrejection?window.onunhandledrejection:void 0,window.onunhandledrejection=Y(c),i=!0}(),a.push(e)},l.unsubscribe=function(e){for(var t=a.length-1;t>=0;t-=1)a[t]===e&&a.splice(t,1);0===a.length&&(r&&(window.onerror=n,r=!1),i&&(window.onunhandledrejection=o,i=!1))},l.traceKitWindowOnError=u,l}(),z=function(){var e=!1;function t(e){if(e.stack){for(var t,n,r,o,i=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,u=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,f=e.stack.split("\n"),l=[],d=0,p=f.length;d<p;d+=1){if(i.exec(f[d])){var h=(r=i.exec(f[d]))[2]&&0===r[2].indexOf("native");t=r[2]&&0===r[2].indexOf("eval"),n=c.exec(r[2]),t&&n&&(r[2]=n[1],r[3]=n[2],r[4]=n[3]),o={args:h?[r[2]]:[],column:r[4]?+r[4]:void 0,func:r[1]||D,line:r[3]?+r[3]:void 0,url:h?void 0:r[2]}}else if(s.exec(f[d]))o={args:[],column:(r=s.exec(f[d]))[4]?+r[4]:void 0,func:r[1]||D,line:+r[3],url:r[2]};else{if(!a.exec(f[d]))continue;t=(r=a.exec(f[d]))[3]&&r[3].indexOf(" > eval")>-1,n=u.exec(r[3]),t&&n?(r[3]=n[1],r[4]=n[2],r[5]=void 0):0!==d||r[5]||void 0===e.columnNumber||(l[0].column=e.columnNumber+1),o={args:r[2]?r[2].split(","):[],column:r[5]?+r[5]:void 0,func:r[1]||D,line:r[4]?+r[4]:void 0,url:r[3]}}!o.func&&o.line&&(o.func=D),l.push(o)}if(l.length)return{stack:l,message:e.message,name:e.name}}}function n(e,t,n,r){var o={url:t,line:n?+n:void 0};if(o.url&&o.line){e.incomplete=!1;var i=e.stack;if(i.length>0&&i[0].url===o.url){if(i[0].line===o.line)return!1;if(!i[0].line&&i[0].func===o.func)return i[0].line=o.line,i[0].context=o.context,!1}return i.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,t){for(var o,i,a=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,s=[],u={},c=!1,f=r.caller;f&&!c;f=f.caller)f!==z&&f!==U&&(i={args:[],column:void 0,func:D,line:void 0,url:void 0},o=a.exec(f.toString()),f.name?i.func=f.name:o&&(i.func=o[1]),void 0===i.func&&(i.func=o?o.input.substring(0,o.input.indexOf("{")):void 0),u[""+f]?c=!0:u[""+f]=!0,s.push(i));t&&s.splice(0,t);var l={stack:s,message:e.message,name:e.name};return n(l,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),l}function o(n,o){var i,a=void 0===o?0:+o;try{if(i=function(e){var t=e.stacktrace;if(t){for(var n,r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,o=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,i=t.split("\n"),a=[],s=0;s<i.length;s+=2){var u=void 0;r.exec(i[s])?u={args:[],column:void 0,func:(n=r.exec(i[s]))[3],line:+n[1],url:n[2]}:o.exec(i[s])&&(u={args:(n=o.exec(i[s]))[5]?n[5].split(","):[],column:+n[2],func:n[3]||n[4],line:+n[1],url:n[6]}),u&&(!u.func&&u.line&&(u.func=D),u.context=[i[s+1]],a.push(u))}if(a.length)return{stack:a,message:e.message,name:e.name}}}(n))return i}catch(t){if(e)throw t}try{if(i=t(n))return i}catch(t){if(e)throw t}try{if(i=function(e){var t=e.message.split("\n");if(!(t.length<4)){var n,r=/^\s*Line (\d+) of linked script ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,o=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,i=/^\s*Line (\d+) of function script\s*$/i,a=[],s=window&&window.document&&window.document.getElementsByTagName("script"),u=[];for(var c in s)P(s,c)&&!s[c].src&&u.push(s[c]);for(var f=2;f<t.length;f+=2){var l=void 0;if(r.exec(t[f]))l={args:[],column:void 0,func:(n=r.exec(t[f]))[3],line:+n[1],url:n[2]};else if(o.exec(t[f]))l={args:[],column:void 0,func:(n=o.exec(t[f]))[4],line:+n[1],url:n[3]};else if(i.exec(t[f])){n=i.exec(t[f]),l={url:window.location.href.replace(/#.*$/,""),args:[],column:void 0,func:"",line:+n[1]}}l&&(l.func||(l.func=D),l.context=[t[f+1]],a.push(l))}if(a.length)return{stack:a,message:t[0],name:e.name}}}(n))return i}catch(t){if(e)throw t}try{if(i=r(n,a+1))return i}catch(t){if(e)throw t}return{message:n.message,name:n.name,stack:[]}}return o.augmentStackTraceWithInitialElement=n,o.computeStackTraceFromStackProp=t,o.ofCaller=function(e){var t=1+(void 0===e?0:+e);try{throw new Error}catch(e){return z(e,t+1)}},o}();var H=/[^\u0000-\u007F]/,G=function(){function e(e,t,n){void 0===n&&(n=!1),this.endpointUrl=e,this.bytesLimit=t,this.withBatchTime=n}return e.prototype.send=function(e,t){var n=this.withBatchTime?function(e){return e+(-1===e.indexOf("?")?"?":"&")+"batch_time="+(new Date).getTime()}(this.endpointUrl):this.endpointUrl;if(navigator.sendBeacon&&t<this.bytesLimit&&navigator.sendBeacon(n,e))return;var r=new XMLHttpRequest;r.open("POST",n,!0),r.send(e)},e}();var F,K=function(){function e(e,t,n,r,o,i){void 0===i&&(i=y),this.request=e,this.maxSize=t,this.bytesLimit=n,this.maxMessageSize=r,this.flushTimeout=o,this.beforeUnloadCallback=i,this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0,this.flushOnVisibilityHidden(),this.flushPeriodically()}return e.prototype.add=function(e){this.addOrUpdate(e)},e.prototype.upsert=function(e,t){this.addOrUpdate(e,t)},e.prototype.flush=function(){if(0!==this.bufferMessageCount){var e=i(this.pushOnlyBuffer,(t=this.upsertBuffer,n=[],Object.keys(t).forEach((function(e){n.push(t[e])})),n));this.request.send(e.join("\n"),this.bufferBytesSize),this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0}var t,n},e.prototype.sizeInBytes=function(e){return H.test(e)?void 0!==window.TextEncoder?(new TextEncoder).encode(e).length:new Blob([e]).size:e.length},e.prototype.addOrUpdate=function(e,t){var n=this.process(e),r=n.processedMessage,o=n.messageBytesSize;o>=this.maxMessageSize?console.warn("Discarded a message whose size was bigger than the maximum allowed size "+this.maxMessageSize+"KB."):(this.hasMessageFor(t)&&this.remove(t),this.willReachedBytesLimitWith(o)&&this.flush(),this.push(r,o,t),this.isFull()&&this.flush())},e.prototype.process=function(e){var t=b(e);return{processedMessage:t,messageBytesSize:this.sizeInBytes(t)}},e.prototype.push=function(e,t,n){this.bufferMessageCount>0&&(this.bufferBytesSize+=1),void 0!==n?this.upsertBuffer[n]=e:this.pushOnlyBuffer.push(e),this.bufferBytesSize+=t,this.bufferMessageCount+=1},e.prototype.remove=function(e){var t=this.upsertBuffer[e];delete this.upsertBuffer[e];var n=this.sizeInBytes(t);this.bufferBytesSize-=n,this.bufferMessageCount-=1,this.bufferMessageCount>0&&(this.bufferBytesSize-=1)},e.prototype.hasMessageFor=function(e){return void 0!==e&&void 0!==this.upsertBuffer[e]},e.prototype.willReachedBytesLimitWith=function(e){return this.bufferBytesSize+e+1>=this.bytesLimit},e.prototype.isFull=function(){return this.bufferMessageCount===this.maxSize||this.bufferBytesSize>=this.bytesLimit},e.prototype.flushPeriodically=function(){var e=this;setTimeout((function(){e.flush(),e.flushPeriodically()}),this.flushTimeout)},e.prototype.flushOnVisibilityHidden=function(){var e=this;navigator.sendBeacon&&(window.addEventListener(a.BEFORE_UNLOAD,Y(this.beforeUnloadCallback)),document.addEventListener(a.VISIBILITY_CHANGE,Y((function(){"hidden"===document.visibilityState&&e.flush()}))),window.addEventListener(a.BEFORE_UNLOAD,Y((function(){return e.flush()}))))},e}();!function(e){e.info="info",e.error="error"}(F||(F={}));var q,$,V,X={maxMessagesPerPage:0,sentMessageCount:0};function J(e){if(e.internalMonitoringEndpoint){var t=function(e){var t,n=r(e.internalMonitoringEndpoint);void 0!==e.replica&&(t=r(e.replica.internalMonitoringEndpoint));function r(t){return new K(new G(t,e.batchBytesLimit),e.maxBatchSize,e.batchBytesLimit,e.maxMessageSize,e.flushTimeout)}return{add:function(e){var r=function(e){return g({date:(new Date).getTime(),view:{referrer:document.referrer,url:window.location.href}},void 0!==q?q():{},e)}(e);n.add(r),t&&t.add(r)}}}(e);!function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];t.forEach((function(t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}))}(X,{batch:t,maxMessagesPerPage:e.maxInternalMonitoringMessagesPerPage,sentMessageCount:0})}return{setExternalContextProvider:function(e){q=e}}}function W(e,t,n){var r=n.value;n.value=function(){var e=X.batch?Y(r):r;return e.apply(this,arguments)}}function Y(e){return function(){try{return e.apply(this,arguments)}catch(e){te(e);try{Z(e)}catch(e){te(e)}}}}function Z(e){Q(r(r({},function(e){if(e instanceof Error){var t=z(e);return{error:{kind:t.name,stack:we(t)},message:t.message}}return{error:{stack:"Not an instance of error"},message:"Uncaught "+b(e)}}(e)),{status:F.error}))}function Q(e){X.batch&&X.sentMessageCount<X.maxMessagesPerPage&&(X.sentMessageCount+=1,X.batch.add(e))}function ee(e){X.debugMode=e}function te(e){X.debugMode&&console.warn("[INTERNAL ERROR]",e)}var ne=[],re=[];function oe(){return $||(!function(){if(!window.fetch)return;V=window.fetch,window.fetch=Y((function(e,t){var n=this,r=t&&t.method||"object"==typeof e&&e.method||"GET",i=_("object"==typeof e&&e.url||e),a={init:t,method:r,startTime:performance.now(),url:i},s=function(e){return t=n,r=void 0,s=function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return a.duration=performance.now()-a.startTime,"stack"in e||e instanceof Error?(a.status=0,a.response=we(z(e)),re.forEach((function(e){return e(a)})),[3,6]):[3,1];case 1:if(!("status"in e))return[3,6];t=void 0,r.label=2;case 2:return r.trys.push([2,4,,5]),[4,e.clone().text()];case 3:return t=r.sent(),[3,5];case 4:return n=r.sent(),t="Unable to retrieve response: "+n,[3,5];case 5:a.response=t,a.responseType=e.type,a.status=e.status,re.forEach((function(e){return e(a)})),r.label=6;case 6:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,n){function o(e){try{u(s.next(e))}catch(e){n(e)}}function a(e){try{u(s.throw(e))}catch(e){n(e)}}function u(t){t.done?e(t.value):new i((function(e){e(t.value)})).then(o,a)}u((s=s.apply(t,r||[])).next())}));var t,r,i,s};ne.forEach((function(e){return e(a)}));var u=V.call(this,e,a.init);return u.then(Y(s),Y(s)),u}))}(),$={beforeSend:function(e){ne.push(e)},onRequestComplete:function(e){re.push(e)}}),$}var ie,ae,se,ue,ce,fe,le,de,pe,he=function(){function e(){this.observers=[]}return e.prototype.subscribe=function(e){this.observers.push(e)},e.prototype.notify=function(e){this.observers.forEach((function(t){return t(e)}))},e}(),ve=[],ge=[];function me(){return ie||(ae=XMLHttpRequest.prototype.open,se=XMLHttpRequest.prototype.send,XMLHttpRequest.prototype.open=Y((function(e,t){return this._datadog_xhr={method:e,startTime:-1,url:_(t)},ae.apply(this,arguments)})),XMLHttpRequest.prototype.send=Y((function(e){var t=this;if(this._datadog_xhr){this._datadog_xhr.startTime=performance.now();var n=this.onreadystatechange;this.onreadystatechange=function(){this.readyState===XMLHttpRequest.DONE&&Y(o)(),n&&n.apply(this,arguments)};var r=!1,o=function(){r||(r=!0,t._datadog_xhr.duration=performance.now()-t._datadog_xhr.startTime,t._datadog_xhr.response=t.response,t._datadog_xhr.status=t.status,ge.forEach((function(e){return e(t._datadog_xhr)})))};this.addEventListener("loadend",Y(o)),ve.forEach((function(e){return e(t._datadog_xhr,t)}))}return se.apply(this,arguments)})),ie={beforeSend:function(e){ve.push(e)},onRequestComplete:function(e){ge.push(e)}}),ie}function ye(e){if(!ce){var t=new he;!function(e,t){function n(n,r){A(r.url,e)||!function(e){return 0===e.status&&"opaque"!==e.responseType}(r)&&!function(e){return e.status>=500}(r)||t.notify({context:{error:{origin:ue.NETWORK,stack:Ee(r.response,e)||"Failed to load"},http:{method:r.method,status_code:r.status,url:r.url}},message:Te(n)+" error "+r.method+" "+r.url,startTime:r.startTime})}me().onRequestComplete((function(e){return n(u.XHR,e)})),oe().onRequestComplete((function(e){return n(u.FETCH,e)}))}(e,t),function(e){fe=console.error,console.error=Y((function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];fe.apply(console,i([t],n)),e.notify({context:{error:{origin:ue.CONSOLE}},message:i(["console error:",t],n).map(be).join(" "),startTime:performance.now()})}))}(t),function(e){le=function(t,n,r){e.notify(function(e,t){var n,r;void 0!==e.message||t instanceof Error?(n=e.message||"Empty message",r=we(e)):(n="Uncaught "+b(t),r="No stack, consider using an instance of Error");return{message:n,context:{error:{stack:r,kind:e.name,origin:ue.SOURCE}},startTime:performance.now()}}(t,r))},U.subscribe(le)}(t),ce=function(e,t){var n=0,r=new he;return t.subscribe((function(t){n<e.maxErrorsByMinute?(n+=1,r.notify(t)):n===e.maxErrorsByMinute&&(n+=1,r.notify({context:{error:{origin:ue.AGENT}},message:"Reached max number of errors by minute: "+e.maxErrorsByMinute,startTime:performance.now()}))})),setInterval((function(){return n=0}),f),r}(e,t)}return ce}function be(e){return"string"==typeof e?e:e instanceof Error?we(z(e)):b(e,0,2)}function we(e){var t=(e.name||"Error")+": "+e.message;return e.stack.forEach((function(e){var n="?"===e.func?"<anonymous>":e.func,r=e.args&&e.args.length>0?"("+e.args.join(", ")+")":"",o=e.line?":"+e.line:"",i=e.line&&e.column?":"+e.column:"";t+="\n at "+n+r+" @ "+e.url+o+i})),t}function Ee(e,t){return e&&e.length>t.requestErrorResponseLengthLimit?e.substring(0,t.requestErrorResponseLengthLimit)+"...":e}function Te(e){return u.XHR===e?"XHR":"Fetch"}!function(e){e.AGENT="agent",e.CONSOLE="console",e.NETWORK="network",e.SOURCE="source",e.LOGGER="logger"}(ue||(ue={})),function(e){e.US="us",e.EU="eu"}(pe||(pe={}));var xe,Oe=((de={})[pe.EU]="datadoghq.eu",de[pe.US]="datadoghq.com",de);function Se(e,t,n){var o=function(e,t){var n={applicationId:e.applicationId,buildMode:t.buildMode,clientToken:e.clientToken,env:e.env,proxyHost:e.proxyHost,sdkVersion:t.sdkVersion,service:e.service,site:e.site||Oe[e.datacenter||t.datacenter],version:e.version},o=Array.isArray(e.enableExperimentalFeatures)?e.enableExperimentalFeatures:[],i=r({cookieOptions:N(e),isEnabled:function(e){return t=e,-1!==o.indexOf(t);var t},logsEndpoint:B("browser",n),proxyHost:e.proxyHost,rumEndpoint:B("rum",n),service:e.service,traceEndpoint:B("public-trace",n)},I);if(e.internalMonitoringApiKey&&(i.internalMonitoringEndpoint=B("browser",n,"browser-agent-internal-monitoring")),"allowedTracingOrigins"in e&&(i.allowedTracingOrigins=e.allowedTracingOrigins),"sampleRate"in e&&(i.sampleRate=e.sampleRate),"resourceSampleRate"in e&&(i.resourceSampleRate=e.resourceSampleRate),"trackInteractions"in e&&(i.trackInteractions=!!e.trackInteractions),n.buildMode===xe.E2E_TEST&&(i.internalMonitoringEndpoint="<<< E2E INTERNAL MONITORING ENDPOINT >>>",i.logsEndpoint="<<< E2E LOGS ENDPOINT >>>",i.rumEndpoint="<<< E2E RUM ENDPOINT >>>"),n.buildMode===xe.STAGING&&void 0!==e.replica){var a=r(r({},n),{applicationId:e.replica.applicationId,clientToken:e.replica.clientToken,site:Oe[pe.US]});i.replica={applicationId:e.replica.applicationId,internalMonitoringEndpoint:B("browser",a,"browser-agent-internal-monitoring"),logsEndpoint:B("browser",a),rumEndpoint:B("rum",a)}}return i}(e,t),i=J(o);return{configuration:o,errorObservable:n?ye(o):new he,internalMonitoring:i}}function ke(){return"file:"!==window.location.protocol||(console.error("Execution is not allowed in the current context."),!1)}function Me(){var e={};return{get:function(){return e},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},set:function(t){e=t}}}!function(e){e.RELEASE="release",e.STAGING="staging",e.E2E_TEST="e2e-test"}(xe||(xe={}));var _e,Re,Le=1e4,Ce=function(){function e(e){void 0===e&&(e=Le),this.limit=e,this.buffer=[]}return e.prototype.add=function(e){this.buffer.push(e)>this.limit&&this.buffer.splice(0,1)},e.prototype.drain=function(e){this.buffer.forEach((function(t){return e(t)})),this.buffer.length=0},e}();!function(e){e.debug="debug",e.info="info",e.warn="warn",e.error="error"}(Re||(Re={}));var Ie,Ne=((_e={})[Re.debug]=0,_e[Re.info]=1,_e[Re.warn]=2,_e[Re.error]=3,_e);Object.keys(Re);!function(e){e.http="http",e.console="console",e.silent="silent"}(Ie||(Ie={}));var Be=function(){function e(e,t,n,r){void 0===t&&(t=Ie.http),void 0===n&&(n=Re.debug),void 0===r&&(r={}),this.sendLog=e,this.handlerType=t,this.level=n,this.contextManager=Me(),this.contextManager.set(r)}return e.prototype.log=function(e,t,n){if(void 0===n&&(n=Re.info),Ne[n]>=Ne[this.level])switch(this.handlerType){case Ie.http:this.sendLog(r({message:e,status:n},g(this.contextManager.get(),t)));break;case Ie.console:console.log(n+": "+e);break;case Ie.silent:}},e.prototype.debug=function(e,t){this.log(e,t,Re.debug)},e.prototype.info=function(e,t){this.log(e,t,Re.info)},e.prototype.warn=function(e,t){this.log(e,t,Re.warn)},e.prototype.error=function(e,t){var n={error:{origin:ue.LOGGER}};this.log(e,g(n,t),Re.error)},e.prototype.setContext=function(e){this.contextManager.set(e)},e.prototype.addContext=function(e,t){this.contextManager.add(e,t)},e.prototype.removeContext=function(e){this.contextManager.remove(e)},e.prototype.setHandler=function(e){this.handlerType=e},e.prototype.setLevel=function(e){this.level=e},function(e,t,n,r){var o,i=arguments.length,a=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);i>3&&a&&Object.defineProperty(t,n,a)}([W],e.prototype,"log",null),e}(),Ae={buildMode:"release",datacenter:"us",sdkVersion:"1.24.0"},De="_dd",je="_dd_r",Pe="_dd_l",Ue="rum",ze="logs";var He="_dd_s",Ge=15*f,Fe=4*l,Ke=f;function qe(e,t,n){var r=function(e,t){var n,r,o=!1,i=function(){o=!0,window.clearTimeout(n),n=window.setTimeout((function(){o=!1}),O)};return{get:function(){return o?r:(r=k(e),i(),r)},set:function(n,o){S(e,n,o,t),r=n,i()}}}(He,e);!function(e){var t=e.get(),n=k(De),r=k(je),o=k(Pe);if(!t){var i={};n&&(i.id=n),o&&/^[01]$/.test(o)&&(i[ze]=o),r&&/^[012]$/.test(r)&&(i[Ue]=r),Je(i,e)}}(r);var o=new he,i=Xe(r).id,s=function(e,t,n){var r,o=!n||void 0===n.leading||n.leading,i=!n||void 0===n.trailing||n.trailing,a=!1,s=!1;return{throttled:function(){var n=this;a?s=!0:(o?e.apply(this):s=!0,a=!0,r=window.setTimeout((function(){i&&s&&e.apply(n),a=!1,s=!1}),t))},cancel:function(){window.clearTimeout(r),a=!1,s=!1}}}((function(){var e=Xe(r),a=n(e[t]),s=a.trackingType,u=a.isTracked;e[t]=s,u&&!e.id&&(e.id=m(),e.created=String(Date.now())),Je(e,r),u&&i!==e.id&&(i=e.id,o.notify())}),O).throttled;return s(),function(e){var t=Y(e),n={capture:!0,passive:!0};[a.CLICK,a.TOUCH_START,a.KEY_DOWN,a.SCROLL].forEach((function(e){document.addEventListener(e,t,n),Ye.push((function(){return document.removeEventListener(e,t,n)}))}))}(s),function(e){var t=Y((function(){"visible"===document.visibilityState&&e()})),n=window.setInterval(t,Ke);document.addEventListener(a.VISIBILITY_CHANGE,t),Ye.push((function(){clearInterval(n),document.removeEventListener(a.VISIBILITY_CHANGE,t)}))}((function(){Je(Xe(r),r)})),{getId:function(){return Xe(r).id},getTrackingType:function(){return Xe(r)[t]},renewObservable:o}}var $e=/^([a-z]+)=([a-z0-9-]+)$/,Ve="&";function Xe(e){var t=function(e){var t=e.get(),n={};(function(e){return void 0!==e&&(-1!==e.indexOf(Ve)||$e.test(e))})(t)&&t.split(Ve).forEach((function(e){var t=$e.exec(e);if(null!==t){var r=t[1],o=t[2];n[r]=o}}));return n}(e);return function(e){return(void 0===e.created||Date.now()-Number(e.created)<Fe)&&(void 0===e.expire||Date.now()<Number(e.expire))}(t)?t:(We(e),{})}function Je(e,t){if(n=e,0!==Object.keys(n).length){var n;e.expire=String(Date.now()+Ge);var r=function(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}(e).map((function(e){return e[0]+"="+e[1]})).join(Ve);t.set(r,Ge)}else We(t)}function We(e){e.set("",0)}var Ye=[];var Ze,Qe="logs";function et(e,t){if(!t){var n=tt(e)===Ze.TRACKED;return{getId:function(){},isTracked:function(){return n}}}var r=qe(e.cookieOptions,Qe,(function(t){return function(e,t){var n=function(e){return e===Ze.NOT_TRACKED||e===Ze.TRACKED}(t)?t:tt(e);return{trackingType:n,isTracked:n===Ze.TRACKED}}(e,t)}));return{getId:r.getId,isTracked:function(){return r.getTrackingType()===Ze.TRACKED}}}function tt(e){return 0!==(t=e.sampleRate)&&100*Math.random()<=t?Ze.TRACKED:Ze.NOT_TRACKED;var t}function nt(e){var t=window.DD_RUM;return t&&t.getInternalContext?t.getInternalContext(e):void 0}!function(e){e.NOT_TRACKED="0",e.TRACKED="1"}(Ze||(Ze={}));var rt,ot,it,at,st=ut((function(e,t,n){var r=!1!==e.forwardErrorsToLogs,o=Se(e,Ae,r),i=o.configuration,a=o.internalMonitoring;return function(e,t,n,r,o,i){n.setExternalContextProvider((function(){return g({session_id:r.getId()},i(),nt())}));var a=function(e,t){var n,r=o(e.logsEndpoint);void 0!==e.replica&&(n=o(e.replica.logsEndpoint));function o(t){return new K(new G(t,e.batchBytesLimit),e.maxBatchSize,e.batchBytesLimit,e.maxMessageSize,e.flushTimeout)}return{add:function(o,i){var a=function(e,t,n,r){return g(e,t,n,r)}({service:e.service,session_id:t.getId()},i,nt(),o);r.add(a),n&&n.add(a)}}}(e,r);return t.subscribe((function(e){return o.error(e.message,g({date:(t=e.startTime,Math.floor(E()+t))},e.context,nt(e.startTime)));var t})),function(e,t){r.isTracked()&&a.add(e,t)}}(i,o.errorObservable,a,et(i,M(i.cookieOptions)),t,n)}));function ut(e){var t=!1,n=Me(),o={},i=new Ce,a=function(e,t){i.add([e,t])},s=new Be(u);return function(e){var t=r(r({},e),{onReady:function(e){e()}});return Object.defineProperty(t,"_setDebug",{get:function(){return ee},enumerable:!1}),t}({logger:s,init:Y((function(r){ke()&&function(e){if(t)return e.silentMultipleInit||console.error("DD_LOGS is already initialized."),!1;if(!e||!e.publicApiKey&&!e.clientToken)return console.error("Client Token is not configured, we will not send any data."),!1;if(void 0!==e.sampleRate&&(n=e.sampleRate,!(function(e){return"number"==typeof e}(n)&&n>=0&&n<=100)))return console.error("Sample Rate should be a number between 0 and 100"),!1;var n;return!0}(r)&&(r.publicApiKey&&(r.clientToken=r.publicApiKey,console.warn("Public API Key is deprecated. Please use Client Token instead.")),a=e(r,s,n.get),i.drain((function(e){var t=e[0],n=e[1];return a(t,n)})),t=!0)})),setLoggerGlobalContext:Y(n.set),addLoggerGlobalContext:Y(n.add),removeLoggerGlobalContext:Y(n.remove),createLogger:Y((function(e,t){return void 0===t&&(t={}),o[e]=new Be(u,t.handler,t.level,r(r({},t.context),{logger:{name:e}})),o[e]})),getLogger:Y((function(e){return o[e]}))});function u(e){a(e,g({date:Date.now(),view:{referrer:document.referrer,url:window.location.href}},n.get()))}}rt=function(){if("object"==typeof globalThis)return globalThis;Object.defineProperty(Object.prototype,"_dd_temp_",{get:function(){return this},configurable:!0});var e=_dd_temp_;return delete Object.prototype._dd_temp_,"object"!=typeof e&&(e="object"==typeof self?self:"object"==typeof window?window:{}),e}(),it=st,at=rt[ot="DD_LOGS"],rt[ot]=it,at&&at.q&&at.q.forEach((function(e){return e()}))}]); |
@@ -6,4 +6,4 @@ "use strict"; | ||
datacenter: 'us', | ||
sdkVersion: '1.21.0', | ||
sdkVersion: '1.24.0', | ||
}; | ||
//# sourceMappingURL=buildEnv.js.map |
export { Datacenter } from '@datadog/browser-core'; | ||
export { StatusType, HandlerType, LoggerConfiguration, Logger, LogsMessage } from './logger'; | ||
export { LogsUserConfiguration, Status, LogsGlobal, datadogLogs } from './logs.entry'; | ||
export { StatusType, HandlerType, Logger, LogsMessage } from './logger'; | ||
export { LogsUserConfiguration, Status, LoggerConfiguration, LogsGlobal, datadogLogs } from './logs.entry'; |
@@ -1,3 +0,2 @@ | ||
import { Configuration, Context, ContextValue, ErrorObservable, InternalMonitoring } from '@datadog/browser-core'; | ||
import { LoggerSession } from './loggerSession'; | ||
import { Context, ContextValue } from '@datadog/browser-core'; | ||
export declare enum StatusType { | ||
@@ -18,7 +17,2 @@ debug = "debug", | ||
} | ||
export interface LoggerConfiguration { | ||
level?: StatusType; | ||
handler?: HandlerType; | ||
context?: Context; | ||
} | ||
export declare enum HandlerType { | ||
@@ -29,36 +23,13 @@ http = "http", | ||
} | ||
export declare function startLogger(errorObservable: ErrorObservable, configuration: Configuration, session: LoggerSession, internalMonitoring: InternalMonitoring): Partial<{ | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: import("./logs.entry").LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
}>; | ||
export declare class Logger { | ||
private session; | ||
private handlers; | ||
private sendLog; | ||
private handlerType; | ||
private level; | ||
private loggerContext; | ||
private handler; | ||
constructor(session: LoggerSession, handlers: { | ||
[key in HandlerType]: (message: LogsMessage) => void; | ||
}, handler?: HandlerType, level?: StatusType, loggerContext?: Context); | ||
log(message: string, messageContext?: {}, status?: StatusType): void; | ||
debug(message: string, messageContext?: {}): void; | ||
info(message: string, messageContext?: {}): void; | ||
warn(message: string, messageContext?: {}): void; | ||
error(message: string, messageContext?: {}): void; | ||
private contextManager; | ||
constructor(sendLog: (message: LogsMessage) => void, handlerType?: HandlerType, level?: StatusType, loggerContext?: Context); | ||
log(message: string, messageContext?: Context, status?: StatusType): void; | ||
debug(message: string, messageContext?: Context): void; | ||
info(message: string, messageContext?: Context): void; | ||
warn(message: string, messageContext?: Context): void; | ||
error(message: string, messageContext?: Context): void; | ||
setContext(context: Context): void; | ||
@@ -65,0 +36,0 @@ addContext(key: string, value: ContextValue): void; |
@@ -26,106 +26,39 @@ "use strict"; | ||
})(HandlerType = exports.HandlerType || (exports.HandlerType = {})); | ||
function startLogger(errorObservable, configuration, session, internalMonitoring) { | ||
var _a; | ||
var globalContext = {}; | ||
internalMonitoring.setExternalContextProvider(function () { return browser_core_1.deepMerge({ session_id: session.getId() }, globalContext, getRUMInternalContext()); }); | ||
var batch = startLoggerBatch(configuration, session, function () { return globalContext; }); | ||
var handlers = (_a = {}, | ||
_a[HandlerType.console] = function (message) { return console.log(message.status + ": " + message.message); }, | ||
_a[HandlerType.http] = function (message) { return batch.add(message); }, | ||
_a[HandlerType.silent] = browser_core_1.noop, | ||
_a); | ||
var logger = new Logger(session, handlers); | ||
customLoggers = {}; | ||
errorObservable.subscribe(function (e) { | ||
return logger.error(e.message, browser_core_1.deepMerge(tslib_1.__assign({ date: browser_core_1.getTimestamp(e.startTime) }, e.context), getRUMInternalContext(e.startTime))); | ||
}); | ||
var globalApi = {}; | ||
globalApi.setLoggerGlobalContext = function (context) { | ||
globalContext = context; | ||
}; | ||
globalApi.addLoggerGlobalContext = function (key, value) { | ||
globalContext[key] = value; | ||
}; | ||
globalApi.removeLoggerGlobalContext = function (key) { | ||
delete globalContext[key]; | ||
}; | ||
globalApi.createLogger = makeCreateLogger(session, handlers); | ||
globalApi.getLogger = getLogger; | ||
globalApi.logger = logger; | ||
return globalApi; | ||
} | ||
exports.startLogger = startLogger; | ||
function startLoggerBatch(configuration, session, globalContextProvider) { | ||
var primaryBatch = createLoggerBatch(configuration.logsEndpoint); | ||
var replicaBatch; | ||
if (configuration.replica !== undefined) { | ||
replicaBatch = createLoggerBatch(configuration.replica.logsEndpoint); | ||
} | ||
function createLoggerBatch(endpointUrl) { | ||
return new browser_core_1.Batch(new browser_core_1.HttpRequest(endpointUrl, configuration.batchBytesLimit), configuration.maxBatchSize, configuration.batchBytesLimit, configuration.maxMessageSize, configuration.flushTimeout); | ||
} | ||
function withContext(message) { | ||
return browser_core_1.deepMerge({ | ||
date: new Date().getTime(), | ||
service: configuration.service, | ||
session_id: session.getId(), | ||
view: { | ||
referrer: document.referrer, | ||
url: window.location.href, | ||
}, | ||
}, globalContextProvider(), getRUMInternalContext(), message); | ||
} | ||
return { | ||
add: function (message) { | ||
var contextualizedMessage = withContext(message); | ||
primaryBatch.add(contextualizedMessage); | ||
if (replicaBatch) { | ||
replicaBatch.add(contextualizedMessage); | ||
} | ||
}, | ||
}; | ||
} | ||
var customLoggers; | ||
function makeCreateLogger(session, handlers) { | ||
return function (name, conf) { | ||
if (conf === void 0) { conf = {}; } | ||
customLoggers[name] = new Logger(session, handlers, conf.handler, conf.level, tslib_1.__assign(tslib_1.__assign({}, conf.context), { logger: { name: name } })); | ||
return customLoggers[name]; | ||
}; | ||
} | ||
function getLogger(name) { | ||
return customLoggers[name]; | ||
} | ||
var Logger = /** @class */ (function () { | ||
function Logger(session, handlers, handler, level, loggerContext) { | ||
if (handler === void 0) { handler = HandlerType.http; } | ||
function Logger(sendLog, handlerType, level, loggerContext) { | ||
if (handlerType === void 0) { handlerType = HandlerType.http; } | ||
if (level === void 0) { level = StatusType.debug; } | ||
if (loggerContext === void 0) { loggerContext = {}; } | ||
this.session = session; | ||
this.handlers = handlers; | ||
this.sendLog = sendLog; | ||
this.handlerType = handlerType; | ||
this.level = level; | ||
this.loggerContext = loggerContext; | ||
this.handler = this.handlers[handler]; | ||
this.contextManager = browser_core_1.createContextManager(); | ||
this.contextManager.set(loggerContext); | ||
} | ||
Logger.prototype.log = function (message, messageContext, status) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
if (status === void 0) { status = StatusType.info; } | ||
if (this.session.isTracked() && exports.STATUS_PRIORITIES[status] >= exports.STATUS_PRIORITIES[this.level]) { | ||
this.handler(tslib_1.__assign({ message: message, status: status }, browser_core_1.deepMerge({}, this.loggerContext, messageContext))); | ||
if (exports.STATUS_PRIORITIES[status] >= exports.STATUS_PRIORITIES[this.level]) { | ||
switch (this.handlerType) { | ||
case HandlerType.http: | ||
this.sendLog(tslib_1.__assign({ message: message, | ||
status: status }, browser_core_1.combine(this.contextManager.get(), messageContext))); | ||
break; | ||
case HandlerType.console: | ||
console.log(status + ": " + message); | ||
break; | ||
case HandlerType.silent: | ||
break; | ||
} | ||
} | ||
}; | ||
Logger.prototype.debug = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
this.log(message, messageContext, StatusType.debug); | ||
}; | ||
Logger.prototype.info = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
this.log(message, messageContext, StatusType.info); | ||
}; | ||
Logger.prototype.warn = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
this.log(message, messageContext, StatusType.warn); | ||
}; | ||
Logger.prototype.error = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
var errorOrigin = { | ||
@@ -136,15 +69,15 @@ error: { | ||
}; | ||
this.log(message, browser_core_1.deepMerge({}, errorOrigin, messageContext), StatusType.error); | ||
this.log(message, browser_core_1.combine(errorOrigin, messageContext), StatusType.error); | ||
}; | ||
Logger.prototype.setContext = function (context) { | ||
this.loggerContext = context; | ||
this.contextManager.set(context); | ||
}; | ||
Logger.prototype.addContext = function (key, value) { | ||
this.loggerContext[key] = value; | ||
this.contextManager.add(key, value); | ||
}; | ||
Logger.prototype.removeContext = function (key) { | ||
delete this.loggerContext[key]; | ||
this.contextManager.remove(key); | ||
}; | ||
Logger.prototype.setHandler = function (handler) { | ||
this.handler = this.handlers[handler]; | ||
this.handlerType = handler; | ||
}; | ||
@@ -160,6 +93,2 @@ Logger.prototype.setLevel = function (level) { | ||
exports.Logger = Logger; | ||
function getRUMInternalContext(startTime) { | ||
var rum = window.DD_RUM; | ||
return rum && rum.getInternalContext ? rum.getInternalContext(startTime) : undefined; | ||
} | ||
//# sourceMappingURL=logger.js.map |
import { Context, ContextValue, UserConfiguration } from '@datadog/browser-core'; | ||
import { HandlerType, Logger, LoggerConfiguration, StatusType } from './logger'; | ||
import { HandlerType, Logger, StatusType } from './logger'; | ||
import { startLogs } from './logs'; | ||
export interface LogsUserConfiguration extends UserConfiguration { | ||
forwardErrorsToLogs?: boolean; | ||
} | ||
export interface LoggerConfiguration { | ||
level?: StatusType; | ||
handler?: HandlerType; | ||
context?: Context; | ||
} | ||
export declare type Status = keyof typeof StatusType; | ||
declare const STUBBED_LOGS: { | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
}; | ||
export declare type LogsGlobal = typeof STUBBED_LOGS; | ||
export declare type LogsGlobal = ReturnType<typeof makeLogsGlobal>; | ||
export declare const datadogLogs: { | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
logger: Logger; | ||
init: (userConfiguration: LogsUserConfiguration) => void; | ||
setLoggerGlobalContext: (newContext: Context) => void; | ||
addLoggerGlobalContext: (key: string, value: ContextValue) => void; | ||
removeLoggerGlobalContext: (key: string) => void; | ||
createLogger: (name: string, conf?: LoggerConfiguration) => Logger; | ||
getLogger: (name: string) => Logger | undefined; | ||
} & { | ||
onReady(callback: () => void): void; | ||
}; | ||
export declare function makeLogsGlobal(stub: LogsGlobal): { | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
export declare type StartLogs = typeof startLogs; | ||
export declare function makeLogsGlobal(startLogsImpl: StartLogs): { | ||
logger: Logger; | ||
init: (userConfiguration: LogsUserConfiguration) => void; | ||
setLoggerGlobalContext: (newContext: Context) => void; | ||
addLoggerGlobalContext: (key: string, value: ContextValue) => void; | ||
removeLoggerGlobalContext: (key: string) => void; | ||
createLogger: (name: string, conf?: LoggerConfiguration) => Logger; | ||
getLogger: (name: string) => Logger | undefined; | ||
} & { | ||
onReady(callback: () => void): void; | ||
}; | ||
export {}; |
@@ -5,80 +5,43 @@ "use strict"; | ||
var browser_core_1 = require("@datadog/browser-core"); | ||
var buildEnv_1 = require("./buildEnv"); | ||
var logger_1 = require("./logger"); | ||
var loggerSession_1 = require("./loggerSession"); | ||
var STUBBED_LOGGER = { | ||
debug: function (message, context) { | ||
browser_core_1.makeStub('logs.logger.debug'); | ||
}, | ||
error: function (message, context) { | ||
browser_core_1.makeStub('logs.logger.error'); | ||
}, | ||
info: function (message, context) { | ||
browser_core_1.makeStub('logs.logger.info'); | ||
}, | ||
log: function (message, context, status) { | ||
browser_core_1.makeStub('logs.logger.log'); | ||
}, | ||
warn: function (message, context) { | ||
browser_core_1.makeStub('logs.logger.warn'); | ||
}, | ||
setContext: function (context) { | ||
browser_core_1.makeStub('logs.logger.setContext'); | ||
}, | ||
addContext: function (key, value) { | ||
browser_core_1.makeStub('logs.logger.addContext'); | ||
}, | ||
removeContext: function (key) { | ||
browser_core_1.makeStub('logs.logger.removeContext'); | ||
}, | ||
setHandler: function (handler) { | ||
browser_core_1.makeStub('logs.logger.setHandler'); | ||
}, | ||
setLevel: function (level) { | ||
browser_core_1.makeStub('logs.logger.setLevel'); | ||
}, | ||
}; | ||
var STUBBED_LOGS = { | ||
logger: STUBBED_LOGGER, | ||
init: function (userConfiguration) { | ||
browser_core_1.makeStub('core.init'); | ||
}, | ||
addLoggerGlobalContext: function (key, value) { | ||
browser_core_1.makeStub('addLoggerGlobalContext'); | ||
}, | ||
removeLoggerGlobalContext: function (key) { | ||
browser_core_1.makeStub('removeLoggerGlobalContext'); | ||
}, | ||
setLoggerGlobalContext: function (context) { | ||
browser_core_1.makeStub('setLoggerGlobalContext'); | ||
}, | ||
createLogger: function (name, conf) { | ||
browser_core_1.makeStub('createLogger'); | ||
return STUBBED_LOGGER; | ||
}, | ||
getLogger: function (name) { | ||
browser_core_1.makeStub('getLogger'); | ||
return undefined; | ||
}, | ||
}; | ||
exports.datadogLogs = makeLogsGlobal(STUBBED_LOGS); | ||
browser_core_1.getGlobalObject().DD_LOGS = exports.datadogLogs; | ||
function makeLogsGlobal(stub) { | ||
var global = browser_core_1.makeGlobal(stub); | ||
var logs_1 = require("./logs"); | ||
exports.datadogLogs = makeLogsGlobal(logs_1.startLogs); | ||
browser_core_1.defineGlobal(browser_core_1.getGlobalObject(), 'DD_LOGS', exports.datadogLogs); | ||
function makeLogsGlobal(startLogsImpl) { | ||
var isAlreadyInitialized = false; | ||
global.init = browser_core_1.monitor(function (userConfiguration) { | ||
if (!browser_core_1.checkIsNotLocalFile() || !canInitLogs(userConfiguration)) { | ||
return; | ||
} | ||
if (userConfiguration.publicApiKey) { | ||
userConfiguration.clientToken = userConfiguration.publicApiKey; | ||
console.warn('Public API Key is deprecated. Please use Client Token instead.'); | ||
} | ||
var isCollectingError = userConfiguration.forwardErrorsToLogs !== false; | ||
var logsUserConfiguration = tslib_1.__assign(tslib_1.__assign({}, userConfiguration), { isCollectingError: isCollectingError }); | ||
var _a = browser_core_1.commonInit(logsUserConfiguration, buildEnv_1.buildEnv), errorObservable = _a.errorObservable, configuration = _a.configuration, internalMonitoring = _a.internalMonitoring; | ||
var session = loggerSession_1.startLoggerSession(configuration, browser_core_1.areCookiesAuthorized(browser_core_1.mustUseSecureCookie(userConfiguration))); | ||
var globalApi = logger_1.startLogger(errorObservable, configuration, session, internalMonitoring); | ||
browser_core_1.assign(global, globalApi); | ||
isAlreadyInitialized = true; | ||
var globalContextManager = browser_core_1.createContextManager(); | ||
var customLoggers = {}; | ||
var beforeInitSendLog = new browser_core_1.BoundedBuffer(); | ||
var sendLogStrategy = function (message, currentContext) { | ||
beforeInitSendLog.add([message, currentContext]); | ||
}; | ||
var logger = new logger_1.Logger(sendLog); | ||
return browser_core_1.makeGlobal({ | ||
logger: logger, | ||
init: browser_core_1.monitor(function (userConfiguration) { | ||
if (!browser_core_1.checkIsNotLocalFile() || !canInitLogs(userConfiguration)) { | ||
return; | ||
} | ||
if (userConfiguration.publicApiKey) { | ||
userConfiguration.clientToken = userConfiguration.publicApiKey; | ||
console.warn('Public API Key is deprecated. Please use Client Token instead.'); | ||
} | ||
sendLogStrategy = startLogsImpl(userConfiguration, logger, globalContextManager.get); | ||
beforeInitSendLog.drain(function (_a) { | ||
var message = _a[0], context = _a[1]; | ||
return sendLogStrategy(message, context); | ||
}); | ||
isAlreadyInitialized = true; | ||
}), | ||
setLoggerGlobalContext: browser_core_1.monitor(globalContextManager.set), | ||
addLoggerGlobalContext: browser_core_1.monitor(globalContextManager.add), | ||
removeLoggerGlobalContext: browser_core_1.monitor(globalContextManager.remove), | ||
createLogger: browser_core_1.monitor(function (name, conf) { | ||
if (conf === void 0) { conf = {}; } | ||
customLoggers[name] = new logger_1.Logger(sendLog, conf.handler, conf.level, tslib_1.__assign(tslib_1.__assign({}, conf.context), { logger: { name: name } })); | ||
return customLoggers[name]; | ||
}), | ||
getLogger: browser_core_1.monitor(function (name) { | ||
return customLoggers[name]; | ||
}), | ||
}); | ||
@@ -102,5 +65,13 @@ function canInitLogs(userConfiguration) { | ||
} | ||
return global; | ||
function sendLog(message) { | ||
sendLogStrategy(message, browser_core_1.combine({ | ||
date: Date.now(), | ||
view: { | ||
referrer: document.referrer, | ||
url: window.location.href, | ||
}, | ||
}, globalContextManager.get())); | ||
} | ||
} | ||
exports.makeLogsGlobal = makeLogsGlobal; | ||
//# sourceMappingURL=logs.entry.js.map |
export var buildEnv = { | ||
buildMode: 'release', | ||
datacenter: 'us', | ||
sdkVersion: '1.21.0', | ||
sdkVersion: '1.24.0', | ||
}; | ||
//# sourceMappingURL=buildEnv.js.map |
export { Datacenter } from '@datadog/browser-core'; | ||
export { StatusType, HandlerType, LoggerConfiguration, Logger, LogsMessage } from './logger'; | ||
export { LogsUserConfiguration, Status, LogsGlobal, datadogLogs } from './logs.entry'; | ||
export { StatusType, HandlerType, Logger, LogsMessage } from './logger'; | ||
export { LogsUserConfiguration, Status, LoggerConfiguration, LogsGlobal, datadogLogs } from './logs.entry'; |
@@ -1,3 +0,2 @@ | ||
import { Configuration, Context, ContextValue, ErrorObservable, InternalMonitoring } from '@datadog/browser-core'; | ||
import { LoggerSession } from './loggerSession'; | ||
import { Context, ContextValue } from '@datadog/browser-core'; | ||
export declare enum StatusType { | ||
@@ -18,7 +17,2 @@ debug = "debug", | ||
} | ||
export interface LoggerConfiguration { | ||
level?: StatusType; | ||
handler?: HandlerType; | ||
context?: Context; | ||
} | ||
export declare enum HandlerType { | ||
@@ -29,36 +23,13 @@ http = "http", | ||
} | ||
export declare function startLogger(errorObservable: ErrorObservable, configuration: Configuration, session: LoggerSession, internalMonitoring: InternalMonitoring): Partial<{ | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: import("./logs.entry").LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
}>; | ||
export declare class Logger { | ||
private session; | ||
private handlers; | ||
private sendLog; | ||
private handlerType; | ||
private level; | ||
private loggerContext; | ||
private handler; | ||
constructor(session: LoggerSession, handlers: { | ||
[key in HandlerType]: (message: LogsMessage) => void; | ||
}, handler?: HandlerType, level?: StatusType, loggerContext?: Context); | ||
log(message: string, messageContext?: {}, status?: StatusType): void; | ||
debug(message: string, messageContext?: {}): void; | ||
info(message: string, messageContext?: {}): void; | ||
warn(message: string, messageContext?: {}): void; | ||
error(message: string, messageContext?: {}): void; | ||
private contextManager; | ||
constructor(sendLog: (message: LogsMessage) => void, handlerType?: HandlerType, level?: StatusType, loggerContext?: Context); | ||
log(message: string, messageContext?: Context, status?: StatusType): void; | ||
debug(message: string, messageContext?: Context): void; | ||
info(message: string, messageContext?: Context): void; | ||
warn(message: string, messageContext?: Context): void; | ||
error(message: string, messageContext?: Context): void; | ||
setContext(context: Context): void; | ||
@@ -65,0 +36,0 @@ addContext(key: string, value: ContextValue): void; |
var _a; | ||
import { __assign, __decorate } from "tslib"; | ||
import { Batch, deepMerge, ErrorOrigin, getTimestamp, HttpRequest, monitored, noop, } from '@datadog/browser-core'; | ||
import { combine, createContextManager, ErrorOrigin, monitored } from '@datadog/browser-core'; | ||
export var StatusType; | ||
@@ -24,105 +24,39 @@ (function (StatusType) { | ||
})(HandlerType || (HandlerType = {})); | ||
export function startLogger(errorObservable, configuration, session, internalMonitoring) { | ||
var _a; | ||
var globalContext = {}; | ||
internalMonitoring.setExternalContextProvider(function () { return deepMerge({ session_id: session.getId() }, globalContext, getRUMInternalContext()); }); | ||
var batch = startLoggerBatch(configuration, session, function () { return globalContext; }); | ||
var handlers = (_a = {}, | ||
_a[HandlerType.console] = function (message) { return console.log(message.status + ": " + message.message); }, | ||
_a[HandlerType.http] = function (message) { return batch.add(message); }, | ||
_a[HandlerType.silent] = noop, | ||
_a); | ||
var logger = new Logger(session, handlers); | ||
customLoggers = {}; | ||
errorObservable.subscribe(function (e) { | ||
return logger.error(e.message, deepMerge(__assign({ date: getTimestamp(e.startTime) }, e.context), getRUMInternalContext(e.startTime))); | ||
}); | ||
var globalApi = {}; | ||
globalApi.setLoggerGlobalContext = function (context) { | ||
globalContext = context; | ||
}; | ||
globalApi.addLoggerGlobalContext = function (key, value) { | ||
globalContext[key] = value; | ||
}; | ||
globalApi.removeLoggerGlobalContext = function (key) { | ||
delete globalContext[key]; | ||
}; | ||
globalApi.createLogger = makeCreateLogger(session, handlers); | ||
globalApi.getLogger = getLogger; | ||
globalApi.logger = logger; | ||
return globalApi; | ||
} | ||
function startLoggerBatch(configuration, session, globalContextProvider) { | ||
var primaryBatch = createLoggerBatch(configuration.logsEndpoint); | ||
var replicaBatch; | ||
if (configuration.replica !== undefined) { | ||
replicaBatch = createLoggerBatch(configuration.replica.logsEndpoint); | ||
} | ||
function createLoggerBatch(endpointUrl) { | ||
return new Batch(new HttpRequest(endpointUrl, configuration.batchBytesLimit), configuration.maxBatchSize, configuration.batchBytesLimit, configuration.maxMessageSize, configuration.flushTimeout); | ||
} | ||
function withContext(message) { | ||
return deepMerge({ | ||
date: new Date().getTime(), | ||
service: configuration.service, | ||
session_id: session.getId(), | ||
view: { | ||
referrer: document.referrer, | ||
url: window.location.href, | ||
}, | ||
}, globalContextProvider(), getRUMInternalContext(), message); | ||
} | ||
return { | ||
add: function (message) { | ||
var contextualizedMessage = withContext(message); | ||
primaryBatch.add(contextualizedMessage); | ||
if (replicaBatch) { | ||
replicaBatch.add(contextualizedMessage); | ||
} | ||
}, | ||
}; | ||
} | ||
var customLoggers; | ||
function makeCreateLogger(session, handlers) { | ||
return function (name, conf) { | ||
if (conf === void 0) { conf = {}; } | ||
customLoggers[name] = new Logger(session, handlers, conf.handler, conf.level, __assign(__assign({}, conf.context), { logger: { name: name } })); | ||
return customLoggers[name]; | ||
}; | ||
} | ||
function getLogger(name) { | ||
return customLoggers[name]; | ||
} | ||
var Logger = /** @class */ (function () { | ||
function Logger(session, handlers, handler, level, loggerContext) { | ||
if (handler === void 0) { handler = HandlerType.http; } | ||
function Logger(sendLog, handlerType, level, loggerContext) { | ||
if (handlerType === void 0) { handlerType = HandlerType.http; } | ||
if (level === void 0) { level = StatusType.debug; } | ||
if (loggerContext === void 0) { loggerContext = {}; } | ||
this.session = session; | ||
this.handlers = handlers; | ||
this.sendLog = sendLog; | ||
this.handlerType = handlerType; | ||
this.level = level; | ||
this.loggerContext = loggerContext; | ||
this.handler = this.handlers[handler]; | ||
this.contextManager = createContextManager(); | ||
this.contextManager.set(loggerContext); | ||
} | ||
Logger.prototype.log = function (message, messageContext, status) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
if (status === void 0) { status = StatusType.info; } | ||
if (this.session.isTracked() && STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[this.level]) { | ||
this.handler(__assign({ message: message, status: status }, deepMerge({}, this.loggerContext, messageContext))); | ||
if (STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[this.level]) { | ||
switch (this.handlerType) { | ||
case HandlerType.http: | ||
this.sendLog(__assign({ message: message, | ||
status: status }, combine(this.contextManager.get(), messageContext))); | ||
break; | ||
case HandlerType.console: | ||
console.log(status + ": " + message); | ||
break; | ||
case HandlerType.silent: | ||
break; | ||
} | ||
} | ||
}; | ||
Logger.prototype.debug = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
this.log(message, messageContext, StatusType.debug); | ||
}; | ||
Logger.prototype.info = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
this.log(message, messageContext, StatusType.info); | ||
}; | ||
Logger.prototype.warn = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
this.log(message, messageContext, StatusType.warn); | ||
}; | ||
Logger.prototype.error = function (message, messageContext) { | ||
if (messageContext === void 0) { messageContext = {}; } | ||
var errorOrigin = { | ||
@@ -133,15 +67,15 @@ error: { | ||
}; | ||
this.log(message, deepMerge({}, errorOrigin, messageContext), StatusType.error); | ||
this.log(message, combine(errorOrigin, messageContext), StatusType.error); | ||
}; | ||
Logger.prototype.setContext = function (context) { | ||
this.loggerContext = context; | ||
this.contextManager.set(context); | ||
}; | ||
Logger.prototype.addContext = function (key, value) { | ||
this.loggerContext[key] = value; | ||
this.contextManager.add(key, value); | ||
}; | ||
Logger.prototype.removeContext = function (key) { | ||
delete this.loggerContext[key]; | ||
this.contextManager.remove(key); | ||
}; | ||
Logger.prototype.setHandler = function (handler) { | ||
this.handler = this.handlers[handler]; | ||
this.handlerType = handler; | ||
}; | ||
@@ -157,6 +91,2 @@ Logger.prototype.setLevel = function (level) { | ||
export { Logger }; | ||
function getRUMInternalContext(startTime) { | ||
var rum = window.DD_RUM; | ||
return rum && rum.getInternalContext ? rum.getInternalContext(startTime) : undefined; | ||
} | ||
//# sourceMappingURL=logger.js.map |
import { Context, ContextValue, UserConfiguration } from '@datadog/browser-core'; | ||
import { HandlerType, Logger, LoggerConfiguration, StatusType } from './logger'; | ||
import { HandlerType, Logger, StatusType } from './logger'; | ||
import { startLogs } from './logs'; | ||
export interface LogsUserConfiguration extends UserConfiguration { | ||
forwardErrorsToLogs?: boolean; | ||
} | ||
export interface LoggerConfiguration { | ||
level?: StatusType; | ||
handler?: HandlerType; | ||
context?: Context; | ||
} | ||
export declare type Status = keyof typeof StatusType; | ||
declare const STUBBED_LOGS: { | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
}; | ||
export declare type LogsGlobal = typeof STUBBED_LOGS; | ||
export declare type LogsGlobal = ReturnType<typeof makeLogsGlobal>; | ||
export declare const datadogLogs: { | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
logger: Logger; | ||
init: (userConfiguration: LogsUserConfiguration) => void; | ||
setLoggerGlobalContext: (newContext: Context) => void; | ||
addLoggerGlobalContext: (key: string, value: ContextValue) => void; | ||
removeLoggerGlobalContext: (key: string) => void; | ||
createLogger: (name: string, conf?: LoggerConfiguration) => Logger; | ||
getLogger: (name: string) => Logger | undefined; | ||
} & { | ||
onReady(callback: () => void): void; | ||
}; | ||
export declare function makeLogsGlobal(stub: LogsGlobal): { | ||
logger: { | ||
debug(message: string, context?: Context | undefined): void; | ||
error(message: string, context?: Context | undefined): void; | ||
info(message: string, context?: Context | undefined): void; | ||
log(message: string, context?: Context | undefined, status?: "error" | "debug" | "info" | "warn" | undefined): void; | ||
warn(message: string, context?: Context | undefined): void; | ||
setContext(context: Context): void; | ||
addContext(key: string, value: ContextValue): void; | ||
removeContext(key: string): void; | ||
setHandler(handler: HandlerType): void; | ||
setLevel(level: StatusType): void; | ||
}; | ||
init(userConfiguration: LogsUserConfiguration): void; | ||
addLoggerGlobalContext(key: string, value: ContextValue): void; | ||
removeLoggerGlobalContext(key: string): void; | ||
setLoggerGlobalContext(context: Context): void; | ||
createLogger(name: string, conf?: LoggerConfiguration | undefined): Logger; | ||
getLogger(name: string): Logger | undefined; | ||
export declare type StartLogs = typeof startLogs; | ||
export declare function makeLogsGlobal(startLogsImpl: StartLogs): { | ||
logger: Logger; | ||
init: (userConfiguration: LogsUserConfiguration) => void; | ||
setLoggerGlobalContext: (newContext: Context) => void; | ||
addLoggerGlobalContext: (key: string, value: ContextValue) => void; | ||
removeLoggerGlobalContext: (key: string) => void; | ||
createLogger: (name: string, conf?: LoggerConfiguration) => Logger; | ||
getLogger: (name: string) => Logger | undefined; | ||
} & { | ||
onReady(callback: () => void): void; | ||
}; | ||
export {}; |
import { __assign } from "tslib"; | ||
import { areCookiesAuthorized, assign, checkIsNotLocalFile, commonInit, getGlobalObject, isPercentage, makeGlobal, makeStub, monitor, mustUseSecureCookie, } from '@datadog/browser-core'; | ||
import { buildEnv } from './buildEnv'; | ||
import { startLogger } from './logger'; | ||
import { startLoggerSession } from './loggerSession'; | ||
var STUBBED_LOGGER = { | ||
debug: function (message, context) { | ||
makeStub('logs.logger.debug'); | ||
}, | ||
error: function (message, context) { | ||
makeStub('logs.logger.error'); | ||
}, | ||
info: function (message, context) { | ||
makeStub('logs.logger.info'); | ||
}, | ||
log: function (message, context, status) { | ||
makeStub('logs.logger.log'); | ||
}, | ||
warn: function (message, context) { | ||
makeStub('logs.logger.warn'); | ||
}, | ||
setContext: function (context) { | ||
makeStub('logs.logger.setContext'); | ||
}, | ||
addContext: function (key, value) { | ||
makeStub('logs.logger.addContext'); | ||
}, | ||
removeContext: function (key) { | ||
makeStub('logs.logger.removeContext'); | ||
}, | ||
setHandler: function (handler) { | ||
makeStub('logs.logger.setHandler'); | ||
}, | ||
setLevel: function (level) { | ||
makeStub('logs.logger.setLevel'); | ||
}, | ||
}; | ||
var STUBBED_LOGS = { | ||
logger: STUBBED_LOGGER, | ||
init: function (userConfiguration) { | ||
makeStub('core.init'); | ||
}, | ||
addLoggerGlobalContext: function (key, value) { | ||
makeStub('addLoggerGlobalContext'); | ||
}, | ||
removeLoggerGlobalContext: function (key) { | ||
makeStub('removeLoggerGlobalContext'); | ||
}, | ||
setLoggerGlobalContext: function (context) { | ||
makeStub('setLoggerGlobalContext'); | ||
}, | ||
createLogger: function (name, conf) { | ||
makeStub('createLogger'); | ||
return STUBBED_LOGGER; | ||
}, | ||
getLogger: function (name) { | ||
makeStub('getLogger'); | ||
return undefined; | ||
}, | ||
}; | ||
export var datadogLogs = makeLogsGlobal(STUBBED_LOGS); | ||
getGlobalObject().DD_LOGS = datadogLogs; | ||
export function makeLogsGlobal(stub) { | ||
var global = makeGlobal(stub); | ||
import { BoundedBuffer, checkIsNotLocalFile, combine, createContextManager, defineGlobal, getGlobalObject, isPercentage, makeGlobal, monitor, } from '@datadog/browser-core'; | ||
import { Logger } from './logger'; | ||
import { startLogs } from './logs'; | ||
export var datadogLogs = makeLogsGlobal(startLogs); | ||
defineGlobal(getGlobalObject(), 'DD_LOGS', datadogLogs); | ||
export function makeLogsGlobal(startLogsImpl) { | ||
var isAlreadyInitialized = false; | ||
global.init = monitor(function (userConfiguration) { | ||
if (!checkIsNotLocalFile() || !canInitLogs(userConfiguration)) { | ||
return; | ||
} | ||
if (userConfiguration.publicApiKey) { | ||
userConfiguration.clientToken = userConfiguration.publicApiKey; | ||
console.warn('Public API Key is deprecated. Please use Client Token instead.'); | ||
} | ||
var isCollectingError = userConfiguration.forwardErrorsToLogs !== false; | ||
var logsUserConfiguration = __assign(__assign({}, userConfiguration), { isCollectingError: isCollectingError }); | ||
var _a = commonInit(logsUserConfiguration, buildEnv), errorObservable = _a.errorObservable, configuration = _a.configuration, internalMonitoring = _a.internalMonitoring; | ||
var session = startLoggerSession(configuration, areCookiesAuthorized(mustUseSecureCookie(userConfiguration))); | ||
var globalApi = startLogger(errorObservable, configuration, session, internalMonitoring); | ||
assign(global, globalApi); | ||
isAlreadyInitialized = true; | ||
var globalContextManager = createContextManager(); | ||
var customLoggers = {}; | ||
var beforeInitSendLog = new BoundedBuffer(); | ||
var sendLogStrategy = function (message, currentContext) { | ||
beforeInitSendLog.add([message, currentContext]); | ||
}; | ||
var logger = new Logger(sendLog); | ||
return makeGlobal({ | ||
logger: logger, | ||
init: monitor(function (userConfiguration) { | ||
if (!checkIsNotLocalFile() || !canInitLogs(userConfiguration)) { | ||
return; | ||
} | ||
if (userConfiguration.publicApiKey) { | ||
userConfiguration.clientToken = userConfiguration.publicApiKey; | ||
console.warn('Public API Key is deprecated. Please use Client Token instead.'); | ||
} | ||
sendLogStrategy = startLogsImpl(userConfiguration, logger, globalContextManager.get); | ||
beforeInitSendLog.drain(function (_a) { | ||
var message = _a[0], context = _a[1]; | ||
return sendLogStrategy(message, context); | ||
}); | ||
isAlreadyInitialized = true; | ||
}), | ||
setLoggerGlobalContext: monitor(globalContextManager.set), | ||
addLoggerGlobalContext: monitor(globalContextManager.add), | ||
removeLoggerGlobalContext: monitor(globalContextManager.remove), | ||
createLogger: monitor(function (name, conf) { | ||
if (conf === void 0) { conf = {}; } | ||
customLoggers[name] = new Logger(sendLog, conf.handler, conf.level, __assign(__assign({}, conf.context), { logger: { name: name } })); | ||
return customLoggers[name]; | ||
}), | ||
getLogger: monitor(function (name) { | ||
return customLoggers[name]; | ||
}), | ||
}); | ||
@@ -99,4 +62,12 @@ function canInitLogs(userConfiguration) { | ||
} | ||
return global; | ||
function sendLog(message) { | ||
sendLogStrategy(message, combine({ | ||
date: Date.now(), | ||
view: { | ||
referrer: document.referrer, | ||
url: window.location.href, | ||
}, | ||
}, globalContextManager.get())); | ||
} | ||
} | ||
//# sourceMappingURL=logs.entry.js.map |
{ | ||
"name": "@datadog/browser-logs", | ||
"version": "1.21.0", | ||
"version": "1.24.0", | ||
"license": "Apache-2.0", | ||
@@ -16,3 +16,3 @@ "main": "cjs/index.js", | ||
"dependencies": { | ||
"@datadog/browser-core": "1.21.0", | ||
"@datadog/browser-core": "1.24.0", | ||
"tslib": "^1.10.0" | ||
@@ -29,3 +29,3 @@ }, | ||
}, | ||
"gitHead": "e3e6e905260928930528fb3d8511abb1e8113c17" | ||
"gitHead": "e161cbd59fa9c6568579036c42d1ec214e938117" | ||
} |
@@ -43,3 +43,3 @@ # `logs` | ||
- `isCollectingError`: when truthy, we'll automatically forward `console.error` logs, uncaught exceptions and network errors. | ||
- `forwardErrorsToLogs`: when truthy, we'll automatically forward `console.error` logs, uncaught exceptions and network errors. | ||
- `sampleRate`: percentage of sessions to track. Only tracked sessions send logs. | ||
@@ -62,3 +62,3 @@ - `site`: The site of the Datadog intake to send SDK data to (default: 'datadoghq.com', set to 'datadoghq.eu' to send data to the EU site) | ||
site?: string, | ||
isCollectingError?: boolean, | ||
forwardErrorsToLogs?: boolean, | ||
sampleRate?: number, | ||
@@ -65,0 +65,0 @@ silentMultipleInit?: boolean, |
export { Datacenter } from '@datadog/browser-core' | ||
export { StatusType, HandlerType, LoggerConfiguration, Logger, LogsMessage } from './logger' | ||
export { LogsUserConfiguration, Status, LogsGlobal, datadogLogs } from './logs.entry' | ||
export { StatusType, HandlerType, Logger, LogsMessage } from './logger' | ||
export { LogsUserConfiguration, Status, LoggerConfiguration, LogsGlobal, datadogLogs } from './logs.entry' |
@@ -1,20 +0,3 @@ | ||
import { | ||
Batch, | ||
Configuration, | ||
Context, | ||
ContextValue, | ||
deepMerge, | ||
ErrorMessage, | ||
ErrorObservable, | ||
ErrorOrigin, | ||
getTimestamp, | ||
HttpRequest, | ||
InternalMonitoring, | ||
monitored, | ||
noop, | ||
} from '@datadog/browser-core' | ||
import { combine, Context, ContextValue, createContextManager, ErrorOrigin, monitored } from '@datadog/browser-core' | ||
import { LoggerSession } from './loggerSession' | ||
import { LogsGlobal } from './logs.entry' | ||
export enum StatusType { | ||
@@ -42,8 +25,2 @@ debug = 'debug', | ||
export interface LoggerConfiguration { | ||
level?: StatusType | ||
handler?: HandlerType | ||
context?: Context | ||
} | ||
export enum HandlerType { | ||
@@ -55,145 +32,47 @@ http = 'http', | ||
type Handlers = { [key in HandlerType]: (message: LogsMessage) => void } | ||
export function startLogger( | ||
errorObservable: ErrorObservable, | ||
configuration: Configuration, | ||
session: LoggerSession, | ||
internalMonitoring: InternalMonitoring | ||
) { | ||
let globalContext: Context = {} | ||
internalMonitoring.setExternalContextProvider( | ||
() => deepMerge({ session_id: session.getId() }, globalContext, getRUMInternalContext() as Context) as Context | ||
) | ||
const batch = startLoggerBatch(configuration, session, () => globalContext) | ||
const handlers = { | ||
[HandlerType.console]: (message: LogsMessage) => console.log(`${message.status}: ${message.message}`), | ||
[HandlerType.http]: (message: LogsMessage) => batch.add(message), | ||
[HandlerType.silent]: noop, | ||
} | ||
const logger = new Logger(session, handlers) | ||
customLoggers = {} | ||
errorObservable.subscribe((e: ErrorMessage) => | ||
logger.error( | ||
e.message, | ||
deepMerge( | ||
({ date: getTimestamp(e.startTime), ...e.context } as unknown) as Context, | ||
getRUMInternalContext(e.startTime) | ||
) | ||
) | ||
) | ||
const globalApi: Partial<LogsGlobal> = {} | ||
globalApi.setLoggerGlobalContext = (context: Context) => { | ||
globalContext = context | ||
} | ||
globalApi.addLoggerGlobalContext = (key: string, value: ContextValue) => { | ||
globalContext[key] = value | ||
} | ||
globalApi.removeLoggerGlobalContext = (key: string) => { | ||
delete globalContext[key] | ||
} | ||
globalApi.createLogger = makeCreateLogger(session, handlers) | ||
globalApi.getLogger = getLogger | ||
globalApi.logger = logger | ||
return globalApi | ||
} | ||
function startLoggerBatch(configuration: Configuration, session: LoggerSession, globalContextProvider: () => Context) { | ||
const primaryBatch = createLoggerBatch(configuration.logsEndpoint) | ||
let replicaBatch: Batch | undefined | ||
if (configuration.replica !== undefined) { | ||
replicaBatch = createLoggerBatch(configuration.replica.logsEndpoint) | ||
} | ||
function createLoggerBatch(endpointUrl: string) { | ||
return new Batch( | ||
new HttpRequest(endpointUrl, configuration.batchBytesLimit), | ||
configuration.maxBatchSize, | ||
configuration.batchBytesLimit, | ||
configuration.maxMessageSize, | ||
configuration.flushTimeout | ||
) | ||
} | ||
function withContext(message: LogsMessage) { | ||
return deepMerge( | ||
{ | ||
date: new Date().getTime(), | ||
service: configuration.service, | ||
session_id: session.getId(), | ||
view: { | ||
referrer: document.referrer, | ||
url: window.location.href, | ||
}, | ||
}, | ||
globalContextProvider(), | ||
getRUMInternalContext() as Context, | ||
message | ||
) as Context | ||
} | ||
return { | ||
add(message: LogsMessage) { | ||
const contextualizedMessage = withContext(message) | ||
primaryBatch.add(contextualizedMessage) | ||
if (replicaBatch) { | ||
replicaBatch.add(contextualizedMessage) | ||
} | ||
}, | ||
} | ||
} | ||
let customLoggers: { [name: string]: Logger } | ||
function makeCreateLogger(session: LoggerSession, handlers: Handlers) { | ||
return (name: string, conf: LoggerConfiguration = {}) => { | ||
customLoggers[name] = new Logger(session, handlers, conf.handler, conf.level, { | ||
...conf.context, | ||
logger: { name }, | ||
}) | ||
return customLoggers[name] | ||
} | ||
} | ||
function getLogger(name: string) { | ||
return customLoggers[name] | ||
} | ||
export class Logger { | ||
private handler: (message: LogsMessage) => void | ||
private contextManager = createContextManager() | ||
constructor( | ||
private session: LoggerSession, | ||
private handlers: { [key in HandlerType]: (message: LogsMessage) => void }, | ||
handler = HandlerType.http, | ||
private sendLog: (message: LogsMessage) => void, | ||
private handlerType = HandlerType.http, | ||
private level = StatusType.debug, | ||
private loggerContext: Context = {} | ||
loggerContext: Context = {} | ||
) { | ||
this.handler = this.handlers[handler] | ||
this.contextManager.set(loggerContext) | ||
} | ||
@monitored | ||
log(message: string, messageContext = {}, status = StatusType.info) { | ||
if (this.session.isTracked() && STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[this.level]) { | ||
this.handler({ message, status, ...(deepMerge({}, this.loggerContext, messageContext) as Context) }) | ||
log(message: string, messageContext?: Context, status = StatusType.info) { | ||
if (STATUS_PRIORITIES[status] >= STATUS_PRIORITIES[this.level]) { | ||
switch (this.handlerType) { | ||
case HandlerType.http: | ||
this.sendLog({ | ||
message, | ||
status, | ||
...combine(this.contextManager.get(), messageContext), | ||
}) | ||
break | ||
case HandlerType.console: | ||
console.log(`${status}: ${message}`) | ||
break | ||
case HandlerType.silent: | ||
break | ||
} | ||
} | ||
} | ||
debug(message: string, messageContext = {}) { | ||
debug(message: string, messageContext?: Context) { | ||
this.log(message, messageContext, StatusType.debug) | ||
} | ||
info(message: string, messageContext = {}) { | ||
info(message: string, messageContext?: Context) { | ||
this.log(message, messageContext, StatusType.info) | ||
} | ||
warn(message: string, messageContext = {}) { | ||
warn(message: string, messageContext?: Context) { | ||
this.log(message, messageContext, StatusType.warn) | ||
} | ||
error(message: string, messageContext = {}) { | ||
error(message: string, messageContext?: Context) { | ||
const errorOrigin = { | ||
@@ -204,19 +83,19 @@ error: { | ||
} | ||
this.log(message, deepMerge({}, errorOrigin, messageContext), StatusType.error) | ||
this.log(message, combine(errorOrigin, messageContext), StatusType.error) | ||
} | ||
setContext(context: Context) { | ||
this.loggerContext = context | ||
this.contextManager.set(context) | ||
} | ||
addContext(key: string, value: ContextValue) { | ||
this.loggerContext[key] = value | ||
this.contextManager.add(key, value) | ||
} | ||
removeContext(key: string) { | ||
delete this.loggerContext[key] | ||
this.contextManager.remove(key) | ||
} | ||
setHandler(handler: HandlerType) { | ||
this.handler = this.handlers[handler] | ||
this.handlerType = handler | ||
} | ||
@@ -228,10 +107,1 @@ | ||
} | ||
interface Rum { | ||
getInternalContext: (startTime?: number) => Context | ||
} | ||
function getRUMInternalContext(startTime?: number): Context | undefined { | ||
const rum = (window as any).DD_RUM as Rum | ||
return rum && rum.getInternalContext ? rum.getInternalContext(startTime) : undefined | ||
} |
import { | ||
areCookiesAuthorized, | ||
assign, | ||
BoundedBuffer, | ||
checkIsNotLocalFile, | ||
commonInit, | ||
combine, | ||
Context, | ||
ContextValue, | ||
createContextManager, | ||
defineGlobal, | ||
getGlobalObject, | ||
isPercentage, | ||
makeGlobal, | ||
makeStub, | ||
monitor, | ||
mustUseSecureCookie, | ||
UserConfiguration, | ||
} from '@datadog/browser-core' | ||
import { buildEnv } from './buildEnv' | ||
import { HandlerType, Logger, LoggerConfiguration, startLogger, StatusType } from './logger' | ||
import { startLoggerSession } from './loggerSession' | ||
import { HandlerType, Logger, LogsMessage, StatusType } from './logger' | ||
import { startLogs } from './logs' | ||
@@ -24,64 +22,13 @@ export interface LogsUserConfiguration extends UserConfiguration { | ||
export type Status = keyof typeof StatusType | ||
const STUBBED_LOGGER = { | ||
debug(message: string, context?: Context) { | ||
makeStub('logs.logger.debug') | ||
}, | ||
error(message: string, context?: Context) { | ||
makeStub('logs.logger.error') | ||
}, | ||
info(message: string, context?: Context) { | ||
makeStub('logs.logger.info') | ||
}, | ||
log(message: string, context?: Context, status?: Status) { | ||
makeStub('logs.logger.log') | ||
}, | ||
warn(message: string, context?: Context) { | ||
makeStub('logs.logger.warn') | ||
}, | ||
setContext(context: Context) { | ||
makeStub('logs.logger.setContext') | ||
}, | ||
addContext(key: string, value: ContextValue) { | ||
makeStub('logs.logger.addContext') | ||
}, | ||
removeContext(key: string) { | ||
makeStub('logs.logger.removeContext') | ||
}, | ||
setHandler(handler: HandlerType) { | ||
makeStub('logs.logger.setHandler') | ||
}, | ||
setLevel(level: StatusType) { | ||
makeStub('logs.logger.setLevel') | ||
}, | ||
export interface LoggerConfiguration { | ||
level?: StatusType | ||
handler?: HandlerType | ||
context?: Context | ||
} | ||
const STUBBED_LOGS = { | ||
logger: STUBBED_LOGGER, | ||
init(userConfiguration: LogsUserConfiguration) { | ||
makeStub('core.init') | ||
}, | ||
addLoggerGlobalContext(key: string, value: ContextValue) { | ||
makeStub('addLoggerGlobalContext') | ||
}, | ||
removeLoggerGlobalContext(key: string) { | ||
makeStub('removeLoggerGlobalContext') | ||
}, | ||
setLoggerGlobalContext(context: Context) { | ||
makeStub('setLoggerGlobalContext') | ||
}, | ||
createLogger(name: string, conf?: LoggerConfiguration): Logger { | ||
makeStub('createLogger') | ||
return STUBBED_LOGGER as Logger | ||
}, | ||
getLogger(name: string): Logger | undefined { | ||
makeStub('getLogger') | ||
return undefined | ||
}, | ||
} | ||
export type Status = keyof typeof StatusType | ||
export type LogsGlobal = typeof STUBBED_LOGS | ||
export type LogsGlobal = ReturnType<typeof makeLogsGlobal> | ||
export const datadogLogs = makeLogsGlobal(STUBBED_LOGS) | ||
export const datadogLogs = makeLogsGlobal(startLogs) | ||
@@ -91,29 +38,55 @@ interface BrowserWindow extends Window { | ||
} | ||
defineGlobal(getGlobalObject<BrowserWindow>(), 'DD_LOGS', datadogLogs) | ||
getGlobalObject<BrowserWindow>().DD_LOGS = datadogLogs | ||
export type StartLogs = typeof startLogs | ||
export function makeLogsGlobal(stub: LogsGlobal) { | ||
const global = makeGlobal(stub) | ||
export function makeLogsGlobal(startLogsImpl: StartLogs) { | ||
let isAlreadyInitialized = false | ||
global.init = monitor((userConfiguration: LogsUserConfiguration) => { | ||
if (!checkIsNotLocalFile() || !canInitLogs(userConfiguration)) { | ||
return | ||
} | ||
const globalContextManager = createContextManager() | ||
const customLoggers: { [name: string]: Logger | undefined } = {} | ||
if (userConfiguration.publicApiKey) { | ||
userConfiguration.clientToken = userConfiguration.publicApiKey | ||
console.warn('Public API Key is deprecated. Please use Client Token instead.') | ||
} | ||
const isCollectingError = userConfiguration.forwardErrorsToLogs !== false | ||
const logsUserConfiguration = { | ||
...userConfiguration, | ||
isCollectingError, | ||
} | ||
const { errorObservable, configuration, internalMonitoring } = commonInit(logsUserConfiguration, buildEnv) | ||
const session = startLoggerSession(configuration, areCookiesAuthorized(mustUseSecureCookie(userConfiguration))) | ||
const globalApi = startLogger(errorObservable, configuration, session, internalMonitoring) | ||
assign(global, globalApi) | ||
isAlreadyInitialized = true | ||
const beforeInitSendLog = new BoundedBuffer<[LogsMessage, Context]>() | ||
let sendLogStrategy = (message: LogsMessage, currentContext: Context) => { | ||
beforeInitSendLog.add([message, currentContext]) | ||
} | ||
const logger = new Logger(sendLog) | ||
return makeGlobal({ | ||
logger, | ||
init: monitor((userConfiguration: LogsUserConfiguration) => { | ||
if (!checkIsNotLocalFile() || !canInitLogs(userConfiguration)) { | ||
return | ||
} | ||
if (userConfiguration.publicApiKey) { | ||
userConfiguration.clientToken = userConfiguration.publicApiKey | ||
console.warn('Public API Key is deprecated. Please use Client Token instead.') | ||
} | ||
sendLogStrategy = startLogsImpl(userConfiguration, logger, globalContextManager.get) | ||
beforeInitSendLog.drain(([message, context]) => sendLogStrategy(message, context)) | ||
isAlreadyInitialized = true | ||
}), | ||
setLoggerGlobalContext: monitor(globalContextManager.set), | ||
addLoggerGlobalContext: monitor(globalContextManager.add), | ||
removeLoggerGlobalContext: monitor(globalContextManager.remove), | ||
createLogger: monitor((name: string, conf: LoggerConfiguration = {}) => { | ||
customLoggers[name] = new Logger(sendLog, conf.handler, conf.level, { | ||
...conf.context, | ||
logger: { name }, | ||
}) | ||
return customLoggers[name]! | ||
}), | ||
getLogger: monitor((name: string) => { | ||
return customLoggers[name] | ||
}), | ||
}) | ||
@@ -139,3 +112,17 @@ | ||
return global | ||
function sendLog(message: LogsMessage) { | ||
sendLogStrategy( | ||
message, | ||
combine( | ||
{ | ||
date: Date.now(), | ||
view: { | ||
referrer: document.referrer, | ||
url: window.location.href, | ||
}, | ||
}, | ||
globalContextManager.get() | ||
) | ||
) | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
46
110377
1077
1
+ Added@datadog/browser-core@1.24.0(transitive)
- Removed@datadog/browser-core@1.21.0(transitive)
Updated@datadog/browser-core@1.24.0