@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.
@@ -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 || initConfiguration.sampleRate;
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","isNullUndefinedDefaultValue","service","version","env","telemetryEnabled","silentMultipleInit","batchBytesLimit","ONE_KIBI_BYTE","eventRateLimiterThreshold","maxTelemetryEventsPerPage","flushTimeout","ONE_SECOND","batchMessagesLimit","messageBytesLimit","resourceUrlLimit","storeContextsToLocal","storeContextsKey","sendContentTypeByJson","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 var sessionSampleRate =\n initConfiguration.sessionSampleRate || initConfiguration.sampleRate\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 },\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;EACA,IAAIC,iBAAiB,GACnBN,iBAAiB,CAACM,iBAAiB,IAAIN,iBAAiB,CAACC,UAAU;EACrE,OAAO,IAAAO,aAAM,EACX;IACEC,UAAU,EACRT,iBAAiB,CAACS,UAAU,IAC5B,IAAAC,gCAAe,EACbV,iBAAiB,CAACS,UAAU,EAC5B,4BACF,CAAC;IACHE,wBAAwB,EACtB,IAAAC,4CAA8B,EAACZ,iBAAiB,CAAC;IACnDM,iBAAiB,EAAE,IAAAO,kCAA2B,EAACP,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,IAAAM,kCAA2B,EAC9Cb,iBAAiB,CAACO,mBAAmB,EACrC,GACF,CAAC;IACDU,gBAAgB,EAAE,IAAAJ,kCAA2B,EAC3Cb,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;EAC7C,CAAC,EACD,IAAAC,qDAA6B,EAAC/B,iBAAiB,CACjD,CAAC;AACH;AACO,SAASgC,6CAA6CA,CAC3DhC,iBAAiB,EACjB;EACA,IACE,CAACA,iBAAiB,CAACiC,IAAI,IACvB,CAACjC,iBAAiB,CAACkC,aAAa,IAChC,CAAClC,iBAAiB,CAACmC,UAAU,EAC7B;IACA/B,gBAAO,CAACC,KAAK,CACX,yEACF,CAAC;IACD,OAAO,KAAK;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAIL,iBAAiB,CAACiC,IAAI,IAAI,CAACjC,iBAAiB,CAACoC,WAAW,EAAE;IAC5DhC,gBAAO,CAACC,KAAK,CACX,+DACF,CAAC;IACD,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb","ignoreList":[]}
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":"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","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 // We expand/renew session unconditionally as tracking consent is always granted when the session\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":";;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AAIA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AAEO,IAAMQ,sBAAsB,GAAGC,iBAAU;AAAAC,OAAA,CAAAF,sBAAA,GAAAA,sBAAA;AAChD,IAAMG,6BAA6B,GAAGC,wCAAsB;AAC5D,IAAIC,aAAa,GAAG,EAAE;AAEf,SAASC,mBAAmBA,CACjCC,aAAa,EACbC,UAAU,EACVC,mBAAmB,EACnB;EACA,IAAMC,eAAe,GAAG,IAAIC,sBAAU,CAAC,CAAC;EACxC,IAAMC,gBAAgB,GAAG,IAAID,sBAAU,CAAC,CAAC;EAEzC,IAAME,YAAY,GAAG,IAAAC,+BAAiB,EACpCP,aAAa,CAACQ,wBAAwB,EACtCP,UAAU,EACVC,mBACF,CAAC;EACDJ,aAAa,CAACW,IAAI,CAAC,YAAY;IAC7B,OAAOH,YAAY,CAACI,IAAI,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEF,IAAMC,qBAAqB,GAAG,IAAAC,gCAAkB,EAAC;IAC/CC,WAAW,EAAEjB;EACf,CAAC,CAAC;EACFE,aAAa,CAACW,IAAI,CAAC,YAAY;IAC7B,OAAOE,qBAAqB,CAACD,IAAI,CAAC,CAAC;EACrC,CAAC,CAAC;EAEFJ,YAAY,CAACH,eAAe,CAACW,SAAS,CAAC,YAAY;IACjDH,qBAAqB,CAACI,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE,IAAAC,kBAAW,EAAC,CAAC,CAAC;IAC/Dd,eAAe,CAACe,MAAM,CAAC,CAAC;EAC1B,CAAC,CAAC;EACFZ,YAAY,CAACD,gBAAgB,CAACS,SAAS,CAAC,YAAY;IAClDT,gBAAgB,CAACa,MAAM,CAAC,CAAC;IACzBP,qBAAqB,CAACQ,WAAW,CAAC,IAAAF,kBAAW,EAAC,CAAC,CAAC;EAClD,CAAC,CAAC;;EAEF;EACA;EACAX,YAAY,CAACc,oBAAoB,CAAC,CAAC;EACnCT,qBAAqB,CAACI,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE,IAAAK,mBAAY,EAAC,CAAC,CAACC,QAAQ,CAAC;EAEzEC,aAAa,CAAC,YAAY;IACxBjB,YAAY,CAACc,oBAAoB,CAAC,CAAC;EACrC,CAAC,CAAC;EACFI,eAAe,CAAC,YAAY;IAC1B,OAAOlB,YAAY,CAACmB,aAAa,CAAC,CAAC;EACrC,CAAC,CAAC;EACFC,WAAW,CAAC,YAAY;IACtBpB,YAAY,CAACqB,cAAc,CAAC,CAAC;EAC/B,CAAC,CAAC;EAEF,SAASX,mBAAmBA,CAAA,EAAG;IAC7B,OAAO;MACLY,EAAE,EAAEtB,YAAY,CAACuB,UAAU,CAAC,CAAC,CAACD,EAAE;MAChCE,YAAY,EAAExB,YAAY,CAACuB,UAAU,CAAC,CAAC,CAAC5B,UAAU;IACpD,CAAC;EACH;EAEA,OAAO;IACL8B,WAAW,EAAE,SAAAA,YAAUC,SAAS,EAAEC,OAAO,EAAE;MACzC,OAAOtB,qBAAqB,CAACuB,IAAI,CAACF,SAAS,EAAEC,OAAO,CAAC;IACvD,CAAC;IACD9B,eAAe,EAAfA,eAAe;IACfE,gBAAgB,EAAhBA,gBAAgB;IAChB8B,4BAA4B,EAAE7B,YAAY,CAAC6B,4BAA4B;IACvEC,MAAM,EAAE9B,YAAY,CAAC8B,MAAM;IAC3BC,kBAAkB,EAAE/B,YAAY,CAAC+B;EACnC,CAAC;AACH;AAEO,SAASC,kBAAkBA,CAAA,EAAG;EACnCxC,aAAa,CAACyC,OAAO,CAAC,UAAUC,CAAC,EAAE;IACjCA,CAAC,CAAC,CAAC;EACL,CAAC,CAAC;EACF1C,aAAa,GAAG,EAAE;AACpB;AAEA,SAASyB,aAAaA,CAACH,oBAAoB,EAAE;EAC3C,IAAAqB,kBAAA,GAAiB,IAAAC,oCAAiB,EAChCC,MAAM,EACN,CACEC,gBAAS,CAACC,KAAK,EACfD,gBAAS,CAACE,WAAW,EACrBF,gBAAS,CAACG,QAAQ,EAClBH,gBAAS,CAACI,MAAM,CACjB,EACD5B,oBAAoB,EACpB;MAAE6B,OAAO,EAAE,IAAI;MAAEC,OAAO,EAAE;IAAK,CACjC,CAAC;IAVOxC,IAAI,GAAA+B,kBAAA,CAAJ/B,IAAI;EAWZZ,aAAa,CAACW,IAAI,CAACC,IAAI,CAAC;AAC1B;AAEA,SAASc,eAAeA,CAACC,aAAa,EAAE;EACtC,IAAM0B,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAA,EAAe;IAC3C,IAAIC,QAAQ,CAACC,eAAe,KAAK,SAAS,EAAE;MAC1C5B,aAAa,CAAC,CAAC;IACjB;EACF,CAAC;EAED,IAAA6B,iBAAA,GAAiB,IAAAC,mCAAgB,EAC/BH,QAAQ,EACRR,gBAAS,CAACY,iBAAiB,EAC3BL,wBACF,CAAC;IAJOzC,IAAI,GAAA4C,iBAAA,CAAJ5C,IAAI;EAKZZ,aAAa,CAACW,IAAI,CAACC,IAAI,CAAC;EAExB,IAAM+C,uBAAuB,GAAG,IAAAC,kBAAW,EACzCP,wBAAwB,EACxB1D,sBACF,CAAC;EACDK,aAAa,CAACW,IAAI,CAAC,YAAY;IAC7B,IAAAkD,oBAAa,EAACF,uBAAuB,CAAC;EACxC,CAAC,CAAC;AACJ;AAEA,SAAS/B,WAAWA,CAACkC,EAAE,EAAE;EACvB,IAAAC,kBAAA,GAAiB,IAAAN,mCAAgB,EAACZ,MAAM,EAAEC,gBAAS,CAACkB,MAAM,EAAEF,EAAE,EAAE;MAC9DX,OAAO,EAAE;IACX,CAAC,CAAC;IAFMvC,IAAI,GAAAmD,kBAAA,CAAJnD,IAAI;EAGZZ,aAAa,CAACW,IAAI,CAACC,IAAI,CAAC;AAC1B","ignoreList":[]}
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":";;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AAIA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,iBAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AAEO,IAAMQ,sBAAsB,GAAGC,iBAAU;AAAAC,OAAA,CAAAF,sBAAA,GAAAA,sBAAA;AAChD,IAAMG,6BAA6B,GAAGC,wCAAsB;AAC5D,IAAIC,aAAa,GAAG,EAAE;AAEf,SAASC,mBAAmBA,CACjCC,aAAa,EACbC,UAAU,EACVC,mBAAmB,EACnB;EACA,IAAMC,eAAe,GAAG,IAAIC,sBAAU,CAAC,CAAC;EACxC,IAAMC,gBAAgB,GAAG,IAAID,sBAAU,CAAC,CAAC;EAEzC,IAAME,YAAY,GAAG,IAAAC,+BAAiB,EACpCP,aAAa,CAACQ,wBAAwB,EACtCP,UAAU,EACVC,mBACF,CAAC;EACDJ,aAAa,CAACW,IAAI,CAAC,YAAY;IAC7B,OAAOH,YAAY,CAACI,IAAI,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEF,IAAMC,qBAAqB,GAAG,IAAAC,gCAAkB,EAAC;IAC/CC,WAAW,EAAEjB;EACf,CAAC,CAAC;EACFE,aAAa,CAACW,IAAI,CAAC,YAAY;IAC7B,OAAOE,qBAAqB,CAACD,IAAI,CAAC,CAAC;EACrC,CAAC,CAAC;EAEFJ,YAAY,CAACH,eAAe,CAACW,SAAS,CAAC,YAAY;IACjDH,qBAAqB,CAACI,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE,IAAAC,kBAAW,EAAC,CAAC,CAAC;IAC/Dd,eAAe,CAACe,MAAM,CAAC,CAAC;EAC1B,CAAC,CAAC;EACFZ,YAAY,CAACD,gBAAgB,CAACS,SAAS,CAAC,YAAY;IAClDT,gBAAgB,CAACa,MAAM,CAAC,CAAC;IACzBP,qBAAqB,CAACQ,WAAW,CAAC,IAAAF,kBAAW,EAAC,CAAC,CAAC;EAClD,CAAC,CAAC;;EAEF;EACAX,YAAY,CAACc,oBAAoB,CAAC,CAAC;EACnCT,qBAAqB,CAACI,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE,IAAAK,mBAAY,EAAC,CAAC,CAACC,QAAQ,CAAC;EAEzEC,aAAa,CAAC,YAAY;IACxBjB,YAAY,CAACc,oBAAoB,CAAC,CAAC;EACrC,CAAC,CAAC;EACFI,eAAe,CAAC,YAAY;IAC1B,OAAOlB,YAAY,CAACmB,aAAa,CAAC,CAAC;EACrC,CAAC,CAAC;EACFC,WAAW,CAAC,YAAY;IACtBpB,YAAY,CAACqB,cAAc,CAAC,CAAC;EAC/B,CAAC,CAAC;EAEF,SAASX,mBAAmBA,CAAA,EAAG;IAC7B,OAAO;MACLY,EAAE,EAAEtB,YAAY,CAACuB,UAAU,CAAC,CAAC,CAACD,EAAE;MAChCE,YAAY,EAAExB,YAAY,CAACuB,UAAU,CAAC,CAAC,CAAC5B,UAAU;IACpD,CAAC;EACH;EAEA,OAAO;IACL8B,WAAW,EAAE,SAAAA,YAAUC,SAAS,EAAEC,OAAO,EAAE;MACzC,OAAOtB,qBAAqB,CAACuB,IAAI,CAACF,SAAS,EAAEC,OAAO,CAAC;IACvD,CAAC;IACD9B,eAAe,EAAfA,eAAe;IACfE,gBAAgB,EAAhBA,gBAAgB;IAChB8B,4BAA4B,EAAE7B,YAAY,CAAC6B,4BAA4B;IACvEC,MAAM,EAAE9B,YAAY,CAAC8B,MAAM;IAC3BC,kBAAkB,EAAE/B,YAAY,CAAC+B;EACnC,CAAC;AACH;AAEO,SAASC,kBAAkBA,CAAA,EAAG;EACnCxC,aAAa,CAACyC,OAAO,CAAC,UAAUC,CAAC,EAAE;IACjCA,CAAC,CAAC,CAAC;EACL,CAAC,CAAC;EACF1C,aAAa,GAAG,EAAE;AACpB;AAEA,SAASyB,aAAaA,CAACH,oBAAoB,EAAE;EAC3C,IAAAqB,kBAAA,GAAiB,IAAAC,oCAAiB,EAChCC,MAAM,EACN,CACEC,gBAAS,CAACC,KAAK,EACfD,gBAAS,CAACE,WAAW,EACrBF,gBAAS,CAACG,QAAQ,EAClBH,gBAAS,CAACI,MAAM,CACjB,EACD5B,oBAAoB,EACpB;MAAE6B,OAAO,EAAE,IAAI;MAAEC,OAAO,EAAE;IAAK,CACjC,CAAC;IAVOxC,IAAI,GAAA+B,kBAAA,CAAJ/B,IAAI;EAWZZ,aAAa,CAACW,IAAI,CAACC,IAAI,CAAC;AAC1B;AAEA,SAASc,eAAeA,CAACC,aAAa,EAAE;EACtC,IAAM0B,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAA,EAAe;IAC3C,IAAIC,QAAQ,CAACC,eAAe,KAAK,SAAS,EAAE;MAC1C5B,aAAa,CAAC,CAAC;IACjB;EACF,CAAC;EAED,IAAA6B,iBAAA,GAAiB,IAAAC,mCAAgB,EAC/BH,QAAQ,EACRR,gBAAS,CAACY,iBAAiB,EAC3BL,wBACF,CAAC;IAJOzC,IAAI,GAAA4C,iBAAA,CAAJ5C,IAAI;EAKZZ,aAAa,CAACW,IAAI,CAACC,IAAI,CAAC;EAExB,IAAM+C,uBAAuB,GAAG,IAAAC,kBAAW,EACzCP,wBAAwB,EACxB1D,sBACF,CAAC;EACDK,aAAa,CAACW,IAAI,CAAC,YAAY;IAC7B,IAAAkD,oBAAa,EAACF,uBAAuB,CAAC;EACxC,CAAC,CAAC;AACJ;AAEA,SAAS/B,WAAWA,CAACkC,EAAE,EAAE;EACvB,IAAAC,kBAAA,GAAiB,IAAAN,mCAAgB,EAACZ,MAAM,EAAEC,gBAAS,CAACkB,MAAM,EAAEF,EAAE,EAAE;MAC9DX,OAAO,EAAE;IACX,CAAC,CAAC;IAFMvC,IAAI,GAAAmD,kBAAA,CAAJnD,IAAI;EAGZZ,aAAa,CAACW,IAAI,CAACC,IAAI,CAAC;AAC1B","ignoreList":[]}
@@ -25,8 +25,11 @@ function addBatchPrecision(url, encoding) {
25
25
  }
26
26
  return url;
27
27
  }
28
- function createHttpRequest(endpointUrl, bytesLimit, reportError) {
29
- var retryState = (0, _sendWithRetryStrategy.newRetryState)();
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, bytesLimit, reportError) {\n var retryState = newRetryState()\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":";;;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASI,iBAAiBA,CAACC,GAAG,EAAEC,QAAQ,EAAE;EACxC,IAAI,CAACD,GAAG,EAAE,OAAOA,GAAG;EACpBA,GAAG,GAAGA,GAAG,IAAIA,GAAG,CAACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,cAAc;EAClE,IAAID,QAAQ,EAAE;IACZD,GAAG,GAAGA,GAAG,GAAG,YAAY,GAAGC,QAAQ;EACrC;EACA,OAAOD,GAAG;AACZ;AACO,SAASG,iBAAiBA,CAACC,WAAW,EAAEC,UAAU,EAAEC,WAAW,EAAE;EACtE,IAAIC,UAAU,GAAG,IAAAC,oCAAa,EAAC,CAAC;EAChC,IAAIC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,OAAO,EAAEC,UAAU,EAAE;IACxD,OAAOC,sBAAsB,CAACR,WAAW,EAAEC,UAAU,EAAEK,OAAO,EAAEC,UAAU,CAAC;EAC7E,CAAC;EAED,OAAO;IACLE,IAAI,EAAE,SAAAA,KAAUH,OAAO,EAAE;MACvB,IAAAI,4CAAqB,EACnBJ,OAAO,EACPH,UAAU,EACVE,oBAAoB,EACpBL,WAAW,EACXE,WACF,CAAC;IACH,CAAC;IACD;AACJ;AACA;AACA;IACIS,UAAU,EAAE,SAAAA,WAAUL,OAAO,EAAE;MAC7BM,kBAAkB,CAACZ,WAAW,EAAEC,UAAU,EAAEK,OAAO,CAAC;IACtD;EACF,CAAC;AACH;AAEA,SAASM,kBAAkBA,CAACZ,WAAW,EAAEC,UAAU,EAAEK,OAAO,EAAE;EAC5D,IAAIO,IAAI,GAAGP,OAAO,CAACO,IAAI;EACvB,IAAIC,UAAU,GAAGR,OAAO,CAACQ,UAAU;EACnC,IAAIlB,GAAG,GAAGD,iBAAiB,CAACK,WAAW,EAAEM,OAAO,CAACT,QAAQ,CAAC;EAC1D,IAAIkB,YAAY,GAAG,CAAC,CAACC,SAAS,CAACC,UAAU,IAAIH,UAAU,GAAGb,UAAU;EACpE,IAAIc,YAAY,EAAE;IAChB,IAAI;MACF,IAAIG,UAAU;MACd,IAAIZ,OAAO,CAACa,IAAI,EAAE;QAChBD,UAAU,GAAG,IAAIE,IAAI,CAAC,CAACP,IAAI,CAAC,EAAE;UAC5BM,IAAI,EAAEb,OAAO,CAACa;QAChB,CAAC,CAAC;MACJ,CAAC,MAAM;QACLD,UAAU,GAAGL,IAAI;MACnB;MAEA,IAAIQ,QAAQ,GAAGL,SAAS,CAACC,UAAU,CAACrB,GAAG,EAAEsB,UAAU,CAAC;MAEpD,IAAIG,QAAQ,EAAE;QACZ;MACF;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVC,iBAAiB,CAACD,CAAC,CAAC;IACtB;EACF;EACAE,OAAO,CAAC5B,GAAG,EAAEU,OAAO,CAAC;AACvB;AACA,IAAImB,sBAAsB,GAAG,KAAK;AAElC,SAASF,iBAAiBA,CAACD,CAAC,EAAE;EAC5B,IAAI,CAACG,sBAAsB,EAAE;IAC3BA,sBAAsB,GAAG,IAAI;IAC7B,IAAAC,4BAAiB,EAACJ,CAAC,CAAC;EACtB;AACF;AACO,SAASd,sBAAsBA,CACpCR,WAAW,EACXC,UAAU,EACVK,OAAO,EACPC,UAAU,EACV;EACA,IAAIM,IAAI,GAAGP,OAAO,CAACO,IAAI;EACvB,IAAIC,UAAU,GAAGR,OAAO,CAACQ,UAAU;EACnC,IAAIlB,GAAG,GAAGD,iBAAiB,CAACK,WAAW,EAAEM,OAAO,CAACT,QAAQ,CAAC;EAC1D,IAAI8B,eAAe,GAAGC,oBAAoB,CAAC,CAAC,IAAId,UAAU,GAAGb,UAAU;EACvE,IAAI0B,eAAe,EAAE;IACnB,IAAIE,WAAW,GAAG;MAChBC,MAAM,EAAE,MAAM;MACdC,IAAI,EAAElB,IAAI;MACVmB,SAAS,EAAE,IAAI;MACfC,IAAI,EAAE;IACR,CAAC;IACD,IAAI3B,OAAO,CAACa,IAAI,EAAE;MAChBU,WAAW,CAACK,OAAO,GAAG;QACpB,cAAc,EAAE5B,OAAO,CAACa;MAC1B,CAAC;IACH;IACAgB,KAAK,CAACvC,GAAG,EAAEiC,WAAW,CAAC,CAACO,IAAI,CAC1B,IAAAC,gBAAO,EAAC,UAAUC,QAAQ,EAAE;MAC1B,IAAI,OAAO/B,UAAU,KAAK,UAAU,EAAE;QACpCA,UAAU,CAAC;UAAEgC,MAAM,EAAED,QAAQ,CAACC,MAAM;UAAEpB,IAAI,EAAEmB,QAAQ,CAACnB;QAAK,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,EACF,IAAAkB,gBAAO,EAAC,YAAY;MAClB;MACAb,OAAO,CAAC5B,GAAG,EAAEU,OAAO,EAAEC,UAAU,CAAC;IACnC,CAAC,CACH,CAAC;EACH,CAAC,MAAM;IACLiB,OAAO,CAAC5B,GAAG,EAAEU,OAAO,EAAEC,UAAU,CAAC;EACnC;AACF;AAEA,SAASqB,oBAAoBA,CAAA,EAAG;EAC9B;EACA,IAAI;IACF,OAAOY,MAAM,CAACC,OAAO,IAAI,WAAW,IAAI,IAAIA,OAAO,CAAC,UAAU,CAAC;EACjE,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAASlB,OAAOA,CAAC5B,GAAG,EAAEU,OAAO,EAAEC,UAAU,EAAE;EACzC,IAAMM,IAAI,GAAGP,OAAO,CAACO,IAAI;EACzB,IAAM8B,OAAO,GAAG,IAAIC,cAAc,CAAC,CAAC;EACpCD,OAAO,CAACE,IAAI,CAAC,MAAM,EAAEjD,GAAG,EAAE,IAAI,CAAC;EAC/B,IAAIiB,IAAI,YAAYO,IAAI,EAAE;IACxBuB,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAEjC,IAAI,CAACM,IAAI,CAAC;EACrD,CAAC,MAAM,IAAIb,OAAO,CAACa,IAAI,EAAE;IACvBwB,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAExC,OAAO,CAACa,IAAI,CAAC;EACxD;EAEA,IAAA4B,kCAAgB,EACdJ,OAAO,EACP,SAAS,EACT,YAAY;IACV,IAAI,OAAOpC,UAAU,KAAK,UAAU,EAAE;MACpCA,UAAU,CAAC;QAAEgC,MAAM,EAAEI,OAAO,CAACJ;MAAO,CAAC,CAAC;IACxC;EACF,CAAC,EACD;IACES,IAAI,EAAE;EACR,CACF,CAAC;EACDL,OAAO,CAAClC,IAAI,CAACI,IAAI,CAAC;AACpB","ignoreList":[]}
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
- state.lastFailureStatus = response.status;
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,EAC7Bb,WACF,CAAC;MACDc,eAAe,EAAE,IAAAC,sCAAqB,EAAC;QACrCC,aAAa,EAAElB,aAAa,CAACmB,kBAAkB;QAC/CC,UAAU,EAAEpB,aAAa,CAACe,eAAe;QACzCM,aAAa,EAAErB,aAAa,CAACsB,YAAY;QACzCnB,kBAAkB,EAAEA,kBAAkB;QACtCC,uBAAuB,EAAEA;MAC3B,CAAC,CAAC;MACFmB,iBAAiB,EAAEvB,aAAa,CAACuB,iBAAiB;MAClDC,qBAAqB,EAAExB,aAAa,CAACwB;IACvC,CAAC,CAAC;EACJ;EACA,OAAO;IACLC,eAAe,EAAEjB,YAAY,CAACQ,eAAe,CAACS,eAAe;IAC7DC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBnB,YAAY,CAACkB,GAAG,CAACC,OAAO,CAAC;IAC3B,CAAC;IACDC,MAAM,EAAE,SAAAA,OAAUD,OAAO,EAAEE,GAAG,EAAE;MAC9BrB,YAAY,CAACoB,MAAM,CAACD,OAAO,EAAEE,GAAG,CAAC;IACnC,CAAC;IAEDC,IAAI,EAAE,SAAAA,KAAA,EAAY;MAChBtB,YAAY,CAACsB,IAAI,CAAC,CAAC;IACrB;EACF,CAAC;AACH","ignoreList":[]}
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 || initConfiguration.sampleRate;
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 =\n initConfiguration.sessionSampleRate || initConfiguration.sampleRate\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 },\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":[]}
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 // We expand/renew session unconditionally as tracking consent is always granted when the session\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":[]}
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":"AAAA,SAASA,UAAU,QAAQ,sBAAsB;AACjD,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,SAASC,WAAW,EAAEC,YAAY,EAAEC,UAAU,QAAQ,iBAAiB;AACvE,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SACEC,gBAAgB,EAChBC,iBAAiB,QACZ,6BAA6B;AACpC,SAASC,aAAa,EAAEC,WAAW,QAAQ,iBAAiB;AAC5D,SAASC,sBAAsB,QAAQ,oBAAoB;AAC3D,SAASC,iBAAiB,QAAQ,gBAAgB;AAElD,OAAO,IAAMC,sBAAsB,GAAGR,UAAU;AAChD,IAAMS,6BAA6B,GAAGH,sBAAsB;AAC5D,IAAII,aAAa,GAAG,EAAE;AAEtB,OAAO,SAASC,mBAAmBA,CACjCC,aAAa,EACbC,UAAU,EACVC,mBAAmB,EACnB;EACA,IAAMC,eAAe,GAAG,IAAInB,UAAU,CAAC,CAAC;EACxC,IAAMoB,gBAAgB,GAAG,IAAIpB,UAAU,CAAC,CAAC;EAEzC,IAAMqB,YAAY,GAAGV,iBAAiB,CACpCK,aAAa,CAACM,wBAAwB,EACtCL,UAAU,EACVC,mBACF,CAAC;EACDJ,aAAa,CAACS,IAAI,CAAC,YAAY;IAC7B,OAAOF,YAAY,CAACG,IAAI,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEF,IAAMC,qBAAqB,GAAGxB,kBAAkB,CAAC;IAC/CyB,WAAW,EAAEb;EACf,CAAC,CAAC;EACFC,aAAa,CAACS,IAAI,CAAC,YAAY;IAC7B,OAAOE,qBAAqB,CAACD,IAAI,CAAC,CAAC;EACrC,CAAC,CAAC;EAEFH,YAAY,CAACF,eAAe,CAACQ,SAAS,CAAC,YAAY;IACjDF,qBAAqB,CAACG,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE3B,WAAW,CAAC,CAAC,CAAC;IAC/DiB,eAAe,CAACW,MAAM,CAAC,CAAC;EAC1B,CAAC,CAAC;EACFT,YAAY,CAACD,gBAAgB,CAACO,SAAS,CAAC,YAAY;IAClDP,gBAAgB,CAACU,MAAM,CAAC,CAAC;IACzBL,qBAAqB,CAACM,WAAW,CAAC7B,WAAW,CAAC,CAAC,CAAC;EAClD,CAAC,CAAC;;EAEF;EACAmB,YAAY,CAACW,oBAAoB,CAAC,CAAC;EACnCP,qBAAqB,CAACG,GAAG,CAACC,mBAAmB,CAAC,CAAC,EAAE1B,YAAY,CAAC,CAAC,CAAC8B,QAAQ,CAAC;EAEzEC,aAAa,CAAC,YAAY;IACxBb,YAAY,CAACW,oBAAoB,CAAC,CAAC;EACrC,CAAC,CAAC;EACFG,eAAe,CAAC,YAAY;IAC1B,OAAOd,YAAY,CAACe,aAAa,CAAC,CAAC;EACrC,CAAC,CAAC;EACFC,WAAW,CAAC,YAAY;IACtBhB,YAAY,CAACiB,cAAc,CAAC,CAAC;EAC/B,CAAC,CAAC;EAEF,SAAST,mBAAmBA,CAAA,EAAG;IAC7B,OAAO;MACLU,EAAE,EAAElB,YAAY,CAACmB,UAAU,CAAC,CAAC,CAACD,EAAE;MAChCE,YAAY,EAAEpB,YAAY,CAACmB,UAAU,CAAC,CAAC,CAACvB,UAAU;IACpD,CAAC;EACH;EAEA,OAAO;IACLyB,WAAW,EAAE,SAAAA,YAAUC,SAAS,EAAEC,OAAO,EAAE;MACzC,OAAOnB,qBAAqB,CAACoB,IAAI,CAACF,SAAS,EAAEC,OAAO,CAAC;IACvD,CAAC;IACDzB,eAAe,EAAfA,eAAe;IACfC,gBAAgB,EAAhBA,gBAAgB;IAChB0B,4BAA4B,EAAEzB,YAAY,CAACyB,4BAA4B;IACvEC,MAAM,EAAE1B,YAAY,CAAC0B,MAAM;IAC3BC,kBAAkB,EAAE3B,YAAY,CAAC2B;EACnC,CAAC;AACH;AAEA,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnCnC,aAAa,CAACoC,OAAO,CAAC,UAAUC,CAAC,EAAE;IACjCA,CAAC,CAAC,CAAC;EACL,CAAC,CAAC;EACFrC,aAAa,GAAG,EAAE;AACpB;AAEA,SAASoB,aAAaA,CAACF,oBAAoB,EAAE;EAC3C,IAAAoB,kBAAA,GAAiB7C,iBAAiB,CAChC8C,MAAM,EACN,CACEhD,SAAS,CAACiD,KAAK,EACfjD,SAAS,CAACkD,WAAW,EACrBlD,SAAS,CAACmD,QAAQ,EAClBnD,SAAS,CAACoD,MAAM,CACjB,EACDzB,oBAAoB,EACpB;MAAE0B,OAAO,EAAE,IAAI;MAAEC,OAAO,EAAE;IAAK,CACjC,CAAC;IAVOnC,IAAI,GAAA4B,kBAAA,CAAJ5B,IAAI;EAWZV,aAAa,CAACS,IAAI,CAACC,IAAI,CAAC;AAC1B;AAEA,SAASW,eAAeA,CAACC,aAAa,EAAE;EACtC,IAAMwB,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAA,EAAe;IAC3C,IAAIC,QAAQ,CAACC,eAAe,KAAK,SAAS,EAAE;MAC1C1B,aAAa,CAAC,CAAC;IACjB;EACF,CAAC;EAED,IAAA2B,iBAAA,GAAiBzD,gBAAgB,CAC/BuD,QAAQ,EACRxD,SAAS,CAAC2D,iBAAiB,EAC3BJ,wBACF,CAAC;IAJOpC,IAAI,GAAAuC,iBAAA,CAAJvC,IAAI;EAKZV,aAAa,CAACS,IAAI,CAACC,IAAI,CAAC;EAExB,IAAMyC,uBAAuB,GAAGxD,WAAW,CACzCmD,wBAAwB,EACxBhD,sBACF,CAAC;EACDE,aAAa,CAACS,IAAI,CAAC,YAAY;IAC7Bf,aAAa,CAACyD,uBAAuB,CAAC;EACxC,CAAC,CAAC;AACJ;AAEA,SAAS5B,WAAWA,CAAC6B,EAAE,EAAE;EACvB,IAAAC,kBAAA,GAAiB7D,gBAAgB,CAAC+C,MAAM,EAAEhD,SAAS,CAAC+D,MAAM,EAAEF,EAAE,EAAE;MAC9DR,OAAO,EAAE;IACX,CAAC,CAAC;IAFMlC,IAAI,GAAA2C,kBAAA,CAAJ3C,IAAI;EAGZV,aAAa,CAACS,IAAI,CAACC,IAAI,CAAC;AAC1B","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
- var retryState = newRetryState();
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, bytesLimit, reportError) {\n var retryState = newRetryState()\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":"AAAA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,yBAAyB;AAC9E,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,GAAG,EAAEC,QAAQ,EAAE;EACxC,IAAI,CAACD,GAAG,EAAE,OAAOA,GAAG;EACpBA,GAAG,GAAGA,GAAG,IAAIA,GAAG,CAACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,cAAc;EAClE,IAAID,QAAQ,EAAE;IACZD,GAAG,GAAGA,GAAG,GAAG,YAAY,GAAGC,QAAQ;EACrC;EACA,OAAOD,GAAG;AACZ;AACA,OAAO,SAASG,iBAAiBA,CAACC,WAAW,EAAEC,UAAU,EAAEC,WAAW,EAAE;EACtE,IAAIC,UAAU,GAAGb,aAAa,CAAC,CAAC;EAChC,IAAIc,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,OAAO,EAAEC,UAAU,EAAE;IACxD,OAAOC,sBAAsB,CAACP,WAAW,EAAEC,UAAU,EAAEI,OAAO,EAAEC,UAAU,CAAC;EAC7E,CAAC;EAED,OAAO;IACLE,IAAI,EAAE,SAAAA,KAAUH,OAAO,EAAE;MACvBd,qBAAqB,CACnBc,OAAO,EACPF,UAAU,EACVC,oBAAoB,EACpBJ,WAAW,EACXE,WACF,CAAC;IACH,CAAC;IACD;AACJ;AACA;AACA;IACIO,UAAU,EAAE,SAAAA,WAAUJ,OAAO,EAAE;MAC7BK,kBAAkB,CAACV,WAAW,EAAEC,UAAU,EAAEI,OAAO,CAAC;IACtD;EACF,CAAC;AACH;AAEA,SAASK,kBAAkBA,CAACV,WAAW,EAAEC,UAAU,EAAEI,OAAO,EAAE;EAC5D,IAAIM,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIhB,GAAG,GAAGD,iBAAiB,CAACK,WAAW,EAAEK,OAAO,CAACR,QAAQ,CAAC;EAC1D,IAAIgB,YAAY,GAAG,CAAC,CAACC,SAAS,CAACC,UAAU,IAAIH,UAAU,GAAGX,UAAU;EACpE,IAAIY,YAAY,EAAE;IAChB,IAAI;MACF,IAAIG,UAAU;MACd,IAAIX,OAAO,CAACY,IAAI,EAAE;QAChBD,UAAU,GAAG,IAAIE,IAAI,CAAC,CAACP,IAAI,CAAC,EAAE;UAC5BM,IAAI,EAAEZ,OAAO,CAACY;QAChB,CAAC,CAAC;MACJ,CAAC,MAAM;QACLD,UAAU,GAAGL,IAAI;MACnB;MAEA,IAAIQ,QAAQ,GAAGL,SAAS,CAACC,UAAU,CAACnB,GAAG,EAAEoB,UAAU,CAAC;MAEpD,IAAIG,QAAQ,EAAE;QACZ;MACF;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVC,iBAAiB,CAACD,CAAC,CAAC;IACtB;EACF;EACAE,OAAO,CAAC1B,GAAG,EAAES,OAAO,CAAC;AACvB;AACA,IAAIkB,sBAAsB,GAAG,KAAK;AAElC,SAASF,iBAAiBA,CAACD,CAAC,EAAE;EAC5B,IAAI,CAACG,sBAAsB,EAAE;IAC3BA,sBAAsB,GAAG,IAAI;IAC7B7B,iBAAiB,CAAC0B,CAAC,CAAC;EACtB;AACF;AACA,OAAO,SAASb,sBAAsBA,CACpCP,WAAW,EACXC,UAAU,EACVI,OAAO,EACPC,UAAU,EACV;EACA,IAAIK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIhB,GAAG,GAAGD,iBAAiB,CAACK,WAAW,EAAEK,OAAO,CAACR,QAAQ,CAAC;EAC1D,IAAI2B,eAAe,GAAGC,oBAAoB,CAAC,CAAC,IAAIb,UAAU,GAAGX,UAAU;EACvE,IAAIuB,eAAe,EAAE;IACnB,IAAIE,WAAW,GAAG;MAChBC,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEjB,IAAI;MACVkB,SAAS,EAAE,IAAI;MACfC,IAAI,EAAE;IACR,CAAC;IACD,IAAIzB,OAAO,CAACY,IAAI,EAAE;MAChBS,WAAW,CAACK,OAAO,GAAG;QACpB,cAAc,EAAE1B,OAAO,CAACY;MAC1B,CAAC;IACH;IACAe,KAAK,CAACpC,GAAG,EAAE8B,WAAW,CAAC,CAACO,IAAI,CAC1BxC,OAAO,CAAC,UAAUyC,QAAQ,EAAE;MAC1B,IAAI,OAAO5B,UAAU,KAAK,UAAU,EAAE;QACpCA,UAAU,CAAC;UAAE6B,MAAM,EAAED,QAAQ,CAACC,MAAM;UAAElB,IAAI,EAAEiB,QAAQ,CAACjB;QAAK,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,EACFxB,OAAO,CAAC,YAAY;MAClB;MACA6B,OAAO,CAAC1B,GAAG,EAAES,OAAO,EAAEC,UAAU,CAAC;IACnC,CAAC,CACH,CAAC;EACH,CAAC,MAAM;IACLgB,OAAO,CAAC1B,GAAG,EAAES,OAAO,EAAEC,UAAU,CAAC;EACnC;AACF;AAEA,SAASmB,oBAAoBA,CAAA,EAAG;EAC9B;EACA,IAAI;IACF,OAAOW,MAAM,CAACC,OAAO,IAAI,WAAW,IAAI,IAAIA,OAAO,CAAC,UAAU,CAAC;EACjE,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAAShB,OAAOA,CAAC1B,GAAG,EAAES,OAAO,EAAEC,UAAU,EAAE;EACzC,IAAMK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACzB,IAAM4B,OAAO,GAAG,IAAIC,cAAc,CAAC,CAAC;EACpCD,OAAO,CAACE,IAAI,CAAC,MAAM,EAAE7C,GAAG,EAAE,IAAI,CAAC;EAC/B,IAAIe,IAAI,YAAYO,IAAI,EAAE;IACxBqB,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAE/B,IAAI,CAACM,IAAI,CAAC;EACrD,CAAC,MAAM,IAAIZ,OAAO,CAACY,IAAI,EAAE;IACvBsB,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAErC,OAAO,CAACY,IAAI,CAAC;EACxD;EAEAzB,gBAAgB,CACd+C,OAAO,EACP,SAAS,EACT,YAAY;IACV,IAAI,OAAOjC,UAAU,KAAK,UAAU,EAAE;MACpCA,UAAU,CAAC;QAAE6B,MAAM,EAAEI,OAAO,CAACJ;MAAO,CAAC,CAAC;IACxC;EACF,CAAC,EACD;IACEQ,IAAI,EAAE;EACR,CACF,CAAC;EACDJ,OAAO,CAAC/B,IAAI,CAACG,IAAI,CAAC;AACpB","ignoreList":[]}
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":"AAAA,SAASA,aAAa,EAAEC,qBAAqB,QAAQ,yBAAyB;AAC9E,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,iBAAiB,QAAQ,wBAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,GAAG,EAAEC,QAAQ,EAAE;EACxC,IAAI,CAACD,GAAG,EAAE,OAAOA,GAAG;EACpBA,GAAG,GAAGA,GAAG,IAAIA,GAAG,CAACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,cAAc;EAClE,IAAID,QAAQ,EAAE;IACZD,GAAG,GAAGA,GAAG,GAAG,YAAY,GAAGC,QAAQ;EACrC;EACA,OAAOD,GAAG;AACZ;AACA,OAAO,SAASG,iBAAiBA,CAC/BC,WAAW,EACXC,UAAU,EACVC,YAAY,EACZC,WAAW,EACX;EACA,IAAID,YAAY,KAAKE,SAAS,EAAE;IAC9BF,YAAY,GAAG,CAAC,CAAC;EACnB;EACA,IAAIG,UAAU,GAAGf,aAAa,CAACY,YAAY,CAAC;EAC5C,IAAII,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,OAAO,EAAEC,UAAU,EAAE;IACxD,OAAOC,sBAAsB,CAACT,WAAW,EAAEC,UAAU,EAAEM,OAAO,EAAEC,UAAU,CAAC;EAC7E,CAAC;EAED,OAAO;IACLE,IAAI,EAAE,SAAAA,KAAUH,OAAO,EAAE;MACvBhB,qBAAqB,CACnBgB,OAAO,EACPF,UAAU,EACVC,oBAAoB,EACpBN,WAAW,EACXG,WACF,CAAC;IACH,CAAC;IACD;AACJ;AACA;AACA;IACIQ,UAAU,EAAE,SAAAA,WAAUJ,OAAO,EAAE;MAC7BK,kBAAkB,CAACZ,WAAW,EAAEC,UAAU,EAAEM,OAAO,CAAC;IACtD;EACF,CAAC;AACH;AAEA,SAASK,kBAAkBA,CAACZ,WAAW,EAAEC,UAAU,EAAEM,OAAO,EAAE;EAC5D,IAAIM,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIlB,GAAG,GAAGD,iBAAiB,CAACK,WAAW,EAAEO,OAAO,CAACV,QAAQ,CAAC;EAC1D,IAAIkB,YAAY,GAAG,CAAC,CAACC,SAAS,CAACC,UAAU,IAAIH,UAAU,GAAGb,UAAU;EACpE,IAAIc,YAAY,EAAE;IAChB,IAAI;MACF,IAAIG,UAAU;MACd,IAAIX,OAAO,CAACY,IAAI,EAAE;QAChBD,UAAU,GAAG,IAAIE,IAAI,CAAC,CAACP,IAAI,CAAC,EAAE;UAC5BM,IAAI,EAAEZ,OAAO,CAACY;QAChB,CAAC,CAAC;MACJ,CAAC,MAAM;QACLD,UAAU,GAAGL,IAAI;MACnB;MAEA,IAAIQ,QAAQ,GAAGL,SAAS,CAACC,UAAU,CAACrB,GAAG,EAAEsB,UAAU,CAAC;MAEpD,IAAIG,QAAQ,EAAE;QACZ;MACF;IACF,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVC,iBAAiB,CAACD,CAAC,CAAC;IACtB;EACF;EACAE,OAAO,CAAC5B,GAAG,EAAEW,OAAO,CAAC;AACvB;AACA,IAAIkB,sBAAsB,GAAG,KAAK;AAElC,SAASF,iBAAiBA,CAACD,CAAC,EAAE;EAC5B,IAAI,CAACG,sBAAsB,EAAE;IAC3BA,sBAAsB,GAAG,IAAI;IAC7B/B,iBAAiB,CAAC4B,CAAC,CAAC;EACtB;AACF;AACA,OAAO,SAASb,sBAAsBA,CACpCT,WAAW,EACXC,UAAU,EACVM,OAAO,EACPC,UAAU,EACV;EACA,IAAIK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACvB,IAAIC,UAAU,GAAGP,OAAO,CAACO,UAAU;EACnC,IAAIlB,GAAG,GAAGD,iBAAiB,CAACK,WAAW,EAAEO,OAAO,CAACV,QAAQ,CAAC;EAC1D,IAAI6B,eAAe,GAAGC,oBAAoB,CAAC,CAAC,IAAIb,UAAU,GAAGb,UAAU;EACvE,IAAIyB,eAAe,EAAE;IACnB,IAAIE,WAAW,GAAG;MAChBC,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEjB,IAAI;MACVkB,SAAS,EAAE,IAAI;MACfC,IAAI,EAAE;IACR,CAAC;IACD,IAAIzB,OAAO,CAACY,IAAI,EAAE;MAChBS,WAAW,CAACK,OAAO,GAAG;QACpB,cAAc,EAAE1B,OAAO,CAACY;MAC1B,CAAC;IACH;IACAe,KAAK,CAACtC,GAAG,EAAEgC,WAAW,CAAC,CAACO,IAAI,CAC1B1C,OAAO,CAAC,UAAU2C,QAAQ,EAAE;MAC1B,IAAI,OAAO5B,UAAU,KAAK,UAAU,EAAE;QACpCA,UAAU,CAAC;UAAE6B,MAAM,EAAED,QAAQ,CAACC,MAAM;UAAElB,IAAI,EAAEiB,QAAQ,CAACjB;QAAK,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,EACF1B,OAAO,CAAC,YAAY;MAClB;MACA+B,OAAO,CAAC5B,GAAG,EAAEW,OAAO,EAAEC,UAAU,CAAC;IACnC,CAAC,CACH,CAAC;EACH,CAAC,MAAM;IACLgB,OAAO,CAAC5B,GAAG,EAAEW,OAAO,EAAEC,UAAU,CAAC;EACnC;AACF;AAEA,SAASmB,oBAAoBA,CAAA,EAAG;EAC9B;EACA,IAAI;IACF,OAAOW,MAAM,CAACC,OAAO,IAAI,WAAW,IAAI,IAAIA,OAAO,CAAC,UAAU,CAAC;EACjE,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAAShB,OAAOA,CAAC5B,GAAG,EAAEW,OAAO,EAAEC,UAAU,EAAE;EACzC,IAAMK,IAAI,GAAGN,OAAO,CAACM,IAAI;EACzB,IAAM4B,OAAO,GAAG,IAAIC,cAAc,CAAC,CAAC;EACpCD,OAAO,CAACE,IAAI,CAAC,MAAM,EAAE/C,GAAG,EAAE,IAAI,CAAC;EAC/B,IAAIiB,IAAI,YAAYO,IAAI,EAAE;IACxBqB,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAE/B,IAAI,CAACM,IAAI,CAAC;EACrD,CAAC,MAAM,IAAIZ,OAAO,CAACY,IAAI,EAAE;IACvBsB,OAAO,CAACG,gBAAgB,CAAC,cAAc,EAAErC,OAAO,CAACY,IAAI,CAAC;EACxD;EAEA3B,gBAAgB,CACdiD,OAAO,EACP,SAAS,EACT,YAAY;IACV,IAAI,OAAOjC,UAAU,KAAK,UAAU,EAAE;MACpCA,UAAU,CAAC;QAAE6B,MAAM,EAAEI,OAAO,CAACJ;MAAO,CAAC,CAAC;IACxC;EACF,CAAC,EACD;IACEQ,IAAI,EAAE;EACR,CACF,CAAC;EACDJ,OAAO,CAAC/B,IAAI,CAACG,IAAI,CAAC;AACpB","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
- state.lastFailureStatus = response.status;
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,EAC7BX,WACF,CAAC;MACDY,eAAe,EAAEhB,qBAAqB,CAAC;QACrCiB,aAAa,EAAEf,aAAa,CAACgB,kBAAkB;QAC/CC,UAAU,EAAEjB,aAAa,CAACa,eAAe;QACzCK,aAAa,EAAElB,aAAa,CAACmB,YAAY;QACzChB,kBAAkB,EAAEA,kBAAkB;QACtCC,uBAAuB,EAAEA;MAC3B,CAAC,CAAC;MACFgB,iBAAiB,EAAEpB,aAAa,CAACoB,iBAAiB;MAClDC,qBAAqB,EAAErB,aAAa,CAACqB;IACvC,CAAC,CAAC;EACJ;EACA,OAAO;IACLC,eAAe,EAAEf,YAAY,CAACO,eAAe,CAACQ,eAAe;IAC7DC,GAAG,EAAE,SAAAA,IAAUC,OAAO,EAAE;MACtBjB,YAAY,CAACgB,GAAG,CAACC,OAAO,CAAC;IAC3B,CAAC;IACDC,MAAM,EAAE,SAAAA,OAAUD,OAAO,EAAEE,GAAG,EAAE;MAC9BnB,YAAY,CAACkB,MAAM,CAACD,OAAO,EAAEE,GAAG,CAAC;IACnC,CAAC;IAEDC,IAAI,EAAE,SAAAA,KAAA,EAAY;MAChBpB,YAAY,CAACoB,IAAI,CAAC,CAAC;IACrB;EACF,CAAC;AACH","ignoreList":[]}
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.6",
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": "5362ac30c3a0ffc29f856417d7ae42f22ae93087"
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
- var sessionSampleRate =
40
- initConfiguration.sessionSampleRate || initConfiguration.sampleRate
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(endpointUrl, bytesLimit, reportError) {
22
- var retryState = newRetryState()
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
- state.lastFailureStatus = response.status
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
 
@@ -20,6 +20,7 @@ export function startBatchWithReplica(
20
20
  request: createHttpRequest(
21
21
  batchConfiguration.endpoint,
22
22
  configuration.batchBytesLimit,
23
+ configuration.retryMaxSize,
23
24
  reportError
24
25
  ),
25
26
  flushController: createFlushController({