@cloudcare/browser-core 3.2.6 → 3.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/configuration/configuration.js +3 -2
- package/cjs/configuration/configuration.js.map +1 -1
- package/cjs/session/sessionManagement.js +0 -1
- package/cjs/session/sessionManagement.js.map +1 -1
- package/cjs/transport/httpRequest.js +5 -2
- package/cjs/transport/httpRequest.js.map +1 -1
- package/cjs/transport/sendWithRetryStrategy.js +10 -6
- package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
- package/cjs/transport/startBatchWithReplica.js +1 -1
- package/cjs/transport/startBatchWithReplica.js.map +1 -1
- package/esm/configuration/configuration.js +3 -2
- package/esm/configuration/configuration.js.map +1 -1
- package/esm/session/sessionManagement.js +0 -1
- package/esm/session/sessionManagement.js.map +1 -1
- package/esm/transport/httpRequest.js +5 -2
- package/esm/transport/httpRequest.js.map +1 -1
- package/esm/transport/sendWithRetryStrategy.js +10 -6
- package/esm/transport/sendWithRetryStrategy.js.map +1 -1
- package/esm/transport/startBatchWithReplica.js +1 -1
- package/esm/transport/startBatchWithReplica.js.map +1 -1
- package/package.json +2 -2
- package/src/configuration/configuration.js +10 -3
- package/src/session/sessionManagement.js +0 -1
- package/src/transport/httpRequest.js +10 -2
- package/src/transport/sendWithRetryStrategy.js +15 -6
- package/src/transport/startBatchWithReplica.js +1 -0
|
@@ -31,7 +31,7 @@ function validateAndBuildConfiguration(initConfiguration) {
|
|
|
31
31
|
_display.display.error('Telemetry Sample Rate should be a number between 0 and 100');
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
var sessionSampleRate = initConfiguration.sessionSampleRate
|
|
34
|
+
var sessionSampleRate = (0, _tools.isNullUndefinedDefaultValue)(initConfiguration.sessionSampleRate, initConfiguration.sampleRate);
|
|
35
35
|
return (0, _tools.assign)({
|
|
36
36
|
beforeSend: initConfiguration.beforeSend && (0, _catchUserErrors.catchUserErrors)(initConfiguration.beforeSend, 'beforeSend threw an error:'),
|
|
37
37
|
sessionStoreStrategyType: (0, _sessionStore.selectSessionStoreStrategyType)(initConfiguration),
|
|
@@ -63,7 +63,8 @@ function validateAndBuildConfiguration(initConfiguration) {
|
|
|
63
63
|
storeContextsToLocal: !!initConfiguration.storeContextsToLocal,
|
|
64
64
|
// 存储到localstorage key ,默认不填,自动生成
|
|
65
65
|
storeContextsKey: initConfiguration.storeContextsKey,
|
|
66
|
-
sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson
|
|
66
|
+
sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson,
|
|
67
|
+
retryMaxSize: (0, _tools.isNullUndefinedDefaultValue)(initConfiguration.retryMaxSize, -1)
|
|
67
68
|
}, (0, _transportConfiguration.computeTransportConfiguration)(initConfiguration));
|
|
68
69
|
}
|
|
69
70
|
function validatePostRequestRequireParamsConfiguration(initConfiguration) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","names":["_catchUserErrors","require","_display","_tools","_byteUtils","_transportConfiguration","_sessionStore","DefaultPrivacyLevel","ALLOW","MASK","MASK_USER_INPUT","exports","validateAndBuildConfiguration","initConfiguration","sampleRate","undefined","isPercentage","display","error","sessionSampleRate","telemetrySampleRate","assign","beforeSend","catchUserErrors","sessionStoreStrategyType","selectSessionStoreStrategyType","
|
|
1
|
+
{"version":3,"file":"configuration.js","names":["_catchUserErrors","require","_display","_tools","_byteUtils","_transportConfiguration","_sessionStore","DefaultPrivacyLevel","ALLOW","MASK","MASK_USER_INPUT","exports","validateAndBuildConfiguration","initConfiguration","sampleRate","undefined","isPercentage","display","error","sessionSampleRate","telemetrySampleRate","isNullUndefinedDefaultValue","assign","beforeSend","catchUserErrors","sessionStoreStrategyType","selectSessionStoreStrategyType","service","version","env","telemetryEnabled","silentMultipleInit","batchBytesLimit","ONE_KIBI_BYTE","eventRateLimiterThreshold","maxTelemetryEventsPerPage","flushTimeout","ONE_SECOND","batchMessagesLimit","messageBytesLimit","resourceUrlLimit","storeContextsToLocal","storeContextsKey","sendContentTypeByJson","retryMaxSize","computeTransportConfiguration","validatePostRequestRequireParamsConfiguration","site","datakitOrigin","datakitUrl","clientToken"],"sources":["../../src/configuration/configuration.js"],"sourcesContent":["import { catchUserErrors } from '../helper/catchUserErrors'\nimport { display } from '../helper/display'\nimport {\n assign,\n isPercentage,\n ONE_SECOND,\n isNullUndefinedDefaultValue\n} from '../helper/tools'\nimport { ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { computeTransportConfiguration } from './transportConfiguration'\nimport { selectSessionStoreStrategyType } from '../session/sessionStore'\nexport var DefaultPrivacyLevel = {\n ALLOW: 'allow',\n MASK: 'mask',\n MASK_USER_INPUT: 'mask-user-input'\n}\nexport function validateAndBuildConfiguration(initConfiguration) {\n if (\n initConfiguration.sampleRate !== undefined &&\n !isPercentage(initConfiguration.sampleRate)\n ) {\n display.error('Sample Rate should be a number between 0 and 100')\n return\n }\n if (\n initConfiguration.sessionSampleRate !== undefined &&\n !isPercentage(initConfiguration.sessionSampleRate)\n ) {\n display.error('Sample Rate should be a number between 0 and 100')\n return\n }\n if (\n initConfiguration.telemetrySampleRate !== undefined &&\n !isPercentage(initConfiguration.telemetrySampleRate)\n ) {\n display.error('Telemetry Sample Rate should be a number between 0 and 100')\n return\n }\n\n var sessionSampleRate = isNullUndefinedDefaultValue(\n initConfiguration.sessionSampleRate,\n initConfiguration.sampleRate\n )\n return assign(\n {\n beforeSend:\n initConfiguration.beforeSend &&\n catchUserErrors(\n initConfiguration.beforeSend,\n 'beforeSend threw an error:'\n ),\n sessionStoreStrategyType:\n selectSessionStoreStrategyType(initConfiguration),\n sessionSampleRate: isNullUndefinedDefaultValue(sessionSampleRate, 100),\n service: initConfiguration.service,\n version: initConfiguration.version,\n env: initConfiguration.env,\n telemetrySampleRate: isNullUndefinedDefaultValue(\n initConfiguration.telemetrySampleRate,\n 100\n ),\n telemetryEnabled: isNullUndefinedDefaultValue(\n initConfiguration.telemetryEnabled,\n false\n ),\n silentMultipleInit: !!initConfiguration.silentMultipleInit,\n\n /**\n * beacon payload max queue size implementation is 64kb\n * ensure that we leave room for logs, rum and potential other users\n */\n batchBytesLimit: 16 * ONE_KIBI_BYTE,\n\n eventRateLimiterThreshold: 3000,\n maxTelemetryEventsPerPage: 15,\n\n /**\n * flush automatically, aim to be lower than ALB connection timeout\n * to maximize connection reuse.\n */\n flushTimeout: 30 * ONE_SECOND,\n\n /**\n * Logs intake limit\n */\n batchMessagesLimit: 50,\n messageBytesLimit: 256 * ONE_KIBI_BYTE,\n resourceUrlLimit: 5 * ONE_KIBI_BYTE,\n storeContextsToLocal: !!initConfiguration.storeContextsToLocal,\n // 存储到localstorage key ,默认不填,自动生成\n storeContextsKey: initConfiguration.storeContextsKey,\n sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson,\n retryMaxSize: isNullUndefinedDefaultValue(\n initConfiguration.retryMaxSize,\n -1\n )\n },\n computeTransportConfiguration(initConfiguration)\n )\n}\nexport function validatePostRequestRequireParamsConfiguration(\n initConfiguration\n) {\n if (\n !initConfiguration.site &&\n !initConfiguration.datakitOrigin &&\n !initConfiguration.datakitUrl\n ) {\n display.error(\n 'datakitOrigin or site is not configured, no RUM data will be collected.'\n )\n return false\n }\n // if (!initConfiguration.datakitUrl && !initConfiguration.datakitOrigin) {\n // display.error(\n // 'datakitOrigin is not configured, no RUM data will be collected.'\n // )\n // return false\n // }\n if (initConfiguration.site && !initConfiguration.clientToken) {\n display.error(\n 'clientToken is not configured, no RUM data will be collected.'\n )\n return false\n }\n return true\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAMA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,uBAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACO,IAAIM,mBAAmB,GAAG;EAC/BC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE,MAAM;EACZC,eAAe,EAAE;AACnB,CAAC;AAAAC,OAAA,CAAAJ,mBAAA,GAAAA,mBAAA;AACM,SAASK,6BAA6BA,CAACC,iBAAiB,EAAE;EAC/D,IACEA,iBAAiB,CAACC,UAAU,KAAKC,SAAS,IAC1C,CAAC,IAAAC,mBAAY,EAACH,iBAAiB,CAACC,UAAU,CAAC,EAC3C;IACAG,gBAAO,CAACC,KAAK,CAAC,kDAAkD,CAAC;IACjE;EACF;EACA,IACEL,iBAAiB,CAACM,iBAAiB,KAAKJ,SAAS,IACjD,CAAC,IAAAC,mBAAY,EAACH,iBAAiB,CAACM,iBAAiB,CAAC,EAClD;IACAF,gBAAO,CAACC,KAAK,CAAC,kDAAkD,CAAC;IACjE;EACF;EACA,IACEL,iBAAiB,CAACO,mBAAmB,KAAKL,SAAS,IACnD,CAAC,IAAAC,mBAAY,EAACH,iBAAiB,CAACO,mBAAmB,CAAC,EACpD;IACAH,gBAAO,CAACC,KAAK,CAAC,4DAA4D,CAAC;IAC3E;EACF;EAEA,IAAIC,iBAAiB,GAAG,IAAAE,kCAA2B,EACjDR,iBAAiB,CAACM,iBAAiB,EACnCN,iBAAiB,CAACC,UACpB,CAAC;EACD,OAAO,IAAAQ,aAAM,EACX;IACEC,UAAU,EACRV,iBAAiB,CAACU,UAAU,IAC5B,IAAAC,gCAAe,EACbX,iBAAiB,CAACU,UAAU,EAC5B,4BACF,CAAC;IACHE,wBAAwB,EACtB,IAAAC,4CAA8B,EAACb,iBAAiB,CAAC;IACnDM,iBAAiB,EAAE,IAAAE,kCAA2B,EAACF,iBAAiB,EAAE,GAAG,CAAC;IACtEQ,OAAO,EAAEd,iBAAiB,CAACc,OAAO;IAClCC,OAAO,EAAEf,iBAAiB,CAACe,OAAO;IAClCC,GAAG,EAAEhB,iBAAiB,CAACgB,GAAG;IAC1BT,mBAAmB,EAAE,IAAAC,kCAA2B,EAC9CR,iBAAiB,CAACO,mBAAmB,EACrC,GACF,CAAC;IACDU,gBAAgB,EAAE,IAAAT,kCAA2B,EAC3CR,iBAAiB,CAACiB,gBAAgB,EAClC,KACF,CAAC;IACDC,kBAAkB,EAAE,CAAC,CAAClB,iBAAiB,CAACkB,kBAAkB;IAE1D;AACN;AACA;AACA;IACMC,eAAe,EAAE,EAAE,GAAGC,wBAAa;IAEnCC,yBAAyB,EAAE,IAAI;IAC/BC,yBAAyB,EAAE,EAAE;IAE7B;AACN;AACA;AACA;IACMC,YAAY,EAAE,EAAE,GAAGC,iBAAU;IAE7B;AACN;AACA;IACMC,kBAAkB,EAAE,EAAE;IACtBC,iBAAiB,EAAE,GAAG,GAAGN,wBAAa;IACtCO,gBAAgB,EAAE,CAAC,GAAGP,wBAAa;IACnCQ,oBAAoB,EAAE,CAAC,CAAC5B,iBAAiB,CAAC4B,oBAAoB;IAC9D;IACAC,gBAAgB,EAAE7B,iBAAiB,CAAC6B,gBAAgB;IACpDC,qBAAqB,EAAE,CAAC,CAAC9B,iBAAiB,CAAC8B,qBAAqB;IAChEC,YAAY,EAAE,IAAAvB,kCAA2B,EACvCR,iBAAiB,CAAC+B,YAAY,EAC9B,CAAC,CACH;EACF,CAAC,EACD,IAAAC,qDAA6B,EAAChC,iBAAiB,CACjD,CAAC;AACH;AACO,SAASiC,6CAA6CA,CAC3DjC,iBAAiB,EACjB;EACA,IACE,CAACA,iBAAiB,CAACkC,IAAI,IACvB,CAAClC,iBAAiB,CAACmC,aAAa,IAChC,CAACnC,iBAAiB,CAACoC,UAAU,EAC7B;IACAhC,gBAAO,CAACC,KAAK,CACX,yEACF,CAAC;IACD,OAAO,KAAK;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAIL,iBAAiB,CAACkC,IAAI,IAAI,CAAClC,iBAAiB,CAACqC,WAAW,EAAE;IAC5DjC,gBAAO,CAACC,KAAK,CACX,+DACF,CAAC;IACD,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb","ignoreList":[]}
|
|
@@ -40,7 +40,6 @@ function startSessionManager(configuration, productKey, computeSessionState) {
|
|
|
40
40
|
sessionContextHistory.closeActive((0, _tools.relativeNow)());
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
// We expand/renew session unconditionally as tracking consent is always granted when the session
|
|
44
43
|
// manager is started.
|
|
45
44
|
sessionStore.expandOrRenewSession();
|
|
46
45
|
sessionContextHistory.add(buildSessionContext(), (0, _tools.clocksOrigin)().relative);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionManagement.js","names":["_observable","require","_valueHistory","_tools","_enums","_addEventListener3","_timer","_sessionConstants","_sessionStore","VISIBILITY_CHECK_DELAY","ONE_MINUTE","exports","SESSION_CONTEXT_TIMEOUT_DELAY","SESSION_TIME_OUT_DELAY","stopCallbacks","startSessionManager","configuration","productKey","computeSessionState","renewObservable","Observable","expireObservable","sessionStore","startSessionStore","sessionStoreStrategyType","push","stop","sessionContextHistory","createValueHistory","expireDelay","subscribe","add","buildSessionContext","relativeNow","notify","closeActive","expandOrRenewSession","clocksOrigin","relative","trackActivity","trackVisibility","expandSession","trackResume","restartSession","id","getSession","trackingType","findSession","startTime","options","find","sessionStateUpdateObservable","expire","updateSessionState","stopSessionManager","forEach","e","_addEventListeners","addEventListeners","window","DOM_EVENT","CLICK","TOUCH_START","KEY_DOWN","SCROLL","capture","passive","expandSessionWhenVisible","document","visibilityState","_addEventListener","addEventListener","VISIBILITY_CHANGE","visibilityCheckInterval","setInterval","clearInterval","cb","_addEventListener2","RESUME"],"sources":["../../src/session/sessionManagement.js"],"sourcesContent":["import { Observable } from '../helper/observable'\nimport { createValueHistory } from '../helper/valueHistory'\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../helper/tools'\nimport { DOM_EVENT } from '../helper/enums'\nimport {\n addEventListener,\n addEventListeners\n} from '../browser/addEventListener'\nimport { clearInterval, setInterval } from '../helper/timer'\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport { startSessionStore } from './sessionStore'\n\nexport const VISIBILITY_CHECK_DELAY = ONE_MINUTE\nconst SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY\nlet stopCallbacks = []\n\nexport function startSessionManager(\n configuration,\n productKey,\n computeSessionState\n) {\n const renewObservable = new Observable()\n const expireObservable = new Observable()\n\n const sessionStore = startSessionStore(\n configuration.sessionStoreStrategyType,\n productKey,\n computeSessionState\n )\n stopCallbacks.push(function () {\n return sessionStore.stop()\n })\n\n const sessionContextHistory = createValueHistory({\n expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY\n })\n stopCallbacks.push(function () {\n return sessionContextHistory.stop()\n })\n\n sessionStore.renewObservable.subscribe(function () {\n sessionContextHistory.add(buildSessionContext(), relativeNow())\n renewObservable.notify()\n })\n sessionStore.expireObservable.subscribe(function () {\n expireObservable.notify()\n sessionContextHistory.closeActive(relativeNow())\n })\n\n //
|
|
1
|
+
{"version":3,"file":"sessionManagement.js","names":["_observable","require","_valueHistory","_tools","_enums","_addEventListener3","_timer","_sessionConstants","_sessionStore","VISIBILITY_CHECK_DELAY","ONE_MINUTE","exports","SESSION_CONTEXT_TIMEOUT_DELAY","SESSION_TIME_OUT_DELAY","stopCallbacks","startSessionManager","configuration","productKey","computeSessionState","renewObservable","Observable","expireObservable","sessionStore","startSessionStore","sessionStoreStrategyType","push","stop","sessionContextHistory","createValueHistory","expireDelay","subscribe","add","buildSessionContext","relativeNow","notify","closeActive","expandOrRenewSession","clocksOrigin","relative","trackActivity","trackVisibility","expandSession","trackResume","restartSession","id","getSession","trackingType","findSession","startTime","options","find","sessionStateUpdateObservable","expire","updateSessionState","stopSessionManager","forEach","e","_addEventListeners","addEventListeners","window","DOM_EVENT","CLICK","TOUCH_START","KEY_DOWN","SCROLL","capture","passive","expandSessionWhenVisible","document","visibilityState","_addEventListener","addEventListener","VISIBILITY_CHANGE","visibilityCheckInterval","setInterval","clearInterval","cb","_addEventListener2","RESUME"],"sources":["../../src/session/sessionManagement.js"],"sourcesContent":["import { Observable } from '../helper/observable'\nimport { createValueHistory } from '../helper/valueHistory'\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../helper/tools'\nimport { DOM_EVENT } from '../helper/enums'\nimport {\n addEventListener,\n addEventListeners\n} from '../browser/addEventListener'\nimport { clearInterval, setInterval } from '../helper/timer'\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport { startSessionStore } from './sessionStore'\n\nexport const VISIBILITY_CHECK_DELAY = ONE_MINUTE\nconst SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY\nlet stopCallbacks = []\n\nexport function startSessionManager(\n configuration,\n productKey,\n computeSessionState\n) {\n const renewObservable = new Observable()\n const expireObservable = new Observable()\n\n const sessionStore = startSessionStore(\n configuration.sessionStoreStrategyType,\n productKey,\n computeSessionState\n )\n stopCallbacks.push(function () {\n return sessionStore.stop()\n })\n\n const sessionContextHistory = createValueHistory({\n expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY\n })\n stopCallbacks.push(function () {\n return sessionContextHistory.stop()\n })\n\n sessionStore.renewObservable.subscribe(function () {\n sessionContextHistory.add(buildSessionContext(), relativeNow())\n renewObservable.notify()\n })\n sessionStore.expireObservable.subscribe(function () {\n expireObservable.notify()\n sessionContextHistory.closeActive(relativeNow())\n })\n\n // manager is started.\n sessionStore.expandOrRenewSession()\n sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative)\n\n trackActivity(function () {\n sessionStore.expandOrRenewSession()\n })\n trackVisibility(function () {\n return sessionStore.expandSession()\n })\n trackResume(function () {\n sessionStore.restartSession()\n })\n\n function buildSessionContext() {\n return {\n id: sessionStore.getSession().id,\n trackingType: sessionStore.getSession()[productKey]\n }\n }\n\n return {\n findSession: function (startTime, options) {\n return sessionContextHistory.find(startTime, options)\n },\n renewObservable,\n expireObservable,\n sessionStateUpdateObservable: sessionStore.sessionStateUpdateObservable,\n expire: sessionStore.expire,\n updateSessionState: sessionStore.updateSessionState\n }\n}\n\nexport function stopSessionManager() {\n stopCallbacks.forEach(function (e) {\n e()\n })\n stopCallbacks = []\n}\n\nfunction trackActivity(expandOrRenewSession) {\n const { stop } = addEventListeners(\n window,\n [\n DOM_EVENT.CLICK,\n DOM_EVENT.TOUCH_START,\n DOM_EVENT.KEY_DOWN,\n DOM_EVENT.SCROLL\n ],\n expandOrRenewSession,\n { capture: true, passive: true }\n )\n stopCallbacks.push(stop)\n}\n\nfunction trackVisibility(expandSession) {\n const expandSessionWhenVisible = function () {\n if (document.visibilityState === 'visible') {\n expandSession()\n }\n }\n\n const { stop } = addEventListener(\n document,\n DOM_EVENT.VISIBILITY_CHANGE,\n expandSessionWhenVisible\n )\n stopCallbacks.push(stop)\n\n const visibilityCheckInterval = setInterval(\n expandSessionWhenVisible,\n VISIBILITY_CHECK_DELAY\n )\n stopCallbacks.push(function () {\n clearInterval(visibilityCheckInterval)\n })\n}\n\nfunction trackResume(cb) {\n const { stop } = addEventListener(window, DOM_EVENT.RESUME, cb, {\n capture: true\n })\n stopCallbacks.push(stop)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,8 +25,11 @@ function addBatchPrecision(url, encoding) {
|
|
|
25
25
|
}
|
|
26
26
|
return url;
|
|
27
27
|
}
|
|
28
|
-
function createHttpRequest(endpointUrl, bytesLimit, reportError) {
|
|
29
|
-
|
|
28
|
+
function createHttpRequest(endpointUrl, bytesLimit, retryMaxSize, reportError) {
|
|
29
|
+
if (retryMaxSize === undefined) {
|
|
30
|
+
retryMaxSize = -1;
|
|
31
|
+
}
|
|
32
|
+
var retryState = (0, _sendWithRetryStrategy.newRetryState)(retryMaxSize);
|
|
30
33
|
var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
|
|
31
34
|
return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
|
|
32
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpRequest.js","names":["_sendWithRetryStrategy","require","_addEventListener","_monitor","_telemetry","addBatchPrecision","url","encoding","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","newRetryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendWithRetryStrategy","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","type","Blob","isQueued","e","reportBeaconError","sendXHR","hasReportedBeaconError","addTelemetryError","canUseKeepAlive","isKeepAliveSupported","fetchOption","method","body","keepalive","mode","headers","fetch","then","monitor","response","status","window","Request","_unused","request","XMLHttpRequest","open","setRequestHeader","addEventListener","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\nimport { addTelemetryError } from '../telemetry/telemetry'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url, encoding) {\n if (!url) return url\n url = url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n if (encoding) {\n url = url + '&encoding=' + encoding\n }\n return url\n}\nexport function createHttpRequest(endpointUrl
|
|
1
|
+
{"version":3,"file":"httpRequest.js","names":["_sendWithRetryStrategy","require","_addEventListener","_monitor","_telemetry","addBatchPrecision","url","encoding","indexOf","createHttpRequest","endpointUrl","bytesLimit","retryMaxSize","reportError","undefined","retryState","newRetryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendWithRetryStrategy","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","type","Blob","isQueued","e","reportBeaconError","sendXHR","hasReportedBeaconError","addTelemetryError","canUseKeepAlive","isKeepAliveSupported","fetchOption","method","body","keepalive","mode","headers","fetch","then","monitor","response","status","window","Request","_unused","request","XMLHttpRequest","open","setRequestHeader","addEventListener","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\nimport { addTelemetryError } from '../telemetry/telemetry'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url, encoding) {\n if (!url) return url\n url = url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n if (encoding) {\n url = url + '&encoding=' + encoding\n }\n return url\n}\nexport function createHttpRequest(\n endpointUrl,\n bytesLimit,\n retryMaxSize,\n reportError\n) {\n if (retryMaxSize === undefined) {\n retryMaxSize = -1\n }\n var retryState = newRetryState(retryMaxSize)\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl, payload.encoding)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var beaconData\n if (payload.type) {\n beaconData = new Blob([data], {\n type: payload.type\n })\n } else {\n beaconData = data\n }\n\n var isQueued = navigator.sendBeacon(url, beaconData)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n reportBeaconError(e)\n }\n }\n sendXHR(url, payload)\n}\nvar hasReportedBeaconError = false\n\nfunction reportBeaconError(e) {\n if (!hasReportedBeaconError) {\n hasReportedBeaconError = true\n addTelemetryError(e)\n }\n}\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl, payload.encoding)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n var fetchOption = {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }\n if (payload.type) {\n fetchOption.headers = {\n 'Content-Type': payload.type\n }\n }\n fetch(url, fetchOption).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, payload, onResponse)\n })\n )\n } else {\n sendXHR(url, payload, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, payload, onResponse) {\n const data = payload.data\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n if (data instanceof Blob) {\n request.setRequestHeader('Content-Type', data.type)\n } else if (payload.type) {\n request.setRequestHeader('Content-Type', payload.type)\n }\n\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -69,13 +69,16 @@ function send(payload, state, sendStrategy, responseData) {
|
|
|
69
69
|
state.bandwidthMonitor.add(payload);
|
|
70
70
|
sendStrategy(payload, function (response) {
|
|
71
71
|
state.bandwidthMonitor.remove(payload);
|
|
72
|
-
if (!shouldRetryRequest(response)) {
|
|
72
|
+
if (!shouldRetryRequest(response, state, payload)) {
|
|
73
73
|
state.transportStatus = TransportStatus.UP;
|
|
74
74
|
onSuccess();
|
|
75
75
|
} else {
|
|
76
76
|
// do not consider transport down if another ongoing request could succeed
|
|
77
77
|
state.transportStatus = state.bandwidthMonitor.ongoingRequestCount > 0 ? TransportStatus.FAILURE_DETECTED : TransportStatus.DOWN;
|
|
78
|
-
|
|
78
|
+
payload.retry = {
|
|
79
|
+
count: payload.retry ? payload.retry.count + 1 : 1,
|
|
80
|
+
lastFailureStatus: response.status
|
|
81
|
+
};
|
|
79
82
|
onFailure();
|
|
80
83
|
}
|
|
81
84
|
});
|
|
@@ -95,17 +98,18 @@ function retryQueuedPayloads(reason, state, sendStrategy, endpointUrl, reportErr
|
|
|
95
98
|
sendWithRetryStrategy(previousQueue.dequeue(), state, sendStrategy, endpointUrl, reportError);
|
|
96
99
|
}
|
|
97
100
|
}
|
|
98
|
-
function shouldRetryRequest(response) {
|
|
101
|
+
function shouldRetryRequest(response, state, payload) {
|
|
102
|
+
if (state.retryMaxSize > -1 && payload.retry && payload.retry.count > state.retryMaxSize) return false;
|
|
99
103
|
return response.type !== 'opaque' && (response.status === 0 && !navigator.onLine || response.status === 408 || response.status === 429 || response.status >= 500);
|
|
100
104
|
}
|
|
101
|
-
function newRetryState() {
|
|
105
|
+
function newRetryState(retryMaxSize) {
|
|
102
106
|
return {
|
|
103
107
|
transportStatus: TransportStatus.UP,
|
|
104
|
-
lastFailureStatus: 0,
|
|
105
108
|
currentBackoffTime: INITIAL_BACKOFF_TIME,
|
|
106
109
|
bandwidthMonitor: newBandwidthMonitor(),
|
|
107
110
|
queuedPayloads: newPayloadQueue(),
|
|
108
|
-
queueFullReported: false
|
|
111
|
+
queueFullReported: false,
|
|
112
|
+
retryMaxSize: retryMaxSize
|
|
109
113
|
};
|
|
110
114
|
}
|
|
111
115
|
function newPayloadQueue() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWithRetryStrategy.js","names":["_tools","require","_byteUtils","_errorTools","_timer","MAX_ONGOING_BYTES_COUNT","ONE_KIBI_BYTE","exports","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","ONE_MEBI_BYTE","MAX_BACKOFF_TIME","ONE_SECOND","INITIAL_BACKOFF_TIME","TransportStatus","UP","FAILURE_DETECTED","DOWN","RetryReason","AFTER_SUCCESS","AFTER_RESUME","sendWithRetryStrategy","payload","state","sendStrategy","endpointUrl","reportError","transportStatus","queuedPayloads","size","bandwidthMonitor","canHandle","send","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","setTimeout","first","dequeue","currentBackoffTime","Math","min","responseData","add","response","remove","shouldRetryRequest","ongoingRequestCount","lastFailureStatus","status","reason","isFull","queueFullReported","message","source","ErrorSource","AGENT","startClocks","clocksNow","previousQueue","newPayloadQueue","type","navigator","onLine","newRetryState","newBandwidthMonitor","queue","bytesCount","push","shift","length","ongoingByteCount"],"sources":["../../src/transport/sendWithRetryStrategy.js"],"sourcesContent":["import { clocksNow, ONE_SECOND } from '../helper/tools'\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { ErrorSource } from '../helper/errorTools'\nimport { setTimeout } from '../helper/timer'\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE\nexport var MAX_ONGOING_REQUESTS = 32\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE\nexport var MAX_BACKOFF_TIME = 256 * ONE_SECOND\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND\n\nvar TransportStatus = {\n UP: 0,\n FAILURE_DETECTED: 1,\n DOWN: 2\n}\n\nvar RetryReason = {\n AFTER_SUCCESS: 0,\n AFTER_RESUME: 1\n}\n\nexport function sendWithRetryStrategy(\n payload,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n state.transportStatus === TransportStatus.UP &&\n state.queuedPayloads.size() === 0 &&\n state.bandwidthMonitor.canHandle(payload)\n ) {\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n return retryQueuedPayloads(\n RetryReason.AFTER_SUCCESS,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.queuedPayloads.enqueue(payload)\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n } else {\n state.queuedPayloads.enqueue(payload)\n }\n}\n\nfunction scheduleRetry(state, sendStrategy, endpointUrl, reportError) {\n if (state.transportStatus !== TransportStatus.DOWN) {\n return\n }\n setTimeout(function () {\n var payload = state.queuedPayloads.first()\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n state.queuedPayloads.dequeue()\n\n state.currentBackoffTime = INITIAL_BACKOFF_TIME\n retryQueuedPayloads(\n RetryReason.AFTER_RESUME,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.currentBackoffTime = Math.min(\n MAX_BACKOFF_TIME,\n state.currentBackoffTime * 2\n )\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n }, state.currentBackoffTime)\n}\n\nfunction send(payload, state, sendStrategy, responseData) {\n var onSuccess = responseData.onSuccess\n var onFailure = responseData.onFailure\n state.bandwidthMonitor.add(payload)\n sendStrategy(payload, function (response) {\n state.bandwidthMonitor.remove(payload)\n if (!shouldRetryRequest(response)) {\n state.transportStatus = TransportStatus.UP\n onSuccess()\n } else {\n // do not consider transport down if another ongoing request could succeed\n state.transportStatus =\n state.bandwidthMonitor.ongoingRequestCount > 0\n ? TransportStatus.FAILURE_DETECTED\n : TransportStatus.DOWN\n state.lastFailureStatus = response.status\n onFailure()\n }\n })\n}\n\nfunction retryQueuedPayloads(\n reason,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n reason === RetryReason.AFTER_SUCCESS &&\n state.queuedPayloads.isFull() &&\n !state.queueFullReported\n ) {\n reportError({\n message:\n 'Reached max ' +\n endpointUrl +\n ' events size queued for upload: ' +\n MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE +\n 'MiB',\n source: ErrorSource.AGENT,\n startClocks: clocksNow()\n })\n state.queueFullReported = true\n }\n var previousQueue = state.queuedPayloads\n state.queuedPayloads = newPayloadQueue()\n while (previousQueue.size() > 0) {\n sendWithRetryStrategy(\n previousQueue.dequeue(),\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n }\n}\n\nfunction shouldRetryRequest(response) {\n return (\n response.type !== 'opaque' &&\n ((response.status === 0 && !navigator.onLine) ||\n response.status === 408 ||\n response.status === 429 ||\n response.status >= 500)\n )\n}\nexport function newRetryState() {\n return {\n transportStatus: TransportStatus.UP,\n lastFailureStatus: 0,\n currentBackoffTime: INITIAL_BACKOFF_TIME,\n bandwidthMonitor: newBandwidthMonitor(),\n queuedPayloads: newPayloadQueue(),\n queueFullReported: false\n }\n}\n\nfunction newPayloadQueue() {\n var queue = []\n return {\n bytesCount: 0,\n enqueue: function (payload) {\n if (this.isFull()) {\n return\n }\n queue.push(payload)\n this.bytesCount += payload.bytesCount\n },\n first: function () {\n return queue[0]\n },\n dequeue: function () {\n var payload = queue.shift()\n if (payload) {\n this.bytesCount -= payload.bytesCount\n }\n return payload\n },\n size: function () {\n return queue.length\n },\n isFull: function () {\n return this.bytesCount >= MAX_QUEUE_BYTES_COUNT\n }\n }\n}\n\nfunction newBandwidthMonitor() {\n return {\n ongoingRequestCount: 0,\n ongoingByteCount: 0,\n canHandle: function (payload) {\n return (\n this.ongoingRequestCount === 0 ||\n (this.ongoingByteCount + payload.bytesCount <=\n MAX_ONGOING_BYTES_COUNT &&\n this.ongoingRequestCount < MAX_ONGOING_REQUESTS)\n )\n },\n add: function (payload) {\n this.ongoingRequestCount += 1\n this.ongoingByteCount += payload.bytesCount\n },\n remove: function (payload) {\n this.ongoingRequestCount -= 1\n this.ongoingByteCount -= payload.bytesCount\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"sendWithRetryStrategy.js","names":["_tools","require","_byteUtils","_errorTools","_timer","MAX_ONGOING_BYTES_COUNT","ONE_KIBI_BYTE","exports","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","ONE_MEBI_BYTE","MAX_BACKOFF_TIME","ONE_SECOND","INITIAL_BACKOFF_TIME","TransportStatus","UP","FAILURE_DETECTED","DOWN","RetryReason","AFTER_SUCCESS","AFTER_RESUME","sendWithRetryStrategy","payload","state","sendStrategy","endpointUrl","reportError","transportStatus","queuedPayloads","size","bandwidthMonitor","canHandle","send","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","setTimeout","first","dequeue","currentBackoffTime","Math","min","responseData","add","response","remove","shouldRetryRequest","ongoingRequestCount","retry","count","lastFailureStatus","status","reason","isFull","queueFullReported","message","source","ErrorSource","AGENT","startClocks","clocksNow","previousQueue","newPayloadQueue","retryMaxSize","type","navigator","onLine","newRetryState","newBandwidthMonitor","queue","bytesCount","push","shift","length","ongoingByteCount"],"sources":["../../src/transport/sendWithRetryStrategy.js"],"sourcesContent":["import { clocksNow, ONE_SECOND } from '../helper/tools'\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { ErrorSource } from '../helper/errorTools'\nimport { setTimeout } from '../helper/timer'\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE\nexport var MAX_ONGOING_REQUESTS = 32\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE\nexport var MAX_BACKOFF_TIME = 256 * ONE_SECOND\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND\n\nvar TransportStatus = {\n UP: 0,\n FAILURE_DETECTED: 1,\n DOWN: 2\n}\n\nvar RetryReason = {\n AFTER_SUCCESS: 0,\n AFTER_RESUME: 1\n}\n\nexport function sendWithRetryStrategy(\n payload,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n state.transportStatus === TransportStatus.UP &&\n state.queuedPayloads.size() === 0 &&\n state.bandwidthMonitor.canHandle(payload)\n ) {\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n return retryQueuedPayloads(\n RetryReason.AFTER_SUCCESS,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.queuedPayloads.enqueue(payload)\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n } else {\n state.queuedPayloads.enqueue(payload)\n }\n}\n\nfunction scheduleRetry(state, sendStrategy, endpointUrl, reportError) {\n if (state.transportStatus !== TransportStatus.DOWN) {\n return\n }\n setTimeout(function () {\n var payload = state.queuedPayloads.first()\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n state.queuedPayloads.dequeue()\n\n state.currentBackoffTime = INITIAL_BACKOFF_TIME\n retryQueuedPayloads(\n RetryReason.AFTER_RESUME,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.currentBackoffTime = Math.min(\n MAX_BACKOFF_TIME,\n state.currentBackoffTime * 2\n )\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n }, state.currentBackoffTime)\n}\n\nfunction send(payload, state, sendStrategy, responseData) {\n var onSuccess = responseData.onSuccess\n var onFailure = responseData.onFailure\n state.bandwidthMonitor.add(payload)\n sendStrategy(payload, function (response) {\n state.bandwidthMonitor.remove(payload)\n if (!shouldRetryRequest(response, state, payload)) {\n state.transportStatus = TransportStatus.UP\n onSuccess()\n } else {\n // do not consider transport down if another ongoing request could succeed\n state.transportStatus =\n state.bandwidthMonitor.ongoingRequestCount > 0\n ? TransportStatus.FAILURE_DETECTED\n : TransportStatus.DOWN\n payload.retry = {\n count: payload.retry ? payload.retry.count + 1 : 1,\n lastFailureStatus: response.status\n }\n onFailure()\n }\n })\n}\n\nfunction retryQueuedPayloads(\n reason,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n reason === RetryReason.AFTER_SUCCESS &&\n state.queuedPayloads.isFull() &&\n !state.queueFullReported\n ) {\n reportError({\n message:\n 'Reached max ' +\n endpointUrl +\n ' events size queued for upload: ' +\n MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE +\n 'MiB',\n source: ErrorSource.AGENT,\n startClocks: clocksNow()\n })\n state.queueFullReported = true\n }\n var previousQueue = state.queuedPayloads\n state.queuedPayloads = newPayloadQueue()\n while (previousQueue.size() > 0) {\n sendWithRetryStrategy(\n previousQueue.dequeue(),\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n }\n}\n\nfunction shouldRetryRequest(response, state, payload) {\n if (\n state.retryMaxSize > -1 &&\n payload.retry &&\n payload.retry.count > state.retryMaxSize\n )\n return false\n return (\n response.type !== 'opaque' &&\n ((response.status === 0 && !navigator.onLine) ||\n response.status === 408 ||\n response.status === 429 ||\n response.status >= 500)\n )\n}\nexport function newRetryState(retryMaxSize) {\n return {\n transportStatus: TransportStatus.UP,\n currentBackoffTime: INITIAL_BACKOFF_TIME,\n bandwidthMonitor: newBandwidthMonitor(),\n queuedPayloads: newPayloadQueue(),\n queueFullReported: false,\n retryMaxSize: retryMaxSize\n }\n}\n\nfunction newPayloadQueue() {\n var queue = []\n return {\n bytesCount: 0,\n enqueue: function (payload) {\n if (this.isFull()) {\n return\n }\n queue.push(payload)\n this.bytesCount += payload.bytesCount\n },\n first: function () {\n return queue[0]\n },\n dequeue: function () {\n var payload = queue.shift()\n if (payload) {\n this.bytesCount -= payload.bytesCount\n }\n return payload\n },\n size: function () {\n return queue.length\n },\n isFull: function () {\n return this.bytesCount >= MAX_QUEUE_BYTES_COUNT\n }\n }\n}\n\nfunction newBandwidthMonitor() {\n return {\n ongoingRequestCount: 0,\n ongoingByteCount: 0,\n canHandle: function (payload) {\n return (\n this.ongoingRequestCount === 0 ||\n (this.ongoingByteCount + payload.bytesCount <=\n MAX_ONGOING_BYTES_COUNT &&\n this.ongoingRequestCount < MAX_ONGOING_REQUESTS)\n )\n },\n add: function (payload) {\n this.ongoingRequestCount += 1\n this.ongoingByteCount += payload.bytesCount\n },\n remove: function (payload) {\n this.ongoingRequestCount -= 1\n this.ongoingByteCount -= payload.bytesCount\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,7 +15,7 @@ function startBatchWithReplica(configuration, primary, reportError, pageExitObse
|
|
|
15
15
|
function createBatchFromConfig(configuration, batchConfiguration) {
|
|
16
16
|
return batchFactoryImp({
|
|
17
17
|
encoder: batchConfiguration.encoder,
|
|
18
|
-
request: (0, _httpRequest.createHttpRequest)(batchConfiguration.endpoint, configuration.batchBytesLimit, reportError),
|
|
18
|
+
request: (0, _httpRequest.createHttpRequest)(batchConfiguration.endpoint, configuration.batchBytesLimit, configuration.retryMaxSize, reportError),
|
|
19
19
|
flushController: (0, _flushController.createFlushController)({
|
|
20
20
|
messagesLimit: configuration.batchMessagesLimit,
|
|
21
21
|
bytesLimit: configuration.batchBytesLimit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startBatchWithReplica.js","names":["_batch","require","_httpRequest","_flushController","startBatchWithReplica","configuration","primary","reportError","pageExitObservable","sessionExpireObservable","batchFactoryImp","undefined","createBatch","primaryBatch","createBatchFromConfig","batchConfiguration","encoder","request","createHttpRequest","endpoint","batchBytesLimit","flushController","createFlushController","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","sendContentTypeByJson","flushObservable","add","message","upsert","key","stop"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { createBatch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n primary,\n reportError,\n pageExitObservable,\n sessionExpireObservable,\n batchFactoryImp\n) {\n if (batchFactoryImp === undefined) {\n batchFactoryImp = createBatch\n }\n var primaryBatch = createBatchFromConfig(configuration, primary)\n\n function createBatchFromConfig(configuration, batchConfiguration) {\n return batchFactoryImp({\n encoder: batchConfiguration.encoder,\n request: createHttpRequest(\n batchConfiguration.endpoint,\n configuration.batchBytesLimit,\n reportError\n ),\n flushController: createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n messageBytesLimit: configuration.messageBytesLimit,\n sendContentTypeByJson: configuration.sendContentTypeByJson\n })\n }\n return {\n flushObservable: primaryBatch.flushController.flushObservable,\n add: function (message) {\n primaryBatch.add(message)\n },\n upsert: function (message, key) {\n primaryBatch.upsert(message, key)\n },\n\n stop: function () {\n primaryBatch.stop()\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACO,SAASG,qBAAqBA,CACnCC,aAAa,EACbC,OAAO,EACPC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvBC,eAAe,EACf;EACA,IAAIA,eAAe,KAAKC,SAAS,EAAE;IACjCD,eAAe,GAAGE,kBAAW;EAC/B;EACA,IAAIC,YAAY,GAAGC,qBAAqB,CAACT,aAAa,EAAEC,OAAO,CAAC;EAEhE,SAASQ,qBAAqBA,CAACT,aAAa,EAAEU,kBAAkB,EAAE;IAChE,OAAOL,eAAe,CAAC;MACrBM,OAAO,EAAED,kBAAkB,CAACC,OAAO;MACnCC,OAAO,EAAE,IAAAC,8BAAiB,EACxBH,kBAAkB,CAACI,QAAQ,EAC3Bd,aAAa,CAACe,eAAe,
|
|
1
|
+
{"version":3,"file":"startBatchWithReplica.js","names":["_batch","require","_httpRequest","_flushController","startBatchWithReplica","configuration","primary","reportError","pageExitObservable","sessionExpireObservable","batchFactoryImp","undefined","createBatch","primaryBatch","createBatchFromConfig","batchConfiguration","encoder","request","createHttpRequest","endpoint","batchBytesLimit","retryMaxSize","flushController","createFlushController","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","sendContentTypeByJson","flushObservable","add","message","upsert","key","stop"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { createBatch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n primary,\n reportError,\n pageExitObservable,\n sessionExpireObservable,\n batchFactoryImp\n) {\n if (batchFactoryImp === undefined) {\n batchFactoryImp = createBatch\n }\n var primaryBatch = createBatchFromConfig(configuration, primary)\n\n function createBatchFromConfig(configuration, batchConfiguration) {\n return batchFactoryImp({\n encoder: batchConfiguration.encoder,\n request: createHttpRequest(\n batchConfiguration.endpoint,\n configuration.batchBytesLimit,\n configuration.retryMaxSize,\n reportError\n ),\n flushController: createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n messageBytesLimit: configuration.messageBytesLimit,\n sendContentTypeByJson: configuration.sendContentTypeByJson\n })\n }\n return {\n flushObservable: primaryBatch.flushController.flushObservable,\n add: function (message) {\n primaryBatch.add(message)\n },\n upsert: function (message, key) {\n primaryBatch.upsert(message, key)\n },\n\n stop: function () {\n primaryBatch.stop()\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACO,SAASG,qBAAqBA,CACnCC,aAAa,EACbC,OAAO,EACPC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvBC,eAAe,EACf;EACA,IAAIA,eAAe,KAAKC,SAAS,EAAE;IACjCD,eAAe,GAAGE,kBAAW;EAC/B;EACA,IAAIC,YAAY,GAAGC,qBAAqB,CAACT,aAAa,EAAEC,OAAO,CAAC;EAEhE,SAASQ,qBAAqBA,CAACT,aAAa,EAAEU,kBAAkB,EAAE;IAChE,OAAOL,eAAe,CAAC;MACrBM,OAAO,EAAED,kBAAkB,CAACC,OAAO;MACnCC,OAAO,EAAE,IAAAC,8BAAiB,EACxBH,kBAAkB,CAACI,QAAQ,EAC3Bd,aAAa,CAACe,eAAe,EAC7Bf,aAAa,CAACgB,YAAY,EAC1Bd,WACF,CAAC;MACDe,eAAe,EAAE,IAAAC,sCAAqB,EAAC;QACrCC,aAAa,EAAEnB,aAAa,CAACoB,kBAAkB;QAC/CC,UAAU,EAAErB,aAAa,CAACe,eAAe;QACzCO,aAAa,EAAEtB,aAAa,CAACuB,YAAY;QACzCpB,kBAAkB,EAAEA,kBAAkB;QACtCC,uBAAuB,EAAEA;MAC3B,CAAC,CAAC;MACFoB,iBAAiB,EAAExB,aAAa,CAACwB,iBAAiB;MAClDC,qBAAqB,EAAEzB,aAAa,CAACyB;IACvC,CAAC,CAAC;EACJ;EACA,OAAO;IACLC,eAAe,EAAElB,YAAY,CAACS,eAAe,CAACS,eAAe;IAC7DC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBpB,YAAY,CAACmB,GAAG,CAACC,OAAO,CAAC;IAC3B,CAAC;IACDC,MAAM,EAAE,SAAAA,OAAUD,OAAO,EAAEE,GAAG,EAAE;MAC9BtB,YAAY,CAACqB,MAAM,CAACD,OAAO,EAAEE,GAAG,CAAC;IACnC,CAAC;IAEDC,IAAI,EAAE,SAAAA,KAAA,EAAY;MAChBvB,YAAY,CAACuB,IAAI,CAAC,CAAC;IACrB;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -22,7 +22,7 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
22
22
|
display.error('Telemetry Sample Rate should be a number between 0 and 100');
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
var sessionSampleRate = initConfiguration.sessionSampleRate
|
|
25
|
+
var sessionSampleRate = isNullUndefinedDefaultValue(initConfiguration.sessionSampleRate, initConfiguration.sampleRate);
|
|
26
26
|
return assign({
|
|
27
27
|
beforeSend: initConfiguration.beforeSend && catchUserErrors(initConfiguration.beforeSend, 'beforeSend threw an error:'),
|
|
28
28
|
sessionStoreStrategyType: selectSessionStoreStrategyType(initConfiguration),
|
|
@@ -54,7 +54,8 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
54
54
|
storeContextsToLocal: !!initConfiguration.storeContextsToLocal,
|
|
55
55
|
// 存储到localstorage key ,默认不填,自动生成
|
|
56
56
|
storeContextsKey: initConfiguration.storeContextsKey,
|
|
57
|
-
sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson
|
|
57
|
+
sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson,
|
|
58
|
+
retryMaxSize: isNullUndefinedDefaultValue(initConfiguration.retryMaxSize, -1)
|
|
58
59
|
}, computeTransportConfiguration(initConfiguration));
|
|
59
60
|
}
|
|
60
61
|
export function validatePostRequestRequireParamsConfiguration(initConfiguration) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","names":["catchUserErrors","display","assign","isPercentage","ONE_SECOND","isNullUndefinedDefaultValue","ONE_KIBI_BYTE","computeTransportConfiguration","selectSessionStoreStrategyType","DefaultPrivacyLevel","ALLOW","MASK","MASK_USER_INPUT","validateAndBuildConfiguration","initConfiguration","sampleRate","undefined","error","sessionSampleRate","telemetrySampleRate","beforeSend","sessionStoreStrategyType","service","version","env","telemetryEnabled","silentMultipleInit","batchBytesLimit","eventRateLimiterThreshold","maxTelemetryEventsPerPage","flushTimeout","batchMessagesLimit","messageBytesLimit","resourceUrlLimit","storeContextsToLocal","storeContextsKey","sendContentTypeByJson","validatePostRequestRequireParamsConfiguration","site","datakitOrigin","datakitUrl","clientToken"],"sources":["../../src/configuration/configuration.js"],"sourcesContent":["import { catchUserErrors } from '../helper/catchUserErrors'\nimport { display } from '../helper/display'\nimport {\n assign,\n isPercentage,\n ONE_SECOND,\n isNullUndefinedDefaultValue\n} from '../helper/tools'\nimport { ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { computeTransportConfiguration } from './transportConfiguration'\nimport { selectSessionStoreStrategyType } from '../session/sessionStore'\nexport var DefaultPrivacyLevel = {\n ALLOW: 'allow',\n MASK: 'mask',\n MASK_USER_INPUT: 'mask-user-input'\n}\nexport function validateAndBuildConfiguration(initConfiguration) {\n if (\n initConfiguration.sampleRate !== undefined &&\n !isPercentage(initConfiguration.sampleRate)\n ) {\n display.error('Sample Rate should be a number between 0 and 100')\n return\n }\n if (\n initConfiguration.sessionSampleRate !== undefined &&\n !isPercentage(initConfiguration.sessionSampleRate)\n ) {\n display.error('Sample Rate should be a number between 0 and 100')\n return\n }\n if (\n initConfiguration.telemetrySampleRate !== undefined &&\n !isPercentage(initConfiguration.telemetrySampleRate)\n ) {\n display.error('Telemetry Sample Rate should be a number between 0 and 100')\n return\n }\n var sessionSampleRate
|
|
1
|
+
{"version":3,"file":"configuration.js","names":["catchUserErrors","display","assign","isPercentage","ONE_SECOND","isNullUndefinedDefaultValue","ONE_KIBI_BYTE","computeTransportConfiguration","selectSessionStoreStrategyType","DefaultPrivacyLevel","ALLOW","MASK","MASK_USER_INPUT","validateAndBuildConfiguration","initConfiguration","sampleRate","undefined","error","sessionSampleRate","telemetrySampleRate","beforeSend","sessionStoreStrategyType","service","version","env","telemetryEnabled","silentMultipleInit","batchBytesLimit","eventRateLimiterThreshold","maxTelemetryEventsPerPage","flushTimeout","batchMessagesLimit","messageBytesLimit","resourceUrlLimit","storeContextsToLocal","storeContextsKey","sendContentTypeByJson","retryMaxSize","validatePostRequestRequireParamsConfiguration","site","datakitOrigin","datakitUrl","clientToken"],"sources":["../../src/configuration/configuration.js"],"sourcesContent":["import { catchUserErrors } from '../helper/catchUserErrors'\nimport { display } from '../helper/display'\nimport {\n assign,\n isPercentage,\n ONE_SECOND,\n isNullUndefinedDefaultValue\n} from '../helper/tools'\nimport { ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { computeTransportConfiguration } from './transportConfiguration'\nimport { selectSessionStoreStrategyType } from '../session/sessionStore'\nexport var DefaultPrivacyLevel = {\n ALLOW: 'allow',\n MASK: 'mask',\n MASK_USER_INPUT: 'mask-user-input'\n}\nexport function validateAndBuildConfiguration(initConfiguration) {\n if (\n initConfiguration.sampleRate !== undefined &&\n !isPercentage(initConfiguration.sampleRate)\n ) {\n display.error('Sample Rate should be a number between 0 and 100')\n return\n }\n if (\n initConfiguration.sessionSampleRate !== undefined &&\n !isPercentage(initConfiguration.sessionSampleRate)\n ) {\n display.error('Sample Rate should be a number between 0 and 100')\n return\n }\n if (\n initConfiguration.telemetrySampleRate !== undefined &&\n !isPercentage(initConfiguration.telemetrySampleRate)\n ) {\n display.error('Telemetry Sample Rate should be a number between 0 and 100')\n return\n }\n\n var sessionSampleRate = isNullUndefinedDefaultValue(\n initConfiguration.sessionSampleRate,\n initConfiguration.sampleRate\n )\n return assign(\n {\n beforeSend:\n initConfiguration.beforeSend &&\n catchUserErrors(\n initConfiguration.beforeSend,\n 'beforeSend threw an error:'\n ),\n sessionStoreStrategyType:\n selectSessionStoreStrategyType(initConfiguration),\n sessionSampleRate: isNullUndefinedDefaultValue(sessionSampleRate, 100),\n service: initConfiguration.service,\n version: initConfiguration.version,\n env: initConfiguration.env,\n telemetrySampleRate: isNullUndefinedDefaultValue(\n initConfiguration.telemetrySampleRate,\n 100\n ),\n telemetryEnabled: isNullUndefinedDefaultValue(\n initConfiguration.telemetryEnabled,\n false\n ),\n silentMultipleInit: !!initConfiguration.silentMultipleInit,\n\n /**\n * beacon payload max queue size implementation is 64kb\n * ensure that we leave room for logs, rum and potential other users\n */\n batchBytesLimit: 16 * ONE_KIBI_BYTE,\n\n eventRateLimiterThreshold: 3000,\n maxTelemetryEventsPerPage: 15,\n\n /**\n * flush automatically, aim to be lower than ALB connection timeout\n * to maximize connection reuse.\n */\n flushTimeout: 30 * ONE_SECOND,\n\n /**\n * Logs intake limit\n */\n batchMessagesLimit: 50,\n messageBytesLimit: 256 * ONE_KIBI_BYTE,\n resourceUrlLimit: 5 * ONE_KIBI_BYTE,\n storeContextsToLocal: !!initConfiguration.storeContextsToLocal,\n // 存储到localstorage key ,默认不填,自动生成\n storeContextsKey: initConfiguration.storeContextsKey,\n sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson,\n retryMaxSize: isNullUndefinedDefaultValue(\n initConfiguration.retryMaxSize,\n -1\n )\n },\n computeTransportConfiguration(initConfiguration)\n )\n}\nexport function validatePostRequestRequireParamsConfiguration(\n initConfiguration\n) {\n if (\n !initConfiguration.site &&\n !initConfiguration.datakitOrigin &&\n !initConfiguration.datakitUrl\n ) {\n display.error(\n 'datakitOrigin or site is not configured, no RUM data will be collected.'\n )\n return false\n }\n // if (!initConfiguration.datakitUrl && !initConfiguration.datakitOrigin) {\n // display.error(\n // 'datakitOrigin is not configured, no RUM data will be collected.'\n // )\n // return false\n // }\n if (initConfiguration.site && !initConfiguration.clientToken) {\n display.error(\n 'clientToken is not configured, no RUM data will be collected.'\n )\n return false\n }\n return true\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -31,7 +31,6 @@ export function startSessionManager(configuration, productKey, computeSessionSta
|
|
|
31
31
|
sessionContextHistory.closeActive(relativeNow());
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
// We expand/renew session unconditionally as tracking consent is always granted when the session
|
|
35
34
|
// manager is started.
|
|
36
35
|
sessionStore.expandOrRenewSession();
|
|
37
36
|
sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionManagement.js","names":["Observable","createValueHistory","relativeNow","clocksOrigin","ONE_MINUTE","DOM_EVENT","addEventListener","addEventListeners","clearInterval","setInterval","SESSION_TIME_OUT_DELAY","startSessionStore","VISIBILITY_CHECK_DELAY","SESSION_CONTEXT_TIMEOUT_DELAY","stopCallbacks","startSessionManager","configuration","productKey","computeSessionState","renewObservable","expireObservable","sessionStore","sessionStoreStrategyType","push","stop","sessionContextHistory","expireDelay","subscribe","add","buildSessionContext","notify","closeActive","expandOrRenewSession","relative","trackActivity","trackVisibility","expandSession","trackResume","restartSession","id","getSession","trackingType","findSession","startTime","options","find","sessionStateUpdateObservable","expire","updateSessionState","stopSessionManager","forEach","e","_addEventListeners","window","CLICK","TOUCH_START","KEY_DOWN","SCROLL","capture","passive","expandSessionWhenVisible","document","visibilityState","_addEventListener","VISIBILITY_CHANGE","visibilityCheckInterval","cb","_addEventListener2","RESUME"],"sources":["../../src/session/sessionManagement.js"],"sourcesContent":["import { Observable } from '../helper/observable'\nimport { createValueHistory } from '../helper/valueHistory'\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../helper/tools'\nimport { DOM_EVENT } from '../helper/enums'\nimport {\n addEventListener,\n addEventListeners\n} from '../browser/addEventListener'\nimport { clearInterval, setInterval } from '../helper/timer'\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport { startSessionStore } from './sessionStore'\n\nexport const VISIBILITY_CHECK_DELAY = ONE_MINUTE\nconst SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY\nlet stopCallbacks = []\n\nexport function startSessionManager(\n configuration,\n productKey,\n computeSessionState\n) {\n const renewObservable = new Observable()\n const expireObservable = new Observable()\n\n const sessionStore = startSessionStore(\n configuration.sessionStoreStrategyType,\n productKey,\n computeSessionState\n )\n stopCallbacks.push(function () {\n return sessionStore.stop()\n })\n\n const sessionContextHistory = createValueHistory({\n expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY\n })\n stopCallbacks.push(function () {\n return sessionContextHistory.stop()\n })\n\n sessionStore.renewObservable.subscribe(function () {\n sessionContextHistory.add(buildSessionContext(), relativeNow())\n renewObservable.notify()\n })\n sessionStore.expireObservable.subscribe(function () {\n expireObservable.notify()\n sessionContextHistory.closeActive(relativeNow())\n })\n\n //
|
|
1
|
+
{"version":3,"file":"sessionManagement.js","names":["Observable","createValueHistory","relativeNow","clocksOrigin","ONE_MINUTE","DOM_EVENT","addEventListener","addEventListeners","clearInterval","setInterval","SESSION_TIME_OUT_DELAY","startSessionStore","VISIBILITY_CHECK_DELAY","SESSION_CONTEXT_TIMEOUT_DELAY","stopCallbacks","startSessionManager","configuration","productKey","computeSessionState","renewObservable","expireObservable","sessionStore","sessionStoreStrategyType","push","stop","sessionContextHistory","expireDelay","subscribe","add","buildSessionContext","notify","closeActive","expandOrRenewSession","relative","trackActivity","trackVisibility","expandSession","trackResume","restartSession","id","getSession","trackingType","findSession","startTime","options","find","sessionStateUpdateObservable","expire","updateSessionState","stopSessionManager","forEach","e","_addEventListeners","window","CLICK","TOUCH_START","KEY_DOWN","SCROLL","capture","passive","expandSessionWhenVisible","document","visibilityState","_addEventListener","VISIBILITY_CHANGE","visibilityCheckInterval","cb","_addEventListener2","RESUME"],"sources":["../../src/session/sessionManagement.js"],"sourcesContent":["import { Observable } from '../helper/observable'\nimport { createValueHistory } from '../helper/valueHistory'\nimport { relativeNow, clocksOrigin, ONE_MINUTE } from '../helper/tools'\nimport { DOM_EVENT } from '../helper/enums'\nimport {\n addEventListener,\n addEventListeners\n} from '../browser/addEventListener'\nimport { clearInterval, setInterval } from '../helper/timer'\nimport { SESSION_TIME_OUT_DELAY } from './sessionConstants'\nimport { startSessionStore } from './sessionStore'\n\nexport const VISIBILITY_CHECK_DELAY = ONE_MINUTE\nconst SESSION_CONTEXT_TIMEOUT_DELAY = SESSION_TIME_OUT_DELAY\nlet stopCallbacks = []\n\nexport function startSessionManager(\n configuration,\n productKey,\n computeSessionState\n) {\n const renewObservable = new Observable()\n const expireObservable = new Observable()\n\n const sessionStore = startSessionStore(\n configuration.sessionStoreStrategyType,\n productKey,\n computeSessionState\n )\n stopCallbacks.push(function () {\n return sessionStore.stop()\n })\n\n const sessionContextHistory = createValueHistory({\n expireDelay: SESSION_CONTEXT_TIMEOUT_DELAY\n })\n stopCallbacks.push(function () {\n return sessionContextHistory.stop()\n })\n\n sessionStore.renewObservable.subscribe(function () {\n sessionContextHistory.add(buildSessionContext(), relativeNow())\n renewObservable.notify()\n })\n sessionStore.expireObservable.subscribe(function () {\n expireObservable.notify()\n sessionContextHistory.closeActive(relativeNow())\n })\n\n // manager is started.\n sessionStore.expandOrRenewSession()\n sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative)\n\n trackActivity(function () {\n sessionStore.expandOrRenewSession()\n })\n trackVisibility(function () {\n return sessionStore.expandSession()\n })\n trackResume(function () {\n sessionStore.restartSession()\n })\n\n function buildSessionContext() {\n return {\n id: sessionStore.getSession().id,\n trackingType: sessionStore.getSession()[productKey]\n }\n }\n\n return {\n findSession: function (startTime, options) {\n return sessionContextHistory.find(startTime, options)\n },\n renewObservable,\n expireObservable,\n sessionStateUpdateObservable: sessionStore.sessionStateUpdateObservable,\n expire: sessionStore.expire,\n updateSessionState: sessionStore.updateSessionState\n }\n}\n\nexport function stopSessionManager() {\n stopCallbacks.forEach(function (e) {\n e()\n })\n stopCallbacks = []\n}\n\nfunction trackActivity(expandOrRenewSession) {\n const { stop } = addEventListeners(\n window,\n [\n DOM_EVENT.CLICK,\n DOM_EVENT.TOUCH_START,\n DOM_EVENT.KEY_DOWN,\n DOM_EVENT.SCROLL\n ],\n expandOrRenewSession,\n { capture: true, passive: true }\n )\n stopCallbacks.push(stop)\n}\n\nfunction trackVisibility(expandSession) {\n const expandSessionWhenVisible = function () {\n if (document.visibilityState === 'visible') {\n expandSession()\n }\n }\n\n const { stop } = addEventListener(\n document,\n DOM_EVENT.VISIBILITY_CHANGE,\n expandSessionWhenVisible\n )\n stopCallbacks.push(stop)\n\n const visibilityCheckInterval = setInterval(\n expandSessionWhenVisible,\n VISIBILITY_CHECK_DELAY\n )\n stopCallbacks.push(function () {\n clearInterval(visibilityCheckInterval)\n })\n}\n\nfunction trackResume(cb) {\n const { stop } = addEventListener(window, DOM_EVENT.RESUME, cb, {\n capture: true\n })\n stopCallbacks.push(stop)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,8 +18,11 @@ function addBatchPrecision(url, encoding) {
|
|
|
18
18
|
}
|
|
19
19
|
return url;
|
|
20
20
|
}
|
|
21
|
-
export function createHttpRequest(endpointUrl, bytesLimit, reportError) {
|
|
22
|
-
|
|
21
|
+
export function createHttpRequest(endpointUrl, bytesLimit, retryMaxSize, reportError) {
|
|
22
|
+
if (retryMaxSize === undefined) {
|
|
23
|
+
retryMaxSize = -1;
|
|
24
|
+
}
|
|
25
|
+
var retryState = newRetryState(retryMaxSize);
|
|
23
26
|
var sendStrategyForRetry = function sendStrategyForRetry(payload, onResponse) {
|
|
24
27
|
return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse);
|
|
25
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addTelemetryError","addBatchPrecision","url","encoding","indexOf","createHttpRequest","endpointUrl","bytesLimit","reportError","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","type","Blob","isQueued","e","reportBeaconError","sendXHR","hasReportedBeaconError","canUseKeepAlive","isKeepAliveSupported","fetchOption","method","body","keepalive","mode","headers","fetch","then","response","status","window","Request","_unused","request","XMLHttpRequest","open","setRequestHeader","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\nimport { addTelemetryError } from '../telemetry/telemetry'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url, encoding) {\n if (!url) return url\n url = url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n if (encoding) {\n url = url + '&encoding=' + encoding\n }\n return url\n}\nexport function createHttpRequest(endpointUrl
|
|
1
|
+
{"version":3,"file":"httpRequest.js","names":["newRetryState","sendWithRetryStrategy","addEventListener","monitor","addTelemetryError","addBatchPrecision","url","encoding","indexOf","createHttpRequest","endpointUrl","bytesLimit","retryMaxSize","reportError","undefined","retryState","sendStrategyForRetry","payload","onResponse","fetchKeepAliveStrategy","send","sendOnExit","sendBeaconStrategy","data","bytesCount","canUseBeacon","navigator","sendBeacon","beaconData","type","Blob","isQueued","e","reportBeaconError","sendXHR","hasReportedBeaconError","canUseKeepAlive","isKeepAliveSupported","fetchOption","method","body","keepalive","mode","headers","fetch","then","response","status","window","Request","_unused","request","XMLHttpRequest","open","setRequestHeader","once"],"sources":["../../src/transport/httpRequest.js"],"sourcesContent":["import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy'\nimport { addEventListener } from '../browser/addEventListener'\nimport { monitor } from '../helper/monitor'\nimport { addTelemetryError } from '../telemetry/telemetry'\n/**\n * Use POST request without content type to:\n * - avoid CORS preflight requests\n * - allow usage of sendBeacon\n *\n * multiple elements are sent separated by \\n in order\n * to be parsed correctly without content type header\n */\nfunction addBatchPrecision(url, encoding) {\n if (!url) return url\n url = url + (url.indexOf('?') === -1 ? '?' : '&') + 'precision=ms'\n if (encoding) {\n url = url + '&encoding=' + encoding\n }\n return url\n}\nexport function createHttpRequest(\n endpointUrl,\n bytesLimit,\n retryMaxSize,\n reportError\n) {\n if (retryMaxSize === undefined) {\n retryMaxSize = -1\n }\n var retryState = newRetryState(retryMaxSize)\n var sendStrategyForRetry = function (payload, onResponse) {\n return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)\n }\n\n return {\n send: function (payload) {\n sendWithRetryStrategy(\n payload,\n retryState,\n sendStrategyForRetry,\n endpointUrl,\n reportError\n )\n },\n /**\n * Since fetch keepalive behaves like regular fetch on Firefox,\n * keep using sendBeaconStrategy on exit\n */\n sendOnExit: function (payload) {\n sendBeaconStrategy(endpointUrl, bytesLimit, payload)\n }\n }\n}\n\nfunction sendBeaconStrategy(endpointUrl, bytesLimit, payload) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl, payload.encoding)\n var canUseBeacon = !!navigator.sendBeacon && bytesCount < bytesLimit\n if (canUseBeacon) {\n try {\n var beaconData\n if (payload.type) {\n beaconData = new Blob([data], {\n type: payload.type\n })\n } else {\n beaconData = data\n }\n\n var isQueued = navigator.sendBeacon(url, beaconData)\n\n if (isQueued) {\n return\n }\n } catch (e) {\n reportBeaconError(e)\n }\n }\n sendXHR(url, payload)\n}\nvar hasReportedBeaconError = false\n\nfunction reportBeaconError(e) {\n if (!hasReportedBeaconError) {\n hasReportedBeaconError = true\n addTelemetryError(e)\n }\n}\nexport function fetchKeepAliveStrategy(\n endpointUrl,\n bytesLimit,\n payload,\n onResponse\n) {\n var data = payload.data\n var bytesCount = payload.bytesCount\n var url = addBatchPrecision(endpointUrl, payload.encoding)\n var canUseKeepAlive = isKeepAliveSupported() && bytesCount < bytesLimit\n if (canUseKeepAlive) {\n var fetchOption = {\n method: 'POST',\n body: data,\n keepalive: true,\n mode: 'cors'\n }\n if (payload.type) {\n fetchOption.headers = {\n 'Content-Type': payload.type\n }\n }\n fetch(url, fetchOption).then(\n monitor(function (response) {\n if (typeof onResponse === 'function') {\n onResponse({ status: response.status, type: response.type })\n }\n }),\n monitor(function () {\n // failed to queue the request\n sendXHR(url, payload, onResponse)\n })\n )\n } else {\n sendXHR(url, payload, onResponse)\n }\n}\n\nfunction isKeepAliveSupported() {\n // Request can throw, cf https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#errors\n try {\n return window.Request && 'keepalive' in new Request('http://a')\n } catch {\n return false\n }\n}\n\nfunction sendXHR(url, payload, onResponse) {\n const data = payload.data\n const request = new XMLHttpRequest()\n request.open('POST', url, true)\n if (data instanceof Blob) {\n request.setRequestHeader('Content-Type', data.type)\n } else if (payload.type) {\n request.setRequestHeader('Content-Type', payload.type)\n }\n\n addEventListener(\n request,\n 'loadend',\n function () {\n if (typeof onResponse === 'function') {\n onResponse({ status: request.status })\n }\n },\n {\n once: true\n }\n )\n request.send(data)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -56,13 +56,16 @@ function send(payload, state, sendStrategy, responseData) {
|
|
|
56
56
|
state.bandwidthMonitor.add(payload);
|
|
57
57
|
sendStrategy(payload, function (response) {
|
|
58
58
|
state.bandwidthMonitor.remove(payload);
|
|
59
|
-
if (!shouldRetryRequest(response)) {
|
|
59
|
+
if (!shouldRetryRequest(response, state, payload)) {
|
|
60
60
|
state.transportStatus = TransportStatus.UP;
|
|
61
61
|
onSuccess();
|
|
62
62
|
} else {
|
|
63
63
|
// do not consider transport down if another ongoing request could succeed
|
|
64
64
|
state.transportStatus = state.bandwidthMonitor.ongoingRequestCount > 0 ? TransportStatus.FAILURE_DETECTED : TransportStatus.DOWN;
|
|
65
|
-
|
|
65
|
+
payload.retry = {
|
|
66
|
+
count: payload.retry ? payload.retry.count + 1 : 1,
|
|
67
|
+
lastFailureStatus: response.status
|
|
68
|
+
};
|
|
66
69
|
onFailure();
|
|
67
70
|
}
|
|
68
71
|
});
|
|
@@ -82,17 +85,18 @@ function retryQueuedPayloads(reason, state, sendStrategy, endpointUrl, reportErr
|
|
|
82
85
|
sendWithRetryStrategy(previousQueue.dequeue(), state, sendStrategy, endpointUrl, reportError);
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
|
-
function shouldRetryRequest(response) {
|
|
88
|
+
function shouldRetryRequest(response, state, payload) {
|
|
89
|
+
if (state.retryMaxSize > -1 && payload.retry && payload.retry.count > state.retryMaxSize) return false;
|
|
86
90
|
return response.type !== 'opaque' && (response.status === 0 && !navigator.onLine || response.status === 408 || response.status === 429 || response.status >= 500);
|
|
87
91
|
}
|
|
88
|
-
export function newRetryState() {
|
|
92
|
+
export function newRetryState(retryMaxSize) {
|
|
89
93
|
return {
|
|
90
94
|
transportStatus: TransportStatus.UP,
|
|
91
|
-
lastFailureStatus: 0,
|
|
92
95
|
currentBackoffTime: INITIAL_BACKOFF_TIME,
|
|
93
96
|
bandwidthMonitor: newBandwidthMonitor(),
|
|
94
97
|
queuedPayloads: newPayloadQueue(),
|
|
95
|
-
queueFullReported: false
|
|
98
|
+
queueFullReported: false,
|
|
99
|
+
retryMaxSize: retryMaxSize
|
|
96
100
|
};
|
|
97
101
|
}
|
|
98
102
|
function newPayloadQueue() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWithRetryStrategy.js","names":["clocksNow","ONE_SECOND","ONE_MEBI_BYTE","ONE_KIBI_BYTE","ErrorSource","setTimeout","MAX_ONGOING_BYTES_COUNT","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","MAX_BACKOFF_TIME","INITIAL_BACKOFF_TIME","TransportStatus","UP","FAILURE_DETECTED","DOWN","RetryReason","AFTER_SUCCESS","AFTER_RESUME","sendWithRetryStrategy","payload","state","sendStrategy","endpointUrl","reportError","transportStatus","queuedPayloads","size","bandwidthMonitor","canHandle","send","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","first","dequeue","currentBackoffTime","Math","min","responseData","add","response","remove","shouldRetryRequest","ongoingRequestCount","lastFailureStatus","status","reason","isFull","queueFullReported","message","source","AGENT","startClocks","previousQueue","newPayloadQueue","type","navigator","onLine","newRetryState","newBandwidthMonitor","queue","bytesCount","push","shift","length","ongoingByteCount"],"sources":["../../src/transport/sendWithRetryStrategy.js"],"sourcesContent":["import { clocksNow, ONE_SECOND } from '../helper/tools'\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { ErrorSource } from '../helper/errorTools'\nimport { setTimeout } from '../helper/timer'\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE\nexport var MAX_ONGOING_REQUESTS = 32\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE\nexport var MAX_BACKOFF_TIME = 256 * ONE_SECOND\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND\n\nvar TransportStatus = {\n UP: 0,\n FAILURE_DETECTED: 1,\n DOWN: 2\n}\n\nvar RetryReason = {\n AFTER_SUCCESS: 0,\n AFTER_RESUME: 1\n}\n\nexport function sendWithRetryStrategy(\n payload,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n state.transportStatus === TransportStatus.UP &&\n state.queuedPayloads.size() === 0 &&\n state.bandwidthMonitor.canHandle(payload)\n ) {\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n return retryQueuedPayloads(\n RetryReason.AFTER_SUCCESS,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.queuedPayloads.enqueue(payload)\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n } else {\n state.queuedPayloads.enqueue(payload)\n }\n}\n\nfunction scheduleRetry(state, sendStrategy, endpointUrl, reportError) {\n if (state.transportStatus !== TransportStatus.DOWN) {\n return\n }\n setTimeout(function () {\n var payload = state.queuedPayloads.first()\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n state.queuedPayloads.dequeue()\n\n state.currentBackoffTime = INITIAL_BACKOFF_TIME\n retryQueuedPayloads(\n RetryReason.AFTER_RESUME,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.currentBackoffTime = Math.min(\n MAX_BACKOFF_TIME,\n state.currentBackoffTime * 2\n )\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n }, state.currentBackoffTime)\n}\n\nfunction send(payload, state, sendStrategy, responseData) {\n var onSuccess = responseData.onSuccess\n var onFailure = responseData.onFailure\n state.bandwidthMonitor.add(payload)\n sendStrategy(payload, function (response) {\n state.bandwidthMonitor.remove(payload)\n if (!shouldRetryRequest(response)) {\n state.transportStatus = TransportStatus.UP\n onSuccess()\n } else {\n // do not consider transport down if another ongoing request could succeed\n state.transportStatus =\n state.bandwidthMonitor.ongoingRequestCount > 0\n ? TransportStatus.FAILURE_DETECTED\n : TransportStatus.DOWN\n state.lastFailureStatus = response.status\n onFailure()\n }\n })\n}\n\nfunction retryQueuedPayloads(\n reason,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n reason === RetryReason.AFTER_SUCCESS &&\n state.queuedPayloads.isFull() &&\n !state.queueFullReported\n ) {\n reportError({\n message:\n 'Reached max ' +\n endpointUrl +\n ' events size queued for upload: ' +\n MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE +\n 'MiB',\n source: ErrorSource.AGENT,\n startClocks: clocksNow()\n })\n state.queueFullReported = true\n }\n var previousQueue = state.queuedPayloads\n state.queuedPayloads = newPayloadQueue()\n while (previousQueue.size() > 0) {\n sendWithRetryStrategy(\n previousQueue.dequeue(),\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n }\n}\n\nfunction shouldRetryRequest(response) {\n return (\n response.type !== 'opaque' &&\n ((response.status === 0 && !navigator.onLine) ||\n response.status === 408 ||\n response.status === 429 ||\n response.status >= 500)\n )\n}\nexport function newRetryState() {\n return {\n transportStatus: TransportStatus.UP,\n lastFailureStatus: 0,\n currentBackoffTime: INITIAL_BACKOFF_TIME,\n bandwidthMonitor: newBandwidthMonitor(),\n queuedPayloads: newPayloadQueue(),\n queueFullReported: false\n }\n}\n\nfunction newPayloadQueue() {\n var queue = []\n return {\n bytesCount: 0,\n enqueue: function (payload) {\n if (this.isFull()) {\n return\n }\n queue.push(payload)\n this.bytesCount += payload.bytesCount\n },\n first: function () {\n return queue[0]\n },\n dequeue: function () {\n var payload = queue.shift()\n if (payload) {\n this.bytesCount -= payload.bytesCount\n }\n return payload\n },\n size: function () {\n return queue.length\n },\n isFull: function () {\n return this.bytesCount >= MAX_QUEUE_BYTES_COUNT\n }\n }\n}\n\nfunction newBandwidthMonitor() {\n return {\n ongoingRequestCount: 0,\n ongoingByteCount: 0,\n canHandle: function (payload) {\n return (\n this.ongoingRequestCount === 0 ||\n (this.ongoingByteCount + payload.bytesCount <=\n MAX_ONGOING_BYTES_COUNT &&\n this.ongoingRequestCount < MAX_ONGOING_REQUESTS)\n )\n },\n add: function (payload) {\n this.ongoingRequestCount += 1\n this.ongoingByteCount += payload.bytesCount\n },\n remove: function (payload) {\n this.ongoingRequestCount -= 1\n this.ongoingByteCount -= payload.bytesCount\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"sendWithRetryStrategy.js","names":["clocksNow","ONE_SECOND","ONE_MEBI_BYTE","ONE_KIBI_BYTE","ErrorSource","setTimeout","MAX_ONGOING_BYTES_COUNT","MAX_ONGOING_REQUESTS","MAX_QUEUE_BYTES_COUNT","MAX_BACKOFF_TIME","INITIAL_BACKOFF_TIME","TransportStatus","UP","FAILURE_DETECTED","DOWN","RetryReason","AFTER_SUCCESS","AFTER_RESUME","sendWithRetryStrategy","payload","state","sendStrategy","endpointUrl","reportError","transportStatus","queuedPayloads","size","bandwidthMonitor","canHandle","send","onSuccess","retryQueuedPayloads","onFailure","enqueue","scheduleRetry","first","dequeue","currentBackoffTime","Math","min","responseData","add","response","remove","shouldRetryRequest","ongoingRequestCount","retry","count","lastFailureStatus","status","reason","isFull","queueFullReported","message","source","AGENT","startClocks","previousQueue","newPayloadQueue","retryMaxSize","type","navigator","onLine","newRetryState","newBandwidthMonitor","queue","bytesCount","push","shift","length","ongoingByteCount"],"sources":["../../src/transport/sendWithRetryStrategy.js"],"sourcesContent":["import { clocksNow, ONE_SECOND } from '../helper/tools'\nimport { ONE_MEBI_BYTE, ONE_KIBI_BYTE } from '../helper/byteUtils'\nimport { ErrorSource } from '../helper/errorTools'\nimport { setTimeout } from '../helper/timer'\nexport var MAX_ONGOING_BYTES_COUNT = 80 * ONE_KIBI_BYTE\nexport var MAX_ONGOING_REQUESTS = 32\nexport var MAX_QUEUE_BYTES_COUNT = 3 * ONE_MEBI_BYTE\nexport var MAX_BACKOFF_TIME = 256 * ONE_SECOND\nexport var INITIAL_BACKOFF_TIME = ONE_SECOND\n\nvar TransportStatus = {\n UP: 0,\n FAILURE_DETECTED: 1,\n DOWN: 2\n}\n\nvar RetryReason = {\n AFTER_SUCCESS: 0,\n AFTER_RESUME: 1\n}\n\nexport function sendWithRetryStrategy(\n payload,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n state.transportStatus === TransportStatus.UP &&\n state.queuedPayloads.size() === 0 &&\n state.bandwidthMonitor.canHandle(payload)\n ) {\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n return retryQueuedPayloads(\n RetryReason.AFTER_SUCCESS,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.queuedPayloads.enqueue(payload)\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n } else {\n state.queuedPayloads.enqueue(payload)\n }\n}\n\nfunction scheduleRetry(state, sendStrategy, endpointUrl, reportError) {\n if (state.transportStatus !== TransportStatus.DOWN) {\n return\n }\n setTimeout(function () {\n var payload = state.queuedPayloads.first()\n send(payload, state, sendStrategy, {\n onSuccess: function () {\n state.queuedPayloads.dequeue()\n\n state.currentBackoffTime = INITIAL_BACKOFF_TIME\n retryQueuedPayloads(\n RetryReason.AFTER_RESUME,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n },\n onFailure: function () {\n state.currentBackoffTime = Math.min(\n MAX_BACKOFF_TIME,\n state.currentBackoffTime * 2\n )\n scheduleRetry(state, sendStrategy, endpointUrl, reportError)\n }\n })\n }, state.currentBackoffTime)\n}\n\nfunction send(payload, state, sendStrategy, responseData) {\n var onSuccess = responseData.onSuccess\n var onFailure = responseData.onFailure\n state.bandwidthMonitor.add(payload)\n sendStrategy(payload, function (response) {\n state.bandwidthMonitor.remove(payload)\n if (!shouldRetryRequest(response, state, payload)) {\n state.transportStatus = TransportStatus.UP\n onSuccess()\n } else {\n // do not consider transport down if another ongoing request could succeed\n state.transportStatus =\n state.bandwidthMonitor.ongoingRequestCount > 0\n ? TransportStatus.FAILURE_DETECTED\n : TransportStatus.DOWN\n payload.retry = {\n count: payload.retry ? payload.retry.count + 1 : 1,\n lastFailureStatus: response.status\n }\n onFailure()\n }\n })\n}\n\nfunction retryQueuedPayloads(\n reason,\n state,\n sendStrategy,\n endpointUrl,\n reportError\n) {\n if (\n reason === RetryReason.AFTER_SUCCESS &&\n state.queuedPayloads.isFull() &&\n !state.queueFullReported\n ) {\n reportError({\n message:\n 'Reached max ' +\n endpointUrl +\n ' events size queued for upload: ' +\n MAX_QUEUE_BYTES_COUNT / ONE_MEBI_BYTE +\n 'MiB',\n source: ErrorSource.AGENT,\n startClocks: clocksNow()\n })\n state.queueFullReported = true\n }\n var previousQueue = state.queuedPayloads\n state.queuedPayloads = newPayloadQueue()\n while (previousQueue.size() > 0) {\n sendWithRetryStrategy(\n previousQueue.dequeue(),\n state,\n sendStrategy,\n endpointUrl,\n reportError\n )\n }\n}\n\nfunction shouldRetryRequest(response, state, payload) {\n if (\n state.retryMaxSize > -1 &&\n payload.retry &&\n payload.retry.count > state.retryMaxSize\n )\n return false\n return (\n response.type !== 'opaque' &&\n ((response.status === 0 && !navigator.onLine) ||\n response.status === 408 ||\n response.status === 429 ||\n response.status >= 500)\n )\n}\nexport function newRetryState(retryMaxSize) {\n return {\n transportStatus: TransportStatus.UP,\n currentBackoffTime: INITIAL_BACKOFF_TIME,\n bandwidthMonitor: newBandwidthMonitor(),\n queuedPayloads: newPayloadQueue(),\n queueFullReported: false,\n retryMaxSize: retryMaxSize\n }\n}\n\nfunction newPayloadQueue() {\n var queue = []\n return {\n bytesCount: 0,\n enqueue: function (payload) {\n if (this.isFull()) {\n return\n }\n queue.push(payload)\n this.bytesCount += payload.bytesCount\n },\n first: function () {\n return queue[0]\n },\n dequeue: function () {\n var payload = queue.shift()\n if (payload) {\n this.bytesCount -= payload.bytesCount\n }\n return payload\n },\n size: function () {\n return queue.length\n },\n isFull: function () {\n return this.bytesCount >= MAX_QUEUE_BYTES_COUNT\n }\n }\n}\n\nfunction newBandwidthMonitor() {\n return {\n ongoingRequestCount: 0,\n ongoingByteCount: 0,\n canHandle: function (payload) {\n return (\n this.ongoingRequestCount === 0 ||\n (this.ongoingByteCount + payload.bytesCount <=\n MAX_ONGOING_BYTES_COUNT &&\n this.ongoingRequestCount < MAX_ONGOING_REQUESTS)\n )\n },\n add: function (payload) {\n this.ongoingRequestCount += 1\n this.ongoingByteCount += payload.bytesCount\n },\n remove: function (payload) {\n this.ongoingRequestCount -= 1\n this.ongoingByteCount -= payload.bytesCount\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ export function startBatchWithReplica(configuration, primary, reportError, pageE
|
|
|
9
9
|
function createBatchFromConfig(configuration, batchConfiguration) {
|
|
10
10
|
return batchFactoryImp({
|
|
11
11
|
encoder: batchConfiguration.encoder,
|
|
12
|
-
request: createHttpRequest(batchConfiguration.endpoint, configuration.batchBytesLimit, reportError),
|
|
12
|
+
request: createHttpRequest(batchConfiguration.endpoint, configuration.batchBytesLimit, configuration.retryMaxSize, reportError),
|
|
13
13
|
flushController: createFlushController({
|
|
14
14
|
messagesLimit: configuration.batchMessagesLimit,
|
|
15
15
|
bytesLimit: configuration.batchBytesLimit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startBatchWithReplica.js","names":["createBatch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","primary","reportError","pageExitObservable","sessionExpireObservable","batchFactoryImp","undefined","primaryBatch","createBatchFromConfig","batchConfiguration","encoder","request","endpoint","batchBytesLimit","flushController","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","sendContentTypeByJson","flushObservable","add","message","upsert","key","stop"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { createBatch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n primary,\n reportError,\n pageExitObservable,\n sessionExpireObservable,\n batchFactoryImp\n) {\n if (batchFactoryImp === undefined) {\n batchFactoryImp = createBatch\n }\n var primaryBatch = createBatchFromConfig(configuration, primary)\n\n function createBatchFromConfig(configuration, batchConfiguration) {\n return batchFactoryImp({\n encoder: batchConfiguration.encoder,\n request: createHttpRequest(\n batchConfiguration.endpoint,\n configuration.batchBytesLimit,\n reportError\n ),\n flushController: createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n messageBytesLimit: configuration.messageBytesLimit,\n sendContentTypeByJson: configuration.sendContentTypeByJson\n })\n }\n return {\n flushObservable: primaryBatch.flushController.flushObservable,\n add: function (message) {\n primaryBatch.add(message)\n },\n upsert: function (message, key) {\n primaryBatch.upsert(message, key)\n },\n\n stop: function () {\n primaryBatch.stop()\n }\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,SAAS;AACrC,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,OAAO,EACPC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvBC,eAAe,EACf;EACA,IAAIA,eAAe,KAAKC,SAAS,EAAE;IACjCD,eAAe,GAAGT,WAAW;EAC/B;EACA,IAAIW,YAAY,GAAGC,qBAAqB,CAACR,aAAa,EAAEC,OAAO,CAAC;EAEhE,SAASO,qBAAqBA,CAACR,aAAa,EAAES,kBAAkB,EAAE;IAChE,OAAOJ,eAAe,CAAC;MACrBK,OAAO,EAAED,kBAAkB,CAACC,OAAO;MACnCC,OAAO,EAAEd,iBAAiB,CACxBY,kBAAkB,CAACG,QAAQ,EAC3BZ,aAAa,CAACa,eAAe,
|
|
1
|
+
{"version":3,"file":"startBatchWithReplica.js","names":["createBatch","createHttpRequest","createFlushController","startBatchWithReplica","configuration","primary","reportError","pageExitObservable","sessionExpireObservable","batchFactoryImp","undefined","primaryBatch","createBatchFromConfig","batchConfiguration","encoder","request","endpoint","batchBytesLimit","retryMaxSize","flushController","messagesLimit","batchMessagesLimit","bytesLimit","durationLimit","flushTimeout","messageBytesLimit","sendContentTypeByJson","flushObservable","add","message","upsert","key","stop"],"sources":["../../src/transport/startBatchWithReplica.js"],"sourcesContent":["import { createBatch } from './batch'\nimport { createHttpRequest } from './httpRequest'\nimport { createFlushController } from './flushController'\nexport function startBatchWithReplica(\n configuration,\n primary,\n reportError,\n pageExitObservable,\n sessionExpireObservable,\n batchFactoryImp\n) {\n if (batchFactoryImp === undefined) {\n batchFactoryImp = createBatch\n }\n var primaryBatch = createBatchFromConfig(configuration, primary)\n\n function createBatchFromConfig(configuration, batchConfiguration) {\n return batchFactoryImp({\n encoder: batchConfiguration.encoder,\n request: createHttpRequest(\n batchConfiguration.endpoint,\n configuration.batchBytesLimit,\n configuration.retryMaxSize,\n reportError\n ),\n flushController: createFlushController({\n messagesLimit: configuration.batchMessagesLimit,\n bytesLimit: configuration.batchBytesLimit,\n durationLimit: configuration.flushTimeout,\n pageExitObservable: pageExitObservable,\n sessionExpireObservable: sessionExpireObservable\n }),\n messageBytesLimit: configuration.messageBytesLimit,\n sendContentTypeByJson: configuration.sendContentTypeByJson\n })\n }\n return {\n flushObservable: primaryBatch.flushController.flushObservable,\n add: function (message) {\n primaryBatch.add(message)\n },\n upsert: function (message, key) {\n primaryBatch.upsert(message, key)\n },\n\n stop: function () {\n primaryBatch.stop()\n }\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,SAAS;AACrC,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,OAAO,SAASC,qBAAqBA,CACnCC,aAAa,EACbC,OAAO,EACPC,WAAW,EACXC,kBAAkB,EAClBC,uBAAuB,EACvBC,eAAe,EACf;EACA,IAAIA,eAAe,KAAKC,SAAS,EAAE;IACjCD,eAAe,GAAGT,WAAW;EAC/B;EACA,IAAIW,YAAY,GAAGC,qBAAqB,CAACR,aAAa,EAAEC,OAAO,CAAC;EAEhE,SAASO,qBAAqBA,CAACR,aAAa,EAAES,kBAAkB,EAAE;IAChE,OAAOJ,eAAe,CAAC;MACrBK,OAAO,EAAED,kBAAkB,CAACC,OAAO;MACnCC,OAAO,EAAEd,iBAAiB,CACxBY,kBAAkB,CAACG,QAAQ,EAC3BZ,aAAa,CAACa,eAAe,EAC7Bb,aAAa,CAACc,YAAY,EAC1BZ,WACF,CAAC;MACDa,eAAe,EAAEjB,qBAAqB,CAAC;QACrCkB,aAAa,EAAEhB,aAAa,CAACiB,kBAAkB;QAC/CC,UAAU,EAAElB,aAAa,CAACa,eAAe;QACzCM,aAAa,EAAEnB,aAAa,CAACoB,YAAY;QACzCjB,kBAAkB,EAAEA,kBAAkB;QACtCC,uBAAuB,EAAEA;MAC3B,CAAC,CAAC;MACFiB,iBAAiB,EAAErB,aAAa,CAACqB,iBAAiB;MAClDC,qBAAqB,EAAEtB,aAAa,CAACsB;IACvC,CAAC,CAAC;EACJ;EACA,OAAO;IACLC,eAAe,EAAEhB,YAAY,CAACQ,eAAe,CAACQ,eAAe;IAC7DC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBlB,YAAY,CAACiB,GAAG,CAACC,OAAO,CAAC;IAC3B,CAAC;IACDC,MAAM,EAAE,SAAAA,OAAUD,OAAO,EAAEE,GAAG,EAAE;MAC9BpB,YAAY,CAACmB,MAAM,CAACD,OAAO,EAAEE,GAAG,CAAC;IACnC,CAAC;IAEDC,IAAI,EAAE,SAAAA,KAAA,EAAY;MAChBrB,YAAY,CAACqB,IAAI,CAAC,CAAC;IACrB;EACF,CAAC;AACH","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcare/browser-core",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.8",
|
|
4
4
|
"main": "cjs/index.js",
|
|
5
5
|
"module": "esm/index.js",
|
|
6
6
|
"types": "types/index.d.ts",
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
"author": "dataflux",
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"description": "DataFlux RUM Web 端数据指标监控",
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "b2d302bd182010714e471c9432278e0d50e96f02"
|
|
26
26
|
}
|
|
@@ -36,8 +36,11 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
36
36
|
display.error('Telemetry Sample Rate should be a number between 0 and 100')
|
|
37
37
|
return
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
|
|
40
|
+
var sessionSampleRate = isNullUndefinedDefaultValue(
|
|
41
|
+
initConfiguration.sessionSampleRate,
|
|
42
|
+
initConfiguration.sampleRate
|
|
43
|
+
)
|
|
41
44
|
return assign(
|
|
42
45
|
{
|
|
43
46
|
beforeSend:
|
|
@@ -86,7 +89,11 @@ export function validateAndBuildConfiguration(initConfiguration) {
|
|
|
86
89
|
storeContextsToLocal: !!initConfiguration.storeContextsToLocal,
|
|
87
90
|
// 存储到localstorage key ,默认不填,自动生成
|
|
88
91
|
storeContextsKey: initConfiguration.storeContextsKey,
|
|
89
|
-
sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson
|
|
92
|
+
sendContentTypeByJson: !!initConfiguration.sendContentTypeByJson,
|
|
93
|
+
retryMaxSize: isNullUndefinedDefaultValue(
|
|
94
|
+
initConfiguration.retryMaxSize,
|
|
95
|
+
-1
|
|
96
|
+
)
|
|
90
97
|
},
|
|
91
98
|
computeTransportConfiguration(initConfiguration)
|
|
92
99
|
)
|
|
@@ -47,7 +47,6 @@ export function startSessionManager(
|
|
|
47
47
|
sessionContextHistory.closeActive(relativeNow())
|
|
48
48
|
})
|
|
49
49
|
|
|
50
|
-
// We expand/renew session unconditionally as tracking consent is always granted when the session
|
|
51
50
|
// manager is started.
|
|
52
51
|
sessionStore.expandOrRenewSession()
|
|
53
52
|
sessionContextHistory.add(buildSessionContext(), clocksOrigin().relative)
|
|
@@ -18,8 +18,16 @@ function addBatchPrecision(url, encoding) {
|
|
|
18
18
|
}
|
|
19
19
|
return url
|
|
20
20
|
}
|
|
21
|
-
export function createHttpRequest(
|
|
22
|
-
|
|
21
|
+
export function createHttpRequest(
|
|
22
|
+
endpointUrl,
|
|
23
|
+
bytesLimit,
|
|
24
|
+
retryMaxSize,
|
|
25
|
+
reportError
|
|
26
|
+
) {
|
|
27
|
+
if (retryMaxSize === undefined) {
|
|
28
|
+
retryMaxSize = -1
|
|
29
|
+
}
|
|
30
|
+
var retryState = newRetryState(retryMaxSize)
|
|
23
31
|
var sendStrategyForRetry = function (payload, onResponse) {
|
|
24
32
|
return fetchKeepAliveStrategy(endpointUrl, bytesLimit, payload, onResponse)
|
|
25
33
|
}
|
|
@@ -87,7 +87,7 @@ function send(payload, state, sendStrategy, responseData) {
|
|
|
87
87
|
state.bandwidthMonitor.add(payload)
|
|
88
88
|
sendStrategy(payload, function (response) {
|
|
89
89
|
state.bandwidthMonitor.remove(payload)
|
|
90
|
-
if (!shouldRetryRequest(response)) {
|
|
90
|
+
if (!shouldRetryRequest(response, state, payload)) {
|
|
91
91
|
state.transportStatus = TransportStatus.UP
|
|
92
92
|
onSuccess()
|
|
93
93
|
} else {
|
|
@@ -96,7 +96,10 @@ function send(payload, state, sendStrategy, responseData) {
|
|
|
96
96
|
state.bandwidthMonitor.ongoingRequestCount > 0
|
|
97
97
|
? TransportStatus.FAILURE_DETECTED
|
|
98
98
|
: TransportStatus.DOWN
|
|
99
|
-
|
|
99
|
+
payload.retry = {
|
|
100
|
+
count: payload.retry ? payload.retry.count + 1 : 1,
|
|
101
|
+
lastFailureStatus: response.status
|
|
102
|
+
}
|
|
100
103
|
onFailure()
|
|
101
104
|
}
|
|
102
105
|
})
|
|
@@ -139,7 +142,13 @@ function retryQueuedPayloads(
|
|
|
139
142
|
}
|
|
140
143
|
}
|
|
141
144
|
|
|
142
|
-
function shouldRetryRequest(response) {
|
|
145
|
+
function shouldRetryRequest(response, state, payload) {
|
|
146
|
+
if (
|
|
147
|
+
state.retryMaxSize > -1 &&
|
|
148
|
+
payload.retry &&
|
|
149
|
+
payload.retry.count > state.retryMaxSize
|
|
150
|
+
)
|
|
151
|
+
return false
|
|
143
152
|
return (
|
|
144
153
|
response.type !== 'opaque' &&
|
|
145
154
|
((response.status === 0 && !navigator.onLine) ||
|
|
@@ -148,14 +157,14 @@ function shouldRetryRequest(response) {
|
|
|
148
157
|
response.status >= 500)
|
|
149
158
|
)
|
|
150
159
|
}
|
|
151
|
-
export function newRetryState() {
|
|
160
|
+
export function newRetryState(retryMaxSize) {
|
|
152
161
|
return {
|
|
153
162
|
transportStatus: TransportStatus.UP,
|
|
154
|
-
lastFailureStatus: 0,
|
|
155
163
|
currentBackoffTime: INITIAL_BACKOFF_TIME,
|
|
156
164
|
bandwidthMonitor: newBandwidthMonitor(),
|
|
157
165
|
queuedPayloads: newPayloadQueue(),
|
|
158
|
-
queueFullReported: false
|
|
166
|
+
queueFullReported: false,
|
|
167
|
+
retryMaxSize: retryMaxSize
|
|
159
168
|
}
|
|
160
169
|
}
|
|
161
170
|
|