@grafana/faro-web-sdk 1.2.2 → 1.2.4

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.
Files changed (104) hide show
  1. package/dist/bundle/faro-web-sdk.iife.js +1 -1
  2. package/dist/bundle/types/index.d.ts +1 -1
  3. package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
  4. package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
  5. package/dist/bundle/types/instrumentations/session/index.d.ts +1 -1
  6. package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +2 -2
  7. package/dist/bundle/types/instrumentations/session/sessionManager/PersistentSessionsManager.d.ts +12 -0
  8. package/dist/bundle/types/instrumentations/session/sessionManager/VolatileSessionManager.d.ts +12 -0
  9. package/dist/bundle/types/instrumentations/session/sessionManager/index.d.ts +3 -0
  10. package/dist/bundle/types/instrumentations/session/sessionManager/sessionManagerUtils.d.ts +16 -0
  11. package/dist/bundle/types/instrumentations/session/sessionManager/types.d.ts +7 -0
  12. package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
  13. package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
  14. package/dist/bundle/types/metas/index.d.ts +1 -0
  15. package/dist/bundle/types/metas/sdk/index.d.ts +1 -0
  16. package/dist/bundle/types/metas/sdk/meta.d.ts +2 -0
  17. package/dist/bundle/types/transports/console/transport.d.ts +1 -1
  18. package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
  19. package/dist/bundle/types/utils/webStorage.d.ts +30 -4
  20. package/dist/cjs/config/makeCoreConfig.js +22 -7
  21. package/dist/cjs/config/makeCoreConfig.js.map +1 -1
  22. package/dist/cjs/index.js +3 -2
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/instrumentations/session/index.js +1 -1
  25. package/dist/cjs/instrumentations/session/index.js.map +1 -1
  26. package/dist/cjs/instrumentations/session/instrumentation.js +20 -9
  27. package/dist/cjs/instrumentations/session/instrumentation.js.map +1 -1
  28. package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js +66 -0
  29. package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js.map +1 -0
  30. package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js +55 -0
  31. package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js.map +1 -0
  32. package/dist/cjs/instrumentations/session/sessionManager/index.js +8 -0
  33. package/dist/cjs/instrumentations/session/sessionManager/index.js.map +1 -0
  34. package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js +77 -0
  35. package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -0
  36. package/dist/cjs/instrumentations/session/sessionManager/types.js +3 -0
  37. package/dist/cjs/instrumentations/session/sessionManager/types.js.map +1 -0
  38. package/dist/cjs/metas/index.js +3 -1
  39. package/dist/cjs/metas/index.js.map +1 -1
  40. package/dist/cjs/metas/k6/meta.js +3 -1
  41. package/dist/cjs/metas/k6/meta.js.map +1 -1
  42. package/dist/cjs/metas/sdk/index.js +6 -0
  43. package/dist/cjs/metas/sdk/index.js.map +1 -0
  44. package/dist/cjs/metas/sdk/meta.js +16 -0
  45. package/dist/cjs/metas/sdk/meta.js.map +1 -0
  46. package/dist/cjs/transports/fetch/transport.js +1 -1
  47. package/dist/cjs/transports/fetch/transport.js.map +1 -1
  48. package/dist/cjs/utils/webStorage.js +47 -11
  49. package/dist/cjs/utils/webStorage.js.map +1 -1
  50. package/dist/esm/config/makeCoreConfig.js +23 -8
  51. package/dist/esm/config/makeCoreConfig.js.map +1 -1
  52. package/dist/esm/index.js +1 -1
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/instrumentations/session/index.js +1 -1
  55. package/dist/esm/instrumentations/session/index.js.map +1 -1
  56. package/dist/esm/instrumentations/session/instrumentation.js +20 -8
  57. package/dist/esm/instrumentations/session/instrumentation.js.map +1 -1
  58. package/dist/esm/instrumentations/session/sessionManager/PersistentSessionsManager.js +59 -0
  59. package/dist/esm/instrumentations/session/sessionManager/PersistentSessionsManager.js.map +1 -0
  60. package/dist/esm/instrumentations/session/sessionManager/VolatileSessionManager.js +48 -0
  61. package/dist/esm/instrumentations/session/sessionManager/VolatileSessionManager.js.map +1 -0
  62. package/dist/esm/instrumentations/session/sessionManager/index.js +3 -0
  63. package/dist/esm/instrumentations/session/sessionManager/index.js.map +1 -0
  64. package/dist/esm/instrumentations/session/sessionManager/sessionManagerUtils.js +58 -0
  65. package/dist/esm/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -0
  66. package/dist/esm/instrumentations/session/sessionManager/types.js +2 -0
  67. package/dist/esm/instrumentations/session/sessionManager/types.js.map +1 -0
  68. package/dist/esm/metas/index.js +1 -0
  69. package/dist/esm/metas/index.js.map +1 -1
  70. package/dist/esm/metas/k6/meta.js +3 -1
  71. package/dist/esm/metas/k6/meta.js.map +1 -1
  72. package/dist/esm/metas/sdk/index.js +2 -0
  73. package/dist/esm/metas/sdk/index.js.map +1 -0
  74. package/dist/esm/metas/sdk/meta.js +9 -0
  75. package/dist/esm/metas/sdk/meta.js.map +1 -0
  76. package/dist/esm/transports/fetch/transport.js +1 -1
  77. package/dist/esm/transports/fetch/transport.js.map +1 -1
  78. package/dist/esm/utils/webStorage.js +46 -10
  79. package/dist/esm/utils/webStorage.js.map +1 -1
  80. package/dist/types/index.d.ts +1 -1
  81. package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
  82. package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
  83. package/dist/types/instrumentations/session/index.d.ts +1 -1
  84. package/dist/types/instrumentations/session/instrumentation.d.ts +2 -2
  85. package/dist/types/instrumentations/session/sessionManager/PersistentSessionsManager.d.ts +12 -0
  86. package/dist/types/instrumentations/session/sessionManager/VolatileSessionManager.d.ts +12 -0
  87. package/dist/types/instrumentations/session/sessionManager/index.d.ts +3 -0
  88. package/dist/types/instrumentations/session/sessionManager/sessionManagerUtils.d.ts +16 -0
  89. package/dist/types/instrumentations/session/sessionManager/types.d.ts +7 -0
  90. package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
  91. package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
  92. package/dist/types/metas/index.d.ts +1 -0
  93. package/dist/types/metas/sdk/index.d.ts +1 -0
  94. package/dist/types/metas/sdk/meta.d.ts +2 -0
  95. package/dist/types/transports/console/transport.d.ts +1 -1
  96. package/dist/types/transports/fetch/transport.d.ts +1 -1
  97. package/dist/types/utils/webStorage.d.ts +30 -4
  98. package/package.json +3 -3
  99. package/dist/bundle/types/instrumentations/session/sessionHandler.d.ts +0 -22
  100. package/dist/cjs/instrumentations/session/sessionHandler.js +0 -170
  101. package/dist/cjs/instrumentations/session/sessionHandler.js.map +0 -1
  102. package/dist/esm/instrumentations/session/sessionHandler.js +0 -148
  103. package/dist/esm/instrumentations/session/sessionHandler.js.map +0 -1
  104. package/dist/types/instrumentations/session/sessionHandler.d.ts +0 -22
package/dist/cjs/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isEventDefined = exports.isEvent = exports.isErrorEvent = exports.isErrorDefined = exports.isError = exports.isElementDefined = exports.isElement = exports.isDomException = exports.isDomError = exports.isBoolean = exports.isArray = exports.internalGlobalObjectKey = exports.globalObject = exports.getTransportBody = exports.getInternalFaroFromGlobalObject = exports.getCurrentTimestamp = exports.genShortID = exports.defaultLogLevel = exports.defaultInternalLoggerLevel = exports.defaultGlobalObjectKey = exports.defaultExceptionType = exports.deepEqual = exports.createPromiseBuffer = exports.createInternalLogger = exports.Conventions = exports.BaseTransport = exports.BaseInstrumentation = exports.BaseExtension = exports.allLogLevels = exports.faro = exports.FetchTransport = exports.ConsoleTransport = exports.pageMeta = exports.defaultViewMeta = exports.defaultMetas = exports.createSession = exports.browserMeta = exports.SessionInstrumentation = exports.WebVitalsInstrumentation = exports.ViewInstrumentation = exports.parseStacktrace = exports.getStackFramesFromError = exports.getDataFromSafariExtensions = exports.ErrorsInstrumentation = exports.ConsoleInstrumentation = exports.buildStackFrame = exports.initializeFaro = exports.defaultEventDomain = exports.makeCoreConfig = exports.getWebInstrumentations = void 0;
4
- exports.VERSION = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.setInternalFaroOnGlobalObject = exports.noop = exports.LogLevel = exports.InternalLoggerLevel = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = exports.isObject = exports.isNumber = exports.isNull = exports.isMapDefined = exports.isMap = exports.isInternalFaroOnGlobalObject = exports.isInt = exports.isInstanceOf = exports.isFunction = void 0;
3
+ exports.isEvent = exports.isErrorEvent = exports.isErrorDefined = exports.isError = exports.isElementDefined = exports.isElement = exports.isDomException = exports.isDomError = exports.isBoolean = exports.isArray = exports.internalGlobalObjectKey = exports.globalObject = exports.getTransportBody = exports.getInternalFaroFromGlobalObject = exports.getCurrentTimestamp = exports.genShortID = exports.defaultLogLevel = exports.defaultInternalLoggerLevel = exports.defaultGlobalObjectKey = exports.defaultExceptionType = exports.deepEqual = exports.createPromiseBuffer = exports.createInternalLogger = exports.Conventions = exports.BaseTransport = exports.BaseInstrumentation = exports.BaseExtension = exports.allLogLevels = exports.faro = exports.FetchTransport = exports.ConsoleTransport = exports.sdkMeta = exports.pageMeta = exports.defaultViewMeta = exports.defaultMetas = exports.createSession = exports.browserMeta = exports.SessionInstrumentation = exports.WebVitalsInstrumentation = exports.ViewInstrumentation = exports.parseStacktrace = exports.getStackFramesFromError = exports.getDataFromSafariExtensions = exports.ErrorsInstrumentation = exports.ConsoleInstrumentation = exports.buildStackFrame = exports.initializeFaro = exports.defaultEventDomain = exports.makeCoreConfig = exports.getWebInstrumentations = void 0;
4
+ exports.VERSION = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.setInternalFaroOnGlobalObject = exports.noop = exports.LogLevel = exports.InternalLoggerLevel = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = exports.isObject = exports.isNumber = exports.isNull = exports.isMapDefined = exports.isMap = exports.isInternalFaroOnGlobalObject = exports.isInt = exports.isInstanceOf = exports.isFunction = exports.isEventDefined = void 0;
5
5
  var config_1 = require("./config");
6
6
  Object.defineProperty(exports, "getWebInstrumentations", { enumerable: true, get: function () { return config_1.getWebInstrumentations; } });
7
7
  Object.defineProperty(exports, "makeCoreConfig", { enumerable: true, get: function () { return config_1.makeCoreConfig; } });
@@ -25,6 +25,7 @@ Object.defineProperty(exports, "createSession", { enumerable: true, get: functio
25
25
  Object.defineProperty(exports, "defaultMetas", { enumerable: true, get: function () { return metas_1.defaultMetas; } });
26
26
  Object.defineProperty(exports, "defaultViewMeta", { enumerable: true, get: function () { return metas_1.defaultViewMeta; } });
27
27
  Object.defineProperty(exports, "pageMeta", { enumerable: true, get: function () { return metas_1.pageMeta; } });
28
+ Object.defineProperty(exports, "sdkMeta", { enumerable: true, get: function () { return metas_1.sdkMeta; } });
28
29
  var transports_1 = require("./transports");
29
30
  Object.defineProperty(exports, "ConsoleTransport", { enumerable: true, get: function () { return transports_1.ConsoleTransport; } });
30
31
  Object.defineProperty(exports, "FetchTransport", { enumerable: true, get: function () { return transports_1.FetchTransport; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,mCAAkE;AAAzD,gHAAA,sBAAsB,OAAA;AAAE,wGAAA,cAAc,OAAA;AAG/C,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAE3B,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,uDAU4B;AAT1B,mHAAA,eAAe,OAAA;AACf,0HAAA,sBAAsB,OAAA;AACtB,yHAAA,qBAAqB,OAAA;AACrB,+HAAA,2BAA2B,OAAA;AAC3B,2HAAA,uBAAuB,OAAA;AACvB,mHAAA,eAAe,OAAA;AACf,uHAAA,mBAAmB,OAAA;AACnB,4HAAA,wBAAwB,OAAA;AACxB,0HAAA,sBAAsB,OAAA;AAIxB,iCAA8F;AAArF,oGAAA,WAAW,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAE5E,2CAAgE;AAAvD,8GAAA,gBAAgB,OAAA;AAAE,4GAAA,cAAc,OAAA;AAQzC,gDAwD4B;AAvD1B,iGAAA,IAAI,OAAA;AACJ,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,gHAAA,mBAAmB,OAAA;AACnB,0GAAA,aAAa,OAAA;AACb,wGAAA,WAAW,OAAA;AACX,iHAAA,oBAAoB,OAAA;AACpB,gHAAA,mBAAmB,OAAA;AACnB,sGAAA,SAAS,OAAA;AACT,iHAAA,oBAAoB,OAAA;AACpB,mHAAA,sBAAsB,OAAA;AACtB,uHAAA,0BAA0B,OAAA;AAC1B,4GAAA,eAAe,OAAA;AACf,uGAAA,UAAU,OAAA;AACV,gHAAA,mBAAmB,OAAA;AACnB,4HAAA,+BAA+B,OAAA;AAC/B,6GAAA,gBAAgB,OAAA;AAChB,yGAAA,YAAY,OAAA;AACZ,oHAAA,uBAAuB,OAAA;AACvB,oGAAA,OAAO,OAAA;AACP,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,2GAAA,cAAc,OAAA;AACd,sGAAA,SAAS,OAAA;AACT,6GAAA,gBAAgB,OAAA;AAChB,oGAAA,OAAO,OAAA;AACP,2GAAA,cAAc,OAAA;AACd,yGAAA,YAAY,OAAA;AACZ,oGAAA,OAAO,OAAA;AACP,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,kGAAA,KAAK,OAAA;AACL,yHAAA,4BAA4B,OAAA;AAC5B,kGAAA,KAAK,OAAA;AACL,yGAAA,YAAY,OAAA;AACZ,mGAAA,MAAM,OAAA;AACN,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,wGAAA,WAAW,OAAA;AACX,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,6GAAA,gBAAgB,OAAA;AAChB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,wGAAA,WAAW,OAAA;AACX,gHAAA,mBAAmB,OAAA;AACnB,qGAAA,QAAQ,OAAA;AACR,iGAAA,IAAI,OAAA;AACJ,0HAAA,6BAA6B,OAAA;AAC7B,8GAAA,iBAAiB,OAAA;AACjB,uHAAA,0BAA0B,OAAA;AAC1B,oGAAA,OAAO,OAAA","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n} from './instrumentations';\nexport type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, defaultMetas, defaultViewMeta, pageMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n Conventions,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n} from '@grafana/faro-core';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,mCAAkE;AAAzD,gHAAA,sBAAsB,OAAA;AAAE,wGAAA,cAAc,OAAA;AAG/C,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAE3B,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,uDAU4B;AAT1B,mHAAA,eAAe,OAAA;AACf,0HAAA,sBAAsB,OAAA;AACtB,yHAAA,qBAAqB,OAAA;AACrB,+HAAA,2BAA2B,OAAA;AAC3B,2HAAA,uBAAuB,OAAA;AACvB,mHAAA,eAAe,OAAA;AACf,uHAAA,mBAAmB,OAAA;AACnB,4HAAA,wBAAwB,OAAA;AACxB,0HAAA,sBAAsB,OAAA;AAIxB,iCAAuG;AAA9F,oGAAA,WAAW,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,gGAAA,OAAO,OAAA;AAErF,2CAAgE;AAAvD,8GAAA,gBAAgB,OAAA;AAAE,4GAAA,cAAc,OAAA;AAQzC,gDAwD4B;AAvD1B,iGAAA,IAAI,OAAA;AACJ,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,gHAAA,mBAAmB,OAAA;AACnB,0GAAA,aAAa,OAAA;AACb,wGAAA,WAAW,OAAA;AACX,iHAAA,oBAAoB,OAAA;AACpB,gHAAA,mBAAmB,OAAA;AACnB,sGAAA,SAAS,OAAA;AACT,iHAAA,oBAAoB,OAAA;AACpB,mHAAA,sBAAsB,OAAA;AACtB,uHAAA,0BAA0B,OAAA;AAC1B,4GAAA,eAAe,OAAA;AACf,uGAAA,UAAU,OAAA;AACV,gHAAA,mBAAmB,OAAA;AACnB,4HAAA,+BAA+B,OAAA;AAC/B,6GAAA,gBAAgB,OAAA;AAChB,yGAAA,YAAY,OAAA;AACZ,oHAAA,uBAAuB,OAAA;AACvB,oGAAA,OAAO,OAAA;AACP,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,2GAAA,cAAc,OAAA;AACd,sGAAA,SAAS,OAAA;AACT,6GAAA,gBAAgB,OAAA;AAChB,oGAAA,OAAO,OAAA;AACP,2GAAA,cAAc,OAAA;AACd,yGAAA,YAAY,OAAA;AACZ,oGAAA,OAAO,OAAA;AACP,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,kGAAA,KAAK,OAAA;AACL,yHAAA,4BAA4B,OAAA;AAC5B,kGAAA,KAAK,OAAA;AACL,yGAAA,YAAY,OAAA;AACZ,mGAAA,MAAM,OAAA;AACN,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,wGAAA,WAAW,OAAA;AACX,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,6GAAA,gBAAgB,OAAA;AAChB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,wGAAA,WAAW,OAAA;AACX,gHAAA,mBAAmB,OAAA;AACnB,qGAAA,QAAQ,OAAA;AACR,iGAAA,IAAI,OAAA;AACJ,0HAAA,6BAA6B,OAAA;AAC7B,8GAAA,iBAAiB,OAAA;AACjB,uHAAA,0BAA0B,OAAA;AAC1B,oGAAA,OAAO,OAAA","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n} from './instrumentations';\nexport type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, defaultMetas, defaultViewMeta, pageMeta, sdkMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n Conventions,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n} from '@grafana/faro-core';\n"]}
@@ -17,5 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.SessionInstrumentation = void 0;
18
18
  var instrumentation_1 = require("./instrumentation");
19
19
  Object.defineProperty(exports, "SessionInstrumentation", { enumerable: true, get: function () { return instrumentation_1.SessionInstrumentation; } });
20
- __exportStar(require("./sessionHandler"), exports);
20
+ __exportStar(require("./sessionManager"), exports);
21
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAA2D;AAAlD,yHAAA,sBAAsB,OAAA;AAE/B,mDAAiC","sourcesContent":["export { SessionInstrumentation } from './instrumentation';\n\nexport * from './sessionHandler';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAA2D;AAAlD,yHAAA,sBAAsB,OAAA;AAE/B,mDAAiC","sourcesContent":["export { SessionInstrumentation } from './instrumentation';\n\nexport * from './sessionManager';\n"]}
@@ -26,7 +26,9 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.SessionInstrumentation = void 0;
28
28
  var faro_core_1 = require("@grafana/faro-core");
29
- var sessionHandler_1 = require("./sessionHandler");
29
+ var webStorage_1 = require("../../utils/webStorage");
30
+ var PersistentSessionsManager_1 = require("./sessionManager/PersistentSessionsManager");
31
+ var VolatileSessionManager_1 = require("./sessionManager/VolatileSessionManager");
30
32
  var SessionInstrumentation = /** @class */ (function (_super) {
31
33
  __extends(SessionInstrumentation, _super);
32
34
  function SessionInstrumentation() {
@@ -45,20 +47,29 @@ var SessionInstrumentation = /** @class */ (function (_super) {
45
47
  this.api.pushEvent(faro_core_1.Conventions.EventNames.SESSION_START, {}, undefined, { skipDedupe: true });
46
48
  }
47
49
  };
50
+ SessionInstrumentation.prototype.getSessionManagerInstanceByConfiguredStrategy = function (initialSessionId) {
51
+ var _a;
52
+ if (((_a = this.config.experimentalSessions) === null || _a === void 0 ? void 0 : _a.persistent) && webStorage_1.isLocalStorageAvailable) {
53
+ return new PersistentSessionsManager_1.PersistentSessionsManager(initialSessionId);
54
+ }
55
+ if (webStorage_1.isSessionStorageAvailable) {
56
+ return new VolatileSessionManager_1.VolatileSessionsManager(initialSessionId);
57
+ }
58
+ return null;
59
+ };
48
60
  SessionInstrumentation.prototype.initialize = function () {
49
- var _this = this;
50
61
  var _a, _b, _c;
51
62
  this.logDebug('init session instrumentation');
52
63
  this.sendSessionStartEvent(this.metas.value);
53
64
  this.metas.addListener(this.sendSessionStartEvent.bind(this));
54
65
  if ((_a = this.config.experimentalSessions) === null || _a === void 0 ? void 0 : _a.enabled) {
55
- this.sessionUpdater = (0, sessionHandler_1.getSessionUpdater)((_b = this.metas.value.session) === null || _b === void 0 ? void 0 : _b.id);
56
- this.sessionUpdater.init();
57
- (_c = this.transports) === null || _c === void 0 ? void 0 : _c.addBeforeSendHooks.apply(_c, __spreadArray(__spreadArray([], this.transports.getBeforeSendHooks(), false), [function (item) {
58
- var _a;
59
- (_a = _this.sessionUpdater) === null || _a === void 0 ? void 0 : _a.handleUpdate();
60
- return item;
61
- }], false));
66
+ var sessionManager_1 = this.getSessionManagerInstanceByConfiguredStrategy((_b = this.metas.value.session) === null || _b === void 0 ? void 0 : _b.id);
67
+ if (sessionManager_1 != null) {
68
+ (_c = this.transports) === null || _c === void 0 ? void 0 : _c.addBeforeSendHooks.apply(_c, __spreadArray(__spreadArray([], this.transports.getBeforeSendHooks(), false), [function (item) {
69
+ sessionManager_1 === null || sessionManager_1 === void 0 ? void 0 : sessionManager_1.updateSession();
70
+ return item;
71
+ }], false));
72
+ }
62
73
  }
63
74
  };
64
75
  return SessionInstrumentation;
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkG;AAElG,mDAAyE;AAEzE;IAA4C,0CAAmB;IAA/D;QAAA,qEAsCC;QArCU,UAAI,GAAG,+CAA+C,CAAC;QACvD,aAAO,GAAG,mBAAO,CAAC;;IAoC7B,CAAC;IA5BS,sDAAqB,GAA7B,UAA8B,IAAU;;QACtC,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,MAAK,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE,CAAA,EAAE;YACtD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAE/B,8EAA8E;YAC9E,gBAAgB;YAChB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAW,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/F;IACH,CAAC;IAED,2CAAU,GAAV;QAAA,iBAeC;;QAdC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QAE9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9D,IAAI,MAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,0CAAE,OAAO,EAAE;YAC7C,IAAI,CAAC,cAAc,GAAG,IAAA,kCAAiB,EAAC,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,0CAAE,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAE3B,MAAA,IAAI,CAAC,UAAU,0CAAE,kBAAkB,2CAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,WAAE,UAAC,IAAS;;oBACrF,MAAA,KAAI,CAAC,cAAc,0CAAE,YAAY,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC;gBACd,CAAC,UAAC,CAAC;SACJ;IACH,CAAC;IACH,6BAAC;AAAD,CAAC,AAtCD,CAA4C,+BAAmB,GAsC9D;AAtCY,wDAAsB","sourcesContent":["import { BaseInstrumentation, Conventions, Meta, MetaSession, VERSION } from '@grafana/faro-core';\n\nimport { getSessionUpdater, UserSessionUpdater } from './sessionHandler';\n\nexport class SessionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-session';\n readonly version = VERSION;\n\n // previously notified session, to ensure we don't send session start\n // event twice for the same session\n private notifiedSession: MetaSession | undefined;\n\n private sessionUpdater: UserSessionUpdater | undefined;\n\n private sendSessionStartEvent(meta: Meta): void {\n const session = meta.session;\n\n if (session && session.id !== this.notifiedSession?.id) {\n this.notifiedSession = session;\n\n // no need to add attributes and session id, they are included as part of meta\n // automatically\n this.api.pushEvent(Conventions.EventNames.SESSION_START, {}, undefined, { skipDedupe: true });\n }\n }\n\n initialize() {\n this.logDebug('init session instrumentation');\n\n this.sendSessionStartEvent(this.metas.value);\n this.metas.addListener(this.sendSessionStartEvent.bind(this));\n\n if (this.config.experimentalSessions?.enabled) {\n this.sessionUpdater = getSessionUpdater(this.metas.value.session?.id);\n this.sessionUpdater.init();\n\n this.transports?.addBeforeSendHooks(...this.transports.getBeforeSendHooks(), (item: any) => {\n this.sessionUpdater?.handleUpdate();\n return item;\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkG;AAElG,qDAA4F;AAE5F,wFAAuF;AACvF,kFAAkF;AAElF;IAA4C,0CAAmB;IAA/D;QAAA,qEAmDC;QAlDU,UAAI,GAAG,+CAA+C,CAAC;QACvD,aAAO,GAAG,mBAAO,CAAC;;IAiD7B,CAAC;IA3CS,sDAAqB,GAA7B,UAA8B,IAAU;;QACtC,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,MAAK,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE,CAAA,EAAE;YACtD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAE/B,8EAA8E;YAC9E,gBAAgB;YAChB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAW,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;SAC/F;IACH,CAAC;IAEO,8EAA6C,GAArD,UACE,gBAAyB;;QAEzB,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,0CAAE,UAAU,KAAI,oCAAuB,EAAE;YAC3E,OAAO,IAAI,qDAAyB,CAAC,gBAAgB,CAAC,CAAC;SACxD;QAED,IAAI,sCAAyB,EAAE;YAC7B,OAAO,IAAI,gDAAuB,CAAC,gBAAgB,CAAC,CAAC;SACtD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2CAAU,GAAV;;QACE,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QAE9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9D,IAAI,MAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,0CAAE,OAAO,EAAE;YAC7C,IAAM,gBAAc,GAAG,IAAI,CAAC,6CAA6C,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,0CAAE,EAAE,CAAC,CAAC;YAExG,IAAI,gBAAc,IAAI,IAAI,EAAE;gBAC1B,MAAA,IAAI,CAAC,UAAU,0CAAE,kBAAkB,2CAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,WAAE,UAAC,IAAS;wBACrF,gBAAc,aAAd,gBAAc,uBAAd,gBAAc,CAAE,aAAa,EAAE,CAAC;wBAChC,OAAO,IAAI,CAAC;oBACd,CAAC,UAAC,CAAC;aACJ;SACF;IACH,CAAC;IACH,6BAAC;AAAD,CAAC,AAnDD,CAA4C,+BAAmB,GAmD9D;AAnDY,wDAAsB","sourcesContent":["import { BaseInstrumentation, Conventions, Meta, MetaSession, VERSION } from '@grafana/faro-core';\n\nimport { isLocalStorageAvailable, isSessionStorageAvailable } from '../../utils/webStorage';\n\nimport { PersistentSessionsManager } from './sessionManager/PersistentSessionsManager';\nimport { VolatileSessionsManager } from './sessionManager/VolatileSessionManager';\n\nexport class SessionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-session';\n readonly version = VERSION;\n\n // previously notified session, to ensure we don't send session start\n // event twice for the same session\n private notifiedSession: MetaSession | undefined;\n\n private sendSessionStartEvent(meta: Meta): void {\n const session = meta.session;\n\n if (session && session.id !== this.notifiedSession?.id) {\n this.notifiedSession = session;\n\n // no need to add attributes and session id, they are included as part of meta\n // automatically\n this.api.pushEvent(Conventions.EventNames.SESSION_START, {}, undefined, { skipDedupe: true });\n }\n }\n\n private getSessionManagerInstanceByConfiguredStrategy(\n initialSessionId?: string\n ): PersistentSessionsManager | VolatileSessionsManager | null {\n if (this.config.experimentalSessions?.persistent && isLocalStorageAvailable) {\n return new PersistentSessionsManager(initialSessionId);\n }\n\n if (isSessionStorageAvailable) {\n return new VolatileSessionsManager(initialSessionId);\n }\n\n return null;\n }\n\n initialize() {\n this.logDebug('init session instrumentation');\n\n this.sendSessionStartEvent(this.metas.value);\n this.metas.addListener(this.sendSessionStartEvent.bind(this));\n\n if (this.config.experimentalSessions?.enabled) {\n const sessionManager = this.getSessionManagerInstanceByConfiguredStrategy(this.metas.value.session?.id);\n\n if (sessionManager != null) {\n this.transports?.addBeforeSendHooks(...this.transports.getBeforeSendHooks(), (item: any) => {\n sessionManager?.updateSession();\n return item;\n });\n }\n }\n }\n}\n"]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PersistentSessionsManager = void 0;
4
+ var faro_core_1 = require("@grafana/faro-core");
5
+ var utils_1 = require("../../../utils");
6
+ var webStorage_1 = require("../../../utils/webStorage");
7
+ var sessionManagerUtils_1 = require("./sessionManagerUtils");
8
+ var PersistentSessionsManager = /** @class */ (function () {
9
+ function PersistentSessionsManager(initialSessionId) {
10
+ var _this = this;
11
+ this.initialSessionId = initialSessionId;
12
+ this.updateSession = (0, utils_1.throttle)(function () { return _this.updateUserSession(); }, sessionManagerUtils_1.STORAGE_UPDATE_DELAY);
13
+ this.updateUserSession = (0, sessionManagerUtils_1.getUserSessionUpdater)({
14
+ fetchUserSession: PersistentSessionsManager.fetchUserSession,
15
+ storeUserSession: PersistentSessionsManager.storeUserSession,
16
+ });
17
+ this.init();
18
+ }
19
+ PersistentSessionsManager.removeUserSession = function () {
20
+ (0, webStorage_1.removeItem)(sessionManagerUtils_1.STORAGE_KEY, PersistentSessionsManager.storageTypeLocal);
21
+ };
22
+ PersistentSessionsManager.storeUserSession = function (session) {
23
+ (0, webStorage_1.setItem)(sessionManagerUtils_1.STORAGE_KEY, JSON.stringify(session), PersistentSessionsManager.storageTypeLocal);
24
+ };
25
+ PersistentSessionsManager.fetchUserSession = function () {
26
+ var storedSession = (0, webStorage_1.getItem)(sessionManagerUtils_1.STORAGE_KEY, PersistentSessionsManager.storageTypeLocal);
27
+ if (storedSession) {
28
+ return JSON.parse(storedSession);
29
+ }
30
+ return null;
31
+ };
32
+ PersistentSessionsManager.prototype.init = function () {
33
+ var _this = this;
34
+ PersistentSessionsManager.storeUserSession((0, sessionManagerUtils_1.createUserSessionObject)(this.initialSessionId));
35
+ document.addEventListener('visibilitychange', function () {
36
+ if (document.visibilityState === 'visible') {
37
+ _this.updateSession();
38
+ }
39
+ });
40
+ window.addEventListener('storage', function (event) {
41
+ var _a, _b, _c;
42
+ if (event.key !== sessionManagerUtils_1.STORAGE_KEY) {
43
+ return;
44
+ }
45
+ var newSession = JSON.parse((_a = event.newValue) !== null && _a !== void 0 ? _a : '');
46
+ var previousSession = JSON.parse((_b = event.oldValue) !== null && _b !== void 0 ? _b : '');
47
+ if (newSession.sessionId !== previousSession.sessionId) {
48
+ (_c = faro_core_1.faro.api) === null || _c === void 0 ? void 0 : _c.setSession(newSession.sessionMeta);
49
+ }
50
+ });
51
+ // Users can call the setSession() method, so we need to sync this with the local storage session
52
+ faro_core_1.faro.metas.addListener(function syncSessionIfChangedExternally(meta) {
53
+ var session = meta.session;
54
+ var sessionFromLocalStorage = PersistentSessionsManager.fetchUserSession();
55
+ if (session && session.id !== (sessionFromLocalStorage === null || sessionFromLocalStorage === void 0 ? void 0 : sessionFromLocalStorage.sessionId)) {
56
+ var userSession = (0, sessionManagerUtils_1.addSessionMetadataToNextSession)((0, sessionManagerUtils_1.createUserSessionObject)(session.id), sessionFromLocalStorage);
57
+ PersistentSessionsManager.storeUserSession(userSession);
58
+ faro_core_1.faro.api.setSession(userSession.sessionMeta);
59
+ }
60
+ });
61
+ };
62
+ PersistentSessionsManager.storageTypeLocal = webStorage_1.webStorageType.local;
63
+ return PersistentSessionsManager;
64
+ }());
65
+ exports.PersistentSessionsManager = PersistentSessionsManager;
66
+ //# sourceMappingURL=PersistentSessionsManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistentSessionsManager.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/PersistentSessionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { faro } from '@grafana/faro-core';\nimport type { Meta } from '@grafana/faro-core';\n\nimport { throttle } from '../../../utils';\nimport { getItem, removeItem, setItem, webStorageType } from '../../../utils/webStorage';\n\nimport {\n addSessionMetadataToNextSession,\n createUserSessionObject,\n getUserSessionUpdater,\n STORAGE_KEY,\n STORAGE_UPDATE_DELAY,\n} from './sessionManagerUtils';\nimport type { FaroUserSession } from './types';\n\nexport class PersistentSessionsManager {\n private static storageTypeLocal = webStorageType.local;\n private updateUserSession: ReturnType<typeof getUserSessionUpdater>;\n\n constructor(private initialSessionId?: string) {\n this.updateUserSession = getUserSessionUpdater({\n fetchUserSession: PersistentSessionsManager.fetchUserSession,\n storeUserSession: PersistentSessionsManager.storeUserSession,\n });\n\n this.init();\n }\n\n static removeUserSession() {\n removeItem(STORAGE_KEY, PersistentSessionsManager.storageTypeLocal);\n }\n\n static storeUserSession(session: FaroUserSession): void {\n setItem(STORAGE_KEY, JSON.stringify(session), PersistentSessionsManager.storageTypeLocal);\n }\n\n static fetchUserSession(): FaroUserSession | null {\n const storedSession = getItem(STORAGE_KEY, PersistentSessionsManager.storageTypeLocal);\n\n if (storedSession) {\n return JSON.parse(storedSession) as FaroUserSession;\n }\n\n return null;\n }\n\n updateSession = throttle(() => this.updateUserSession(), STORAGE_UPDATE_DELAY);\n\n private init(): void {\n PersistentSessionsManager.storeUserSession(createUserSessionObject(this.initialSessionId));\n\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n this.updateSession();\n }\n });\n\n window.addEventListener('storage', (event: StorageEvent) => {\n if (event.key !== STORAGE_KEY) {\n return;\n }\n\n const newSession: FaroUserSession = JSON.parse(event.newValue ?? '');\n const previousSession: FaroUserSession = JSON.parse(event.oldValue ?? '');\n\n if (newSession.sessionId !== previousSession.sessionId) {\n faro.api?.setSession(newSession.sessionMeta);\n }\n });\n\n // Users can call the setSession() method, so we need to sync this with the local storage session\n faro.metas.addListener(function syncSessionIfChangedExternally(meta: Meta) {\n const session = meta.session;\n const sessionFromLocalStorage = PersistentSessionsManager.fetchUserSession();\n\n if (session && session.id !== sessionFromLocalStorage?.sessionId) {\n const userSession = addSessionMetadataToNextSession(\n createUserSessionObject(session.id),\n sessionFromLocalStorage\n );\n\n PersistentSessionsManager.storeUserSession(userSession);\n faro.api.setSession(userSession.sessionMeta);\n }\n });\n }\n}\n"]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VolatileSessionsManager = void 0;
4
+ var faro_core_1 = require("@grafana/faro-core");
5
+ var utils_1 = require("../../../utils");
6
+ var webStorage_1 = require("../../../utils/webStorage");
7
+ var sessionManagerUtils_1 = require("./sessionManagerUtils");
8
+ var VolatileSessionsManager = /** @class */ (function () {
9
+ function VolatileSessionsManager(initialSessionId) {
10
+ var _this = this;
11
+ this.initialSessionId = initialSessionId;
12
+ this.updateSession = (0, utils_1.throttle)(function () { return _this.updateUserSession(); }, sessionManagerUtils_1.STORAGE_UPDATE_DELAY);
13
+ this.updateUserSession = (0, sessionManagerUtils_1.getUserSessionUpdater)({
14
+ fetchUserSession: VolatileSessionsManager.fetchUserSession,
15
+ storeUserSession: VolatileSessionsManager.storeUserSession,
16
+ });
17
+ this.init();
18
+ }
19
+ VolatileSessionsManager.removeUserSession = function () {
20
+ (0, webStorage_1.removeItem)(sessionManagerUtils_1.STORAGE_KEY, VolatileSessionsManager.storageTypeSession);
21
+ };
22
+ VolatileSessionsManager.storeUserSession = function (session) {
23
+ (0, webStorage_1.setItem)(sessionManagerUtils_1.STORAGE_KEY, JSON.stringify(session), VolatileSessionsManager.storageTypeSession);
24
+ };
25
+ VolatileSessionsManager.fetchUserSession = function () {
26
+ var storedSession = (0, webStorage_1.getItem)(sessionManagerUtils_1.STORAGE_KEY, VolatileSessionsManager.storageTypeSession);
27
+ if (storedSession) {
28
+ return JSON.parse(storedSession);
29
+ }
30
+ return null;
31
+ };
32
+ VolatileSessionsManager.prototype.init = function () {
33
+ var _this = this;
34
+ VolatileSessionsManager.storeUserSession((0, sessionManagerUtils_1.createUserSessionObject)(this.initialSessionId));
35
+ document.addEventListener('visibilitychange', function () {
36
+ if (document.visibilityState === 'visible') {
37
+ _this.updateSession();
38
+ }
39
+ });
40
+ // Users can call the setSession() method, so we need to sync this with the local storage session
41
+ faro_core_1.faro.metas.addListener(function syncSessionIfChangedExternally(meta) {
42
+ var session = meta.session;
43
+ var sessionFromSessionStorage = VolatileSessionsManager.fetchUserSession();
44
+ if (session && session.id !== (sessionFromSessionStorage === null || sessionFromSessionStorage === void 0 ? void 0 : sessionFromSessionStorage.sessionId)) {
45
+ var userSession = (0, sessionManagerUtils_1.addSessionMetadataToNextSession)((0, sessionManagerUtils_1.createUserSessionObject)(session.id), sessionFromSessionStorage);
46
+ VolatileSessionsManager.storeUserSession(userSession);
47
+ faro_core_1.faro.api.setSession(userSession.sessionMeta);
48
+ }
49
+ });
50
+ };
51
+ VolatileSessionsManager.storageTypeSession = webStorage_1.webStorageType.session;
52
+ return VolatileSessionsManager;
53
+ }());
54
+ exports.VolatileSessionsManager = VolatileSessionsManager;
55
+ //# sourceMappingURL=VolatileSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolatileSessionManager.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/VolatileSessionManager.ts"],"names":[],"mappings":";;;AAAA,gDAA0C;AAG1C,wCAA0C;AAC1C,wDAAyF;AAEzF,6DAM+B;AAG/B;IAIE,iCAAoB,gBAAyB;QAA7C,iBAOC;QAPmB,qBAAgB,GAAhB,gBAAgB,CAAS;QA2B7C,kBAAa,GAAG,IAAA,gBAAQ,EAAC,cAAM,OAAA,KAAI,CAAC,iBAAiB,EAAE,EAAxB,CAAwB,EAAE,0CAAoB,CAAC,CAAC;QA1B7E,IAAI,CAAC,iBAAiB,GAAG,IAAA,2CAAqB,EAAC;YAC7C,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;YAC1D,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;SAC3D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEM,yCAAiB,GAAxB;QACE,IAAA,uBAAU,EAAC,iCAAW,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAEM,wCAAgB,GAAvB,UAAwB,OAAwB;QAC9C,IAAA,oBAAO,EAAC,iCAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IAC5F,CAAC;IAEM,wCAAgB,GAAvB;QACE,IAAM,aAAa,GAAG,IAAA,oBAAO,EAAC,iCAAW,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAEvF,IAAI,aAAa,EAAE;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAoB,CAAC;SACrD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAIO,sCAAI,GAAZ;QAAA,iBAwBC;QAvBC,uBAAuB,CAAC,gBAAgB,CAAC,IAAA,6CAAuB,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEzF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YAC5C,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE;gBAC1C,KAAI,CAAC,aAAa,EAAE,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,iGAAiG;QACjG,gBAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,8BAA8B,CAAC,IAAU;YACvE,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAM,yBAAyB,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,CAAC;YAE7E,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,MAAK,yBAAyB,aAAzB,yBAAyB,uBAAzB,yBAAyB,CAAE,SAAS,CAAA,EAAE;gBAClE,IAAM,WAAW,GAAG,IAAA,qDAA+B,EACjD,IAAA,6CAAuB,EAAC,OAAO,CAAC,EAAE,CAAC,EACnC,yBAAyB,CAC1B,CAAC;gBAEF,uBAAuB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACtD,gBAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;aAC9C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAxDc,0CAAkB,GAAG,2BAAc,CAAC,OAAO,CAAC;IAyD7D,8BAAC;CAAA,AA1DD,IA0DC;AA1DY,0DAAuB","sourcesContent":["import { faro } from '@grafana/faro-core';\nimport type { Meta } from '@grafana/faro-core';\n\nimport { throttle } from '../../../utils';\nimport { getItem, removeItem, setItem, webStorageType } from '../../../utils/webStorage';\n\nimport {\n addSessionMetadataToNextSession,\n createUserSessionObject,\n getUserSessionUpdater,\n STORAGE_KEY,\n STORAGE_UPDATE_DELAY,\n} from './sessionManagerUtils';\nimport type { FaroUserSession } from './types';\n\nexport class VolatileSessionsManager {\n private static storageTypeSession = webStorageType.session;\n private updateUserSession: ReturnType<typeof getUserSessionUpdater>;\n\n constructor(private initialSessionId?: string) {\n this.updateUserSession = getUserSessionUpdater({\n fetchUserSession: VolatileSessionsManager.fetchUserSession,\n storeUserSession: VolatileSessionsManager.storeUserSession,\n });\n\n this.init();\n }\n\n static removeUserSession() {\n removeItem(STORAGE_KEY, VolatileSessionsManager.storageTypeSession);\n }\n\n static storeUserSession(session: FaroUserSession): void {\n setItem(STORAGE_KEY, JSON.stringify(session), VolatileSessionsManager.storageTypeSession);\n }\n\n static fetchUserSession(): FaroUserSession | null {\n const storedSession = getItem(STORAGE_KEY, VolatileSessionsManager.storageTypeSession);\n\n if (storedSession) {\n return JSON.parse(storedSession) as FaroUserSession;\n }\n\n return null;\n }\n\n updateSession = throttle(() => this.updateUserSession(), STORAGE_UPDATE_DELAY);\n\n private init(): void {\n VolatileSessionsManager.storeUserSession(createUserSessionObject(this.initialSessionId));\n\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n this.updateSession();\n }\n });\n\n // Users can call the setSession() method, so we need to sync this with the local storage session\n faro.metas.addListener(function syncSessionIfChangedExternally(meta: Meta) {\n const session = meta.session;\n const sessionFromSessionStorage = VolatileSessionsManager.fetchUserSession();\n\n if (session && session.id !== sessionFromSessionStorage?.sessionId) {\n const userSession = addSessionMetadataToNextSession(\n createUserSessionObject(session.id),\n sessionFromSessionStorage\n );\n\n VolatileSessionsManager.storeUserSession(userSession);\n faro.api.setSession(userSession.sessionMeta);\n }\n });\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VolatileSessionsManager = exports.PersistentSessionsManager = void 0;
4
+ var PersistentSessionsManager_1 = require("./PersistentSessionsManager");
5
+ Object.defineProperty(exports, "PersistentSessionsManager", { enumerable: true, get: function () { return PersistentSessionsManager_1.PersistentSessionsManager; } });
6
+ var VolatileSessionManager_1 = require("./VolatileSessionManager");
7
+ Object.defineProperty(exports, "VolatileSessionsManager", { enumerable: true, get: function () { return VolatileSessionManager_1.VolatileSessionsManager; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/index.ts"],"names":[],"mappings":";;;AAAA,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA;AAClC,mEAAmE;AAA1D,iIAAA,uBAAuB,OAAA","sourcesContent":["export { PersistentSessionsManager } from './PersistentSessionsManager';\nexport { VolatileSessionsManager } from './VolatileSessionManager';\nexport type { FaroUserSession } from './types';\n"]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.addSessionMetadataToNextSession = exports.getUserSessionUpdater = exports.isUserSessionValid = exports.createUserSessionObject = exports.MAX_SESSION_PERSISTENCE_TIME = exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER = exports.STORAGE_UPDATE_DELAY = exports.SESSION_INACTIVITY_TIME = exports.SESSION_EXPIRATION_TIME = exports.STORAGE_KEY = void 0;
15
+ var faro_core_1 = require("@grafana/faro-core");
16
+ // TODO: add tests
17
+ exports.STORAGE_KEY = '__FARO_SESSION__';
18
+ exports.SESSION_EXPIRATION_TIME = 4 * 60 * 60 * 1000; // hrs
19
+ exports.SESSION_INACTIVITY_TIME = 15 * 60 * 1000; // minutes
20
+ exports.STORAGE_UPDATE_DELAY = 1 * 1000; // seconds
21
+ exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER = 5 * 60 * 1000;
22
+ exports.MAX_SESSION_PERSISTENCE_TIME = exports.SESSION_EXPIRATION_TIME + exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER;
23
+ function createUserSessionObject(sessionId) {
24
+ var now = (0, faro_core_1.dateNow)();
25
+ return {
26
+ sessionId: sessionId !== null && sessionId !== void 0 ? sessionId : (0, faro_core_1.genShortID)(),
27
+ lastActivity: now,
28
+ started: now,
29
+ };
30
+ }
31
+ exports.createUserSessionObject = createUserSessionObject;
32
+ function isUserSessionValid(session) {
33
+ if (session == null) {
34
+ return false;
35
+ }
36
+ var now = (0, faro_core_1.dateNow)();
37
+ var lifetimeValid = now - session.started < exports.SESSION_EXPIRATION_TIME;
38
+ if (!lifetimeValid) {
39
+ return false;
40
+ }
41
+ var inactivityPeriodValid = now - session.lastActivity < exports.SESSION_INACTIVITY_TIME;
42
+ return inactivityPeriodValid;
43
+ }
44
+ exports.isUserSessionValid = isUserSessionValid;
45
+ function getUserSessionUpdater(_a) {
46
+ var fetchUserSession = _a.fetchUserSession, storeUserSession = _a.storeUserSession;
47
+ return function updateSession() {
48
+ var _a, _b, _c, _d;
49
+ if (!fetchUserSession || !storeUserSession) {
50
+ return;
51
+ }
52
+ var sessionFromStorage = fetchUserSession();
53
+ if (isUserSessionValid(sessionFromStorage)) {
54
+ storeUserSession(__assign(__assign({}, sessionFromStorage), { lastActivity: (0, faro_core_1.dateNow)() }));
55
+ }
56
+ else {
57
+ var newSession = addSessionMetadataToNextSession(createUserSessionObject(), sessionFromStorage);
58
+ storeUserSession(newSession);
59
+ (_a = faro_core_1.faro.api) === null || _a === void 0 ? void 0 : _a.setSession(newSession.sessionMeta);
60
+ (_c = (_b = faro_core_1.faro.config.experimentalSessions) === null || _b === void 0 ? void 0 : _b.onSessionChange) === null || _c === void 0 ? void 0 : _c.call(_b, (_d = sessionFromStorage === null || sessionFromStorage === void 0 ? void 0 : sessionFromStorage.sessionMeta) !== null && _d !== void 0 ? _d : null, newSession.sessionMeta);
61
+ }
62
+ };
63
+ }
64
+ exports.getUserSessionUpdater = getUserSessionUpdater;
65
+ function addSessionMetadataToNextSession(newSession, previousSession) {
66
+ var _a;
67
+ var sessionWithMeta = __assign(__assign({}, newSession), { sessionMeta: {
68
+ id: newSession.sessionId,
69
+ } });
70
+ var metaAttributes = (_a = faro_core_1.faro.metas.value.session) === null || _a === void 0 ? void 0 : _a.attributes;
71
+ if (metaAttributes || previousSession != null) {
72
+ sessionWithMeta.sessionMeta.attributes = __assign(__assign({}, (metaAttributes !== null && metaAttributes !== void 0 ? metaAttributes : {})), (previousSession != null ? { previousSession: previousSession.sessionId } : {}));
73
+ }
74
+ return sessionWithMeta;
75
+ }
76
+ exports.addSessionMetadataToNextSession = addSessionMetadataToNextSession;
77
+ //# sourceMappingURL=sessionManagerUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManagerUtils.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/sessionManagerUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAA+D;AAI/D,kBAAkB;AAEL,QAAA,WAAW,GAAG,kBAAkB,CAAC;AACjC,QAAA,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM;AACpD,QAAA,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;AACpD,QAAA,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU;AAE3C,QAAA,mCAAmC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACpD,QAAA,4BAA4B,GAAG,+BAAuB,GAAG,2CAAmC,CAAC;AAE1G,SAAgB,uBAAuB,CAAC,SAAkB;IACxD,IAAM,GAAG,GAAG,IAAA,mBAAO,GAAE,CAAC;IAEtB,OAAO;QACL,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAA,sBAAU,GAAE;QACpC,YAAY,EAAE,GAAG;QACjB,OAAO,EAAE,GAAG;KACb,CAAC;AACJ,CAAC;AARD,0DAQC;AAED,SAAgB,kBAAkB,CAAC,OAA+B;IAChE,IAAI,OAAO,IAAI,IAAI,EAAE;QACnB,OAAO,KAAK,CAAC;KACd;IAED,IAAM,GAAG,GAAG,IAAA,mBAAO,GAAE,CAAC;IACtB,IAAM,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,GAAG,+BAAuB,CAAC;IAEtE,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IAED,IAAM,qBAAqB,GAAG,GAAG,GAAG,OAAO,CAAC,YAAY,GAAG,+BAAuB,CAAC;IACnF,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAdD,gDAcC;AAOD,SAAgB,qBAAqB,CAAC,EAAmE;QAAjE,gBAAgB,sBAAA,EAAE,gBAAgB,sBAAA;IACxE,OAAO,SAAS,aAAa;;QAC3B,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;YAC1C,OAAO;SACR;QAED,IAAM,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;QAE9C,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE;YAC1C,gBAAgB,uBAAM,kBAAmB,KAAE,YAAY,EAAE,IAAA,mBAAO,GAAE,IAAG,CAAC;SACvE;aAAM;YACL,IAAI,UAAU,GAAG,+BAA+B,CAAC,uBAAuB,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAEhG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE7B,MAAA,gBAAI,CAAC,GAAG,0CAAE,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAA,MAAA,gBAAI,CAAC,MAAM,CAAC,oBAAoB,0CAAE,eAAe,mDAC/C,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,WAAW,mCAAI,IAAI,EACvC,UAAU,CAAC,WAAY,CACxB,CAAC;SACH;IACH,CAAC,CAAC;AACJ,CAAC;AAtBD,sDAsBC;AAED,SAAgB,+BAA+B,CAAC,UAA2B,EAAE,eAAuC;;IAClH,IAAM,eAAe,yBAChB,UAAU,KACb,WAAW,EAAE;YACX,EAAE,EAAE,UAAU,CAAC,SAAS;SACzB,GACF,CAAC;IAEF,IAAM,cAAc,GAAG,MAAA,gBAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,0CAAE,UAAU,CAAC;IAC5D,IAAI,cAAc,IAAI,eAAe,IAAI,IAAI,EAAE;QAC7C,eAAe,CAAC,WAAW,CAAC,UAAU,yBACjC,CAAC,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,EAAE,CAAC,GACtB,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACnF,CAAC;KACH;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAjBD,0EAiBC","sourcesContent":["import { dateNow, faro, genShortID } from '@grafana/faro-core';\n\nimport type { FaroUserSession } from './types';\n\n// TODO: add tests\n\nexport const STORAGE_KEY = '__FARO_SESSION__';\nexport const SESSION_EXPIRATION_TIME = 4 * 60 * 60 * 1000; // hrs\nexport const SESSION_INACTIVITY_TIME = 15 * 60 * 1000; // minutes\nexport const STORAGE_UPDATE_DELAY = 1 * 1000; // seconds\n\nexport const MAX_SESSION_PERSISTENCE_TIME_BUFFER = 5 * 60 * 1000;\nexport const MAX_SESSION_PERSISTENCE_TIME = SESSION_EXPIRATION_TIME + MAX_SESSION_PERSISTENCE_TIME_BUFFER;\n\nexport function createUserSessionObject(sessionId?: string): FaroUserSession {\n const now = dateNow();\n\n return {\n sessionId: sessionId ?? genShortID(),\n lastActivity: now,\n started: now,\n };\n}\n\nexport function isUserSessionValid(session: FaroUserSession | null): boolean {\n if (session == null) {\n return false;\n }\n\n const now = dateNow();\n const lifetimeValid = now - session.started < SESSION_EXPIRATION_TIME;\n\n if (!lifetimeValid) {\n return false;\n }\n\n const inactivityPeriodValid = now - session.lastActivity < SESSION_INACTIVITY_TIME;\n return inactivityPeriodValid;\n}\n\ntype GetUserSessionUpdaterParams = {\n storeUserSession: (session: FaroUserSession) => void;\n fetchUserSession: () => FaroUserSession | null;\n};\n\nexport function getUserSessionUpdater({ fetchUserSession, storeUserSession }: GetUserSessionUpdaterParams): () => void {\n return function updateSession(): void {\n if (!fetchUserSession || !storeUserSession) {\n return;\n }\n\n const sessionFromStorage = fetchUserSession();\n\n if (isUserSessionValid(sessionFromStorage)) {\n storeUserSession({ ...sessionFromStorage!, lastActivity: dateNow() });\n } else {\n let newSession = addSessionMetadataToNextSession(createUserSessionObject(), sessionFromStorage);\n\n storeUserSession(newSession);\n\n faro.api?.setSession(newSession.sessionMeta);\n faro.config.experimentalSessions?.onSessionChange?.(\n sessionFromStorage?.sessionMeta ?? null,\n newSession.sessionMeta!\n );\n }\n };\n}\n\nexport function addSessionMetadataToNextSession(newSession: FaroUserSession, previousSession: FaroUserSession | null) {\n const sessionWithMeta: Required<FaroUserSession> = {\n ...newSession,\n sessionMeta: {\n id: newSession.sessionId,\n },\n };\n\n const metaAttributes = faro.metas.value.session?.attributes;\n if (metaAttributes || previousSession != null) {\n sessionWithMeta.sessionMeta.attributes = {\n ...(metaAttributes ?? {}),\n ...(previousSession != null ? { previousSession: previousSession.sessionId } : {}),\n };\n }\n\n return sessionWithMeta;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MetaSession } from '@grafana/faro-core';\n\nexport interface FaroUserSession {\n sessionId: string;\n lastActivity: number;\n started: number;\n sessionMeta?: MetaSession;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultViewMeta = exports.createSession = exports.pageMeta = exports.defaultMetas = exports.browserMeta = void 0;
3
+ exports.sdkMeta = exports.defaultViewMeta = exports.createSession = exports.pageMeta = exports.defaultMetas = exports.browserMeta = void 0;
4
4
  var browser_1 = require("./browser");
5
5
  Object.defineProperty(exports, "browserMeta", { enumerable: true, get: function () { return browser_1.browserMeta; } });
6
6
  var const_1 = require("./const");
@@ -11,4 +11,6 @@ var session_1 = require("./session");
11
11
  Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return session_1.createSession; } });
12
12
  var view_1 = require("./view");
13
13
  Object.defineProperty(exports, "defaultViewMeta", { enumerable: true, get: function () { return view_1.defaultViewMeta; } });
14
+ var sdk_1 = require("./sdk");
15
+ Object.defineProperty(exports, "sdkMeta", { enumerable: true, get: function () { return sdk_1.sdkMeta; } });
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metas/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AAEpB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAErB,+BAAkC;AAAzB,gGAAA,QAAQ,OAAA;AAEjB,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AAEtB,+BAAyC;AAAhC,uGAAA,eAAe,OAAA","sourcesContent":["export { browserMeta } from './browser';\n\nexport { defaultMetas } from './const';\n\nexport { pageMeta } from './page';\n\nexport { createSession } from './session';\n\nexport { defaultViewMeta } from './view';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metas/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AAEpB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAErB,+BAAkC;AAAzB,gGAAA,QAAQ,OAAA;AAEjB,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AAEtB,+BAAyC;AAAhC,uGAAA,eAAe,OAAA;AAExB,6BAAgC;AAAvB,8FAAA,OAAO,OAAA","sourcesContent":["export { browserMeta } from './browser';\n\nexport { defaultMetas } from './const';\n\nexport { pageMeta } from './page';\n\nexport { createSession } from './session';\n\nexport { defaultViewMeta } from './view';\n\nexport { sdkMeta } from './sdk';\n"]}
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.k6Meta = void 0;
4
4
  var k6Meta = function () {
5
5
  return {
6
- k6: {},
6
+ k6: {
7
+ isK6Browser: true,
8
+ },
7
9
  };
8
10
  };
9
11
  exports.k6Meta = k6Meta;
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/k6/meta.ts"],"names":[],"mappings":";;;AAEO,IAAM,MAAM,GAA+B;IAChD,OAAO;QACL,EAAE,EAAE,EAAE;KACP,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,MAAM,UAIjB","sourcesContent":["import type { Meta, MetaItem } from '@grafana/faro-core';\n\nexport const k6Meta: MetaItem<Pick<Meta, 'k6'>> = () => {\n return {\n k6: {},\n };\n};\n"]}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/k6/meta.ts"],"names":[],"mappings":";;;AAEO,IAAM,MAAM,GAA+B;IAChD,OAAO;QACL,EAAE,EAAE;YACF,WAAW,EAAE,IAAI;SAClB;KACF,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,MAAM,UAMjB","sourcesContent":["import type { Meta, MetaItem } from '@grafana/faro-core';\n\nexport const k6Meta: MetaItem<Pick<Meta, 'k6'>> = () => {\n return {\n k6: {\n isK6Browser: true,\n },\n };\n};\n"]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sdkMeta = void 0;
4
+ var meta_1 = require("./meta");
5
+ Object.defineProperty(exports, "sdkMeta", { enumerable: true, get: function () { return meta_1.sdkMeta; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/metas/sdk/index.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAAxB,+FAAA,OAAO,OAAA","sourcesContent":["export { sdkMeta } from './meta';\n"]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sdkMeta = void 0;
4
+ var faro_core_1 = require("@grafana/faro-core");
5
+ var sdkMeta = function () { return ({
6
+ sdk: {
7
+ name: '@grafana/faro-core',
8
+ version: faro_core_1.VERSION,
9
+ integrations: faro_core_1.faro.config.instrumentations.map(function (_a) {
10
+ var name = _a.name, version = _a.version;
11
+ return ({ name: name, version: version });
12
+ }),
13
+ },
14
+ }); };
15
+ exports.sdkMeta = sdkMeta;
16
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/sdk/meta.ts"],"names":[],"mappings":";;;AAAA,gDAAmD;AAG5C,IAAM,OAAO,GAAgC,cAAM,OAAA,CAAC;IACzD,GAAG,EAAE;QACH,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,mBAAO;QAChB,YAAY,EAAE,gBAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAC,EAAiB;gBAAf,IAAI,UAAA,EAAE,OAAO,aAAA;YAAO,OAAA,CAAC,EAAE,IAAI,MAAA,EAAE,OAAO,SAAA,EAAE,CAAC;QAAnB,CAAmB,CAAC;KAC3F;CACF,CAAC,EANwD,CAMxD,CAAC;AANU,QAAA,OAAO,WAMjB","sourcesContent":["import { faro, VERSION } from '@grafana/faro-core';\nimport type { Meta, MetaItem } from '@grafana/faro-core';\n\nexport const sdkMeta: MetaItem<Pick<Meta, 'sdk'>> = () => ({\n sdk: {\n name: '@grafana/faro-core',\n version: VERSION,\n integrations: faro.config.instrumentations.map(({ name, version }) => ({ name, version })),\n },\n});\n"]}
@@ -115,7 +115,7 @@ var FetchTransport = /** @class */ (function (_super) {
115
115
  var _e = requestOptions !== null && requestOptions !== void 0 ? requestOptions : {}, headers = _e.headers, restOfRequestOptions = __rest(_e, ["headers"]);
116
116
  return fetch(url, __assign({ method: 'POST', headers: __assign(__assign(__assign({ 'Content-Type': 'application/json' }, (headers !== null && headers !== void 0 ? headers : {})), (apiKey ? { 'x-api-key': apiKey } : {})), (((_a = _this.config.experimentalSessions) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = _this.metas.value.session) === null || _b === void 0 ? void 0 : _b.id)
117
117
  ? { 'x-faro-session-id': (_c = _this.metas.value.session) === null || _c === void 0 ? void 0 : _c.id }
118
- : {})), body: body, keepalive: true }, (restOfRequestOptions !== null && restOfRequestOptions !== void 0 ? restOfRequestOptions : {})))
118
+ : {})), body: body, keepalive: body.length <= 60000 }, (restOfRequestOptions !== null && restOfRequestOptions !== void 0 ? restOfRequestOptions : {})))
119
119
  .then(function (response) {
120
120
  if (response.status === 429) {
121
121
  _this.disabledUntil = _this.getRetryAfterDate(response);
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/transports/fetch/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseTransport, createPromiseBuffer, getTransportBody, noop, PromiseBuffer, VERSION } from '@grafana/faro-core';\nimport type { TransportItem } from '@grafana/faro-core';\n\nimport type { FetchTransportOptions } from './types';\n\nconst DEFAULT_BUFFER_SIZE = 30;\nconst DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17\nconst DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;\n\nexport class FetchTransport extends BaseTransport {\n readonly name = '@grafana/faro-web-sdk:transport-fetch';\n readonly version = VERSION;\n\n promiseBuffer: PromiseBuffer<Response | void>;\n\n private readonly rateLimitBackoffMs: number;\n private readonly getNow: () => number;\n private disabledUntil: Date = new Date();\n\n constructor(private options: FetchTransportOptions) {\n super();\n\n this.rateLimitBackoffMs = options.defaultRateLimitBackoffMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS;\n this.getNow = options.getNow ?? (() => Date.now());\n\n this.promiseBuffer = createPromiseBuffer({\n size: options.bufferSize ?? DEFAULT_BUFFER_SIZE,\n concurrency: options.concurrency ?? DEFAULT_CONCURRENCY,\n });\n }\n\n async send(items: TransportItem[]): Promise<void> {\n try {\n if (this.disabledUntil > new Date(this.getNow())) {\n this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`);\n\n return Promise.resolve();\n }\n\n await this.promiseBuffer.add(() => {\n const body = JSON.stringify(getTransportBody(items));\n\n const { url, requestOptions, apiKey } = this.options;\n\n const { headers, ...restOfRequestOptions } = requestOptions ?? {};\n\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(headers ?? {}),\n ...(apiKey ? { 'x-api-key': apiKey } : {}),\n ...(this.config.experimentalSessions?.enabled && this.metas.value.session?.id\n ? { 'x-faro-session-id': this.metas.value.session?.id }\n : {}),\n },\n body,\n keepalive: true,\n ...(restOfRequestOptions ?? {}),\n })\n .then((response) => {\n if (response.status === 429) {\n this.disabledUntil = this.getRetryAfterDate(response);\n this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`);\n }\n // read the body so the connection can be closed\n response.text().catch(noop);\n\n return response;\n })\n .catch((err) => {\n this.logError('Failed sending payload to the receiver\\n', JSON.parse(body), err);\n });\n });\n } catch (err) {\n this.logError(err);\n }\n }\n\n override getIgnoreUrls(): Array<string | RegExp> {\n return [this.options.url];\n }\n\n override isBatched(): boolean {\n return true;\n }\n\n private getRetryAfterDate(response: Response): Date {\n const now = this.getNow();\n const retryAfterHeader = response.headers.get('Retry-After');\n\n if (retryAfterHeader) {\n const delay = Number(retryAfterHeader);\n\n if (!isNaN(delay)) {\n return new Date(delay * 1000 + now);\n }\n\n const date = Date.parse(retryAfterHeader);\n\n if (!isNaN(date)) {\n return new Date(date);\n }\n }\n\n return new Date(now + this.rateLimitBackoffMs);\n }\n}\n"]}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/transports/fetch/transport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwH;AAKxH,IAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,IAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,uCAAuC;AACtE,IAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C;IAAoC,kCAAa;IAU/C,wBAAoB,OAA8B;QAAlD,iBAUC;;gBATC,iBAAO;QADW,aAAO,GAAP,OAAO,CAAuB;QATzC,UAAI,GAAG,uCAAuC,CAAC;QAC/C,aAAO,GAAG,mBAAO,CAAC;QAMnB,mBAAa,GAAS,IAAI,IAAI,EAAE,CAAC;QAKvC,KAAI,CAAC,kBAAkB,GAAG,MAAA,OAAO,CAAC,yBAAyB,mCAAI,6BAA6B,CAAC;QAC7F,KAAI,CAAC,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,CAAC,cAAM,OAAA,IAAI,CAAC,GAAG,EAAE,EAAV,CAAU,CAAC,CAAC;QAEnD,KAAI,CAAC,aAAa,GAAG,IAAA,+BAAmB,EAAC;YACvC,IAAI,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,mBAAmB;YAC/C,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,mBAAmB;SACxD,CAAC,CAAC;;IACL,CAAC;IAEK,6BAAI,GAAV,UAAW,KAAsB;;;;;;;;wBAE7B,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;4BAChD,IAAI,CAAC,OAAO,CAAC,0EAAmE,IAAI,CAAC,aAAa,CAAE,CAAC,CAAC;4BAEtG,sBAAO,OAAO,CAAC,OAAO,EAAE,EAAC;yBAC1B;wBAED,qBAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;;gCAC3B,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAA,4BAAgB,EAAC,KAAK,CAAC,CAAC,CAAC;gCAE/C,IAAA,KAAkC,KAAI,CAAC,OAAO,EAA5C,GAAG,SAAA,EAAE,cAAc,oBAAA,EAAE,MAAM,YAAiB,CAAC;gCAErD,IAAM,KAAuC,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,EAAE,EAAzD,OAAO,aAAA,EAAK,oBAAoB,cAAlC,WAAoC,CAAuB,CAAC;gCAElE,OAAO,KAAK,CAAC,GAAG,aACd,MAAM,EAAE,MAAM,EACd,OAAO,+BACL,cAAc,EAAE,kBAAkB,IAC/B,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,GACf,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACvC,CAAC,CAAA,MAAA,KAAI,CAAC,MAAM,CAAC,oBAAoB,0CAAE,OAAO,MAAI,MAAA,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,0CAAE,EAAE,CAAA;wCAC3E,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAA,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,0CAAE,EAAE,EAAE;wCACvD,CAAC,CAAC,EAAE,CAAC,GAET,IAAI,MAAA,EACJ,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,KAAM,IAC7B,CAAC,oBAAoB,aAApB,oBAAoB,cAApB,oBAAoB,GAAI,EAAE,CAAC,EAC/B;qCACC,IAAI,CAAC,UAAC,QAAQ;oCACb,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;wCAC3B,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;wCACtD,KAAI,CAAC,OAAO,CAAC,+CAAwC,KAAI,CAAC,aAAa,CAAE,CAAC,CAAC;qCAC5E;oCACD,gDAAgD;oCAChD,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAI,CAAC,CAAC;oCAE5B,OAAO,QAAQ,CAAC;gCAClB,CAAC,CAAC;qCACD,KAAK,CAAC,UAAC,GAAG;oCACT,KAAI,CAAC,QAAQ,CAAC,0CAA0C,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gCACnF,CAAC,CAAC,CAAC;4BACP,CAAC,CAAC,EAAA;;wBAlCF,SAkCE,CAAC;;;;wBAEH,IAAI,CAAC,QAAQ,CAAC,KAAG,CAAC,CAAC;;;;;;KAEtB;IAEQ,sCAAa,GAAtB;QACE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEQ,kCAAS,GAAlB;QACE,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,0CAAiB,GAAzB,UAA0B,QAAkB;QAC1C,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,gBAAgB,EAAE;YACpB,IAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAEvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACjB,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;aACrC;YAED,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAE1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAChB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;SACF;QAED,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IACH,qBAAC;AAAD,CAAC,AAlGD,CAAoC,yBAAa,GAkGhD;AAlGY,wCAAc","sourcesContent":["import { BaseTransport, createPromiseBuffer, getTransportBody, noop, PromiseBuffer, VERSION } from '@grafana/faro-core';\nimport type { TransportItem } from '@grafana/faro-core';\n\nimport type { FetchTransportOptions } from './types';\n\nconst DEFAULT_BUFFER_SIZE = 30;\nconst DEFAULT_CONCURRENCY = 5; // chrome supports 10 total, firefox 17\nconst DEFAULT_RATE_LIMIT_BACKOFF_MS = 5000;\n\nexport class FetchTransport extends BaseTransport {\n readonly name = '@grafana/faro-web-sdk:transport-fetch';\n readonly version = VERSION;\n\n promiseBuffer: PromiseBuffer<Response | void>;\n\n private readonly rateLimitBackoffMs: number;\n private readonly getNow: () => number;\n private disabledUntil: Date = new Date();\n\n constructor(private options: FetchTransportOptions) {\n super();\n\n this.rateLimitBackoffMs = options.defaultRateLimitBackoffMs ?? DEFAULT_RATE_LIMIT_BACKOFF_MS;\n this.getNow = options.getNow ?? (() => Date.now());\n\n this.promiseBuffer = createPromiseBuffer({\n size: options.bufferSize ?? DEFAULT_BUFFER_SIZE,\n concurrency: options.concurrency ?? DEFAULT_CONCURRENCY,\n });\n }\n\n async send(items: TransportItem[]): Promise<void> {\n try {\n if (this.disabledUntil > new Date(this.getNow())) {\n this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`);\n\n return Promise.resolve();\n }\n\n await this.promiseBuffer.add(() => {\n const body = JSON.stringify(getTransportBody(items));\n\n const { url, requestOptions, apiKey } = this.options;\n\n const { headers, ...restOfRequestOptions } = requestOptions ?? {};\n\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(headers ?? {}),\n ...(apiKey ? { 'x-api-key': apiKey } : {}),\n ...(this.config.experimentalSessions?.enabled && this.metas.value.session?.id\n ? { 'x-faro-session-id': this.metas.value.session?.id }\n : {}),\n },\n body,\n keepalive: body.length <= 60_000,\n ...(restOfRequestOptions ?? {}),\n })\n .then((response) => {\n if (response.status === 429) {\n this.disabledUntil = this.getRetryAfterDate(response);\n this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`);\n }\n // read the body so the connection can be closed\n response.text().catch(noop);\n\n return response;\n })\n .catch((err) => {\n this.logError('Failed sending payload to the receiver\\n', JSON.parse(body), err);\n });\n });\n } catch (err) {\n this.logError(err);\n }\n }\n\n override getIgnoreUrls(): Array<string | RegExp> {\n return [this.options.url];\n }\n\n override isBatched(): boolean {\n return true;\n }\n\n private getRetryAfterDate(response: Response): Date {\n const now = this.getNow();\n const retryAfterHeader = response.headers.get('Retry-After');\n\n if (retryAfterHeader) {\n const delay = Number(retryAfterHeader);\n\n if (!isNaN(delay)) {\n return new Date(delay * 1000 + now);\n }\n\n const date = Date.parse(retryAfterHeader);\n\n if (!isNaN(date)) {\n return new Date(date);\n }\n }\n\n return new Date(now + this.rateLimitBackoffMs);\n }\n}\n"]}
@@ -1,7 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeItem = exports.setItem = exports.getItem = exports.isLocalStorageAvailable = exports.isWebStorageAvailable = void 0;
3
+ exports.isSessionStorageAvailable = exports.isLocalStorageAvailable = exports.removeItem = exports.setItem = exports.getItem = exports.isWebStorageAvailable = exports.webStorageType = void 0;
4
4
  var faro_core_1 = require("@grafana/faro-core");
5
+ exports.webStorageType = {
6
+ session: 'sessionStorage',
7
+ local: 'localStorage',
8
+ };
9
+ // TODO: remove default storage type from all function
10
+ /**
11
+ * Check if selected web storage mechanism is available.
12
+ * @param type storage mechanism to test availability for.
13
+ * @returns
14
+ */
5
15
  function isWebStorageAvailable(type) {
6
16
  var _a;
7
17
  try {
@@ -19,18 +29,28 @@ function isWebStorageAvailable(type) {
19
29
  }
20
30
  }
21
31
  exports.isWebStorageAvailable = isWebStorageAvailable;
22
- exports.isLocalStorageAvailable = isWebStorageAvailable('localStorage');
23
- function getItem(key) {
24
- if (exports.isLocalStorageAvailable) {
25
- return localStorage.getItem(key);
32
+ /**
33
+ * Get item from SessionStorage or LocalStorage.
34
+ * @param key: the item key.
35
+ * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.
36
+ */
37
+ function getItem(key, webStorageMechanism) {
38
+ if (isWebStorageTypeAvailable(webStorageMechanism)) {
39
+ return window[webStorageMechanism].getItem(key);
26
40
  }
27
41
  return null;
28
42
  }
29
43
  exports.getItem = getItem;
30
- function setItem(key, value) {
31
- if (exports.isLocalStorageAvailable) {
44
+ /**
45
+ * Store item in SessionStorage or LocalStorage.
46
+ * @param key: the item key.
47
+ * @param value: the item data.
48
+ * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.
49
+ */
50
+ function setItem(key, value, webStorageMechanism) {
51
+ if (isWebStorageTypeAvailable(webStorageMechanism)) {
32
52
  try {
33
- localStorage.setItem(key, value);
53
+ window[webStorageMechanism].setItem(key, value);
34
54
  }
35
55
  catch (error) {
36
56
  // do nothing
@@ -38,10 +58,26 @@ function setItem(key, value) {
38
58
  }
39
59
  }
40
60
  exports.setItem = setItem;
41
- function removeItem(key) {
42
- if (exports.isLocalStorageAvailable) {
43
- localStorage.removeItem(key);
61
+ /**
62
+ * Remove item from SessionStorage or LocalStorage.
63
+ * @param key: the item key.
64
+ * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.
65
+ */
66
+ function removeItem(key, webStorageMechanism) {
67
+ if (isWebStorageTypeAvailable(webStorageMechanism)) {
68
+ window[webStorageMechanism].removeItem(key);
44
69
  }
45
70
  }
46
71
  exports.removeItem = removeItem;
72
+ exports.isLocalStorageAvailable = isWebStorageAvailable(exports.webStorageType.local);
73
+ exports.isSessionStorageAvailable = isWebStorageAvailable(exports.webStorageType.session);
74
+ function isWebStorageTypeAvailable(webStorageMechanism) {
75
+ if (webStorageMechanism === exports.webStorageType.local) {
76
+ return exports.isLocalStorageAvailable;
77
+ }
78
+ if (webStorageMechanism === exports.webStorageType.session) {
79
+ return exports.isSessionStorageAvailable;
80
+ }
81
+ return false;
82
+ }
47
83
  //# sourceMappingURL=webStorage.js.map