Socket
Socket
Sign inDemoInstall

@datadog/browser-logs

Package Overview
Dependencies
Maintainers
1
Versions
256
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@datadog/browser-logs - npm Package Compare versions

Comparing version 4.7.0 to 4.7.1

cjs/domain/logsCollection/console/consoleCollection.d.ts

2

bundle/datadog-logs.js

@@ -1,1 +0,1 @@

!function(){"use strict";var e={log:console.log.bind(console),warn:console.warn.bind(console),error:console.error.bind(console)},t="?";function n(e){var n=[],c=u(e,"stack");return c&&c.split("\n").forEach((function(e){var u=function(e){var n=r.exec(e);if(!n)return;var i=n[2]&&0===n[2].indexOf("native"),s=n[2]&&0===n[2].indexOf("eval"),a=o.exec(n[2]);s&&a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3]);return{args:i?[n[2]]:[],column:n[4]?+n[4]:void 0,func:n[1]||t,line:n[3]?+n[3]:void 0,url:i?void 0:n[2]}}(e)||function(e){var n=i.exec(e);if(!n)return;return{args:[],column:n[4]?+n[4]:void 0,func:n[1]||t,line:+n[3],url:n[2]}}(e)||function(e){var n=s.exec(e);if(!n)return;var r=n[3]&&n[3].indexOf(" > eval")>-1,o=a.exec(n[3]);r&&o&&(n[3]=o[1],n[4]=o[2],n[5]=void 0);return{args:n[2]?n[2].split(","):[],column:n[5]?+n[5]:void 0,func:n[1]||t,line:n[4]?+n[4]:void 0,url:n[3]}}(e);u&&(!u.func&&u.line&&(u.func=t),n.push(u))})),{message:u(e,"message"),name:u(e,"name"),stack:n}}var r=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,o=/\((\S*)(?::(\d+))(?::(\d+))\)/;var i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,a=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function u(e,t){if("object"==typeof e&&e&&t in e){var n=e[t];return"string"==typeof n?n:void 0}}var c=1e3,f=6e4;function l(e,t,n){var r,o,i=!n||void 0===n.leading||n.leading,s=!n||void 0===n.trailing||n.trailing,a=!1;return{throttled:function(){for(var n=[],u=0;u<arguments.length;u++)n[u]=arguments[u];a?r=n:(i?e.apply(void 0,n):r=n,a=!0,o=setTimeout((function(){s&&r&&e.apply(void 0,r),a=!1,r=void 0}),t))},cancel:function(){clearTimeout(o),a=!1,r=void 0}}}function d(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.forEach((function(t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})),e}function v(e){return e?(parseInt(e,10)^16*Math.random()>>parseInt(e,10)/4).toString(16):"".concat(1e7,"-").concat(1e3,"-").concat(4e3,"-").concat(8e3,"-").concat(1e11).replace(/[018]/g,v)}function p(){}function h(e,t,n){if(null==e)return JSON.stringify(e);var r=[!1,void 0];g(e)&&(r=[!0,e.toJSON],delete e.toJSON);var o,i,s=[!1,void 0];"object"==typeof e&&g(o=Object.getPrototypeOf(e))&&(s=[!0,o.toJSON],delete o.toJSON);try{i=JSON.stringify(e,t,n)}catch(e){i="<error: unable to serialize object>"}finally{r[0]&&(e.toJSON=r[1]),s[0]&&(o.toJSON=s[1])}return i}function g(e){return"object"==typeof e&&null!==e&&Object.prototype.hasOwnProperty.call(e,"toJSON")}function b(e,t){return-1!==e.indexOf(t)}function y(e){return Object.keys(e).map((function(t){return e[t]}))}function m(){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}function w(e,t,n){void 0===n&&(n="");var r=e.charCodeAt(t-1),o=r>=55296&&r<=56319?t+1:t;return e.length<=o?e:"".concat(e.slice(0,o)).concat(n)}function k(e,t,n,r){return x(e,[t],n,r)}function x(e,t,n,r){var o=void 0===r?{}:r,i=o.once,s=o.capture,a=o.passive,u=$(i?function(e){f(),n(e)}:n),c=a?{capture:s,passive:a}:s;t.forEach((function(t){return e.addEventListener(t,u,c)}));var f=function(){return t.forEach((function(t){return e.removeEventListener(t,u,c)}))};return{stop:f}}function S(e,t,n){if(void 0===n&&(n=function(){if("undefined"!=typeof WeakSet){var e=new WeakSet;return{hasAlreadyBeenSeen:function(t){var n=e.has(t);return n||e.add(t),n}}}var t=[];return{hasAlreadyBeenSeen:function(e){var n=t.indexOf(e)>=0;return n||t.push(e),n}}}()),void 0===t)return e;if("object"!=typeof t||null===t)return t;if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp){var r=t.flags||[t.global?"g":"",t.ignoreCase?"i":"",t.multiline?"m":"",t.sticky?"y":"",t.unicode?"u":""].join("");return new RegExp(t.source,r)}if(!n.hasAlreadyBeenSeen(t)){if(Array.isArray(t)){for(var o=Array.isArray(e)?e:[],i=0;i<t.length;++i)o[i]=S(o[i],t[i],n);return o}var s,a="object"==(null===(s=e)?"null":Array.isArray(s)?"array":typeof s)?e:{};for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(a[u]=S(a[u],t[u],n));return a}}function C(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r=0,o=t;r<o.length;r++){var i=o[r];null!=i&&(e=S(e,i))}return e}var O="agent",E="console",T="logger",R="network",L="source",M="report";function B(e){var t=_(e);return e.stack.forEach((function(e){var n="?"===e.func?"<anonymous>":e.func,r=e.args&&e.args.length>0?"(".concat(e.args.join(", "),")"):"",o=e.line?":".concat(e.line):"",i=e.line&&e.column?":".concat(e.column):"";t+="\n at ".concat(n).concat(r," @ ").concat(e.url).concat(o).concat(i)})),t}function _(e){return"".concat(e.name||"Error",": ").concat(e.message)}function j(){var e,t=new Error;if(!t.stack)try{throw t}catch(e){}return X((function(){var r=n(t);r.stack=r.stack.slice(2),e=B(r)})),e}var I,z,A=function(){function e(e){this.onFirstSubscribe=e,this.observers=[]}return e.prototype.subscribe=function(e){var t=this;return!this.observers.length&&this.onFirstSubscribe&&(this.onLastUnsubscribe=this.onFirstSubscribe()||void 0),this.observers.push(e),{unsubscribe:function(){t.observers=t.observers.filter((function(t){return e!==t})),!t.observers.length&&t.onLastUnsubscribe&&t.onLastUnsubscribe()}}},e.prototype.notify=function(e){this.observers.forEach((function(t){return t(e)}))},e}();function U(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=new A((function(){var t=e.map((function(e){return e.subscribe((function(e){return n.notify(e)}))}));return function(){return t.forEach((function(e){return e.unsubscribe()}))}}));return n}function D(){return Date.now()}function P(){return performance.now()}function N(){return{relative:P(),timeStamp:D()}}function H(e,t){return t-e}function q(){return void 0===I&&(I=performance.timing.navigationStart),I}function F(e){return!!z&&z.has(e)}var J,V={maxMessagesPerPage:0,sentMessageCount:0};function G(e){var t,n,r=new A,o=new A;return J=function(e){r.notify(function(e){return C({date:D()},void 0!==t?t():{},e)}(e)),F("telemetry")&&o.notify(function(e){return C({date:D(),service:"browser-sdk",version:"4.7.0",_dd:{event_type:"internal_telemetry"}},void 0!==n?n():{},e)}(e))},d(V,{maxMessagesPerPage:e.maxInternalMonitoringMessagesPerPage,sentMessageCount:0}),{setExternalContextProvider:function(e){t=e},monitoringMessageObservable:r,setTelemetryContextProvider:function(e){n=e},telemetryEventObservable:o}}function W(e,t,n){var r=n.value;n.value=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=J?$(r):r;return n.apply(this,e)}}function $(e){return function(){return X(e,this,arguments)}}function X(e,t,n){try{return e.apply(t,n)}catch(e){ee(e);try{Q(e)}catch(e){ee(e)}}}function K(t,n){!function(t,n){V.debugMode&&e.log("[MONITORING MESSAGE]",t,n)}(t,n),Y(d({message:t,status:"debug"},n))}function Q(e){Y(d({status:"error"},function(e){if(e instanceof Error){var t=n(e);return{error:{kind:t.name,stack:B(t)},message:t.message}}return{error:{stack:"Not an instance of error"},message:"Uncaught ".concat(h(e))}}(e)))}function Y(e){J&&V.sentMessageCount<V.maxMessagesPerPage&&(V.sentMessageCount+=1,J(e))}function Z(e){V.debugMode=e}function ee(t){V.debugMode&&e.error("[INTERNAL ERROR]",t)}function te(t,n){return function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];try{return t.apply(void 0,r)}catch(t){e.error(n,t)}}}function ne(){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}}}var re=function(){function e(){this.buffer=[]}return e.prototype.add=function(e){this.buffer.push(e)>500&&this.buffer.splice(0,1)},e.prototype.drain=function(){this.buffer.forEach((function(e){return e()})),this.buffer.length=0},e}();function oe(){var e=m().DatadogEventBridge;if(e)return{getAllowedWebViewHosts:function(){return JSON.parse(e.getAllowedWebViewHosts())},send:function(t,n){e.send(JSON.stringify({eventType:t,event:n}))}}}function ie(){var e=oe();return!!e&&b(e.getAllowedWebViewHosts(),window.location.hostname)}var se,ae;function ue(e,t,n,r){var o=new Date;o.setTime(o.getTime()+n);var i="expires=".concat(o.toUTCString()),s=r&&r.crossSite?"none":"strict",a=r&&r.domain?";domain=".concat(r.domain):"",u=r&&r.secure?";secure":"";document.cookie="".concat(e,"=").concat(t,";").concat(i,";path=/;samesite=").concat(s).concat(a).concat(u)}function ce(e){return function(e,t){var n=new RegExp("(?:^|;)\\s*".concat(t,"\\s*=\\s*([^;]+)")).exec(e);return n?n[1]:void 0}(document.cookie,e)}function fe(e,t){ue(e,"",0,t)}function le(e){return de(e,function(e){if(e.origin)return e.origin;var t=e.host.replace(/(:80|:443)$/,"");return"".concat(e.protocol,"//").concat(t)}(window.location)).href}function de(e,t){if(function(){if(void 0!==ae)return ae;try{var e=new URL("http://test/path");return ae="http://test/path"===e.href}catch(e){ae=!1}return ae}())return void 0!==t?new URL(e,t):new URL(e);if(void 0===t&&!/:/.test(e))throw new Error("Invalid URL: '".concat(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 ve={logs:"logs",rum:"rum",sessionReplay:"session-replay"},pe={logs:"logs",rum:"rum",sessionReplay:"replay"},he="datadoghq.com";function ge(e,t,n,r){var o=e.site,i=void 0===o?he:o,s=e.clientToken,a=i.split("."),u=a.pop(),c="".concat(ve[t],".browser-intake-").concat(a.join("-"),".").concat(u),f="https://".concat(c,"/api/v2/").concat(pe[t]),l=e.proxyUrl&&le(e.proxyUrl);return{build:function(){var e="ddsource=".concat(r||"browser")+"&ddtags=".concat(encodeURIComponent(["sdk_version:".concat("4.7.0")].concat(n).join(",")))+"&dd-api-key=".concat(s)+"&dd-evp-origin-version=".concat(encodeURIComponent("4.7.0"))+"&dd-evp-origin=browser"+"&dd-request-id=".concat(v());"rum"===t&&(e+="&batch_time=".concat(D()));var o="".concat(f,"?").concat(e);return l?"".concat(l,"?ddforward=").concat(encodeURIComponent(o)):o},buildIntakeUrl:function(){return l?"".concat(l,"?ddforward"):f}}}var be=/[^a-z0-9_:./-]/;function ye(t,n){var r=200-t.length-1;(n.length>r||be.test(n))&&e.warn("".concat(t," value doesn't meet tag requirements and will be sanitized"));var o=n.replace(/,/g,"_");return"".concat(t,":").concat(o)}function me(e){var t=function(e){var t=e.env,n=e.service,r=e.version,o=e.datacenter,i=[];return t&&i.push(ye("env",t)),n&&i.push(ye("service",n)),r&&i.push(ye("version",r)),o&&i.push(ye("datacenter",o)),i}(e),n=function(e,t){var n={logsEndpointBuilder:ge(e,"logs",t),rumEndpointBuilder:ge(e,"rum",t),sessionReplayEndpointBuilder:ge(e,"sessionReplay",t)};if(e.internalMonitoringApiKey)return d(n,{internalMonitoringEndpointBuilder:ge(d({},e,{clientToken:e.internalMonitoringApiKey}),"logs",t,"browser-agent-internal-monitoring")});return n}(e,t),r=y(n).map((function(e){return e.buildIntakeUrl()})),o=function(e,t,n){if(!e.replica)return;var r=d({},e,{site:he,clientToken:e.replica.clientToken}),o={logsEndpointBuilder:ge(r,"logs",n),rumEndpointBuilder:ge(r,"rum",n),internalMonitoringEndpointBuilder:ge(r,"logs",n,"browser-agent-internal-monitoring")};return t.push.apply(t,y(o).map((function(e){return e.buildIntakeUrl()}))),d({applicationId:e.replica.applicationId},o)}(e,r,t);return d({isIntakeUrl:function(e){return r.some((function(t){return 0===e.indexOf(t)}))},replica:o},n)}function we(t){var n;if(t&&t.clientToken){var r,o;if(void 0===t.sampleRate||function(e){return"number"==typeof e}(r=t.sampleRate)&&r>=0&&r<=100)return o=t.enableExperimentalFeatures,Array.isArray(o)&&(z||(z=new Set(o)),o.filter((function(e){return"string"==typeof e})).forEach((function(e){z.add(e)}))),d({beforeSend:t.beforeSend&&te(t.beforeSend,"beforeSend threw an error:"),cookieOptions:ke(t),sampleRate:null!==(n=t.sampleRate)&&void 0!==n?n:100,service:t.service,silentMultipleInit:!!t.silentMultipleInit,batchBytesLimit:16384,eventRateLimiterThreshold:3e3,maxInternalMonitoringMessagesPerPage:15,flushTimeout:3e4,maxBatchSize:50,maxMessageSize:262144},me(t));e.error("Sample Rate should be a number between 0 and 100")}else e.error("Client Token is not configured, we will not send any data.")}function ke(e){var t={};return t.secure=function(e){return!!e.useSecureSessionCookie||!!e.useCrossSiteSessionCookie}(e),t.crossSite=!!e.useCrossSiteSessionCookie,e.trackSessionAcrossSubdomains&&(t.domain=function(){if(void 0===se){for(var e="dd_site_test_".concat(v()),t=window.location.hostname.split("."),n=t.pop();t.length&&!ce(e);)n="".concat(t.pop(),".").concat(n),ue(e,"test",c,{domain:n});fe(e,{domain:n}),se=n}return se}()),t}var xe={log:"log",debug:"debug",info:"info",warn:"warn",error:"error"},Se={};function Ce(e){var t=e.map((function(e){return Se[e]||(Se[e]=function(e){var t=new A((function(){var n=console[e];return console[e]=function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];n.apply(console,r);var i=j();X((function(){t.notify(Oe(r,e,i))}))},function(){console[e]=n}}));return t}(e)),Se[e]}));return U.apply(void 0,t)}function Oe(e,t,r){var o={message:["console ".concat(t,":")].concat(e).map((function(e){return function(e){if("string"==typeof e)return e;if(e instanceof Error)return _(n(e));return h(e,void 0,2)}(e)})).join(" "),api:t};if(t===xe.error){var i=function(e,t){for(var n=0;n<e.length;n+=1){var r=e[n];if(t(r,n,e))return r}}(e,(function(e){return e instanceof Error}));o.stack=i?B(n(i)):void 0,o.handlingStack=r}return o}var Ee={intervention:"intervention",deprecation:"deprecation",cspViolation:"csp_violation"};function Te(e){var t,n=[];b(e,Ee.cspViolation)&&n.push(t=new A((function(){var e=$((function(e){t.notify(function(e){var t=Ee.cspViolation,n="'".concat(e.blockedURI,"' blocked by '").concat(e.effectiveDirective,"' directive");return{type:Ee.cspViolation,subtype:e.effectiveDirective,message:"".concat(t,": ").concat(n),stack:Re(e.effectiveDirective,"".concat(n,' of the policy "').concat(w(e.originalPolicy,100,"..."),'"'),e.sourceFile,e.lineNumber,e.columnNumber)}}(e))}));return k(document,"securitypolicyviolation",e).stop})));var r=e.filter((function(e){return e!==Ee.cspViolation}));return r.length&&n.push(function(e){var t=new A((function(){if(window.ReportingObserver){var n=$((function(e){return e.forEach((function(e){t.notify(function(e){var t=e.type,n=e.body;return{type:t,subtype:n.id,message:"".concat(t,": ").concat(n.message),stack:Re(n.id,n.message,n.sourceFile,n.lineNumber,n.columnNumber)}}(e))}))})),r=new window.ReportingObserver(n,{types:e,buffered:!0});return r.observe(),function(){r.disconnect()}}}));return t}(r)),U.apply(void 0,n)}function Re(e,t,n,r,o){return n&&B({name:e,message:t,stack:[{func:"?",url:n,line:r,column:o}]})}function Le(t,n,r,o){return F(o)&&void 0!==t?"all"===t||Array.isArray(t)&&t.every((function(e){return b(n,e)}))?"all"===t?n:(i=t,s=[],a=new Set,i.forEach((function(e){return a.add(e)})),a.forEach((function(e){return s.push(e)})),s):void e.error("".concat(r,' should be "all" or an array with allowed values "').concat(n.join('", "'),'"')):[];var i,s,a}var Me,Be=function(e,t,n,r){var o,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,n,s):o(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s},_e={debug:"debug",error:"error",info:"info",warn:"warn"},je="console",Ie="http",ze=(Object.keys(_e),function(){function e(e){this.sender=e}return e.prototype.log=function(e,t,n){void 0===n&&(n=_e.info),this.sender.sendLog(e,t,n)},e.prototype.debug=function(e,t){this.log(e,t,_e.debug)},e.prototype.info=function(e,t){this.log(e,t,_e.info)},e.prototype.warn=function(e,t){this.log(e,t,_e.warn)},e.prototype.error=function(e,t){var n={error:{origin:T}};this.log(e,C(n,t),_e.error)},e.prototype.setContext=function(e){this.sender.getContextManager().set(e)},e.prototype.addContext=function(e,t){this.sender.getContextManager().add(e,t)},e.prototype.removeContext=function(e){this.sender.getContextManager().remove(e)},e.prototype.setHandler=function(e){this.sender.setHandler(e)},e.prototype.setLevel=function(e){this.sender.setLevel(e)},Be([W],e.prototype,"log",null),e}()),Ae=((Me={})[_e.debug]=0,Me[_e.info]=1,Me[_e.warn]=2,Me[_e.error]=3,Me);function Ue(t,n,r,o){void 0===n&&(n=Ie),void 0===r&&(r=_e.debug),void 0===o&&(o={});var i={level:r,handlerType:n},s=ne();function a(e,t){var n=Array.isArray(i.handlerType)?i.handlerType:[i.handlerType];return Ae[e]>=Ae[i.level]&&b(n,t)}function u(e,n,r){a(r,Ie)&&t(C({message:e,status:r},s.get(),n))}return s.set(o),{getContextManager:function(){return s},setLevel:function(e){i.level=e},setHandler:function(e){i.handlerType=e},sendToHttp:u,sendLog:function(t,n,r){void 0===r&&(r=_e.info),u(t,n,r),function(t,n,r){a(r,je)&&e.log("".concat(r,": ").concat(t),C(s.get(),n))}(t,n,r)}}}function De(e,t,n){var r=e[t],o=n(r),i=function(){return o.apply(this,arguments)};return e[t]=i,{stop:function(){e[t]===i?e[t]=r:o=r}}}function Pe(e,t,n){var r=n.before,o=n.after;return De(e,t,(function(e){return function(){var t,n=arguments;return r&&X(r,this,n),"function"==typeof e&&(t=e.apply(this,n)),o&&X(o,this,n),t}}))}var Ne=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function He(e){var t=function(e){return Pe(window,"onerror",{before:function(t,r,o,i,s){var a;if(s)a=n(s),e(a,s);else{var u,c={url:r,column:i,line:o},f=t;if("[object String]"==={}.toString.call(t)){var l=Ne.exec(f);l&&(u=l[1],f=l[2])}e(a={name:u,message:"string"==typeof f?f:void 0,stack:[c]},t)}}})}(e).stop,r=function(e){return Pe(window,"onunhandledrejection",{before:function(t){var r=t.reason||"Empty reason",o=n(r);e(o,r)}})}(e).stop;return{stop:function(){t(),r()}}}function qe(e){return He((function(t,n){var r=function(e,t,n,r){return e&&(void 0!==e.message||t instanceof Error)?{message:e.message||"Empty message",stack:B(e),handlingStack:r,type:e.name}:{message:"".concat(n," ").concat(h(t)),stack:"No stack, consider using an instance of Error",handlingStack:r,type:e&&e.name}}(t,n,"Uncaught"),o=r.stack,i=r.message,s=r.type;e.notify({message:i,stack:o,type:s,source:L,startClocks:N(),originalError:n,handling:"unhandled"})}))}var Fe,Je=/[^\u0000-\u007F]/,Ve=function(){function t(e,t,n,r,o,i){void 0===i&&(i=p),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 t.prototype.add=function(e){this.addOrUpdate(e)},t.prototype.upsert=function(e,t){this.addOrUpdate(e,t)},t.prototype.flush=function(e){if(0!==this.bufferMessageCount){var t=this.pushOnlyBuffer.concat(y(this.upsertBuffer));this.request.send(t.join("\n"),this.bufferBytesSize,e),this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0}},t.prototype.sizeInBytes=function(e){return Je.test(e)?void 0!==window.TextEncoder?(new TextEncoder).encode(e).length:new Blob([e]).size:e.length},t.prototype.addOrUpdate=function(t,n){var r=this.process(t),o=r.processedMessage,i=r.messageBytesSize;i>=this.maxMessageSize?e.warn("Discarded a message whose size was bigger than the maximum allowed size ".concat(this.maxMessageSize,"KB.")):(this.hasMessageFor(n)&&this.remove(n),this.willReachedBytesLimitWith(i)&&this.flush("willReachedBytesLimitWith"),this.push(o,i,n),this.isFull()&&this.flush("isFull"))},t.prototype.process=function(e){var t=h(e);return{processedMessage:t,messageBytesSize:this.sizeInBytes(t)}},t.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},t.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)},t.prototype.hasMessageFor=function(e){return void 0!==e&&void 0!==this.upsertBuffer[e]},t.prototype.willReachedBytesLimitWith=function(e){return this.bufferBytesSize+e+1>=this.bytesLimit},t.prototype.isFull=function(){return this.bufferMessageCount===this.maxSize||this.bufferBytesSize>=this.bytesLimit},t.prototype.flushPeriodically=function(){var e=this;setTimeout($((function(){e.flush("flushPeriodically"),e.flushPeriodically()})),this.flushTimeout)},t.prototype.flushOnVisibilityHidden=function(){var e=this;navigator.sendBeacon&&(k(window,"beforeunload",this.beforeUnloadCallback),k(document,"visibilitychange",(function(){"hidden"===document.visibilityState&&e.flush("visibilitychange")})),k(window,"beforeunload",(function(){return e.flush("beforeunload")})))},t}(),Ge=!1,We=function(){function e(e,t){this.endpointBuilder=e,this.bytesLimit=t}return e.prototype.send=function(e,t,n){var r=this.endpointBuilder.build(),o=!!navigator.sendBeacon&&t<this.bytesLimit;if(o)try{if(navigator.sendBeacon(r,e))return}catch(e){!function(e){$e||($e=!0,Q(e))}(e)}var i=new XMLHttpRequest;i.addEventListener("loadend",$((function(e){return function(e){var i=null==e?void 0:e.currentTarget;i.status>=200&&i.status<300||Ge||(Ge=!0,K("XHR fallback failed",{on_line:navigator.onLine,size:t,url:r,try_beacon:o,flush_reason:n,event:{is_trusted:e.isTrusted,total:e.total,loaded:e.loaded},request:{status:i.status,ready_state:i.readyState,response_text:i.responseText.slice(0,512)}}))}(e)}))),i.open("POST",r,!0),i.send(e)},e}(),$e=!1;function Xe(e,t,n){var r,o=i(t);function i(t){return new Ve(new We(t,e.batchBytesLimit),e.maxBatchSize,e.batchBytesLimit,e.maxMessageSize,e.flushTimeout)}return n&&(r=i(n)),{add:function(e){o.add(e),r&&r.add(e)}}}var Ke,Qe=new WeakMap;function Ye(){var e;return Fe||(e=new A((function(){var t=Pe(XMLHttpRequest.prototype,"open",{before:Ze}).stop,n=Pe(XMLHttpRequest.prototype,"send",{before:function(){et.call(this,e)}}).stop,r=Pe(XMLHttpRequest.prototype,"abort",{before:tt}).stop;return function(){t(),n(),r()}})),Fe=e),Fe}function Ze(e,t){Qe.set(this,{state:"open",method:e,url:le(t.toString())})}function et(e){var t=this,n=Qe.get(this);if(n){var r=n;r.state="start",r.startTime=P(),r.startClocks=N(),r.isAborted=!1,r.xhr=this;var o=!1,i=Pe(this,"onreadystatechange",{before:function(){this.readyState===XMLHttpRequest.DONE&&s()}}).stop,s=$((function(){if(t.removeEventListener("loadend",s),i(),!o){o=!0;var a=n;a.state="complete",a.duration=H(r.startClocks.timeStamp,D()),a.status=t.status,e.notify(d({},a))}}));this.addEventListener("loadend",s),e.notify(r)}}function tt(){var e=Qe.get(this);e&&(e.isAborted=!0)}function nt(){var e;return Ke||(e=new A((function(){if(window.fetch)return De(window,"fetch",(function(t){return function(n,r){var o,i=X(rt,null,[e,n,r]);return i?(o=t.call(this,i.input,i.init),X(ot,null,[e,o,i])):o=t.call(this,n,r),o}})).stop})),Ke=e),Ke}function rt(e,t,n){var r=n&&n.method||"object"==typeof t&&t.method||"GET",o=le("object"==typeof t&&t.url||t),i={state:"start",init:n,input:t,method:r,startClocks:N(),url:o};return e.notify(i),i}function ot(e,t,n){var r=function(t){var r=n;r.state="complete",r.duration=H(r.startClocks.timeStamp,D()),"stack"in t||t instanceof Error?(r.status=0,r.isAborted=t instanceof DOMException&&t.code===DOMException.ABORT_ERR,r.error=t,e.notify(r)):"status"in t&&(r.response=t,r.responseType=t.type,r.status=t.status,r.isAborted=!1,e.notify(r))};t.then($(r),$(r))}function it(e,t){var r=Ye().subscribe((function(e){"complete"===e.state&&i("xhr",e)})),o=nt().subscribe((function(e){"complete"===e.state&&i("fetch",e)}));function i(r,o){function i(e){t.notify({message:"".concat(at(r)," error ").concat(o.method," ").concat(o.url),resource:{method:o.method,statusCode:o.status,url:o.url},source:R,stack:e||"Failed to load",startClocks:o.startClocks})}e.isIntakeUrl(o.url)||!function(e){return 0===e.status&&"opaque"!==e.responseType}(o)&&!function(e){return e.status>=500}(o)||("xhr"in o?function(e,t,n){"string"==typeof e.response?n(st(e.response,t)):n(e.response)}(o.xhr,e,i):o.response?function(e,t,n){window.TextDecoder?e.body?function(e,t,n){!function(e,t,n){var r=e.getReader(),o=[],i=0;function s(){r.read().then($((function(e){e.done?a():(o.push(e.value),(i+=e.value.length)>t?a():s())})),$((function(e){return n(e)})))}function a(){var e;if(r.cancel().catch(p),1===o.length)e=o[0];else{e=new Uint8Array(i);var s=0;o.forEach((function(t){e.set(t,s),s+=t.length}))}n(void 0,e.slice(0,t),e.length>t)}s()}(e,t,(function(e,t,r){if(e)n(e);else{var o=(new TextDecoder).decode(t);r&&(o+="..."),n(void 0,o)}}))}(e.clone().body,t.requestErrorResponseLengthLimit,(function(e,t){n(e?"Unable to retrieve response: ".concat(e):t)})):n():e.clone().text().then($((function(e){return n(st(e,t))})),$((function(e){return n("Unable to retrieve response: ".concat(e))})))}(o.response,e,i):o.error&&function(e,t,r){r(st(B(n(e)),t))}(o.error,e,i))}return{stop:function(){r.unsubscribe(),o.unsubscribe()}}}function st(e,t){return e.length>t.requestErrorResponseLengthLimit?"".concat(e.substring(0,t.requestErrorResponseLengthLimit),"..."):e}function at(e){return"xhr"===e?"XHR":"Fetch"}var ut=function(){function e(e){var t=this;this.expireDelay=e,this.previousContexts=[],this.clearOldContextsInterval=setInterval((function(){return t.clearOldContexts()}),6e4)}return e.prototype.find=function(e){if(void 0===e||void 0!==this.current&&void 0!==this.currentStart&&e>=this.currentStart)return this.current;for(var t=0,n=this.previousContexts;t<n.length;t++){var r=n[t];if(e>r.endTime)break;if(e>=r.startTime)return r.context}},e.prototype.setCurrent=function(e,t){this.current=e,this.currentStart=t},e.prototype.getCurrent=function(){return this.current},e.prototype.clearCurrent=function(){this.current=void 0,this.currentStart=void 0},e.prototype.closeCurrent=function(e){void 0!==this.current&&void 0!==this.currentStart&&(this.previousContexts.unshift({endTime:e,context:this.current,startTime:this.currentStart}),this.clearCurrent())},e.prototype.clearOldContexts=function(){for(var e=P()-this.expireDelay;this.previousContexts.length>0&&this.previousContexts[this.previousContexts.length-1].startTime<e;)this.previousContexts.pop()},e.prototype.reset=function(){this.clearCurrent(),this.previousContexts=[]},e.prototype.stop=function(){clearInterval(this.clearOldContextsInterval)},e}();var ct=9e5,ft=144e5;function lt(e,t,n){var r=new A,o=new A,i=setInterval($((function(){bt({options:e,process:function(e){return c(e)?void 0:{}},after:a})})),1e3),s=function(){var e=St();if(c(e))return e;return{}}();function a(e){return c(e)||(e={}),u()&&(!function(e){return s.id!==e.id||s[t]!==e[t]}(e)?s=e:(s={},o.notify())),e}function u(){return void 0!==s[t]}function c(e){return(void 0===e.created||Date.now()-Number(e.created)<ft)&&(void 0===e.expire||Date.now()<Number(e.expire))}return{expandOrRenewSession:l($((function(){var o;bt({options:e,process:function(e){var r=a(e);return o=function(e){var r=n(e[t]),o=r.trackingType,i=r.isTracked;e[t]=o,i&&!e.id&&(e.id=v(),e.created=String(Date.now()));return i}(r),r},after:function(e){o&&!u()&&function(e){s=e,r.notify()}(e),s=e}})})),1e3).throttled,expandSession:function(){bt({options:e,process:function(e){return u()?a(e):void 0}})},getSession:function(){return s},renewObservable:r,expireObservable:o,stop:function(){clearInterval(i)}}}var dt,vt=/^([a-z]+)=([a-z0-9-]+)$/,pt="&",ht="_dd_s",gt=[];function bt(e,t){var n;if(void 0===t&&(t=0),dt||(dt=e),e===dt)if(t>=100)wt();else{var r,o=St();if(yt()){if(o.lock)return void mt(e,t);if(r=v(),o.lock=r,xt(o,e.options),(o=St()).lock!==r)return void mt(e,t)}var i=e.process(o);if(yt()&&(o=St()).lock!==r)mt(e,t);else{if(i&&kt(i,e.options),yt()&&(!i||!Ct(i))){if((o=St()).lock!==r)return void mt(e,t);delete o.lock,xt(o,e.options),i=o}null===(n=e.after)||void 0===n||n.call(e,i||o),wt()}}else gt.push(e)}function yt(){return!!window.chrome||/HeadlessChrome/.test(window.navigator.userAgent)}function mt(e,t){setTimeout($((function(){bt(e,t+1)})),10)}function wt(){dt=void 0;var e=gt.shift();e&&bt(e)}function kt(e,t){Ct(e)?function(e){ue(ht,"",0,e)}(t):(e.expire=String(Date.now()+ct),xt(e,t))}function xt(e,t){ue(ht,function(e){return(t=e,Object.keys(t).map((function(e){return[e,t[e]]}))).map((function(e){var t=e[0],n=e[1];return"".concat(t,"=").concat(n)})).join(pt);var t}(e),ct,t)}function St(){var e=ce(ht),t={};return function(e){return void 0!==e&&(-1!==e.indexOf(pt)||vt.test(e))}(e)&&e.split(pt).forEach((function(e){var n=vt.exec(e);if(null!==n){var r=n[1],o=n[2];t[r]=o}})),t}function Ct(e){return t=e,0===Object.keys(t).length;var t}var Ot=[];function Et(e,t,n){!function(e){var t=ce(ht),n=ce("_dd"),r=ce("_dd_r"),o=ce("_dd_l");if(!t){var i={};n&&(i.id=n),o&&/^[01]$/.test(o)&&(i.logs=o),r&&/^[012]$/.test(r)&&(i.rum=r),kt(i,e)}}(e);var r=lt(e,t,n);Ot.push((function(){return r.stop()}));var o,i=new ut(144e5);function s(){return{id:r.getSession().id,trackingType:r.getSession()[t]}}return Ot.push((function(){return i.stop()})),r.renewObservable.subscribe((function(){i.setCurrent(s(),P())})),r.expireObservable.subscribe((function(){i.closeCurrent(P())})),r.expandOrRenewSession(),i.setCurrent(s(),[0,q()][0]),o=x(window,["click","touchstart","keydown","scroll"],(function(){return r.expandOrRenewSession()}),{capture:!0,passive:!0}).stop,Ot.push(o),function(e){var t=$((function(){"visible"===document.visibilityState&&e()})),n=k(document,"visibilitychange",t).stop;Ot.push(n);var r=setInterval(t,6e4);Ot.push((function(){clearInterval(r)}))}((function(){return r.expandSession()})),{findActiveSession:function(e){return i.find(e)},renewObservable:r.renewObservable,expireObservable:r.expireObservable}}var Tt,Rt;function Lt(e){var t=Et(e.cookieOptions,"logs",(function(t){return function(e,t){var n=function(e){return"0"===e||"1"===e}(t)?t:Mt(e);return{trackingType:n,isTracked:"1"===n}}(e,t)}));return{findTrackedSession:function(e){var n=t.findActiveSession(e);return n&&"1"===n.trackingType?{id:n.id}:void 0}}}function Mt(e){return 0!==(t=e.sampleRate)&&100*Math.random()<=t?"1":"0";var t}function Bt(e,t,n){var r=0,o=!1;return{isLimitReached:function(){if(0===r&&setTimeout((function(){r=0}),f),(r+=1)<=t||o)return o=!1,!1;if(r===t+1){o=!0;try{n({message:"Reached max number of ".concat(e,"s by minute: ").concat(t),source:O,startClocks:N()})}finally{o=!1}}return!0}}}function _t(e,t,n){var r,o=((r={})[_e.error]=Bt(_e.error,t.eventRateLimiterThreshold,n),r[_e.warn]=Bt(_e.warn,t.eventRateLimiterThreshold,n),r[_e.info]=Bt(_e.info,t.eventRateLimiterThreshold,n),r[_e.debug]=Bt(_e.debug,t.eventRateLimiterThreshold,n),r.custom=Bt("custom",t.eventRateLimiterThreshold,n),r);return function(n,r){var i,s,a=n.date?n.date-q():void 0,u=e.findTrackedSession(a);if(u){var c=C({service:t.service,session_id:u.id},r,jt(a),n);if(!1!==(null===(i=t.beforeSend)||void 0===i?void 0:i.call(t,c))&&!(null!==(s=o[c.status])&&void 0!==s?s:o.custom).isLimitReached())return c}}}function jt(e){var t=window.DD_RUM;return t&&t.getInternalContext?t.getInternalContext(e):void 0}var It=((Tt={})[xe.log]=_e.info,Tt[xe.debug]=_e.debug,Tt[xe.info]=_e.info,Tt[xe.warn]=_e.warn,Tt[xe.error]=_e.error,Tt),zt=((Rt={})[Ee.cspViolation]=_e.error,Rt[Ee.intervention]=_e.error,Rt[Ee.deprecation]=_e.warn,Rt);var At,Ut,Dt,Pt,Nt=function(t){var n,r,o=!1,i=ne(),s={},a=new re,u=function(e,t){a.add((function(){return u(e,t)}))},c=function(){},f=Ue(v),l=new ze(f);return n={logger:l,init:$((function(n){if(ie()&&(n=function(e){return d({},e,{clientToken:"empty"})}(n)),function(t){return!o||(t.silentMultipleInit||e.error("DD_LOGS is already initialized."),!1)}(n)){var r=function(e){var t=we(e),n=Le(e.forwardConsoleLogs,y(xe),"Forward Console Logs","forward-logs"),r=Le(e.forwardReports,y(Ee),"Forward Reports","forward-reports");if(t&&n&&r)return e.forwardErrorsToLogs&&!b(n,xe.error)&&n.push(xe.error),d({forwardErrorsToLogs:!1!==e.forwardErrorsToLogs,forwardConsoleLogs:n,forwardReports:r,requestErrorResponseLengthLimit:32768},t)}(n);r&&(u=t(r,f).send,c=function(){return S(void 0,n)},a.drain(),o=!0)}})),getLoggerGlobalContext:$(i.get),setLoggerGlobalContext:$(i.set),addLoggerGlobalContext:$(i.add),removeLoggerGlobalContext:$(i.remove),createLogger:$((function(e,t){void 0===t&&(t={});var n=Ue(v,t.handler,t.level,d({},t.context,{logger:{name:e}}));return s[e]=new ze(n),s[e]})),getLogger:$((function(e){return s[e]})),getInitConfiguration:$((function(){return c()}))},r=d({version:"4.7.0",onReady:function(e){e()}},n),Object.defineProperty(r,"_setDebug",{get:function(){return Z},enumerable:!1}),r;function v(e){u(e,C({date:Date.now(),view:{referrer:document.referrer,url:window.location.href}},i.get()))}}((function(t,n){var r=function(e){var t,n,r=G(e);if(ie()){var o=oe();r.monitoringMessageObservable.subscribe((function(e){return o.send("internal_log",e)})),r.telemetryEventObservable.subscribe((function(e){return o.send("internal_telemetry",e)}))}else{if(e.internalMonitoringEndpointBuilder){var i=Xe(e,e.internalMonitoringEndpointBuilder,null===(t=e.replica)||void 0===t?void 0:t.internalMonitoringEndpointBuilder);r.monitoringMessageObservable.subscribe((function(e){return i.add(e)}))}var s=Xe(e,e.rumEndpointBuilder,null===(n=e.replica)||void 0===n?void 0:n.rumEndpointBuilder);r.telemetryEventObservable.subscribe((function(e){return s.add(e)}))}return r}(t);r.setExternalContextProvider((function(){var e;return C({session_id:null===(e=a.findTrackedSession())||void 0===e?void 0:e.id},jt(),{view:{name:null,url:null,referrer:null}})})),r.setTelemetryContextProvider((function(){var e,t,n,r,o,i;return{application:{id:null===(e=jt())||void 0===e?void 0:e.application_id},session:{id:null===(t=a.findTrackedSession())||void 0===t?void 0:t.id},view:{id:null===(r=null===(n=jt())||void 0===n?void 0:n.view)||void 0===r?void 0:r.id},action:{id:null===(i=null===(o=jt())||void 0===o?void 0:o.user_action)||void 0===i?void 0:i.id}}}));var o=new A;t.forwardErrorsToLogs&&(qe(o),it(t,o));var i=Ce(t.forwardConsoleLogs),s=Te(t.forwardReports),a=function(t){if(void 0===document.cookie||null===document.cookie)return!1;try{var n="dd_cookie_test_".concat(v()),r="test";ue(n,r,c,t);var o=ce(n)===r;return fe(n,t),o}catch(t){return e.error(t),!1}}(t.cookieOptions)&&!ie()?Lt(t):function(e){var t="1"===Mt(e)?{}:void 0;return{findTrackedSession:function(){return t}}}(t);return function(e,t,n,r,o,i){var s,a,u=_t(o,e,l);if(ie()){var c=oe();a=function(e){return c.send("log",e)}}else{var f=Xe(e,e.logsEndpointBuilder,null===(s=e.replica)||void 0===s?void 0:s.logsEndpointBuilder);a=function(e){return f.add(e)}}function l(e){var t={date:e.startClocks.timeStamp,error:{kind:e.type,origin:e.source,stack:e.stack}};e.resource&&(t.http={method:e.resource.method,status_code:e.resource.statusCode,url:e.resource.url}),i.sendToHttp(e.message,t,_e.error)}function d(e){var t;e.api===xe.error&&(t={error:{origin:E,stack:e.stack}}),i.sendToHttp(e.message,t,It[e.api])}function v(e){var t,n=e.message,r=zt[e.type];r===_e.error?t={error:{kind:e.subtype,origin:M,stack:e.stack}}:e.stack&&(n+=" Found in ".concat(function(e){var t;return null===(t=/@ (.+)/.exec(e))||void 0===t?void 0:t[1]}(e.stack))),i.sendToHttp(n,t,r)}var p=t.subscribe(l),h=n.subscribe(d),g=r.subscribe(v);return{stop:function(){p.unsubscribe(),h.unsubscribe(),g.unsubscribe()},send:function(e,t){var n=u(e,t);n&&a(n)}}}(t,o,i,s,a,n)}));At=m(),Dt=Nt,Pt=At[Ut="DD_LOGS"],At[Ut]=Dt,Pt&&Pt.q&&Pt.q.forEach((function(e){return te(e,"onReady callback threw an error:")()}))}();
!function(){"use strict";var e={log:console.log.bind(console),warn:console.warn.bind(console),error:console.error.bind(console)},n="?";function t(e){var t=[],c=u(e,"stack");return c&&c.split("\n").forEach((function(e){var u=function(e){var t=r.exec(e);if(!t)return;var i=t[2]&&0===t[2].indexOf("native"),s=t[2]&&0===t[2].indexOf("eval"),a=o.exec(t[2]);s&&a&&(t[2]=a[1],t[3]=a[2],t[4]=a[3]);return{args:i?[t[2]]:[],column:t[4]?+t[4]:void 0,func:t[1]||n,line:t[3]?+t[3]:void 0,url:i?void 0:t[2]}}(e)||function(e){var t=i.exec(e);if(!t)return;return{args:[],column:t[4]?+t[4]:void 0,func:t[1]||n,line:+t[3],url:t[2]}}(e)||function(e){var t=s.exec(e);if(!t)return;var r=t[3]&&t[3].indexOf(" > eval")>-1,o=a.exec(t[3]);r&&o&&(t[3]=o[1],t[4]=o[2],t[5]=void 0);return{args:t[2]?t[2].split(","):[],column:t[5]?+t[5]:void 0,func:t[1]||n,line:t[4]?+t[4]:void 0,url:t[3]}}(e);u&&(!u.func&&u.line&&(u.func=n),t.push(u))})),{message:u(e,"message"),name:u(e,"name"),stack:t}}var r=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,o=/\((\S*)(?::(\d+))(?::(\d+))\)/;var i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,a=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function u(e,n){if("object"==typeof e&&e&&n in e){var t=e[n];return"string"==typeof t?t:void 0}}var c=1e3,f=6e4;function l(e,n,t){var r,o,i=!t||void 0===t.leading||t.leading,s=!t||void 0===t.trailing||t.trailing,a=!1;return{throttled:function(){for(var t=[],u=0;u<arguments.length;u++)t[u]=arguments[u];a?r=t:(i?e.apply(void 0,t):r=t,a=!0,o=setTimeout((function(){s&&r&&e.apply(void 0,r),a=!1,r=void 0}),n))},cancel:function(){clearTimeout(o),a=!1,r=void 0}}}function d(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];return n.forEach((function(n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])})),e}function v(e){return e?(parseInt(e,10)^16*Math.random()>>parseInt(e,10)/4).toString(16):"".concat(1e7,"-").concat(1e3,"-").concat(4e3,"-").concat(8e3,"-").concat(1e11).replace(/[018]/g,v)}function p(){}function h(e,n,t){if(null==e)return JSON.stringify(e);var r=[!1,void 0];g(e)&&(r=[!0,e.toJSON],delete e.toJSON);var o,i,s=[!1,void 0];"object"==typeof e&&g(o=Object.getPrototypeOf(e))&&(s=[!0,o.toJSON],delete o.toJSON);try{i=JSON.stringify(e,n,t)}catch(e){i="<error: unable to serialize object>"}finally{r[0]&&(e.toJSON=r[1]),s[0]&&(o.toJSON=s[1])}return i}function g(e){return"object"==typeof e&&null!==e&&Object.prototype.hasOwnProperty.call(e,"toJSON")}function b(e,n){return-1!==e.indexOf(n)}function m(e){return Object.keys(e).map((function(n){return e[n]}))}function y(){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}function w(e,n,t){void 0===t&&(t="");var r=e.charCodeAt(n-1),o=r>=55296&&r<=56319?n+1:n;return e.length<=o?e:"".concat(e.slice(0,o)).concat(t)}function k(e,n,t,r){return S(e,[n],t,r)}function S(e,n,t,r){var o=void 0===r?{}:r,i=o.once,s=o.capture,a=o.passive,u=$(i?function(e){f(),t(e)}:t),c=a?{capture:s,passive:a}:s;n.forEach((function(n){return e.addEventListener(n,u,c)}));var f=function(){return n.forEach((function(n){return e.removeEventListener(n,u,c)}))};return{stop:f}}function x(e,n,t){if(void 0===t&&(t=function(){if("undefined"!=typeof WeakSet){var e=new WeakSet;return{hasAlreadyBeenSeen:function(n){var t=e.has(n);return t||e.add(n),t}}}var n=[];return{hasAlreadyBeenSeen:function(e){var t=n.indexOf(e)>=0;return t||n.push(e),t}}}()),void 0===n)return e;if("object"!=typeof n||null===n)return n;if(n instanceof Date)return new Date(n.getTime());if(n instanceof RegExp){var r=n.flags||[n.global?"g":"",n.ignoreCase?"i":"",n.multiline?"m":"",n.sticky?"y":"",n.unicode?"u":""].join("");return new RegExp(n.source,r)}if(!t.hasAlreadyBeenSeen(n)){if(Array.isArray(n)){for(var o=Array.isArray(e)?e:[],i=0;i<n.length;++i)o[i]=x(o[i],n[i],t);return o}var s,a="object"==(null===(s=e)?"null":Array.isArray(s)?"array":typeof s)?e:{};for(var u in n)Object.prototype.hasOwnProperty.call(n,u)&&(a[u]=x(a[u],n[u],t));return a}}function O(){for(var e,n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];for(var r=0,o=n;r<o.length;r++){var i=o[r];null!=i&&(e=x(e,i))}return e}var T="agent",E="console",R="logger",L="network",C="source",M="report";function B(e){var n=_(e);return e.stack.forEach((function(e){var t="?"===e.func?"<anonymous>":e.func,r=e.args&&e.args.length>0?"(".concat(e.args.join(", "),")"):"",o=e.line?":".concat(e.line):"",i=e.line&&e.column?":".concat(e.column):"";n+="\n at ".concat(t).concat(r," @ ").concat(e.url).concat(o).concat(i)})),n}function _(e){return"".concat(e.name||"Error",": ").concat(e.message)}function j(){var e,n=new Error;if(!n.stack)try{throw n}catch(e){}return X((function(){var r=t(n);r.stack=r.stack.slice(2),e=B(r)})),e}var I,A,z=function(){function e(e){this.onFirstSubscribe=e,this.observers=[]}return e.prototype.subscribe=function(e){var n=this;return!this.observers.length&&this.onFirstSubscribe&&(this.onLastUnsubscribe=this.onFirstSubscribe()||void 0),this.observers.push(e),{unsubscribe:function(){n.observers=n.observers.filter((function(n){return e!==n})),!n.observers.length&&n.onLastUnsubscribe&&n.onLastUnsubscribe()}}},e.prototype.notify=function(e){this.observers.forEach((function(n){return n(e)}))},e}();function U(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var t=new z((function(){var n=e.map((function(e){return e.subscribe((function(e){return t.notify(e)}))}));return function(){return n.forEach((function(e){return e.unsubscribe()}))}}));return t}function D(){return Date.now()}function P(){return performance.now()}function N(){return{relative:P(),timeStamp:D()}}function H(e,n){return n-e}function q(){return void 0===I&&(I=performance.timing.navigationStart),I}function F(e){return!!A&&A.has(e)}var J,V={maxMessagesPerPage:0,sentMessageCount:0};function G(e){var n,t,r=new z,o=new z;return J=function(e){r.notify(function(e){return O({date:D()},void 0!==n?n():{},e)}(e)),F("telemetry")&&o.notify(function(e){return O({type:"telemetry",date:D(),service:"browser-sdk",version:"4.7.1",source:"browser",_dd:{format_version:2},telemetry:e},void 0!==t?t():{})}(e))},d(V,{maxMessagesPerPage:e.maxInternalMonitoringMessagesPerPage,sentMessageCount:0}),{setExternalContextProvider:function(e){n=e},monitoringMessageObservable:r,setTelemetryContextProvider:function(e){t=e},telemetryEventObservable:o}}function W(e,n,t){var r=t.value;t.value=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var t=J?$(r):r;return t.apply(this,e)}}function $(e){return function(){return X(e,this,arguments)}}function X(e,n,t){try{return e.apply(n,t)}catch(e){ee(e);try{Q(e)}catch(e){ee(e)}}}function K(n,t){!function(n,t){V.debugMode&&e.log("[MONITORING MESSAGE]",n,t)}(n,t),Y(d({message:n,status:"debug"},t))}function Q(e){Y(d({status:"error"},function(e){if(e instanceof Error){var n=t(e);return{error:{kind:n.name,stack:B(n)},message:n.message}}return{error:{stack:"Not an instance of error"},message:"Uncaught ".concat(h(e))}}(e)))}function Y(e){J&&V.sentMessageCount<V.maxMessagesPerPage&&(V.sentMessageCount+=1,J(e))}function Z(e){V.debugMode=e}function ee(n){V.debugMode&&e.error("[INTERNAL ERROR]",n)}function ne(n,t){return function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];try{return n.apply(void 0,r)}catch(n){e.error(t,n)}}}function te(){var e={};return{get:function(){return e},add:function(n,t){e[n]=t},remove:function(n){delete e[n]},set:function(n){e=n}}}var re=function(){function e(){this.buffer=[]}return e.prototype.add=function(e){this.buffer.push(e)>500&&this.buffer.splice(0,1)},e.prototype.drain=function(){this.buffer.forEach((function(e){return e()})),this.buffer.length=0},e}();function oe(){var e=y().DatadogEventBridge;if(e)return{getAllowedWebViewHosts:function(){return JSON.parse(e.getAllowedWebViewHosts())},send:function(n,t){e.send(JSON.stringify({eventType:n,event:t}))}}}function ie(){var e=oe();return!!e&&b(e.getAllowedWebViewHosts(),window.location.hostname)}var se,ae;function ue(e,n,t,r){var o=new Date;o.setTime(o.getTime()+t);var i="expires=".concat(o.toUTCString()),s=r&&r.crossSite?"none":"strict",a=r&&r.domain?";domain=".concat(r.domain):"",u=r&&r.secure?";secure":"";document.cookie="".concat(e,"=").concat(n,";").concat(i,";path=/;samesite=").concat(s).concat(a).concat(u)}function ce(e){return function(e,n){var t=new RegExp("(?:^|;)\\s*".concat(n,"\\s*=\\s*([^;]+)")).exec(e);return t?t[1]:void 0}(document.cookie,e)}function fe(e,n){ue(e,"",0,n)}function le(e){return de(e,function(e){if(e.origin)return e.origin;var n=e.host.replace(/(:80|:443)$/,"");return"".concat(e.protocol,"//").concat(n)}(window.location)).href}function de(e,n){if(function(){if(void 0!==ae)return ae;try{var e=new URL("http://test/path");return ae="http://test/path"===e.href}catch(e){ae=!1}return ae}())return void 0!==n?new URL(e,n):new URL(e);if(void 0===n&&!/:/.test(e))throw new Error("Invalid URL: '".concat(e,"'"));var t=document,r=t.createElement("a");if(void 0!==n){var o=(t=document.implementation.createHTMLDocument("")).createElement("base");o.href=n,t.head.appendChild(o),t.body.appendChild(r)}return r.href=e,r}var ve={logs:"logs",rum:"rum",sessionReplay:"session-replay"},pe={logs:"logs",rum:"rum",sessionReplay:"replay"},he="datadoghq.com";function ge(e,n,t,r){var o=e.site,i=void 0===o?he:o,s=e.clientToken,a=i.split("."),u=a.pop(),c="".concat(ve[n],".browser-intake-").concat(a.join("-"),".").concat(u),f="https://".concat(c,"/api/v2/").concat(pe[n]),l=e.proxyUrl&&le(e.proxyUrl);return{build:function(){var e="ddsource=".concat(r||"browser")+"&ddtags=".concat(encodeURIComponent(["sdk_version:".concat("4.7.1")].concat(t).join(",")))+"&dd-api-key=".concat(s)+"&dd-evp-origin-version=".concat(encodeURIComponent("4.7.1"))+"&dd-evp-origin=browser"+"&dd-request-id=".concat(v());"rum"===n&&(e+="&batch_time=".concat(D()));var o="".concat(f,"?").concat(e);return l?"".concat(l,"?ddforward=").concat(encodeURIComponent(o)):o},buildIntakeUrl:function(){return l?"".concat(l,"?ddforward"):f}}}var be=/[^a-z0-9_:./-]/;function me(n,t){var r=200-n.length-1;(t.length>r||be.test(t))&&e.warn("".concat(n," value doesn't meet tag requirements and will be sanitized"));var o=t.replace(/,/g,"_");return"".concat(n,":").concat(o)}function ye(e){var n=function(e){var n=e.env,t=e.service,r=e.version,o=e.datacenter,i=[];return n&&i.push(me("env",n)),t&&i.push(me("service",t)),r&&i.push(me("version",r)),o&&i.push(me("datacenter",o)),i}(e),t=function(e,n){var t={logsEndpointBuilder:ge(e,"logs",n),rumEndpointBuilder:ge(e,"rum",n),sessionReplayEndpointBuilder:ge(e,"sessionReplay",n)};if(e.internalMonitoringApiKey)return d(t,{internalMonitoringEndpointBuilder:ge(d({},e,{clientToken:e.internalMonitoringApiKey}),"logs",n,"browser-agent-internal-monitoring")});return t}(e,n),r=m(t).map((function(e){return e.buildIntakeUrl()})),o=function(e,n,t){if(!e.replica)return;var r=d({},e,{site:he,clientToken:e.replica.clientToken}),o={logsEndpointBuilder:ge(r,"logs",t),rumEndpointBuilder:ge(r,"rum",t),internalMonitoringEndpointBuilder:ge(r,"logs",t,"browser-agent-internal-monitoring")};return n.push.apply(n,m(o).map((function(e){return e.buildIntakeUrl()}))),d({applicationId:e.replica.applicationId},o)}(e,r,n);return d({isIntakeUrl:function(e){return r.some((function(n){return 0===e.indexOf(n)}))},replica:o},t)}function we(n){var t;if(n&&n.clientToken){var r,o;if(void 0===n.sampleRate||function(e){return"number"==typeof e}(r=n.sampleRate)&&r>=0&&r<=100)return o=n.enableExperimentalFeatures,Array.isArray(o)&&(A||(A=new Set(o)),o.filter((function(e){return"string"==typeof e})).forEach((function(e){A.add(e)}))),d({beforeSend:n.beforeSend&&ne(n.beforeSend,"beforeSend threw an error:"),cookieOptions:ke(n),sampleRate:null!==(t=n.sampleRate)&&void 0!==t?t:100,service:n.service,silentMultipleInit:!!n.silentMultipleInit,batchBytesLimit:16384,eventRateLimiterThreshold:3e3,maxInternalMonitoringMessagesPerPage:15,flushTimeout:3e4,maxBatchSize:50,maxMessageSize:262144},ye(n));e.error("Sample Rate should be a number between 0 and 100")}else e.error("Client Token is not configured, we will not send any data.")}function ke(e){var n={};return n.secure=function(e){return!!e.useSecureSessionCookie||!!e.useCrossSiteSessionCookie}(e),n.crossSite=!!e.useCrossSiteSessionCookie,e.trackSessionAcrossSubdomains&&(n.domain=function(){if(void 0===se){for(var e="dd_site_test_".concat(v()),n=window.location.hostname.split("."),t=n.pop();n.length&&!ce(e);)t="".concat(n.pop(),".").concat(t),ue(e,"test",c,{domain:t});fe(e,{domain:t}),se=t}return se}()),n}var Se={log:"log",debug:"debug",info:"info",warn:"warn",error:"error"},xe={};function Oe(e){var n=e.map((function(e){return xe[e]||(xe[e]=function(e){var n=new z((function(){var t=console[e];return console[e]=function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];t.apply(console,r);var i=j();X((function(){n.notify(Te(r,e,i))}))},function(){console[e]=t}}));return n}(e)),xe[e]}));return U.apply(void 0,n)}function Te(e,n,r){var o,i=e.map((function(e){return function(e){if("string"==typeof e)return e;if(e instanceof Error)return _(t(e));return h(e,void 0,2)}(e)})).join(" ");if(n===Se.error){var s=function(e,n){for(var t=0;t<e.length;t+=1){var r=e[t];if(n(r,t,e))return r}}(e,(function(e){return e instanceof Error}));o=s?B(t(s)):void 0,i="console error: ".concat(i)}return{api:n,message:i,stack:o,handlingStack:r}}var Ee={intervention:"intervention",deprecation:"deprecation",cspViolation:"csp_violation"};function Re(e){var n,t=[];b(e,Ee.cspViolation)&&t.push(n=new z((function(){var e=$((function(e){n.notify(function(e){var n=Ee.cspViolation,t="'".concat(e.blockedURI,"' blocked by '").concat(e.effectiveDirective,"' directive");return{type:Ee.cspViolation,subtype:e.effectiveDirective,message:"".concat(n,": ").concat(t),stack:Le(e.effectiveDirective,"".concat(t,' of the policy "').concat(w(e.originalPolicy,100,"..."),'"'),e.sourceFile,e.lineNumber,e.columnNumber)}}(e))}));return k(document,"securitypolicyviolation",e).stop})));var r=e.filter((function(e){return e!==Ee.cspViolation}));return r.length&&t.push(function(e){var n=new z((function(){if(window.ReportingObserver){var t=$((function(e){return e.forEach((function(e){n.notify(function(e){var n=e.type,t=e.body;return{type:n,subtype:t.id,message:"".concat(n,": ").concat(t.message),stack:Le(t.id,t.message,t.sourceFile,t.lineNumber,t.columnNumber)}}(e))}))})),r=new window.ReportingObserver(t,{types:e,buffered:!0});return r.observe(),function(){r.disconnect()}}}));return n}(r)),U.apply(void 0,t)}function Le(e,n,t,r,o){return t&&B({name:e,message:n,stack:[{func:"?",url:t,line:r,column:o}]})}function Ce(n,t,r,o){return F(o)&&void 0!==n?"all"===n||Array.isArray(n)&&n.every((function(e){return b(t,e)}))?"all"===n?t:(i=n,s=[],a=new Set,i.forEach((function(e){return a.add(e)})),a.forEach((function(e){return s.push(e)})),s):void e.error("".concat(r,' should be "all" or an array with allowed values "').concat(t.join('", "'),'"')):[];var i,s,a}var Me,Be=function(e,n,t,r){var o,i=arguments.length,s=i<3?n:null===r?r=Object.getOwnPropertyDescriptor(n,t):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,n,t,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(n,t,s):o(n,t))||s);return i>3&&s&&Object.defineProperty(n,t,s),s},_e={debug:"debug",error:"error",info:"info",warn:"warn"},je="console",Ie="http",Ae=(Object.keys(_e),function(){function e(e){this.sender=e}return e.prototype.log=function(e,n,t){var r;void 0===t&&(t=_e.info),F("forward-logs")&&(r={origin:R}),this.sender.sendLog(e,O(r,n),t)},e.prototype.debug=function(e,n){this.log(e,n,_e.debug)},e.prototype.info=function(e,n){this.log(e,n,_e.info)},e.prototype.warn=function(e,n){this.log(e,n,_e.warn)},e.prototype.error=function(e,n){var t={error:{origin:R}};this.log(e,O(t,n),_e.error)},e.prototype.setContext=function(e){this.sender.getContextManager().set(e)},e.prototype.addContext=function(e,n){this.sender.getContextManager().add(e,n)},e.prototype.removeContext=function(e){this.sender.getContextManager().remove(e)},e.prototype.setHandler=function(e){this.sender.setHandler(e)},e.prototype.setLevel=function(e){this.sender.setLevel(e)},Be([W],e.prototype,"log",null),e}()),ze=((Me={})[_e.debug]=0,Me[_e.info]=1,Me[_e.warn]=2,Me[_e.error]=3,Me);function Ue(n,t,r,o){void 0===t&&(t=Ie),void 0===r&&(r=_e.debug),void 0===o&&(o={});var i={level:r,handlerType:t},s=te();function a(e,n){var t=Array.isArray(i.handlerType)?i.handlerType:[i.handlerType];return ze[e]>=ze[i.level]&&b(t,n)}function u(e,t,r){a(r,Ie)&&n(O({message:e,status:r},s.get(),t))}return s.set(o),{getContextManager:function(){return s},setLevel:function(e){i.level=e},setHandler:function(e){i.handlerType=e},sendToHttp:u,sendLog:function(n,t,r){void 0===r&&(r=_e.info),u(n,t,r),function(n,t,r){a(r,je)&&e.log("".concat(r,": ").concat(n),O(s.get(),t))}(n,t,r)}}}var De=/[^\u0000-\u007F]/,Pe=function(){function n(e,n,t,r,o,i){void 0===i&&(i=p),this.request=e,this.maxSize=n,this.bytesLimit=t,this.maxMessageSize=r,this.flushTimeout=o,this.beforeUnloadCallback=i,this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0,this.flushOnVisibilityHidden(),this.flushPeriodically()}return n.prototype.add=function(e){this.addOrUpdate(e)},n.prototype.upsert=function(e,n){this.addOrUpdate(e,n)},n.prototype.flush=function(e){if(0!==this.bufferMessageCount){var n=this.pushOnlyBuffer.concat(m(this.upsertBuffer));this.request.send(n.join("\n"),this.bufferBytesSize,e),this.pushOnlyBuffer=[],this.upsertBuffer={},this.bufferBytesSize=0,this.bufferMessageCount=0}},n.prototype.sizeInBytes=function(e){return De.test(e)?void 0!==window.TextEncoder?(new TextEncoder).encode(e).length:new Blob([e]).size:e.length},n.prototype.addOrUpdate=function(n,t){var r=this.process(n),o=r.processedMessage,i=r.messageBytesSize;i>=this.maxMessageSize?e.warn("Discarded a message whose size was bigger than the maximum allowed size ".concat(this.maxMessageSize,"KB.")):(this.hasMessageFor(t)&&this.remove(t),this.willReachedBytesLimitWith(i)&&this.flush("willReachedBytesLimitWith"),this.push(o,i,t),this.isFull()&&this.flush("isFull"))},n.prototype.process=function(e){var n=h(e);return{processedMessage:n,messageBytesSize:this.sizeInBytes(n)}},n.prototype.push=function(e,n,t){this.bufferMessageCount>0&&(this.bufferBytesSize+=1),void 0!==t?this.upsertBuffer[t]=e:this.pushOnlyBuffer.push(e),this.bufferBytesSize+=n,this.bufferMessageCount+=1},n.prototype.remove=function(e){var n=this.upsertBuffer[e];delete this.upsertBuffer[e];var t=this.sizeInBytes(n);this.bufferBytesSize-=t,this.bufferMessageCount-=1,this.bufferMessageCount>0&&(this.bufferBytesSize-=1)},n.prototype.hasMessageFor=function(e){return void 0!==e&&void 0!==this.upsertBuffer[e]},n.prototype.willReachedBytesLimitWith=function(e){return this.bufferBytesSize+e+1>=this.bytesLimit},n.prototype.isFull=function(){return this.bufferMessageCount===this.maxSize||this.bufferBytesSize>=this.bytesLimit},n.prototype.flushPeriodically=function(){var e=this;setTimeout($((function(){e.flush("flushPeriodically"),e.flushPeriodically()})),this.flushTimeout)},n.prototype.flushOnVisibilityHidden=function(){var e=this;navigator.sendBeacon&&(k(window,"beforeunload",this.beforeUnloadCallback),k(document,"visibilitychange",(function(){"hidden"===document.visibilityState&&e.flush("visibilitychange")})),k(window,"beforeunload",(function(){return e.flush("beforeunload")})))},n}(),Ne=!1,He=function(){function e(e,n){this.endpointBuilder=e,this.bytesLimit=n}return e.prototype.send=function(e,n,t){var r=this.endpointBuilder.build(),o=!!navigator.sendBeacon&&n<this.bytesLimit;if(o)try{if(navigator.sendBeacon(r,e))return}catch(e){!function(e){qe||(qe=!0,Q(e))}(e)}var i=new XMLHttpRequest;i.addEventListener("loadend",$((function(e){return function(e){var i=null==e?void 0:e.currentTarget;i.status>=200&&i.status<300||Ne||(Ne=!0,K("XHR fallback failed",{on_line:navigator.onLine,size:n,url:r,try_beacon:o,flush_reason:t,event:{is_trusted:e.isTrusted,total:e.total,loaded:e.loaded},request:{status:i.status,ready_state:i.readyState,response_text:i.responseText.slice(0,512)}}))}(e)}))),i.open("POST",r,!0),i.send(e)},e}(),qe=!1;function Fe(e,n,t){var r,o=i(n);function i(n){return new Pe(new He(n,e.batchBytesLimit),e.maxBatchSize,e.batchBytesLimit,e.maxMessageSize,e.flushTimeout)}return t&&(r=i(t)),{add:function(e){o.add(e),r&&r.add(e)}}}var Je=1/0,Ve=function(){function e(e){var n=this;this.expireDelay=e,this.entries=[],this.clearOldContextsInterval=setInterval((function(){return n.clearOldContexts()}),6e4)}return e.prototype.add=function(e,n){var t=this,r={context:e,startTime:n,endTime:Je,remove:function(){var e=t.entries.indexOf(r);e>=0&&t.entries.splice(e,1)},close:function(e){r.endTime=e}};return this.entries.unshift(r),r},e.prototype.find=function(e){void 0===e&&(e=Je);for(var n=0,t=this.entries;n<t.length;n++){var r=t[n];if(r.startTime<=e){if(e<=r.endTime)return r.context;break}}},e.prototype.closeActive=function(e){var n=this.entries[0];n&&n.endTime===Je&&n.close(e)},e.prototype.findAll=function(e){return void 0===e&&(e=Je),this.entries.filter((function(n){return n.startTime<=e&&e<=n.endTime})).map((function(e){return e.context}))},e.prototype.reset=function(){this.entries=[]},e.prototype.stop=function(){clearInterval(this.clearOldContextsInterval)},e.prototype.clearOldContexts=function(){for(var e=P()-this.expireDelay;this.entries.length>0&&this.entries[this.entries.length-1].endTime<e;)this.entries.pop()},e}();var Ge=9e5,We=144e5;function $e(e,n,t){var r=new z,o=new z,i=setInterval($((function(){en({options:e,process:function(e){return c(e)?void 0:{}},after:a})})),1e3),s=function(){var e=an();if(c(e))return e;return{}}();function a(e){return c(e)||(e={}),u()&&(!function(e){return s.id!==e.id||s[n]!==e[n]}(e)?s=e:(s={},o.notify())),e}function u(){return void 0!==s[n]}function c(e){return(void 0===e.created||Date.now()-Number(e.created)<We)&&(void 0===e.expire||Date.now()<Number(e.expire))}return{expandOrRenewSession:l($((function(){var o;en({options:e,process:function(e){var r=a(e);return o=function(e){var r=t(e[n]),o=r.trackingType,i=r.isTracked;e[n]=o,i&&!e.id&&(e.id=v(),e.created=String(Date.now()));return i}(r),r},after:function(e){o&&!u()&&function(e){s=e,r.notify()}(e),s=e}})})),1e3).throttled,expandSession:function(){en({options:e,process:function(e){return u()?a(e):void 0}})},getSession:function(){return s},renewObservable:r,expireObservable:o,stop:function(){clearInterval(i)}}}var Xe,Ke=/^([a-z]+)=([a-z0-9-]+)$/,Qe="&",Ye="_dd_s",Ze=[];function en(e,n){var t;if(void 0===n&&(n=0),Xe||(Xe=e),e===Xe)if(n>=100)rn();else{var r,o=an();if(nn()){if(o.lock)return void tn(e,n);if(r=v(),o.lock=r,sn(o,e.options),(o=an()).lock!==r)return void tn(e,n)}var i=e.process(o);if(nn()&&(o=an()).lock!==r)tn(e,n);else{if(i&&on(i,e.options),nn()&&(!i||!un(i))){if((o=an()).lock!==r)return void tn(e,n);delete o.lock,sn(o,e.options),i=o}null===(t=e.after)||void 0===t||t.call(e,i||o),rn()}}else Ze.push(e)}function nn(){return!!window.chrome||/HeadlessChrome/.test(window.navigator.userAgent)}function tn(e,n){setTimeout($((function(){en(e,n+1)})),10)}function rn(){Xe=void 0;var e=Ze.shift();e&&en(e)}function on(e,n){un(e)?function(e){ue(Ye,"",0,e)}(n):(e.expire=String(Date.now()+Ge),sn(e,n))}function sn(e,n){ue(Ye,function(e){return(n=e,Object.keys(n).map((function(e){return[e,n[e]]}))).map((function(e){var n=e[0],t=e[1];return"".concat(n,"=").concat(t)})).join(Qe);var n}(e),Ge,n)}function an(){var e=ce(Ye),n={};return function(e){return void 0!==e&&(-1!==e.indexOf(Qe)||Ke.test(e))}(e)&&e.split(Qe).forEach((function(e){var t=Ke.exec(e);if(null!==t){var r=t[1],o=t[2];n[r]=o}})),n}function un(e){return n=e,0===Object.keys(n).length;var n}var cn=[];function fn(e,n,t){!function(e){var n=ce(Ye),t=ce("_dd"),r=ce("_dd_r"),o=ce("_dd_l");if(!n){var i={};t&&(i.id=t),o&&/^[01]$/.test(o)&&(i.logs=o),r&&/^[012]$/.test(r)&&(i.rum=r),on(i,e)}}(e);var r=$e(e,n,t);cn.push((function(){return r.stop()}));var o,i=new Ve(144e5);function s(){return{id:r.getSession().id,trackingType:r.getSession()[n]}}return cn.push((function(){return i.stop()})),r.renewObservable.subscribe((function(){i.add(s(),P())})),r.expireObservable.subscribe((function(){i.closeActive(P())})),r.expandOrRenewSession(),i.add(s(),[0,q()][0]),o=S(window,["click","touchstart","keydown","scroll"],(function(){return r.expandOrRenewSession()}),{capture:!0,passive:!0}).stop,cn.push(o),function(e){var n=$((function(){"visible"===document.visibilityState&&e()})),t=k(document,"visibilitychange",n).stop;cn.push(t);var r=setInterval(n,6e4);cn.push((function(){clearInterval(r)}))}((function(){return r.expandSession()})),{findActiveSession:function(e){return i.find(e)},renewObservable:r.renewObservable,expireObservable:r.expireObservable}}var ln;function dn(e){var n=fn(e.cookieOptions,"logs",(function(n){return function(e,n){var t=function(e){return"0"===e||"1"===e}(n)?n:vn(e);return{trackingType:t,isTracked:"1"===t}}(e,n)}));return{findTrackedSession:function(e){var t=n.findActiveSession(e);return t&&"1"===t.trackingType?{id:t.id}:void 0}}}function vn(e){return 0!==(n=e.sampleRate)&&100*Math.random()<=n?"1":"0";var n}function pn(e,n,t){var r=0,o=!1;return{isLimitReached:function(){if(0===r&&setTimeout((function(){r=0}),f),(r+=1)<=n||o)return o=!1,!1;if(r===n+1){o=!0;try{t({message:"Reached max number of ".concat(e,"s by minute: ").concat(n),source:T,startClocks:N()})}finally{o=!1}}return!0}}}function hn(e,n){var t={date:e.startClocks.timeStamp,error:{kind:e.type,origin:e.source,stack:e.stack}};F("forward-logs")&&(t.origin=e.source),n.sendToHttp(e.message,t,_e.error)}function gn(e,n,t){var r,o=function(e){return hn(e,t)},i=((r={})[_e.error]=pn(_e.error,n.eventRateLimiterThreshold,o),r[_e.warn]=pn(_e.warn,n.eventRateLimiterThreshold,o),r[_e.info]=pn(_e.info,n.eventRateLimiterThreshold,o),r[_e.debug]=pn(_e.debug,n.eventRateLimiterThreshold,o),r.custom=pn("custom",n.eventRateLimiterThreshold,o),r);return function(t,r){var o,s,a=t.date?t.date-q():void 0,u=e.findTrackedSession(a);if(u){var c=O({service:n.service,session_id:u.id},r,bn(a),t);if(!1!==(null===(o=n.beforeSend)||void 0===o?void 0:o.call(n,c))&&!(null!==(s=i[c.status])&&void 0!==s?s:i.custom).isLimitReached())return c}}}function bn(e){var n=window.DD_RUM;return n&&n.getInternalContext?n.getInternalContext(e):void 0}var mn,yn=((ln={})[Se.log]=_e.info,ln[Se.debug]=_e.debug,ln[Se.info]=_e.info,ln[Se.warn]=_e.warn,ln[Se.error]=_e.error,ln);var wn,kn=((mn={})[Ee.cspViolation]=_e.error,mn[Ee.intervention]=_e.error,mn[Ee.deprecation]=_e.warn,mn);function Sn(e,n,t){var r=e[n],o=t(r),i=function(){return o.apply(this,arguments)};return e[n]=i,{stop:function(){e[n]===i?e[n]=r:o=r}}}function xn(e,n,t){var r=t.before,o=t.after;return Sn(e,n,(function(e){return function(){var n,t=arguments;return r&&X(r,this,t),"function"==typeof e&&(n=e.apply(this,t)),o&&X(o,this,t),n}}))}var On,Tn=new WeakMap;function En(){var e;return wn||(e=new z((function(){var n=xn(XMLHttpRequest.prototype,"open",{before:Rn}).stop,t=xn(XMLHttpRequest.prototype,"send",{before:function(){Ln.call(this,e)}}).stop,r=xn(XMLHttpRequest.prototype,"abort",{before:Cn}).stop;return function(){n(),t(),r()}})),wn=e),wn}function Rn(e,n){Tn.set(this,{state:"open",method:e,url:le(n.toString())})}function Ln(e){var n=this,t=Tn.get(this);if(t){var r=t;r.state="start",r.startTime=P(),r.startClocks=N(),r.isAborted=!1,r.xhr=this;var o=!1,i=xn(this,"onreadystatechange",{before:function(){this.readyState===XMLHttpRequest.DONE&&s()}}).stop,s=$((function(){if(n.removeEventListener("loadend",s),i(),!o){o=!0;var a=t;a.state="complete",a.duration=H(r.startClocks.timeStamp,D()),a.status=n.status,e.notify(d({},a))}}));this.addEventListener("loadend",s),e.notify(r)}}function Cn(){var e=Tn.get(this);e&&(e.isAborted=!0)}function Mn(){var e;return On||(e=new z((function(){if(window.fetch)return Sn(window,"fetch",(function(n){return function(t,r){var o,i=X(Bn,null,[e,t,r]);return i?(o=n.call(this,i.input,i.init),X(_n,null,[e,o,i])):o=n.call(this,t,r),o}})).stop})),On=e),On}function Bn(e,n,t){var r=t&&t.method||"object"==typeof n&&n.method||"GET",o=le("object"==typeof n&&n.url||n),i={state:"start",init:t,input:n,method:r,startClocks:N(),url:o};return e.notify(i),i}function _n(e,n,t){var r=function(n){var r=t;r.state="complete",r.duration=H(r.startClocks.timeStamp,D()),"stack"in n||n instanceof Error?(r.status=0,r.isAborted=n instanceof DOMException&&n.code===DOMException.ABORT_ERR,r.error=n,e.notify(r)):"status"in n&&(r.response=n,r.responseType=n.type,r.status=n.status,r.isAborted=!1,e.notify(r))};n.then($(r),$(r))}function jn(e,n){var r=En().subscribe((function(e){"complete"===e.state&&i("xhr",e)})),o=Mn().subscribe((function(e){"complete"===e.state&&i("fetch",e)}));function i(r,o){function i(e){var t={date:o.startClocks.timeStamp,error:{origin:L,stack:e||"Failed to load"},http:{method:o.method,status_code:o.status,url:o.url}};F("forward-logs")&&(t.origin=L),n.sendToHttp("".concat(function(e){if("xhr"===e)return"XHR";return"Fetch"}(r)," error ").concat(o.method," ").concat(o.url),t,_e.error)}e.isIntakeUrl(o.url)||!function(e){return 0===e.status&&"opaque"!==e.responseType}(o)&&!function(e){return e.status>=500}(o)||("xhr"in o?function(e,n,t){"string"==typeof e.response?t(In(e.response,n)):t(e.response)}(o.xhr,e,i):o.response?function(e,n,t){window.TextDecoder?e.body?function(e,n,t){!function(e,n,t){var r=e.getReader(),o=[],i=0;function s(){r.read().then($((function(e){e.done?a():(o.push(e.value),(i+=e.value.length)>n?a():s())})),$((function(e){return t(e)})))}function a(){var e;if(r.cancel().catch(p),1===o.length)e=o[0];else{e=new Uint8Array(i);var s=0;o.forEach((function(n){e.set(n,s),s+=n.length}))}t(void 0,e.slice(0,n),e.length>n)}s()}(e,n,(function(e,n,r){if(e)t(e);else{var o=(new TextDecoder).decode(n);r&&(o+="..."),t(void 0,o)}}))}(e.clone().body,n.requestErrorResponseLengthLimit,(function(e,n){t(e?"Unable to retrieve response: ".concat(e):n)})):t():e.clone().text().then($((function(e){return t(In(e,n))})),$((function(e){return t("Unable to retrieve response: ".concat(e))})))}(o.response,e,i):o.error&&function(e,n,r){r(In(B(t(e)),n))}(o.error,e,i))}return{stop:function(){r.unsubscribe(),o.unsubscribe()}}}function In(e,n){return e.length>n.requestErrorResponseLengthLimit?"".concat(e.substring(0,n.requestErrorResponseLengthLimit),"..."):e}var An=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function zn(e){var n=function(e){return xn(window,"onerror",{before:function(n,r,o,i,s){var a;if(s)a=t(s),e(a,s);else{var u,c={url:r,column:i,line:o},f=n;if("[object String]"==={}.toString.call(n)){var l=An.exec(f);l&&(u=l[1],f=l[2])}e(a={name:u,message:"string"==typeof f?f:void 0,stack:[c]},n)}}})}(e).stop,r=function(e){return xn(window,"onunhandledrejection",{before:function(n){var r=n.reason||"Empty reason",o=t(r);e(o,r)}})}(e).stop;return{stop:function(){n(),r()}}}function Un(e){return zn((function(n,t){var r=function(e,n,t,r){return e&&(void 0!==e.message||n instanceof Error)?{message:e.message||"Empty message",stack:B(e),handlingStack:r,type:e.name}:{message:"".concat(t," ").concat(h(n)),stack:"No stack, consider using an instance of Error",handlingStack:r,type:e&&e.name}}(n,t,"Uncaught"),o=r.stack,i=r.message,s=r.type;e.notify({message:i,stack:o,type:s,source:C,startClocks:N(),originalError:t,handling:"unhandled"})}))}var Dn,Pn,Nn,Hn,qn=function(n){var t,r,o=!1,i=te(),s={},a=new re,u=function(e,n){a.add((function(){return u(e,n)}))},c=function(){},f=Ue(v),l=new Ae(f);return t={logger:l,init:$((function(t){if(ie()&&(t=function(e){return d({},e,{clientToken:"empty"})}(t)),function(n){return!o||(n.silentMultipleInit||e.error("DD_LOGS is already initialized."),!1)}(t)){var r=function(e){var n=we(e),t=Ce(e.forwardConsoleLogs,m(Se),"Forward Console Logs","forward-logs"),r=Ce(e.forwardReports,m(Ee),"Forward Reports","forward-reports");if(n&&t&&r)return e.forwardErrorsToLogs&&!b(t,Se.error)&&t.push(Se.error),d({forwardErrorsToLogs:!1!==e.forwardErrorsToLogs,forwardConsoleLogs:t,forwardReports:r,requestErrorResponseLengthLimit:32768},n)}(t);r&&(u=n(r,f).send,c=function(){return x(void 0,t)},a.drain(),o=!0)}})),getLoggerGlobalContext:$(i.get),setLoggerGlobalContext:$(i.set),addLoggerGlobalContext:$(i.add),removeLoggerGlobalContext:$(i.remove),createLogger:$((function(e,n){void 0===n&&(n={});var t=Ue(v,n.handler,n.level,d({},n.context,{logger:{name:e}}));return s[e]=new Ae(t),s[e]})),getLogger:$((function(e){return s[e]})),getInitConfiguration:$((function(){return c()}))},r=d({version:"4.7.1",onReady:function(e){e()}},t),Object.defineProperty(r,"_setDebug",{get:function(){return Z},enumerable:!1}),r;function v(e){u(e,O({date:Date.now(),view:{referrer:document.referrer,url:window.location.href}},i.get()))}}((function(n,t){var r=function(e){var n,t,r=G(e);if(ie()){var o=oe();r.monitoringMessageObservable.subscribe((function(e){return o.send("internal_log",e)})),r.telemetryEventObservable.subscribe((function(e){return o.send("internal_telemetry",e)}))}else{if(e.internalMonitoringEndpointBuilder){var i=Fe(e,e.internalMonitoringEndpointBuilder,null===(n=e.replica)||void 0===n?void 0:n.internalMonitoringEndpointBuilder);r.monitoringMessageObservable.subscribe((function(e){return i.add(e)}))}var s=Fe(e,e.rumEndpointBuilder,null===(t=e.replica)||void 0===t?void 0:t.rumEndpointBuilder);r.telemetryEventObservable.subscribe((function(e){return s.add(e)}))}return r}(n);r.setExternalContextProvider((function(){var e;return O({session_id:null===(e=o.findTrackedSession())||void 0===e?void 0:e.id},bn(),{view:{name:null,url:null,referrer:null}})})),r.setTelemetryContextProvider((function(){var e,n,t,r,i,s;return{application:{id:null===(e=bn())||void 0===e?void 0:e.application_id},session:{id:null===(n=o.findTrackedSession())||void 0===n?void 0:n.id},view:{id:null===(r=null===(t=bn())||void 0===t?void 0:t.view)||void 0===r?void 0:r.id},action:{id:null===(s=null===(i=bn())||void 0===i?void 0:i.user_action)||void 0===s?void 0:s.id}}})),jn(n,t),function(e,n,t){void 0===t&&(t=new z),e.forwardErrorsToLogs&&Un(t);var r=t.subscribe((function(e){return hn(e,n)}))}(n,t),function(e,n){var t=Oe(e.forwardConsoleLogs).subscribe((function(e){var t={};e.api===Se.error&&(t={error:{origin:E,stack:e.stack}}),F("forward-logs")&&(t.origin=E),n.sendToHttp(e.message,t,yn[e.api])}))}(n,t),function(e,n){var t=Re(e.forwardReports).subscribe((function(e){var t=e.message,r={origin:M},o=kn[e.type];o===_e.error?r.error={kind:e.subtype,origin:M,stack:e.stack}:e.stack&&(t+=" Found in ".concat(function(e){var n;return null===(n=/@ (.+)/.exec(e))||void 0===n?void 0:n[1]}(e.stack))),n.sendToHttp(t,r,o)}))}(n,t);var o=function(n){if(void 0===document.cookie||null===document.cookie)return!1;try{var t="dd_cookie_test_".concat(v()),r="test";ue(t,r,c,n);var o=ce(t)===r;return fe(t,n),o}catch(n){return e.error(n),!1}}(n.cookieOptions)&&!ie()?dn(n):function(e){var n="1"===vn(e)?{}:void 0;return{findTrackedSession:function(){return n}}}(n);return function(e,n,t){var r,o,i=gn(n,e,t);if(ie()){var s=oe();o=function(e){return s.send("log",e)}}else{var a=Fe(e,e.logsEndpointBuilder,null===(r=e.replica)||void 0===r?void 0:r.logsEndpointBuilder);o=function(e){return a.add(e)}}return{send:function(e,n){var t=i(e,n);t&&o(t)}}}(n,o,t)}));Dn=y(),Nn=qn,Hn=Dn[Pn="DD_LOGS"],Dn[Pn]=Nn,Hn&&Hn.q&&Hn.q.forEach((function(e){return ne(e,"onReady callback threw an error:")()}))}();

@@ -1,3 +0,2 @@

import type { ConsoleLog, Context, RawError, RawReport } from '@datadog/browser-core';
import { Observable } from '@datadog/browser-core';
import type { Context } from '@datadog/browser-core';
import type { LogsMessage } from '../domain/logger';

@@ -8,8 +7,6 @@ import type { LogsSessionManager } from '../domain/logsSessionManager';

export declare function startLogs(configuration: LogsConfiguration, sender: Sender): {
stop: () => void;
send: (message: LogsMessage, currentContext: Context) => void;
};
export declare function doStartLogs(configuration: LogsConfiguration, rawErrorObservable: Observable<RawError>, consoleObservable: Observable<ConsoleLog>, reportObservable: Observable<RawReport>, sessionManager: LogsSessionManager, sender: Sender): {
stop: () => void;
export declare function doStartLogs(configuration: LogsConfiguration, sessionManager: LogsSessionManager, sender: Sender): {
send: (message: LogsMessage, currentContext: Context) => void;
};
"use strict";
var _a, _b;
Object.defineProperty(exports, "__esModule", { value: true });
exports.doStartLogs = exports.startLogs = void 0;
var browser_core_1 = require("@datadog/browser-core");
var trackNetworkError_1 = require("../domain/trackNetworkError");
var logger_1 = require("../domain/logger");
var logsSessionManager_1 = require("../domain/logsSessionManager");
var assemble_1 = require("../domain/assemble");
var LogStatusForApi = (_a = {},
_a[browser_core_1.ConsoleApiName.log] = logger_1.StatusType.info,
_a[browser_core_1.ConsoleApiName.debug] = logger_1.StatusType.debug,
_a[browser_core_1.ConsoleApiName.info] = logger_1.StatusType.info,
_a[browser_core_1.ConsoleApiName.warn] = logger_1.StatusType.warn,
_a[browser_core_1.ConsoleApiName.error] = logger_1.StatusType.error,
_a);
var LogStatusForReport = (_b = {},
_b[browser_core_1.RawReportType.cspViolation] = logger_1.StatusType.error,
_b[browser_core_1.RawReportType.intervention] = logger_1.StatusType.error,
_b[browser_core_1.RawReportType.deprecation] = logger_1.StatusType.warn,
_b);
var consoleCollection_1 = require("../domain/logsCollection/console/consoleCollection");
var reportCollection_1 = require("../domain/logsCollection/report/reportCollection");
var networkErrorCollection_1 = require("../domain/logsCollection/networkError/networkErrorCollection");
var runtimeErrorCollection_1 = require("../domain/logsCollection/runtimeError/runtimeErrorCollection");
function startLogs(configuration, sender) {

@@ -47,13 +36,10 @@ var internalMonitoring = startLogsInternalMonitoring(configuration);

});
var rawErrorObservable = new browser_core_1.Observable();
if (configuration.forwardErrorsToLogs) {
(0, browser_core_1.trackRuntimeError)(rawErrorObservable);
(0, trackNetworkError_1.trackNetworkError)(configuration, rawErrorObservable);
}
var consoleObservable = (0, browser_core_1.initConsoleObservable)(configuration.forwardConsoleLogs);
var reportObservable = (0, browser_core_1.initReportObservable)(configuration.forwardReports);
(0, networkErrorCollection_1.startNetworkErrorCollection)(configuration, sender);
(0, runtimeErrorCollection_1.startRuntimeErrorCollection)(configuration, sender);
(0, consoleCollection_1.startConsoleCollection)(configuration, sender);
(0, reportCollection_1.startReportCollection)(configuration, sender);
var session = (0, browser_core_1.areCookiesAuthorized)(configuration.cookieOptions) && !(0, browser_core_1.canUseEventBridge)()
? (0, logsSessionManager_1.startLogsSessionManager)(configuration)
: (0, logsSessionManager_1.startLogsSessionManagerStub)(configuration);
return doStartLogs(configuration, rawErrorObservable, consoleObservable, reportObservable, session, sender);
return doStartLogs(configuration, session, sender);
}

@@ -79,5 +65,5 @@ exports.startLogs = startLogs;

}
function doStartLogs(configuration, rawErrorObservable, consoleObservable, reportObservable, sessionManager, sender) {
function doStartLogs(configuration, sessionManager, sender) {
var _a;
var assemble = (0, assemble_1.buildAssemble)(sessionManager, configuration, reportRawError);
var assemble = (0, assemble_1.buildAssemble)(sessionManager, configuration, sender);
var onLogEventCollected;

@@ -92,59 +78,3 @@ if ((0, browser_core_1.canUseEventBridge)()) {

}
function reportRawError(error) {
var messageContext = {
date: error.startClocks.timeStamp,
error: {
kind: error.type,
origin: error.source,
stack: error.stack,
},
};
if (error.resource) {
messageContext.http = {
method: error.resource.method,
status_code: error.resource.statusCode,
url: error.resource.url,
};
}
sender.sendToHttp(error.message, messageContext, logger_1.StatusType.error);
}
function reportConsoleLog(log) {
var messageContext;
if (log.api === browser_core_1.ConsoleApiName.error) {
messageContext = {
error: {
origin: browser_core_1.ErrorSource.CONSOLE,
stack: log.stack,
},
};
}
sender.sendToHttp(log.message, messageContext, LogStatusForApi[log.api]);
}
function logReport(report) {
var message = report.message;
var messageContext;
var logStatus = LogStatusForReport[report.type];
if (logStatus === logger_1.StatusType.error) {
messageContext = {
error: {
kind: report.subtype,
origin: browser_core_1.ErrorSource.REPORT,
stack: report.stack,
},
};
}
else if (report.stack) {
message += " Found in ".concat((0, browser_core_1.getFileFromStackTraceString)(report.stack));
}
sender.sendToHttp(message, messageContext, logStatus);
}
var rawErrorSubscription = rawErrorObservable.subscribe(reportRawError);
var consoleSubscription = consoleObservable.subscribe(reportConsoleLog);
var reportSubscription = reportObservable.subscribe(logReport);
return {
stop: function () {
rawErrorSubscription.unsubscribe();
consoleSubscription.unsubscribe();
reportSubscription.unsubscribe();
},
send: function (message, currentContext) {

@@ -151,0 +81,0 @@ var contextualizedMessage = assemble(message, currentContext);

@@ -1,6 +0,7 @@

import type { Context, RawError, RelativeTime } from '@datadog/browser-core';
import type { Context, RelativeTime } from '@datadog/browser-core';
import type { LogsConfiguration } from './configuration';
import type { LogsMessage } from './logger';
import type { LogsSessionManager } from './logsSessionManager';
export declare function buildAssemble(sessionManager: LogsSessionManager, configuration: LogsConfiguration, reportRawError: (error: RawError) => void): (message: LogsMessage, currentContext: Context) => Context | undefined;
import type { Sender } from './sender';
export declare function buildAssemble(sessionManager: LogsSessionManager, configuration: LogsConfiguration, sender: Sender): (message: LogsMessage, currentContext: Context) => Context | undefined;
export declare function getRUMInternalContext(startTime?: RelativeTime): Context | undefined;

@@ -6,10 +6,12 @@ "use strict";

var logger_1 = require("./logger");
function buildAssemble(sessionManager, configuration, reportRawError) {
var reportRawError_1 = require("./reportRawError");
function buildAssemble(sessionManager, configuration, sender) {
var _a;
var reportAgentError = function (error) { return (0, reportRawError_1.reportRawError)(error, sender); };
var logRateLimiters = (_a = {},
_a[logger_1.StatusType.error] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.error, configuration.eventRateLimiterThreshold, reportRawError),
_a[logger_1.StatusType.warn] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.warn, configuration.eventRateLimiterThreshold, reportRawError),
_a[logger_1.StatusType.info] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.info, configuration.eventRateLimiterThreshold, reportRawError),
_a[logger_1.StatusType.debug] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.debug, configuration.eventRateLimiterThreshold, reportRawError),
_a['custom'] = (0, browser_core_1.createEventRateLimiter)('custom', configuration.eventRateLimiterThreshold, reportRawError),
_a[logger_1.StatusType.error] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.error, configuration.eventRateLimiterThreshold, reportAgentError),
_a[logger_1.StatusType.warn] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.warn, configuration.eventRateLimiterThreshold, reportAgentError),
_a[logger_1.StatusType.info] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.info, configuration.eventRateLimiterThreshold, reportAgentError),
_a[logger_1.StatusType.debug] = (0, browser_core_1.createEventRateLimiter)(logger_1.StatusType.debug, configuration.eventRateLimiterThreshold, reportAgentError),
_a['custom'] = (0, browser_core_1.createEventRateLimiter)('custom', configuration.eventRateLimiterThreshold, reportAgentError),
_a);

@@ -16,0 +18,0 @@ return function (message, currentContext) {

@@ -29,3 +29,9 @@ "use strict";

if (status === void 0) { status = exports.StatusType.info; }
this.sender.sendLog(message, messageContext, status);
var logOrigin;
if ((0, browser_core_1.isExperimentalFeatureEnabled)('forward-logs')) {
logOrigin = {
origin: browser_core_1.ErrorSource.LOGGER,
};
}
this.sender.sendLog(message, (0, browser_core_1.combine)(logOrigin, messageContext), status);
};

@@ -44,2 +50,3 @@ Logger.prototype.debug = function (message, messageContext) {

error: {
// Todo: remove error origin in the next major version
origin: browser_core_1.ErrorSource.LOGGER,

@@ -46,0 +53,0 @@ },

@@ -15,2 +15,6 @@ export interface LogsEvent {

/**
* Origin of the log
*/
origin?: 'network' | 'source' | 'console' | 'logger' | 'agent' | 'report' | 'custom';
/**
* UUID of the application

@@ -17,0 +21,0 @@ */

@@ -1,3 +0,2 @@

import type { ConsoleLog, Context, RawError, RawReport } from '@datadog/browser-core';
import { Observable } from '@datadog/browser-core';
import type { Context } from '@datadog/browser-core';
import type { LogsMessage } from '../domain/logger';

@@ -8,8 +7,6 @@ import type { LogsSessionManager } from '../domain/logsSessionManager';

export declare function startLogs(configuration: LogsConfiguration, sender: Sender): {
stop: () => void;
send: (message: LogsMessage, currentContext: Context) => void;
};
export declare function doStartLogs(configuration: LogsConfiguration, rawErrorObservable: Observable<RawError>, consoleObservable: Observable<ConsoleLog>, reportObservable: Observable<RawReport>, sessionManager: LogsSessionManager, sender: Sender): {
stop: () => void;
export declare function doStartLogs(configuration: LogsConfiguration, sessionManager: LogsSessionManager, sender: Sender): {
send: (message: LogsMessage, currentContext: Context) => void;
};

@@ -1,19 +0,8 @@

var _a, _b;
import { areCookiesAuthorized, combine, Observable, trackRuntimeError, canUseEventBridge, getEventBridge, startInternalMonitoring, RawReportType, initReportObservable, initConsoleObservable, ConsoleApiName, ErrorSource, getFileFromStackTraceString, startBatchWithReplica, } from '@datadog/browser-core';
import { trackNetworkError } from '../domain/trackNetworkError';
import { StatusType } from '../domain/logger';
import { areCookiesAuthorized, combine, canUseEventBridge, getEventBridge, startInternalMonitoring, startBatchWithReplica, } from '@datadog/browser-core';
import { startLogsSessionManager, startLogsSessionManagerStub } from '../domain/logsSessionManager';
import { buildAssemble, getRUMInternalContext } from '../domain/assemble';
var LogStatusForApi = (_a = {},
_a[ConsoleApiName.log] = StatusType.info,
_a[ConsoleApiName.debug] = StatusType.debug,
_a[ConsoleApiName.info] = StatusType.info,
_a[ConsoleApiName.warn] = StatusType.warn,
_a[ConsoleApiName.error] = StatusType.error,
_a);
var LogStatusForReport = (_b = {},
_b[RawReportType.cspViolation] = StatusType.error,
_b[RawReportType.intervention] = StatusType.error,
_b[RawReportType.deprecation] = StatusType.warn,
_b);
import { startConsoleCollection } from '../domain/logsCollection/console/consoleCollection';
import { startReportCollection } from '../domain/logsCollection/report/reportCollection';
import { startNetworkErrorCollection } from '../domain/logsCollection/networkError/networkErrorCollection';
import { startRuntimeErrorCollection } from '../domain/logsCollection/runtimeError/runtimeErrorCollection';
export function startLogs(configuration, sender) {

@@ -44,13 +33,10 @@ var internalMonitoring = startLogsInternalMonitoring(configuration);

});
var rawErrorObservable = new Observable();
if (configuration.forwardErrorsToLogs) {
trackRuntimeError(rawErrorObservable);
trackNetworkError(configuration, rawErrorObservable);
}
var consoleObservable = initConsoleObservable(configuration.forwardConsoleLogs);
var reportObservable = initReportObservable(configuration.forwardReports);
startNetworkErrorCollection(configuration, sender);
startRuntimeErrorCollection(configuration, sender);
startConsoleCollection(configuration, sender);
startReportCollection(configuration, sender);
var session = areCookiesAuthorized(configuration.cookieOptions) && !canUseEventBridge()
? startLogsSessionManager(configuration)
: startLogsSessionManagerStub(configuration);
return doStartLogs(configuration, rawErrorObservable, consoleObservable, reportObservable, session, sender);
return doStartLogs(configuration, session, sender);
}

@@ -75,5 +61,5 @@ function startLogsInternalMonitoring(configuration) {

}
export function doStartLogs(configuration, rawErrorObservable, consoleObservable, reportObservable, sessionManager, sender) {
export function doStartLogs(configuration, sessionManager, sender) {
var _a;
var assemble = buildAssemble(sessionManager, configuration, reportRawError);
var assemble = buildAssemble(sessionManager, configuration, sender);
var onLogEventCollected;

@@ -88,59 +74,3 @@ if (canUseEventBridge()) {

}
function reportRawError(error) {
var messageContext = {
date: error.startClocks.timeStamp,
error: {
kind: error.type,
origin: error.source,
stack: error.stack,
},
};
if (error.resource) {
messageContext.http = {
method: error.resource.method,
status_code: error.resource.statusCode,
url: error.resource.url,
};
}
sender.sendToHttp(error.message, messageContext, StatusType.error);
}
function reportConsoleLog(log) {
var messageContext;
if (log.api === ConsoleApiName.error) {
messageContext = {
error: {
origin: ErrorSource.CONSOLE,
stack: log.stack,
},
};
}
sender.sendToHttp(log.message, messageContext, LogStatusForApi[log.api]);
}
function logReport(report) {
var message = report.message;
var messageContext;
var logStatus = LogStatusForReport[report.type];
if (logStatus === StatusType.error) {
messageContext = {
error: {
kind: report.subtype,
origin: ErrorSource.REPORT,
stack: report.stack,
},
};
}
else if (report.stack) {
message += " Found in ".concat(getFileFromStackTraceString(report.stack));
}
sender.sendToHttp(message, messageContext, logStatus);
}
var rawErrorSubscription = rawErrorObservable.subscribe(reportRawError);
var consoleSubscription = consoleObservable.subscribe(reportConsoleLog);
var reportSubscription = reportObservable.subscribe(logReport);
return {
stop: function () {
rawErrorSubscription.unsubscribe();
consoleSubscription.unsubscribe();
reportSubscription.unsubscribe();
},
send: function (message, currentContext) {

@@ -147,0 +77,0 @@ var contextualizedMessage = assemble(message, currentContext);

@@ -1,6 +0,7 @@

import type { Context, RawError, RelativeTime } from '@datadog/browser-core';
import type { Context, RelativeTime } from '@datadog/browser-core';
import type { LogsConfiguration } from './configuration';
import type { LogsMessage } from './logger';
import type { LogsSessionManager } from './logsSessionManager';
export declare function buildAssemble(sessionManager: LogsSessionManager, configuration: LogsConfiguration, reportRawError: (error: RawError) => void): (message: LogsMessage, currentContext: Context) => Context | undefined;
import type { Sender } from './sender';
export declare function buildAssemble(sessionManager: LogsSessionManager, configuration: LogsConfiguration, sender: Sender): (message: LogsMessage, currentContext: Context) => Context | undefined;
export declare function getRUMInternalContext(startTime?: RelativeTime): Context | undefined;
import { combine, createEventRateLimiter, getRelativeTime } from '@datadog/browser-core';
import { StatusType } from './logger';
export function buildAssemble(sessionManager, configuration, reportRawError) {
import { reportRawError } from './reportRawError';
export function buildAssemble(sessionManager, configuration, sender) {
var _a;
var reportAgentError = function (error) { return reportRawError(error, sender); };
var logRateLimiters = (_a = {},
_a[StatusType.error] = createEventRateLimiter(StatusType.error, configuration.eventRateLimiterThreshold, reportRawError),
_a[StatusType.warn] = createEventRateLimiter(StatusType.warn, configuration.eventRateLimiterThreshold, reportRawError),
_a[StatusType.info] = createEventRateLimiter(StatusType.info, configuration.eventRateLimiterThreshold, reportRawError),
_a[StatusType.debug] = createEventRateLimiter(StatusType.debug, configuration.eventRateLimiterThreshold, reportRawError),
_a['custom'] = createEventRateLimiter('custom', configuration.eventRateLimiterThreshold, reportRawError),
_a[StatusType.error] = createEventRateLimiter(StatusType.error, configuration.eventRateLimiterThreshold, reportAgentError),
_a[StatusType.warn] = createEventRateLimiter(StatusType.warn, configuration.eventRateLimiterThreshold, reportAgentError),
_a[StatusType.info] = createEventRateLimiter(StatusType.info, configuration.eventRateLimiterThreshold, reportAgentError),
_a[StatusType.debug] = createEventRateLimiter(StatusType.debug, configuration.eventRateLimiterThreshold, reportAgentError),
_a['custom'] = createEventRateLimiter('custom', configuration.eventRateLimiterThreshold, reportAgentError),
_a);

@@ -12,0 +14,0 @@ return function (message, currentContext) {

@@ -7,3 +7,3 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {

};
import { combine, ErrorSource, monitored } from '@datadog/browser-core';
import { combine, ErrorSource, monitored, isExperimentalFeatureEnabled } from '@datadog/browser-core';
export var StatusType = {

@@ -27,3 +27,9 @@ debug: 'debug',

if (status === void 0) { status = StatusType.info; }
this.sender.sendLog(message, messageContext, status);
var logOrigin;
if (isExperimentalFeatureEnabled('forward-logs')) {
logOrigin = {
origin: ErrorSource.LOGGER,
};
}
this.sender.sendLog(message, combine(logOrigin, messageContext), status);
};

@@ -42,2 +48,3 @@ Logger.prototype.debug = function (message, messageContext) {

error: {
// Todo: remove error origin in the next major version
origin: ErrorSource.LOGGER,

@@ -44,0 +51,0 @@ },

@@ -15,2 +15,6 @@ export interface LogsEvent {

/**
* Origin of the log
*/
origin?: 'network' | 'source' | 'console' | 'logger' | 'agent' | 'report' | 'custom';
/**
* UUID of the application

@@ -17,0 +21,0 @@ */

{
"name": "@datadog/browser-logs",
"version": "4.7.0",
"version": "4.7.1",
"license": "Apache-2.0",

@@ -16,3 +16,3 @@ "main": "cjs/entries/main.js",

"dependencies": {
"@datadog/browser-core": "4.7.0"
"@datadog/browser-core": "4.7.1"
},

@@ -28,3 +28,3 @@ "devDependencies": {

},
"gitHead": "3e5bc9cf4a264d90bc39ed0aac257e86f2a096e8"
"gitHead": "d1c75e113a58ada996e860461dbab2e3847babd4"
}
import type { Context } from '@datadog/browser-core'
import { monitor, ONE_SECOND, display } from '@datadog/browser-core'
import {
monitor,
ONE_SECOND,
display,
ErrorSource,
updateExperimentalFeatures,
resetExperimentalFeatures,
} from '@datadog/browser-core'
import type { Clock } from '../../../core/test/specHelper'

@@ -212,2 +219,6 @@ import { deleteEventBridgeStub, initEventBridgeStub, mockClock } from '../../../core/test/specHelper'

afterEach(() => {
resetExperimentalFeatures()
})
it('logs a message', () => {

@@ -231,2 +242,9 @@ LOGS.logger.log('message')

it('logs a message with "logger" origin when ff forward-logs is enabled', () => {
updateExperimentalFeatures(['forward-logs'])
LOGS.logger.log('message')
expect(getLoggedMessage(0).message.origin).toEqual(ErrorSource.LOGGER)
})
it('returns cloned initial configuration', () => {

@@ -233,0 +251,0 @@ expect(LOGS.getInitConfiguration()).toEqual(DEFAULT_INIT_CONFIGURATION)

@@ -1,23 +0,5 @@

import type { ConsoleLog, Context, RawError, RelativeTime, RawReport, TimeStamp } from '@datadog/browser-core'
import {
ErrorSource,
noop,
Observable,
ONE_MINUTE,
resetExperimentalFeatures,
updateExperimentalFeatures,
getTimeStamp,
stopSessionManager,
display,
initConsoleObservable,
} from '@datadog/browser-core'
import type { Context, TimeStamp } from '@datadog/browser-core'
import { noop, stopSessionManager } from '@datadog/browser-core'
import sinon from 'sinon'
import type { Clock } from '../../../core/test/specHelper'
import {
deleteEventBridgeStub,
initEventBridgeStub,
mockClock,
stubEndpointBuilder,
} from '../../../core/test/specHelper'
import { stubReportingObserver } from '../../../core/test/stubReportApis'
import { deleteEventBridgeStub, initEventBridgeStub, stubEndpointBuilder } from '../../../core/test/specHelper'
import type { LogsConfiguration } from '../domain/configuration'

@@ -27,3 +9,3 @@ import { validateAndBuildLogsConfiguration } from '../domain/configuration'

import type { LogsMessage } from '../domain/logger'
import { StatusType, HandlerType } from '../domain/logger'
import { StatusType } from '../domain/logger'
import type { LogsSessionManager } from '../domain/logsSessionManager'

@@ -65,5 +47,2 @@ import type { Sender } from '../domain/sender'

let server: sinon.SinonFakeServer
let rawErrorObservable: Observable<RawError>
let reportObservable: Observable<RawReport>
let consoleObservable: Observable<ConsoleLog>

@@ -73,17 +52,7 @@ const sessionManager: LogsSessionManager = {

}
let stopLogs = noop
const startLogs = ({
sender = createSender(noop),
configuration: configurationOverrides,
}: { sender?: Sender; configuration?: Partial<LogsConfiguration> } = {}) => {
const configuration = { ...baseConfiguration, ...configurationOverrides }
const startLogs = doStartLogs(
configuration,
rawErrorObservable,
consoleObservable,
reportObservable,
sessionManager,
sender
)
stopLogs = startLogs.stop
const startLogs = doStartLogs(configuration, sessionManager, createSender(noop))
return startLogs.send

@@ -99,5 +68,2 @@ }

sessionIsTracked = true
rawErrorObservable = new Observable<RawError>()
consoleObservable = new Observable<ConsoleLog>()
reportObservable = new Observable<RawReport>()
server = sinon.fakeServer.create()

@@ -111,3 +77,2 @@ })

stopSessionManager()
stopLogs()
})

@@ -142,41 +107,2 @@

it('should include RUM context', () => {
window.DD_RUM = {
getInternalContext() {
return { view: { url: 'http://from-rum-context.com', id: 'view-id' } }
},
}
const sendLog = startLogs()
sendLog(DEFAULT_MESSAGE, {})
expect(getLoggedMessage(server, 0).view).toEqual({
id: 'view-id',
url: 'http://from-rum-context.com',
})
})
it('should use the rum internal context related to the error time', () => {
window.DD_RUM = {
getInternalContext(startTime) {
return {
foo: startTime === 1234 ? 'b' : 'a',
}
},
}
let sendLogStrategy: (message: LogsMessage, currentContext: Context) => void = noop
const sendLog = (message: LogsMessage) => {
sendLogStrategy(message, {})
}
sendLogStrategy = startLogs({ sender: createSender(sendLog) })
rawErrorObservable.notify({
message: 'error!',
source: ErrorSource.SOURCE,
startClocks: { relative: 1234 as RelativeTime, timeStamp: getTimeStamp(1234 as RelativeTime) },
type: 'Error',
})
expect(getLoggedMessage(server, 0).foo).toBe('b')
})
it('should all use the same batch', () => {

@@ -205,131 +131,4 @@ const sendLog = startLogs({ configuration: { maxBatchSize: 3 } })

})
it('should not print the log twice when console handler is enabled', () => {
const sender = createSender(noop)
const logErrorSpy = spyOn(sender, 'sendToHttp')
const displaySpy = spyOn(display, 'log')
const consoleLogSpy = spyOn(console, 'log').and.callFake(() => true)
consoleObservable = initConsoleObservable(['log'])
startLogs({ sender })
sender.setHandler([HandlerType.console])
/* eslint-disable-next-line no-console */
console.log('foo', 'bar')
expect(logErrorSpy).toHaveBeenCalled()
expect(consoleLogSpy).toHaveBeenCalledTimes(1)
expect(displaySpy).not.toHaveBeenCalled()
resetExperimentalFeatures()
})
it('should send console logs when ff forward-logs is enabled', () => {
const sender = createSender(noop)
const logErrorSpy = spyOn(sender, 'sendToHttp')
const consoleLogSpy = spyOn(console, 'log').and.callFake(() => true)
updateExperimentalFeatures(['forward-logs'])
const { stop } = originalStartLogs(
validateAndBuildLogsConfiguration({ ...initConfiguration, forwardConsoleLogs: ['log'] })!,
sender
)
/* eslint-disable-next-line no-console */
console.log('foo', 'bar')
expect(logErrorSpy).toHaveBeenCalled()
expect(consoleLogSpy).toHaveBeenCalled()
resetExperimentalFeatures()
stop()
})
it('should not send console logs when ff forward-logs is disabled', () => {
const sender = createSender(noop)
const logErrorSpy = spyOn(sender, 'sendToHttp')
const consoleLogSpy = spyOn(console, 'log').and.callFake(() => true)
const { stop } = originalStartLogs(
validateAndBuildLogsConfiguration({ ...initConfiguration, forwardConsoleLogs: ['log'] })!,
sender
)
/* eslint-disable-next-line no-console */
console.log('foo', 'bar')
expect(logErrorSpy).not.toHaveBeenCalled()
expect(consoleLogSpy).toHaveBeenCalled()
stop()
})
})
describe('reports', () => {
let sender: Sender
let logErrorSpy: jasmine.Spy
let reportingObserverStub: ReturnType<typeof stubReportingObserver>
beforeEach(() => {
sender = createSender(noop)
logErrorSpy = spyOn(sender, 'sendToHttp')
reportingObserverStub = stubReportingObserver()
})
afterEach(() => {
reportingObserverStub.reset()
})
it('should send reports when ff forward-reports is enabled', () => {
updateExperimentalFeatures(['forward-reports'])
const { stop } = originalStartLogs(
validateAndBuildLogsConfiguration({ ...initConfiguration, forwardReports: ['intervention'] })!,
sender
)
reportingObserverStub.raiseReport('intervention')
expect(logErrorSpy).toHaveBeenCalled()
resetExperimentalFeatures()
stop()
})
it('should not send reports when ff forward-reports is disabled', () => {
const { stop } = originalStartLogs(
validateAndBuildLogsConfiguration({ ...initConfiguration, forwardReports: ['intervention'] })!,
sender
)
reportingObserverStub.raiseReport('intervention')
expect(logErrorSpy).not.toHaveBeenCalled()
stop()
})
it('should not send reports when forwardReports init option not specified', () => {
const { stop } = originalStartLogs(validateAndBuildLogsConfiguration({ ...initConfiguration })!, sender)
reportingObserverStub.raiseReport('intervention')
expect(logErrorSpy).not.toHaveBeenCalled()
stop()
})
it('should add the source file information to the message for non error reports', () => {
updateExperimentalFeatures(['forward-reports'])
const { stop } = originalStartLogs(
validateAndBuildLogsConfiguration({ ...initConfiguration, forwardReports: ['deprecation'] })!,
sender
)
reportingObserverStub.raiseReport('deprecation')
expect(logErrorSpy).toHaveBeenCalledOnceWith(
'deprecation: foo bar Found in http://foo.bar/index.js:20:10',
undefined,
'warn'
)
resetExperimentalFeatures()
stop()
})
})
describe('sampling', () => {

@@ -340,14 +139,12 @@ it('should be applied when event bridge is present', () => {

let configuration = { ...baseConfiguration, sampleRate: 0 }
let { send, stop } = originalStartLogs(configuration, createSender(noop))
let { send } = originalStartLogs(configuration, createSender(noop))
send(DEFAULT_MESSAGE, {})
expect(sendSpy).not.toHaveBeenCalled()
stop()
configuration = { ...baseConfiguration, sampleRate: 100 }
;({ send, stop } = originalStartLogs(configuration, createSender(noop)))
;({ send } = originalStartLogs(configuration, createSender(noop)))
send(DEFAULT_MESSAGE, {})
expect(sendSpy).toHaveBeenCalled()
stop()
})

@@ -387,121 +184,2 @@ })

})
describe('error collection', () => {
it('should send log errors', () => {
const sendLogSpy = jasmine.createSpy()
startLogs({ sender: createSender(sendLogSpy) })
rawErrorObservable.notify({
message: 'error!',
source: ErrorSource.SOURCE,
startClocks: { relative: 1234 as RelativeTime, timeStamp: 123456789 as TimeStamp },
type: 'Error',
})
expect(sendLogSpy).toHaveBeenCalled()
expect(sendLogSpy.calls.first().args).toEqual([
{
date: 123456789 as TimeStamp,
error: { origin: ErrorSource.SOURCE, kind: 'Error', stack: undefined },
message: 'error!',
status: StatusType.error,
},
])
})
})
describe('logs limitation', () => {
let clock: Clock
const configuration = { eventRateLimiterThreshold: 1 }
beforeEach(() => {
clock = mockClock()
})
afterEach(() => {
clock.cleanup()
})
;[
{ status: StatusType.error, message: 'Reached max number of errors by minute: 1' },
{ status: StatusType.warn, message: 'Reached max number of warns by minute: 1' },
{ status: StatusType.info, message: 'Reached max number of infos by minute: 1' },
{ status: StatusType.debug, message: 'Reached max number of debugs by minute: 1' },
{ status: 'unknown' as StatusType, message: 'Reached max number of customs by minute: 1' },
].forEach(({ status, message }) => {
it(`stops sending ${status} logs when reaching the limit`, () => {
const sendLogSpy = jasmine.createSpy<(message: LogsMessage & { foo?: string }) => void>()
const sendLog = startLogs({ sender: createSender(sendLogSpy), configuration })
sendLog({ message: 'foo', status }, {})
sendLog({ message: 'bar', status }, {})
expect(server.requests.length).toEqual(1)
expect(getLoggedMessage(server, 0).message).toBe('foo')
expect(sendLogSpy).toHaveBeenCalledOnceWith({
message,
status: StatusType.error,
error: {
origin: ErrorSource.AGENT,
kind: undefined,
stack: undefined,
},
date: Date.now(),
})
})
it(`does not take discarded ${status} logs into account`, () => {
const sendLogSpy = jasmine.createSpy<(message: LogsMessage & { foo?: string }) => void>()
const sendLog = startLogs({
sender: createSender(sendLogSpy),
configuration: {
...configuration,
beforeSend(event) {
if (event.message === 'discard me') {
return false
}
},
},
})
sendLog({ message: 'discard me', status }, {})
sendLog({ message: 'discard me', status }, {})
sendLog({ message: 'discard me', status }, {})
sendLog({ message: 'foo', status }, {})
expect(server.requests.length).toEqual(1)
expect(getLoggedMessage(server, 0).message).toBe('foo')
expect(sendLogSpy).not.toHaveBeenCalled()
})
it(`allows to send new ${status}s after a minute`, () => {
const sendLog = startLogs({ configuration })
sendLog({ message: 'foo', status }, {})
sendLog({ message: 'bar', status }, {})
clock.tick(ONE_MINUTE)
sendLog({ message: 'baz', status }, {})
expect(server.requests.length).toEqual(2)
expect(getLoggedMessage(server, 0).message).toBe('foo')
expect(getLoggedMessage(server, 1).message).toBe('baz')
})
it('allows to send logs with a different status when reaching the limit', () => {
const otherLogStatus = status === StatusType.error ? 'other' : StatusType.error
const sendLog = startLogs({ configuration })
sendLog({ message: 'foo', status }, {})
sendLog({ message: 'bar', status }, {})
sendLog({ message: 'baz', status: otherLogStatus as StatusType }, {})
expect(server.requests.length).toEqual(2)
expect(getLoggedMessage(server, 0).message).toBe('foo')
expect(getLoggedMessage(server, 1).message).toBe('baz')
})
})
it('two different custom statuses are accounted by the same limit', () => {
const sendLog = startLogs({ configuration })
sendLog({ message: 'foo', status: 'foo' as StatusType }, {})
sendLog({ message: 'bar', status: 'bar' as StatusType }, {})
expect(server.requests.length).toEqual(1)
expect(getLoggedMessage(server, 0).message).toBe('foo')
})
})
})

@@ -1,42 +0,21 @@

import type { ConsoleLog, Context, RawError, MonitoringMessage, TelemetryEvent, RawReport } from '@datadog/browser-core'
import type { Context, MonitoringMessage, TelemetryEvent } from '@datadog/browser-core'
import {
areCookiesAuthorized,
combine,
Observable,
trackRuntimeError,
canUseEventBridge,
getEventBridge,
startInternalMonitoring,
RawReportType,
initReportObservable,
initConsoleObservable,
ConsoleApiName,
ErrorSource,
getFileFromStackTraceString,
startBatchWithReplica,
} from '@datadog/browser-core'
import { trackNetworkError } from '../domain/trackNetworkError'
import type { LogsMessage } from '../domain/logger'
import { StatusType } from '../domain/logger'
import type { LogsSessionManager } from '../domain/logsSessionManager'
import { startLogsSessionManager, startLogsSessionManagerStub } from '../domain/logsSessionManager'
import type { LogsConfiguration } from '../domain/configuration'
import type { LogsEvent } from '../logsEvent.types'
import { buildAssemble, getRUMInternalContext } from '../domain/assemble'
import type { Sender } from '../domain/sender'
import { startConsoleCollection } from '../domain/logsCollection/console/consoleCollection'
import { startReportCollection } from '../domain/logsCollection/report/reportCollection'
import { startNetworkErrorCollection } from '../domain/logsCollection/networkError/networkErrorCollection'
import { startRuntimeErrorCollection } from '../domain/logsCollection/runtimeError/runtimeErrorCollection'
const LogStatusForApi = {
[ConsoleApiName.log]: StatusType.info,
[ConsoleApiName.debug]: StatusType.debug,
[ConsoleApiName.info]: StatusType.info,
[ConsoleApiName.warn]: StatusType.warn,
[ConsoleApiName.error]: StatusType.error,
}
const LogStatusForReport = {
[RawReportType.cspViolation]: StatusType.error,
[RawReportType.intervention]: StatusType.error,
[RawReportType.deprecation]: StatusType.warn,
}
export function startLogs(configuration: LogsConfiguration, sender: Sender) {

@@ -64,11 +43,7 @@ const internalMonitoring = startLogsInternalMonitoring(configuration)

const rawErrorObservable = new Observable<RawError>()
startNetworkErrorCollection(configuration, sender)
startRuntimeErrorCollection(configuration, sender)
startConsoleCollection(configuration, sender)
startReportCollection(configuration, sender)
if (configuration.forwardErrorsToLogs) {
trackRuntimeError(rawErrorObservable)
trackNetworkError(configuration, rawErrorObservable)
}
const consoleObservable = initConsoleObservable(configuration.forwardConsoleLogs)
const reportObservable = initReportObservable(configuration.forwardReports)
const session =

@@ -79,3 +54,3 @@ areCookiesAuthorized(configuration.cookieOptions) && !canUseEventBridge()

return doStartLogs(configuration, rawErrorObservable, consoleObservable, reportObservable, session, sender)
return doStartLogs(configuration, session, sender)
}

@@ -108,11 +83,4 @@

export function doStartLogs(
configuration: LogsConfiguration,
rawErrorObservable: Observable<RawError>,
consoleObservable: Observable<ConsoleLog>,
reportObservable: Observable<RawReport>,
sessionManager: LogsSessionManager,
sender: Sender
) {
const assemble = buildAssemble(sessionManager, configuration, reportRawError)
export function doStartLogs(configuration: LogsConfiguration, sessionManager: LogsSessionManager, sender: Sender) {
const assemble = buildAssemble(sessionManager, configuration, sender)

@@ -132,63 +100,3 @@ let onLogEventCollected: (message: Context) => void

function reportRawError(error: RawError) {
const messageContext: Partial<LogsEvent> = {
date: error.startClocks.timeStamp,
error: {
kind: error.type,
origin: error.source,
stack: error.stack,
},
}
if (error.resource) {
messageContext.http = {
method: error.resource.method as any, // Cast resource method because of case mismatch cf issue RUMF-1152
status_code: error.resource.statusCode,
url: error.resource.url,
}
}
sender.sendToHttp(error.message, messageContext, StatusType.error)
}
function reportConsoleLog(log: ConsoleLog) {
let messageContext: Partial<LogsEvent> | undefined
if (log.api === ConsoleApiName.error) {
messageContext = {
error: {
origin: ErrorSource.CONSOLE,
stack: log.stack,
},
}
}
sender.sendToHttp(log.message, messageContext, LogStatusForApi[log.api])
}
function logReport(report: RawReport) {
let message = report.message
let messageContext: Partial<LogsEvent> | undefined
const logStatus = LogStatusForReport[report.type]
if (logStatus === StatusType.error) {
messageContext = {
error: {
kind: report.subtype,
origin: ErrorSource.REPORT,
stack: report.stack,
},
}
} else if (report.stack) {
message += ` Found in ${getFileFromStackTraceString(report.stack)!}`
}
sender.sendToHttp(message, messageContext, logStatus)
}
const rawErrorSubscription = rawErrorObservable.subscribe(reportRawError)
const consoleSubscription = consoleObservable.subscribe(reportConsoleLog)
const reportSubscription = reportObservable.subscribe(logReport)
return {
stop: () => {
rawErrorSubscription.unsubscribe()
consoleSubscription.unsubscribe()
reportSubscription.unsubscribe()
},
send: (message: LogsMessage, currentContext: Context) => {

@@ -195,0 +103,0 @@ const contextualizedMessage = assemble(message, currentContext)

@@ -1,5 +0,6 @@

import type { Context } from '@datadog/browser-core'
import { noop } from '@datadog/browser-core'
import type { Context, RelativeTime } from '@datadog/browser-core'
import { ErrorSource, ONE_MINUTE, getTimeStamp, noop, clocksNow } from '@datadog/browser-core'
import type { LogsEvent } from '../logsEvent.types'
import { stubEndpointBuilder } from '../../../core/test/specHelper'
import type { Clock } from '../../../core/test/specHelper'
import { mockClock } from '../../../core/test/specHelper'
import { buildAssemble } from './assemble'

@@ -11,2 +12,3 @@ import type { LogsConfiguration } from './configuration'

import type { LogsSessionManager } from './logsSessionManager'
import { createSender } from './sender'

@@ -24,18 +26,15 @@ describe('assemble', () => {

let beforeSend: (event: LogsEvent) => void | boolean
let baseConfiguration: LogsConfiguration
let sessionIsTracked: boolean
let sendLogSpy: jasmine.Spy
beforeEach(() => {
sessionIsTracked = true
baseConfiguration = {
sendLogSpy = jasmine.createSpy()
const configuration = {
...validateAndBuildLogsConfiguration(initConfiguration)!,
logsEndpointBuilder: stubEndpointBuilder('https://localhost/v1/input/log'),
maxBatchSize: 1,
beforeSend: (x: LogsEvent) => beforeSend(x),
}
beforeSend = noop
assemble = buildAssemble(
sessionManager,
{ ...baseConfiguration, beforeSend: (x: LogsEvent) => beforeSend(x) },
noop
)
assemble = buildAssemble(sessionManager, configuration, createSender(sendLogSpy))
window.DD_RUM = {

@@ -121,2 +120,127 @@ getInternalContext: noop,

})
it('should use the rum internal context related to the error time', () => {
window.DD_RUM = {
getInternalContext(startTime) {
return {
foo: startTime === 1234 ? 'b' : 'a',
}
},
}
const message = { ...DEFAULT_MESSAGE, date: getTimeStamp(1234 as RelativeTime) }
const assembledMessage = assemble(message, {})
expect(assembledMessage!.foo).toBe('b')
})
it('should include RUM context', () => {
window.DD_RUM = {
getInternalContext() {
return { view: { url: 'http://from-rum-context.com', id: 'view-id' } }
},
}
const message = { ...DEFAULT_MESSAGE }
const assembledMessage = assemble(message, {})
expect(assembledMessage!.view).toEqual({
id: 'view-id',
url: 'http://from-rum-context.com',
})
})
describe('logs limitation', () => {
let clock: Clock
beforeEach(() => {
clock = mockClock()
assemble = buildAssemble(
sessionManager,
{ eventRateLimiterThreshold: 1, beforeSend: (x: LogsEvent) => beforeSend(x) } as LogsConfiguration,
createSender(sendLogSpy)
)
})
afterEach(() => {
clock.cleanup()
})
;[
{ status: StatusType.error, message: 'Reached max number of errors by minute: 1' },
{ status: StatusType.warn, message: 'Reached max number of warns by minute: 1' },
{ status: StatusType.info, message: 'Reached max number of infos by minute: 1' },
{ status: StatusType.debug, message: 'Reached max number of debugs by minute: 1' },
{ status: 'unknown' as StatusType, message: 'Reached max number of customs by minute: 1' },
].forEach(({ status, message }) => {
it(`stops sending ${status} logs when reaching the limit`, () => {
const assembledMessage1 = assemble({ message: 'foo', status }, {})
const assembledMessage2 = assemble({ message: 'bar', status }, {})
expect(assembledMessage1!.message).toBe('foo')
expect(assembledMessage2).toBeUndefined()
expect(sendLogSpy).toHaveBeenCalledOnceWith({
message,
status: StatusType.error,
date: clocksNow().timeStamp,
error: {
kind: undefined,
origin: ErrorSource.AGENT,
stack: undefined,
},
})
})
it(`does not take discarded ${status} logs into account`, () => {
const sendLogSpy = jasmine.createSpy<(message: LogsMessage & { foo?: string }) => void>()
beforeSend = (event) => {
if (event.message === 'discard me') {
return false
}
}
const assembledMessage1 = assemble({ message: 'discard me', status }, {})
const assembledMessage2 = assemble({ message: 'discard me', status }, {})
const assembledMessage3 = assemble({ message: 'discard me', status }, {})
const assembledMessage4 = assemble({ message: 'foo', status }, {})
expect(assembledMessage1).toBeUndefined()
expect(assembledMessage2).toBeUndefined()
expect(assembledMessage3).toBeUndefined()
expect(assembledMessage4!.message).toBe('foo')
expect(sendLogSpy).not.toHaveBeenCalled()
})
it(`allows to send new ${status}s after a minute`, () => {
const assembledMessage1 = assemble({ message: 'foo', status }, {})
const assembledMessage2 = assemble({ message: 'bar', status }, {})
clock.tick(ONE_MINUTE)
const assembledMessage3 = assemble({ message: 'baz', status }, {})
expect(assembledMessage2).toBeUndefined()
expect(assembledMessage1!.message).toBe('foo')
expect(assembledMessage3!.message).toBe('baz')
})
it('allows to send logs with a different status when reaching the limit', () => {
const otherLogStatus = status === StatusType.error ? 'other' : StatusType.error
const assembledMessage1 = assemble({ message: 'foo', status }, {})
const assembledMessage2 = assemble({ message: 'bar', status }, {})
const assembledMessage3 = assemble({ message: 'baz', status: otherLogStatus as StatusType }, {})
expect(assembledMessage2).toBeUndefined()
expect(assembledMessage1!.message).toBe('foo')
expect(assembledMessage3!.message).toBe('baz')
})
})
it('two different custom statuses are accounted by the same limit', () => {
const assembledMessage1 = assemble({ message: 'foo', status: 'foo' as StatusType }, {})
const assembledMessage2 = assemble({ message: 'bar', status: 'bar' as StatusType }, {})
expect(assembledMessage2).toBeUndefined()
expect(assembledMessage1!.message).toBe('foo')
})
})
})

@@ -7,8 +7,8 @@ import type { Context, RawError, RelativeTime } from '@datadog/browser-core'

import type { LogsSessionManager } from './logsSessionManager'
import { reportRawError } from './reportRawError'
import type { Sender } from './sender'
export function buildAssemble(
sessionManager: LogsSessionManager,
configuration: LogsConfiguration,
reportRawError: (error: RawError) => void
) {
export function buildAssemble(sessionManager: LogsSessionManager, configuration: LogsConfiguration, sender: Sender) {
const reportAgentError = (error: RawError) => reportRawError(error, sender)
const logRateLimiters = {

@@ -18,12 +18,20 @@ [StatusType.error]: createEventRateLimiter(

configuration.eventRateLimiterThreshold,
reportRawError
reportAgentError
),
[StatusType.warn]: createEventRateLimiter(StatusType.warn, configuration.eventRateLimiterThreshold, reportRawError),
[StatusType.info]: createEventRateLimiter(StatusType.info, configuration.eventRateLimiterThreshold, reportRawError),
[StatusType.warn]: createEventRateLimiter(
StatusType.warn,
configuration.eventRateLimiterThreshold,
reportAgentError
),
[StatusType.info]: createEventRateLimiter(
StatusType.info,
configuration.eventRateLimiterThreshold,
reportAgentError
),
[StatusType.debug]: createEventRateLimiter(
StatusType.debug,
configuration.eventRateLimiterThreshold,
reportRawError
reportAgentError
),
['custom']: createEventRateLimiter('custom', configuration.eventRateLimiterThreshold, reportRawError),
['custom']: createEventRateLimiter('custom', configuration.eventRateLimiterThreshold, reportAgentError),
}

@@ -30,0 +38,0 @@

@@ -1,2 +0,2 @@

import { display } from '@datadog/browser-core'
import { display, ErrorSource, resetExperimentalFeatures, updateExperimentalFeatures } from '@datadog/browser-core'
import type { LogsMessage } from './logger'

@@ -22,2 +22,6 @@ import { HandlerType, Logger, STATUSES, StatusType } from './logger'

afterEach(() => {
resetExperimentalFeatures()
})
describe('log methods', () => {

@@ -30,2 +34,21 @@ it("'logger.log' should have info status by default", () => {

it("'logger.log' should set 'logger' origin when ff forward-logs enabled", () => {
updateExperimentalFeatures(['forward-logs'])
logger.log('message')
expect(getLoggedMessage(0).origin).toEqual(ErrorSource.LOGGER)
})
it("'logger.log' should not set 'logger' origin when ff forward-logs disabled", () => {
logger.log('message')
expect(getLoggedMessage(0).origin).not.toBeDefined()
})
it("'logger.log' message context can override the 'logger' origin", () => {
updateExperimentalFeatures(['forward-logs'])
logger.log('message', { origin: 'foo' })
expect(getLoggedMessage(0).origin).toEqual('foo')
})
STATUSES.forEach((status) => {

@@ -32,0 +55,0 @@ it(`'logger.${status}' should have ${status} status`, () => {

import type { ContextValue, TimeStamp } from '@datadog/browser-core'
import { combine, ErrorSource, monitored } from '@datadog/browser-core'
import { combine, ErrorSource, monitored, isExperimentalFeatureEnabled } from '@datadog/browser-core'
import type { Sender } from './sender'

@@ -35,3 +35,9 @@

log(message: string, messageContext?: object, status: StatusType = StatusType.info) {
this.sender.sendLog(message, messageContext, status)
let logOrigin
if (isExperimentalFeatureEnabled('forward-logs')) {
logOrigin = {
origin: ErrorSource.LOGGER,
}
}
this.sender.sendLog(message, combine(logOrigin, messageContext), status)
}

@@ -54,2 +60,3 @@

error: {
// Todo: remove error origin in the next major version
origin: ErrorSource.LOGGER,

@@ -56,0 +63,0 @@ },

@@ -15,2 +15,6 @@ export interface LogsEvent {

/**
* Origin of the log
*/
origin?: 'network' | 'source' | 'console' | 'logger' | 'agent' | 'report' | 'custom'
/**
* UUID of the application

@@ -17,0 +21,0 @@ */

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc