@safaricom-mxl/web-sdk 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-logs/api/LogAPI/LogAPI.cjs.map +1 -1
- package/dist/api-logs/api/LogAPI/LogAPI.js.map +1 -1
- package/dist/api-logs/logAPI.cjs.map +1 -1
- package/dist/api-logs/logAPI.js.map +1 -1
- package/dist/api-logs/manager/NoOpLogManager/NoOpLogManager.cjs.map +1 -1
- package/dist/api-logs/manager/NoOpLogManager/NoOpLogManager.js.map +1 -1
- package/dist/api-logs/manager/ProxyLogManager/ProxyLogManager.cjs.map +1 -1
- package/dist/api-logs/manager/ProxyLogManager/ProxyLogManager.js.map +1 -1
- package/dist/api-page/api/PageAPI/PageAPI.cjs.map +1 -1
- package/dist/api-page/api/PageAPI/PageAPI.js.map +1 -1
- package/dist/api-page/manager/NoOpPageManager/NoOpPageManager.cjs.map +1 -1
- package/dist/api-page/manager/NoOpPageManager/NoOpPageManager.js.map +1 -1
- package/dist/api-page/manager/ProxyPageManager/ProxyPageManager.cjs.map +1 -1
- package/dist/api-page/manager/ProxyPageManager/ProxyPageManager.js.map +1 -1
- package/dist/api-page/pageAPI.cjs.map +1 -1
- package/dist/api-page/pageAPI.js.map +1 -1
- package/dist/api-sessions/api/SessionAPI/SessionAPI.cjs.map +1 -1
- package/dist/api-sessions/api/SessionAPI/SessionAPI.d.cts.map +1 -1
- package/dist/api-sessions/api/SessionAPI/SessionAPI.d.ts.map +1 -1
- package/dist/api-sessions/api/SessionAPI/SessionAPI.js.map +1 -1
- package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.cjs.map +1 -1
- package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.js.map +1 -1
- package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.cjs.map +1 -1
- package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.js.map +1 -1
- package/dist/api-sessions/sessionAPI.cjs.map +1 -1
- package/dist/api-sessions/sessionAPI.js.map +1 -1
- package/dist/api-traces/api/TraceAPI/TraceAPI.cjs.map +1 -1
- package/dist/api-traces/api/TraceAPI/TraceAPI.js.map +1 -1
- package/dist/api-traces/manager/NoOpTraceManager/NoOpTraceManager.cjs.map +1 -1
- package/dist/api-traces/manager/NoOpTraceManager/NoOpTraceManager.js.map +1 -1
- package/dist/api-traces/manager/NoOpTraceManager/NonRecordingExtendedSpan.cjs.map +1 -1
- package/dist/api-traces/manager/NoOpTraceManager/NonRecordingExtendedSpan.d.cts.map +1 -1
- package/dist/api-traces/manager/NoOpTraceManager/NonRecordingExtendedSpan.d.ts.map +1 -1
- package/dist/api-traces/manager/NoOpTraceManager/NonRecordingExtendedSpan.js.map +1 -1
- package/dist/api-traces/manager/ProxyTraceManager/ProxyTraceManager.cjs.map +1 -1
- package/dist/api-traces/manager/ProxyTraceManager/ProxyTraceManager.js.map +1 -1
- package/dist/api-traces/traceAPI.cjs.map +1 -1
- package/dist/api-traces/traceAPI.js.map +1 -1
- package/dist/api-users/api/UserAPI/UserAPI.cjs.map +1 -1
- package/dist/api-users/api/UserAPI/UserAPI.js.map +1 -1
- package/dist/api-users/manager/NoOpUserManager/NoOpUserManager.cjs.map +1 -1
- package/dist/api-users/manager/NoOpUserManager/NoOpUserManager.js.map +1 -1
- package/dist/api-users/manager/ProxyUserManager/ProxyUserManager.cjs.map +1 -1
- package/dist/api-users/manager/ProxyUserManager/ProxyUserManager.js.map +1 -1
- package/dist/api-users/userAPI.cjs.map +1 -1
- package/dist/api-users/userAPI.js.map +1 -1
- package/dist/common/attributes.cjs.map +1 -1
- package/dist/common/attributes.js.map +1 -1
- package/dist/constants/attributes.cjs +2 -0
- package/dist/constants/attributes.cjs.map +1 -1
- package/dist/constants/attributes.d.cts +2 -1
- package/dist/constants/attributes.d.cts.map +1 -1
- package/dist/constants/attributes.d.ts +2 -1
- package/dist/constants/attributes.d.ts.map +1 -1
- package/dist/constants/attributes.js +2 -1
- package/dist/constants/attributes.js.map +1 -1
- package/dist/constants/index.cjs +1 -0
- package/dist/constants/index.d.cts +2 -2
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.js +2 -2
- package/dist/exporters/MXLLogExporter/MXLLogExporter.cjs.map +1 -1
- package/dist/exporters/MXLLogExporter/MXLLogExporter.js.map +1 -1
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.cjs.map +1 -1
- package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.js.map +1 -1
- package/dist/exporters/MXLLogExporter/utils.cjs.map +1 -1
- package/dist/exporters/MXLLogExporter/utils.js.map +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.cjs.map +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.js.map +1 -1
- package/dist/exporters/MXLTraceExporter/OTLPFetchTraceExporter.cjs.map +1 -1
- package/dist/exporters/MXLTraceExporter/OTLPFetchTraceExporter.js.map +1 -1
- package/dist/exporters/MXLTraceExporter/utils.cjs.map +1 -1
- package/dist/exporters/MXLTraceExporter/utils.js.map +1 -1
- package/dist/exporters/otlpBrowserFetchExportDelegate.cjs.map +1 -1
- package/dist/exporters/otlpBrowserFetchExportDelegate.d.cts.map +1 -1
- package/dist/exporters/otlpBrowserFetchExportDelegate.d.ts.map +1 -1
- package/dist/exporters/otlpBrowserFetchExportDelegate.js.map +1 -1
- package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.cjs.map +1 -1
- package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.js.map +1 -1
- package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.js.map +1 -1
- package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.d.cts.map +1 -1
- package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.d.ts.map +1 -1
- package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.js.map +1 -1
- package/dist/instrumentations/document-load/DocumentLoadInstrumentation/utils.cjs.map +1 -1
- package/dist/instrumentations/document-load/DocumentLoadInstrumentation/utils.js.map +1 -1
- package/dist/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.js.map +1 -1
- package/dist/instrumentations/empty-root/EmptyRootInstrumentation/EmptyRootInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/empty-root/EmptyRootInstrumentation/EmptyRootInstrumentation.js.map +1 -1
- package/dist/instrumentations/exceptions/GlobalExceptionInstrumentation/GlobalExceptionInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/exceptions/GlobalExceptionInstrumentation/GlobalExceptionInstrumentation.js.map +1 -1
- package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.cjs +1 -1
- package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.cjs.map +1 -1
- package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.d.cts.map +1 -1
- package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.d.ts.map +1 -1
- package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.js +2 -2
- package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.js.map +1 -1
- package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.js.map +1 -1
- package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.js.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.js.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/instance.cjs.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/instance.js.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/createReactRouterNavigationInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/createReactRouterNavigationInstrumentation.js.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/withMXLRoutingLegacy.cjs.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/withMXLRoutingLegacy.d.cts.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/withMXLRoutingLegacy.d.ts.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/withMXLRoutingLegacy.js.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/listenToRouterChanges.cjs.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/listenToRouterChanges.js.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/withMXLRouting.cjs.map +1 -1
- package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/withMXLRouting.js.map +1 -1
- package/dist/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.js.map +1 -1
- package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.js.map +1 -1
- package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.js.map +1 -1
- package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.js.map +1 -1
- package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.js.map +1 -1
- package/dist/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.js.map +1 -1
- package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.d.cts.map +1 -1
- package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.d.ts.map +1 -1
- package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.js.map +1 -1
- package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.js.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.cts.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.ts.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js.map +1 -1
- package/dist/managers/MXLConfigManager/constants.cjs.map +1 -1
- package/dist/managers/MXLConfigManager/constants.js.map +1 -1
- package/dist/managers/MXLConfigManager/utils.cjs.map +1 -1
- package/dist/managers/MXLConfigManager/utils.js.map +1 -1
- package/dist/managers/MXLLimitManager/MXLLimitManager.cjs.map +1 -1
- package/dist/managers/MXLLimitManager/MXLLimitManager.js.map +1 -1
- package/dist/managers/MXLLimitManager/constants.cjs.map +1 -1
- package/dist/managers/MXLLimitManager/constants.js.map +1 -1
- package/dist/managers/MXLLogManager/MXLLogManager.cjs +3 -1
- package/dist/managers/MXLLogManager/MXLLogManager.cjs.map +1 -1
- package/dist/managers/MXLLogManager/MXLLogManager.d.cts.map +1 -1
- package/dist/managers/MXLLogManager/MXLLogManager.d.ts.map +1 -1
- package/dist/managers/MXLLogManager/MXLLogManager.js +4 -2
- package/dist/managers/MXLLogManager/MXLLogManager.js.map +1 -1
- package/dist/managers/MXLPageManager/MXLPageManager.cjs.map +1 -1
- package/dist/managers/MXLPageManager/MXLPageManager.js.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js.map +1 -1
- package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.cjs.map +1 -1
- package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.d.cts.map +1 -1
- package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.d.ts.map +1 -1
- package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.js.map +1 -1
- package/dist/managers/MXLTraceManager/MXLExtendedSpan.cjs.map +1 -1
- package/dist/managers/MXLTraceManager/MXLExtendedSpan.d.cts.map +1 -1
- package/dist/managers/MXLTraceManager/MXLExtendedSpan.d.ts.map +1 -1
- package/dist/managers/MXLTraceManager/MXLExtendedSpan.js.map +1 -1
- package/dist/managers/MXLTraceManager/MXLTraceManager.cjs.map +1 -1
- package/dist/managers/MXLTraceManager/MXLTraceManager.js.map +1 -1
- package/dist/managers/MXLUserManager/MXLUserManager.cjs.map +1 -1
- package/dist/managers/MXLUserManager/MXLUserManager.js.map +1 -1
- package/dist/managers/MXLUserManager/types.cjs.map +1 -1
- package/dist/managers/MXLUserManager/types.js.map +1 -1
- package/dist/mxl-web-sdk.js +3 -38
- package/dist/mxl-web-sdk.js.map +1 -1
- package/dist/processors/BrowserLogRecordProcessor/BrowserLogRecordProcessor.cjs.map +1 -1
- package/dist/processors/BrowserLogRecordProcessor/BrowserLogRecordProcessor.js.map +1 -1
- package/dist/processors/BrowserSpanProcessor/BrowserSpanProcessor.cjs.map +1 -1
- package/dist/processors/BrowserSpanProcessor/BrowserSpanProcessor.js.map +1 -1
- package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.cjs.map +1 -1
- package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.js.map +1 -1
- package/dist/processors/LogRecordScrubProcessor/LogRecordScrubProcessor.cjs.map +1 -1
- package/dist/processors/LogRecordScrubProcessor/LogRecordScrubProcessor.js.map +1 -1
- package/dist/processors/MXLLogRecordProcessor/MXLLogRecordProcessor.cjs.map +1 -1
- package/dist/processors/MXLLogRecordProcessor/MXLLogRecordProcessor.js.map +1 -1
- package/dist/processors/MXLNetworkSpanProcessor/MXLNetworkSpanProcessor.cjs.map +1 -1
- package/dist/processors/MXLNetworkSpanProcessor/MXLNetworkSpanProcessor.js.map +1 -1
- package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.cjs.map +1 -1
- package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.js.map +1 -1
- package/dist/processors/PageLogRecordProcessor/PageLogRecordProcessor.cjs.map +1 -1
- package/dist/processors/PageLogRecordProcessor/PageLogRecordProcessor.js.map +1 -1
- package/dist/processors/PageSpanProcessor/PageSpanProcessor.cjs.map +1 -1
- package/dist/processors/PageSpanProcessor/PageSpanProcessor.js.map +1 -1
- package/dist/processors/SpanScrubProcessor/SpanScrubProcessor.cjs.map +1 -1
- package/dist/processors/SpanScrubProcessor/SpanScrubProcessor.js.map +1 -1
- package/dist/processors/UserLogRecordProcessor/UserLogRecordProcessor.cjs.map +1 -1
- package/dist/processors/UserLogRecordProcessor/UserLogRecordProcessor.js.map +1 -1
- package/dist/processors/UserSpanProcessor/UserSpanProcessor.cjs.map +1 -1
- package/dist/processors/UserSpanProcessor/UserSpanProcessor.js.map +1 -1
- package/dist/propagators/MXLW3CTraceContextPropagator/MXLW3CTraceContextPropagator.cjs.map +1 -1
- package/dist/propagators/MXLW3CTraceContextPropagator/MXLW3CTraceContextPropagator.js.map +1 -1
- package/dist/resources/appInstanceId.cjs.map +1 -1
- package/dist/resources/appInstanceId.js.map +1 -1
- package/dist/resources/constants/index.cjs +1 -1
- package/dist/resources/constants/index.cjs.map +1 -1
- package/dist/resources/constants/index.d.cts +1 -1
- package/dist/resources/constants/index.d.ts +1 -1
- package/dist/resources/constants/index.js +1 -1
- package/dist/resources/constants/index.js.map +1 -1
- package/dist/resources/webSdkResource.cjs.map +1 -1
- package/dist/resources/webSdkResource.d.cts.map +1 -1
- package/dist/resources/webSdkResource.d.ts.map +1 -1
- package/dist/resources/webSdkResource.js.map +1 -1
- package/dist/sdk/defaultAttributeScrubbers.cjs.map +1 -1
- package/dist/sdk/defaultAttributeScrubbers.js.map +1 -1
- package/dist/sdk/initSDK.cjs +13 -11
- package/dist/sdk/initSDK.cjs.map +1 -1
- package/dist/sdk/initSDK.d.cts.map +1 -1
- package/dist/sdk/initSDK.d.ts.map +1 -1
- package/dist/sdk/initSDK.js +14 -12
- package/dist/sdk/initSDK.js.map +1 -1
- package/dist/sdk/noopSessionRecording.cjs +10 -0
- package/dist/sdk/noopSessionRecording.cjs.map +1 -0
- package/dist/sdk/noopSessionRecording.d.cts +7 -0
- package/dist/sdk/noopSessionRecording.d.cts.map +1 -0
- package/dist/sdk/noopSessionRecording.d.ts +7 -0
- package/dist/sdk/noopSessionRecording.d.ts.map +1 -0
- package/dist/sdk/noopSessionRecording.js +9 -0
- package/dist/sdk/noopSessionRecording.js.map +1 -0
- package/dist/sdk/registry.cjs.map +1 -1
- package/dist/sdk/registry.js.map +1 -1
- package/dist/sdk/setupDefaultInstrumentations.cjs.map +1 -1
- package/dist/sdk/setupDefaultInstrumentations.js.map +1 -1
- package/dist/sdk/setupSessionRecorder.cjs +64 -22
- package/dist/sdk/setupSessionRecorder.cjs.map +1 -1
- package/dist/sdk/setupSessionRecorder.d.cts +16 -7
- package/dist/sdk/setupSessionRecorder.d.cts.map +1 -1
- package/dist/sdk/setupSessionRecorder.d.ts +16 -7
- package/dist/sdk/setupSessionRecorder.d.ts.map +1 -1
- package/dist/sdk/setupSessionRecorder.js +62 -21
- package/dist/sdk/setupSessionRecorder.js.map +1 -1
- package/dist/sdk/types.d.cts.map +1 -1
- package/dist/sdk/types.d.ts +1 -1
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/utils.cjs.map +1 -1
- package/dist/sdk/utils.js.map +1 -1
- package/dist/transport/FetchTransport/FetchTransport.cjs.map +1 -1
- package/dist/transport/FetchTransport/FetchTransport.js.map +1 -1
- package/dist/transport/FetchTransport/createFetchTransport.cjs.map +1 -1
- package/dist/transport/FetchTransport/createFetchTransport.js.map +1 -1
- package/dist/transport/RetryingTransport/RetryingTransport.cjs.map +1 -1
- package/dist/transport/RetryingTransport/RetryingTransport.js.map +1 -1
- package/dist/transport/RetryingTransport/createRetryingTransport.cjs.map +1 -1
- package/dist/transport/RetryingTransport/createRetryingTransport.js.map +1 -1
- package/dist/utils/MXLSpanStorage/MXLSpanStorage.cjs.map +1 -1
- package/dist/utils/MXLSpanStorage/MXLSpanStorage.js.map +1 -1
- package/dist/utils/PerformanceManager/OTelPerformanceManager.cjs.map +1 -1
- package/dist/utils/PerformanceManager/OTelPerformanceManager.js.map +1 -1
- package/dist/utils/bulkAddEventListener/bulkAddEventListener.cjs.map +1 -1
- package/dist/utils/bulkAddEventListener/bulkAddEventListener.js.map +1 -1
- package/dist/utils/bulkRemoveEventListener/bulkRemoveEventListener.cjs.map +1 -1
- package/dist/utils/bulkRemoveEventListener/bulkRemoveEventListener.js.map +1 -1
- package/dist/utils/getVisibilityState.cjs.map +1 -1
- package/dist/utils/getVisibilityState.js.map +1 -1
- package/dist/utils/nsfConfigValidation.cjs.map +1 -1
- package/dist/utils/nsfConfigValidation.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,45 +1,87 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
3
2
|
const require_exporters_utils = require("../exporters/utils.cjs");
|
|
4
3
|
const require_exporters_MXLLogExporter_utils = require("../exporters/MXLLogExporter/utils.cjs");
|
|
5
|
-
let _safaricom_mxl_session_recorder = require("@safaricom-mxl/session-recorder");
|
|
6
4
|
//#region src/sdk/setupSessionRecorder.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
let sessionRecorderModulePromise;
|
|
6
|
+
let sessionRecorderModuleLoaderOverride;
|
|
7
|
+
function loadSessionRecorderModule() {
|
|
8
|
+
if (sessionRecorderModuleLoaderOverride) return sessionRecorderModuleLoaderOverride();
|
|
9
|
+
sessionRecorderModulePromise ??= import("@safaricom-mxl/session-recorder");
|
|
10
|
+
return sessionRecorderModulePromise;
|
|
11
|
+
}
|
|
12
|
+
function resetSessionRecorderModuleCache() {
|
|
13
|
+
sessionRecorderModulePromise = void 0;
|
|
14
|
+
sessionRecorderModuleLoaderOverride = void 0;
|
|
15
|
+
}
|
|
16
|
+
function setSessionRecorderModuleLoaderForTests(loader) {
|
|
17
|
+
sessionRecorderModuleLoaderOverride = loader;
|
|
18
|
+
sessionRecorderModulePromise = void 0;
|
|
19
|
+
}
|
|
20
|
+
function buildInitConfig({ resource, spanSessionManager, tracerProvider, appID, userID, mxlDataURL, sessionRecorder: userOptions }, sessionRecorderVersion) {
|
|
12
21
|
return {
|
|
13
22
|
resource,
|
|
14
23
|
getSessionId: () => spanSessionManager.getSessionId(),
|
|
15
|
-
tracer: tracerProvider.getTracer("mxl.session-recorder",
|
|
24
|
+
tracer: tracerProvider.getTracer("mxl.session-recorder", sessionRecorderVersion),
|
|
16
25
|
url: require_exporters_MXLLogExporter_utils.getLogEndpoint(appID, mxlDataURL),
|
|
17
26
|
headers: require_exporters_utils.getMXLHeaders(appID, userID),
|
|
18
27
|
...userOptions
|
|
19
28
|
};
|
|
20
29
|
}
|
|
21
30
|
function createSessionRecordingControl(args) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
let sessionRecorderModule;
|
|
32
|
+
let initStarted = false;
|
|
33
|
+
let initComplete = false;
|
|
34
|
+
let initFailed = false;
|
|
35
|
+
let pendingInit;
|
|
36
|
+
const getSessionRecorder = () => sessionRecorderModule?.SessionRecorder;
|
|
37
|
+
const waitForSessionStart = () => new Promise((resolve) => {
|
|
38
|
+
const removeListener = args.spanSessionManager.addSessionStartedListener(() => {
|
|
39
|
+
removeListener();
|
|
40
|
+
resolve();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
const initSessionRecorderWhenReady = () => {
|
|
44
|
+
if (initComplete || initFailed) return Promise.resolve();
|
|
45
|
+
pendingInit ??= (async () => {
|
|
46
|
+
if (args.spanSessionManager.getSessionId() === null) await waitForSessionStart();
|
|
47
|
+
if (initComplete || initFailed || initStarted) return;
|
|
48
|
+
initStarted = true;
|
|
49
|
+
try {
|
|
50
|
+
sessionRecorderModule = await loadSessionRecorderModule();
|
|
51
|
+
const config = buildInitConfig(args, sessionRecorderModule.VERSION);
|
|
52
|
+
sessionRecorderModule.SessionRecorder.init(config);
|
|
53
|
+
initComplete = true;
|
|
54
|
+
} catch (error) {
|
|
55
|
+
initFailed = true;
|
|
56
|
+
args.diagLogger.error("Failed to initialize session recorder", error);
|
|
57
|
+
} finally {
|
|
58
|
+
pendingInit = void 0;
|
|
29
59
|
}
|
|
30
|
-
};
|
|
31
|
-
|
|
60
|
+
})();
|
|
61
|
+
return pendingInit;
|
|
62
|
+
};
|
|
63
|
+
if (args.recordUserSessions) initSessionRecorderWhenReady();
|
|
32
64
|
return {
|
|
33
|
-
isRecording: () =>
|
|
65
|
+
isRecording: () => Boolean(getSessionRecorder()?.isRecording()),
|
|
34
66
|
setEnabled: (enabled) => {
|
|
35
|
-
if (enabled)
|
|
36
|
-
|
|
37
|
-
|
|
67
|
+
if (enabled) {
|
|
68
|
+
if (initComplete) {
|
|
69
|
+
getSessionRecorder()?.setEnabled(true);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
initSessionRecorderWhenReady().then(() => {
|
|
73
|
+
if (initComplete) getSessionRecorder()?.setEnabled(true);
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (initComplete) getSessionRecorder()?.setEnabled(false);
|
|
38
78
|
}
|
|
39
79
|
};
|
|
40
80
|
}
|
|
41
81
|
//#endregion
|
|
42
82
|
exports.createSessionRecordingControl = createSessionRecordingControl;
|
|
43
|
-
exports.
|
|
83
|
+
exports.loadSessionRecorderModule = loadSessionRecorderModule;
|
|
84
|
+
exports.resetSessionRecorderModuleCache = resetSessionRecorderModuleCache;
|
|
85
|
+
exports.setSessionRecorderModuleLoaderForTests = setSessionRecorderModuleLoaderForTests;
|
|
44
86
|
|
|
45
87
|
//# sourceMappingURL=setupSessionRecorder.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupSessionRecorder.cjs","names":["
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.cjs","names":["getLogEndpoint","getMXLHeaders"],"sources":["../../src/sdk/setupSessionRecorder.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport type { SessionRecorderConfig } from '@safaricom-mxl/session-recorder';\nimport { getLogEndpoint } from '../exporters/MXLLogExporter/utils';\nimport { getMXLHeaders } from '../exporters/utils';\nimport type {\n SessionRecorderUserConfig,\n SessionRecordingControl,\n} from './types';\n\ntype SessionRecorderModule = typeof import('@safaricom-mxl/session-recorder');\n\nlet sessionRecorderModulePromise: Promise<SessionRecorderModule> | undefined;\nlet sessionRecorderModuleLoaderOverride:\n | (() => Promise<SessionRecorderModule>)\n | undefined;\n\nexport function loadSessionRecorderModule(): Promise<SessionRecorderModule> {\n if (sessionRecorderModuleLoaderOverride) {\n return sessionRecorderModuleLoaderOverride();\n }\n\n sessionRecorderModulePromise ??= import('@safaricom-mxl/session-recorder');\n return sessionRecorderModulePromise;\n}\n\nexport function resetSessionRecorderModuleCache(): void {\n sessionRecorderModulePromise = undefined;\n sessionRecorderModuleLoaderOverride = undefined;\n}\n\nexport function setSessionRecorderModuleLoaderForTests(\n loader: (() => Promise<SessionRecorderModule>) | undefined,\n): void {\n sessionRecorderModuleLoaderOverride = loader;\n sessionRecorderModulePromise = undefined;\n}\n\ninterface SpanSessionManagerForRecorder {\n getSessionId: () => string | null;\n addSessionStartedListener: (listener: () => void) => () => void;\n}\n\ninterface CreateSessionRecordingControlArgs {\n resource: Resource;\n spanSessionManager: SpanSessionManagerForRecorder;\n tracerProvider: WebTracerProvider;\n appID: string;\n userID: string;\n mxlDataURL?: string;\n recordUserSessions: boolean;\n sessionRecorder?: SessionRecorderUserConfig;\n diagLogger: DiagLogger;\n}\n\nfunction buildInitConfig(\n {\n resource,\n spanSessionManager,\n tracerProvider,\n appID,\n userID,\n mxlDataURL,\n sessionRecorder: userOptions,\n }: CreateSessionRecordingControlArgs,\n sessionRecorderVersion: string,\n): SessionRecorderConfig {\n const tracer = tracerProvider.getTracer(\n 'mxl.session-recorder',\n sessionRecorderVersion,\n );\n return {\n resource,\n getSessionId: () => spanSessionManager.getSessionId(),\n tracer,\n url: getLogEndpoint(appID, mxlDataURL),\n headers: getMXLHeaders(appID, userID),\n ...userOptions,\n } as SessionRecorderConfig;\n}\n\nexport function createSessionRecordingControl(\n args: CreateSessionRecordingControlArgs,\n): SessionRecordingControl {\n let sessionRecorderModule: SessionRecorderModule | undefined;\n let initStarted = false;\n let initComplete = false;\n let initFailed = false;\n let pendingInit: Promise<void> | undefined;\n\n const getSessionRecorder = ():\n | SessionRecorderModule['SessionRecorder']\n | undefined => sessionRecorderModule?.SessionRecorder;\n\n const waitForSessionStart = (): Promise<void> =>\n new Promise((resolve) => {\n const removeListener = args.spanSessionManager.addSessionStartedListener(\n () => {\n removeListener();\n resolve();\n },\n );\n });\n\n const initSessionRecorderWhenReady = (): Promise<void> => {\n if (initComplete || initFailed) {\n return Promise.resolve();\n }\n\n pendingInit ??= (async () => {\n if (args.spanSessionManager.getSessionId() === null) {\n await waitForSessionStart();\n }\n\n if (initComplete || initFailed || initStarted) {\n return;\n }\n initStarted = true;\n\n try {\n sessionRecorderModule = await loadSessionRecorderModule();\n const config = buildInitConfig(args, sessionRecorderModule.VERSION);\n sessionRecorderModule.SessionRecorder.init(config);\n initComplete = true;\n } catch (error) {\n initFailed = true;\n args.diagLogger.error('Failed to initialize session recorder', error);\n } finally {\n pendingInit = undefined;\n }\n })();\n\n return pendingInit;\n };\n\n if (args.recordUserSessions) {\n void initSessionRecorderWhenReady();\n }\n\n return {\n isRecording: () => Boolean(getSessionRecorder()?.isRecording()),\n setEnabled: (enabled: boolean) => {\n if (enabled) {\n if (initComplete) {\n getSessionRecorder()?.setEnabled(true);\n return;\n }\n void initSessionRecorderWhenReady().then(() => {\n if (initComplete) {\n getSessionRecorder()?.setEnabled(true);\n }\n });\n return;\n }\n\n if (initComplete) {\n getSessionRecorder()?.setEnabled(false);\n }\n },\n };\n}\n"],"mappings":";;;;AAaA,IAAI;AACJ,IAAI;AAIJ,SAAgB,4BAA4D;AAC1E,KAAI,oCACF,QAAO,qCAAqC;AAG9C,kCAAiC,OAAO;AACxC,QAAO;;AAGT,SAAgB,kCAAwC;AACtD,gCAA+B,KAAA;AAC/B,uCAAsC,KAAA;;AAGxC,SAAgB,uCACd,QACM;AACN,uCAAsC;AACtC,gCAA+B,KAAA;;AAoBjC,SAAS,gBACP,EACE,UACA,oBACA,gBACA,OACA,QACA,YACA,iBAAiB,eAEnB,wBACuB;AAKvB,QAAO;EACL;EACA,oBAAoB,mBAAmB,cAAc;EACrD,QAPa,eAAe,UAC5B,wBACA,uBAKM;EACN,KAAKA,uCAAAA,eAAe,OAAO,WAAW;EACtC,SAASC,wBAAAA,cAAc,OAAO,OAAO;EACrC,GAAG;EACJ;;AAGH,SAAgB,8BACd,MACyB;CACzB,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,eAAe;CACnB,IAAI,aAAa;CACjB,IAAI;CAEJ,MAAM,2BAEW,uBAAuB;CAExC,MAAM,4BACJ,IAAI,SAAS,YAAY;EACvB,MAAM,iBAAiB,KAAK,mBAAmB,gCACvC;AACJ,mBAAgB;AAChB,YAAS;IAEZ;GACD;CAEJ,MAAM,qCAAoD;AACxD,MAAI,gBAAgB,WAClB,QAAO,QAAQ,SAAS;AAG1B,mBAAiB,YAAY;AAC3B,OAAI,KAAK,mBAAmB,cAAc,KAAK,KAC7C,OAAM,qBAAqB;AAG7B,OAAI,gBAAgB,cAAc,YAChC;AAEF,iBAAc;AAEd,OAAI;AACF,4BAAwB,MAAM,2BAA2B;IACzD,MAAM,SAAS,gBAAgB,MAAM,sBAAsB,QAAQ;AACnE,0BAAsB,gBAAgB,KAAK,OAAO;AAClD,mBAAe;YACR,OAAO;AACd,iBAAa;AACb,SAAK,WAAW,MAAM,yCAAyC,MAAM;aAC7D;AACR,kBAAc,KAAA;;MAEd;AAEJ,SAAO;;AAGT,KAAI,KAAK,mBACF,+BAA8B;AAGrC,QAAO;EACL,mBAAmB,QAAQ,oBAAoB,EAAE,aAAa,CAAC;EAC/D,aAAa,YAAqB;AAChC,OAAI,SAAS;AACX,QAAI,cAAc;AAChB,yBAAoB,EAAE,WAAW,KAAK;AACtC;;AAEG,kCAA8B,CAAC,WAAW;AAC7C,SAAI,aACF,qBAAoB,EAAE,WAAW,KAAK;MAExC;AACF;;AAGF,OAAI,aACF,qBAAoB,EAAE,WAAW,MAAM;;EAG5C"}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { SessionRecorderUserConfig, SessionRecordingControl } from "./types.cjs";
|
|
2
|
+
import { DiagLogger } from "@opentelemetry/api";
|
|
2
3
|
import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
|
|
3
4
|
import { Resource } from "@opentelemetry/resources";
|
|
5
|
+
import * as _$_safaricom_mxl_session_recorder0 from "@safaricom-mxl/session-recorder";
|
|
4
6
|
|
|
5
7
|
//#region src/sdk/setupSessionRecorder.d.ts
|
|
6
|
-
|
|
7
|
-
declare function
|
|
8
|
+
type SessionRecorderModule = typeof _$_safaricom_mxl_session_recorder0;
|
|
9
|
+
declare function loadSessionRecorderModule(): Promise<SessionRecorderModule>;
|
|
10
|
+
declare function resetSessionRecorderModuleCache(): void;
|
|
11
|
+
declare function setSessionRecorderModuleLoaderForTests(loader: (() => Promise<SessionRecorderModule>) | undefined): void;
|
|
12
|
+
interface SpanSessionManagerForRecorder {
|
|
13
|
+
getSessionId: () => string | null;
|
|
14
|
+
addSessionStartedListener: (listener: () => void) => () => void;
|
|
15
|
+
}
|
|
16
|
+
interface CreateSessionRecordingControlArgs {
|
|
8
17
|
resource: Resource;
|
|
9
|
-
spanSessionManager:
|
|
10
|
-
getSessionId: () => string | null;
|
|
11
|
-
};
|
|
18
|
+
spanSessionManager: SpanSessionManagerForRecorder;
|
|
12
19
|
tracerProvider: WebTracerProvider;
|
|
13
20
|
appID: string;
|
|
14
21
|
userID: string;
|
|
15
22
|
mxlDataURL?: string;
|
|
16
23
|
recordUserSessions: boolean;
|
|
17
24
|
sessionRecorder?: SessionRecorderUserConfig;
|
|
18
|
-
|
|
25
|
+
diagLogger: DiagLogger;
|
|
26
|
+
}
|
|
27
|
+
declare function createSessionRecordingControl(args: CreateSessionRecordingControlArgs): SessionRecordingControl;
|
|
19
28
|
//#endregion
|
|
20
|
-
export { createSessionRecordingControl,
|
|
29
|
+
export { createSessionRecordingControl, loadSessionRecorderModule, resetSessionRecorderModuleCache, setSessionRecorderModuleLoaderForTests };
|
|
21
30
|
//# sourceMappingURL=setupSessionRecorder.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupSessionRecorder.d.cts","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.d.cts","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"mappings":";;;;;;;KAWK,qBAAA,UAAqB,kCAAA;AAAA,iBAOV,yBAAA,CAAA,GAA6B,OAAA,CAAQ,qBAAA;AAAA,iBASrC,+BAAA,CAAA;AAAA,iBAKA,sCAAA,CACd,MAAA,SAAe,OAAA,CAAQ,qBAAA;AAAA,UAMf,6BAAA;EACR,YAAA;EACA,yBAAA,GAA4B,QAAA;AAAA;AAAA,UAGpB,iCAAA;EACR,QAAA,EAAU,QAAA;EACV,kBAAA,EAAoB,6BAAA;EACpB,cAAA,EAAgB,iBAAA;EAChB,KAAA;EACA,MAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA,GAAkB,yBAAA;EAClB,UAAA,EAAY,UAAA;AAAA;AAAA,iBA6BE,6BAAA,CACd,IAAA,EAAM,iCAAA,GACL,uBAAA"}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { SessionRecorderUserConfig, SessionRecordingControl } from "./types.js";
|
|
2
|
+
import { DiagLogger } from "@opentelemetry/api";
|
|
2
3
|
import { Resource } from "@opentelemetry/resources";
|
|
3
4
|
import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
|
|
5
|
+
import * as _$_safaricom_mxl_session_recorder0 from "@safaricom-mxl/session-recorder";
|
|
4
6
|
|
|
5
7
|
//#region src/sdk/setupSessionRecorder.d.ts
|
|
6
|
-
|
|
7
|
-
declare function
|
|
8
|
+
type SessionRecorderModule = typeof _$_safaricom_mxl_session_recorder0;
|
|
9
|
+
declare function loadSessionRecorderModule(): Promise<SessionRecorderModule>;
|
|
10
|
+
declare function resetSessionRecorderModuleCache(): void;
|
|
11
|
+
declare function setSessionRecorderModuleLoaderForTests(loader: (() => Promise<SessionRecorderModule>) | undefined): void;
|
|
12
|
+
interface SpanSessionManagerForRecorder {
|
|
13
|
+
getSessionId: () => string | null;
|
|
14
|
+
addSessionStartedListener: (listener: () => void) => () => void;
|
|
15
|
+
}
|
|
16
|
+
interface CreateSessionRecordingControlArgs {
|
|
8
17
|
resource: Resource;
|
|
9
|
-
spanSessionManager:
|
|
10
|
-
getSessionId: () => string | null;
|
|
11
|
-
};
|
|
18
|
+
spanSessionManager: SpanSessionManagerForRecorder;
|
|
12
19
|
tracerProvider: WebTracerProvider;
|
|
13
20
|
appID: string;
|
|
14
21
|
userID: string;
|
|
15
22
|
mxlDataURL?: string;
|
|
16
23
|
recordUserSessions: boolean;
|
|
17
24
|
sessionRecorder?: SessionRecorderUserConfig;
|
|
18
|
-
|
|
25
|
+
diagLogger: DiagLogger;
|
|
26
|
+
}
|
|
27
|
+
declare function createSessionRecordingControl(args: CreateSessionRecordingControlArgs): SessionRecordingControl;
|
|
19
28
|
//#endregion
|
|
20
|
-
export { createSessionRecordingControl,
|
|
29
|
+
export { createSessionRecordingControl, loadSessionRecorderModule, resetSessionRecorderModuleCache, setSessionRecorderModuleLoaderForTests };
|
|
21
30
|
//# sourceMappingURL=setupSessionRecorder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupSessionRecorder.d.ts","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.d.ts","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"mappings":";;;;;;;KAWK,qBAAA,UAAqB,kCAAA;AAAA,iBAOV,yBAAA,CAAA,GAA6B,OAAA,CAAQ,qBAAA;AAAA,iBASrC,+BAAA,CAAA;AAAA,iBAKA,sCAAA,CACd,MAAA,SAAe,OAAA,CAAQ,qBAAA;AAAA,UAMf,6BAAA;EACR,YAAA;EACA,yBAAA,GAA4B,QAAA;AAAA;AAAA,UAGpB,iCAAA;EACR,QAAA,EAAU,QAAA;EACV,kBAAA,EAAoB,6BAAA;EACpB,cAAA,EAAgB,iBAAA;EAChB,KAAA;EACA,MAAA;EACA,UAAA;EACA,kBAAA;EACA,eAAA,GAAkB,yBAAA;EAClB,UAAA,EAAY,UAAA;AAAA;AAAA,iBA6BE,6BAAA,CACd,IAAA,EAAM,iCAAA,GACL,uBAAA"}
|
|
@@ -1,42 +1,83 @@
|
|
|
1
1
|
import { getMXLHeaders } from "../exporters/utils.js";
|
|
2
2
|
import { getLogEndpoint } from "../exporters/MXLLogExporter/utils.js";
|
|
3
|
-
import { SessionRecorder, VERSION } from "@safaricom-mxl/session-recorder";
|
|
4
3
|
//#region src/sdk/setupSessionRecorder.ts
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
let sessionRecorderModulePromise;
|
|
5
|
+
let sessionRecorderModuleLoaderOverride;
|
|
6
|
+
function loadSessionRecorderModule() {
|
|
7
|
+
if (sessionRecorderModuleLoaderOverride) return sessionRecorderModuleLoaderOverride();
|
|
8
|
+
sessionRecorderModulePromise ??= import("@safaricom-mxl/session-recorder");
|
|
9
|
+
return sessionRecorderModulePromise;
|
|
10
|
+
}
|
|
11
|
+
function resetSessionRecorderModuleCache() {
|
|
12
|
+
sessionRecorderModulePromise = void 0;
|
|
13
|
+
sessionRecorderModuleLoaderOverride = void 0;
|
|
14
|
+
}
|
|
15
|
+
function setSessionRecorderModuleLoaderForTests(loader) {
|
|
16
|
+
sessionRecorderModuleLoaderOverride = loader;
|
|
17
|
+
sessionRecorderModulePromise = void 0;
|
|
18
|
+
}
|
|
19
|
+
function buildInitConfig({ resource, spanSessionManager, tracerProvider, appID, userID, mxlDataURL, sessionRecorder: userOptions }, sessionRecorderVersion) {
|
|
10
20
|
return {
|
|
11
21
|
resource,
|
|
12
22
|
getSessionId: () => spanSessionManager.getSessionId(),
|
|
13
|
-
tracer: tracerProvider.getTracer("mxl.session-recorder",
|
|
23
|
+
tracer: tracerProvider.getTracer("mxl.session-recorder", sessionRecorderVersion),
|
|
14
24
|
url: getLogEndpoint(appID, mxlDataURL),
|
|
15
25
|
headers: getMXLHeaders(appID, userID),
|
|
16
26
|
...userOptions
|
|
17
27
|
};
|
|
18
28
|
}
|
|
19
29
|
function createSessionRecordingControl(args) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
let sessionRecorderModule;
|
|
31
|
+
let initStarted = false;
|
|
32
|
+
let initComplete = false;
|
|
33
|
+
let initFailed = false;
|
|
34
|
+
let pendingInit;
|
|
35
|
+
const getSessionRecorder = () => sessionRecorderModule?.SessionRecorder;
|
|
36
|
+
const waitForSessionStart = () => new Promise((resolve) => {
|
|
37
|
+
const removeListener = args.spanSessionManager.addSessionStartedListener(() => {
|
|
38
|
+
removeListener();
|
|
39
|
+
resolve();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const initSessionRecorderWhenReady = () => {
|
|
43
|
+
if (initComplete || initFailed) return Promise.resolve();
|
|
44
|
+
pendingInit ??= (async () => {
|
|
45
|
+
if (args.spanSessionManager.getSessionId() === null) await waitForSessionStart();
|
|
46
|
+
if (initComplete || initFailed || initStarted) return;
|
|
47
|
+
initStarted = true;
|
|
48
|
+
try {
|
|
49
|
+
sessionRecorderModule = await loadSessionRecorderModule();
|
|
50
|
+
const config = buildInitConfig(args, sessionRecorderModule.VERSION);
|
|
51
|
+
sessionRecorderModule.SessionRecorder.init(config);
|
|
52
|
+
initComplete = true;
|
|
53
|
+
} catch (error) {
|
|
54
|
+
initFailed = true;
|
|
55
|
+
args.diagLogger.error("Failed to initialize session recorder", error);
|
|
56
|
+
} finally {
|
|
57
|
+
pendingInit = void 0;
|
|
27
58
|
}
|
|
28
|
-
};
|
|
29
|
-
|
|
59
|
+
})();
|
|
60
|
+
return pendingInit;
|
|
61
|
+
};
|
|
62
|
+
if (args.recordUserSessions) initSessionRecorderWhenReady();
|
|
30
63
|
return {
|
|
31
|
-
isRecording: () =>
|
|
64
|
+
isRecording: () => Boolean(getSessionRecorder()?.isRecording()),
|
|
32
65
|
setEnabled: (enabled) => {
|
|
33
|
-
if (enabled)
|
|
34
|
-
|
|
35
|
-
|
|
66
|
+
if (enabled) {
|
|
67
|
+
if (initComplete) {
|
|
68
|
+
getSessionRecorder()?.setEnabled(true);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
initSessionRecorderWhenReady().then(() => {
|
|
72
|
+
if (initComplete) getSessionRecorder()?.setEnabled(true);
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (initComplete) getSessionRecorder()?.setEnabled(false);
|
|
36
77
|
}
|
|
37
78
|
};
|
|
38
79
|
}
|
|
39
80
|
//#endregion
|
|
40
|
-
export { createSessionRecordingControl,
|
|
81
|
+
export { createSessionRecordingControl, loadSessionRecorderModule, resetSessionRecorderModuleCache, setSessionRecorderModuleLoaderForTests };
|
|
41
82
|
|
|
42
83
|
//# sourceMappingURL=setupSessionRecorder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupSessionRecorder.js","names":[
|
|
1
|
+
{"version":3,"file":"setupSessionRecorder.js","names":[],"sources":["../../src/sdk/setupSessionRecorder.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport type { SessionRecorderConfig } from '@safaricom-mxl/session-recorder';\nimport { getLogEndpoint } from '../exporters/MXLLogExporter/utils';\nimport { getMXLHeaders } from '../exporters/utils';\nimport type {\n SessionRecorderUserConfig,\n SessionRecordingControl,\n} from './types';\n\ntype SessionRecorderModule = typeof import('@safaricom-mxl/session-recorder');\n\nlet sessionRecorderModulePromise: Promise<SessionRecorderModule> | undefined;\nlet sessionRecorderModuleLoaderOverride:\n | (() => Promise<SessionRecorderModule>)\n | undefined;\n\nexport function loadSessionRecorderModule(): Promise<SessionRecorderModule> {\n if (sessionRecorderModuleLoaderOverride) {\n return sessionRecorderModuleLoaderOverride();\n }\n\n sessionRecorderModulePromise ??= import('@safaricom-mxl/session-recorder');\n return sessionRecorderModulePromise;\n}\n\nexport function resetSessionRecorderModuleCache(): void {\n sessionRecorderModulePromise = undefined;\n sessionRecorderModuleLoaderOverride = undefined;\n}\n\nexport function setSessionRecorderModuleLoaderForTests(\n loader: (() => Promise<SessionRecorderModule>) | undefined,\n): void {\n sessionRecorderModuleLoaderOverride = loader;\n sessionRecorderModulePromise = undefined;\n}\n\ninterface SpanSessionManagerForRecorder {\n getSessionId: () => string | null;\n addSessionStartedListener: (listener: () => void) => () => void;\n}\n\ninterface CreateSessionRecordingControlArgs {\n resource: Resource;\n spanSessionManager: SpanSessionManagerForRecorder;\n tracerProvider: WebTracerProvider;\n appID: string;\n userID: string;\n mxlDataURL?: string;\n recordUserSessions: boolean;\n sessionRecorder?: SessionRecorderUserConfig;\n diagLogger: DiagLogger;\n}\n\nfunction buildInitConfig(\n {\n resource,\n spanSessionManager,\n tracerProvider,\n appID,\n userID,\n mxlDataURL,\n sessionRecorder: userOptions,\n }: CreateSessionRecordingControlArgs,\n sessionRecorderVersion: string,\n): SessionRecorderConfig {\n const tracer = tracerProvider.getTracer(\n 'mxl.session-recorder',\n sessionRecorderVersion,\n );\n return {\n resource,\n getSessionId: () => spanSessionManager.getSessionId(),\n tracer,\n url: getLogEndpoint(appID, mxlDataURL),\n headers: getMXLHeaders(appID, userID),\n ...userOptions,\n } as SessionRecorderConfig;\n}\n\nexport function createSessionRecordingControl(\n args: CreateSessionRecordingControlArgs,\n): SessionRecordingControl {\n let sessionRecorderModule: SessionRecorderModule | undefined;\n let initStarted = false;\n let initComplete = false;\n let initFailed = false;\n let pendingInit: Promise<void> | undefined;\n\n const getSessionRecorder = ():\n | SessionRecorderModule['SessionRecorder']\n | undefined => sessionRecorderModule?.SessionRecorder;\n\n const waitForSessionStart = (): Promise<void> =>\n new Promise((resolve) => {\n const removeListener = args.spanSessionManager.addSessionStartedListener(\n () => {\n removeListener();\n resolve();\n },\n );\n });\n\n const initSessionRecorderWhenReady = (): Promise<void> => {\n if (initComplete || initFailed) {\n return Promise.resolve();\n }\n\n pendingInit ??= (async () => {\n if (args.spanSessionManager.getSessionId() === null) {\n await waitForSessionStart();\n }\n\n if (initComplete || initFailed || initStarted) {\n return;\n }\n initStarted = true;\n\n try {\n sessionRecorderModule = await loadSessionRecorderModule();\n const config = buildInitConfig(args, sessionRecorderModule.VERSION);\n sessionRecorderModule.SessionRecorder.init(config);\n initComplete = true;\n } catch (error) {\n initFailed = true;\n args.diagLogger.error('Failed to initialize session recorder', error);\n } finally {\n pendingInit = undefined;\n }\n })();\n\n return pendingInit;\n };\n\n if (args.recordUserSessions) {\n void initSessionRecorderWhenReady();\n }\n\n return {\n isRecording: () => Boolean(getSessionRecorder()?.isRecording()),\n setEnabled: (enabled: boolean) => {\n if (enabled) {\n if (initComplete) {\n getSessionRecorder()?.setEnabled(true);\n return;\n }\n void initSessionRecorderWhenReady().then(() => {\n if (initComplete) {\n getSessionRecorder()?.setEnabled(true);\n }\n });\n return;\n }\n\n if (initComplete) {\n getSessionRecorder()?.setEnabled(false);\n }\n },\n };\n}\n"],"mappings":";;;AAaA,IAAI;AACJ,IAAI;AAIJ,SAAgB,4BAA4D;AAC1E,KAAI,oCACF,QAAO,qCAAqC;AAG9C,kCAAiC,OAAO;AACxC,QAAO;;AAGT,SAAgB,kCAAwC;AACtD,gCAA+B,KAAA;AAC/B,uCAAsC,KAAA;;AAGxC,SAAgB,uCACd,QACM;AACN,uCAAsC;AACtC,gCAA+B,KAAA;;AAoBjC,SAAS,gBACP,EACE,UACA,oBACA,gBACA,OACA,QACA,YACA,iBAAiB,eAEnB,wBACuB;AAKvB,QAAO;EACL;EACA,oBAAoB,mBAAmB,cAAc;EACrD,QAPa,eAAe,UAC5B,wBACA,uBAKM;EACN,KAAK,eAAe,OAAO,WAAW;EACtC,SAAS,cAAc,OAAO,OAAO;EACrC,GAAG;EACJ;;AAGH,SAAgB,8BACd,MACyB;CACzB,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,eAAe;CACnB,IAAI,aAAa;CACjB,IAAI;CAEJ,MAAM,2BAEW,uBAAuB;CAExC,MAAM,4BACJ,IAAI,SAAS,YAAY;EACvB,MAAM,iBAAiB,KAAK,mBAAmB,gCACvC;AACJ,mBAAgB;AAChB,YAAS;IAEZ;GACD;CAEJ,MAAM,qCAAoD;AACxD,MAAI,gBAAgB,WAClB,QAAO,QAAQ,SAAS;AAG1B,mBAAiB,YAAY;AAC3B,OAAI,KAAK,mBAAmB,cAAc,KAAK,KAC7C,OAAM,qBAAqB;AAG7B,OAAI,gBAAgB,cAAc,YAChC;AAEF,iBAAc;AAEd,OAAI;AACF,4BAAwB,MAAM,2BAA2B;IACzD,MAAM,SAAS,gBAAgB,MAAM,sBAAsB,QAAQ;AACnE,0BAAsB,gBAAgB,KAAK,OAAO;AAClD,mBAAe;YACR,OAAO;AACd,iBAAa;AACb,SAAK,WAAW,MAAM,yCAAyC,MAAM;aAC7D;AACR,kBAAc,KAAA;;MAEd;AAEJ,SAAO;;AAGT,KAAI,KAAK,mBACF,+BAA8B;AAGrC,QAAO;EACL,mBAAmB,QAAQ,oBAAoB,EAAE,aAAa,CAAC;EAC/D,aAAa,YAAqB;AAChC,OAAI,SAAS;AACX,QAAI,cAAc;AAChB,yBAAoB,EAAE,WAAW,KAAK;AACtC;;AAEG,kCAA8B,CAAC,WAAW;AAC7C,SAAI,aACF,qBAAoB,EAAE,WAAW,KAAK;MAExC;AACF;;AAGF,OAAI,aACF,qBAAoB,EAAE,WAAW,MAAM;;EAG5C"}
|
package/dist/sdk/types.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyCY,yBAAA,GAA4B,IAAA,CACtC,qBAAA;AAAA,UAIe,uBAAA;EACf,WAAA;EACA,UAAA,GAAa,OAAA;AAAA;AAAA,UAGE,gBAAA;;;;;;EAMf,WAAA;;;;;;EAOA,+BAAA;EAvBU;;;EA4BV,WAAA;EA3BqB;AAIvB;;EA4BE,+BAAA;AAAA;AAAA,UAGe,oBAAA;EACf,mBAAA,QAA2B,OAAA;EAC3B,SAAA,GAAY,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAC5B,SAAA,QAAiB,gBAAA;EAhCY;AAG/B;;EAiCE,6BAAA,IAAiC,eAAA;AAAA;AAAA,KAG9B,iBAAA;EAvBH;;;;;AAaF;EAiBE,UAAA;;;;;;EAOA,WAAA;EArBiC;;;;;;EA6BjC,4BAAA,GAA+B,4BAAA;EA7B/B;;;;;;EAqCA,gBAAA,GAAmB,eAAA;EA9BC;;;;;EAqCpB,UAAA,GAAa,iBAAA;EAeF;;;;;EARX,cAAA,GAAiB,cAAA;EAoFS;;;;;;EA5E1B,QAAA,GAAW,QAAA;EA7CX;;;;;;;;EAuDA,cAAA,GAAiB,aAAA;EAlBA;;;;;;;;EA4BjB,aAAA,GAAgB,kBAAA;EAiBhB;;;;;EAVA,QAAA,GAAW,YAAA;EAmCX;;;;;;;;EAzBA,kBAAA,GAAqB,iBAAA;EAyErB;;;;;;;EAhEA,+BAAA;EA2FG;;;;;;;EAlFH,4BAAA;EAEA,UAAA,GAAa,UAAA;EA2FmB;;AAAA;EAtFhC,UAAA;;;;EAKA,YAAA;EA8F4B;;;;;;;EArF5B,uBAAA,GAA0B,oBAAA;EAqFE;;AAAA;;;;;EA5E5B,gBAAA,GAAmB,OAAA,CAAQ,gBAAA;EAyFK;;;;;EAlFhC,gBAAA;EAkFA;;;;AAGF;;;EA5EE,0BAAA;
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":"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"}
|
package/dist/sdk/types.d.ts
CHANGED
|
@@ -22,9 +22,9 @@ import { Resource } from "@opentelemetry/resources";
|
|
|
22
22
|
import { SpanExporter, SpanProcessor } from "@opentelemetry/sdk-trace-web";
|
|
23
23
|
import { Instrumentation } from "@opentelemetry/instrumentation";
|
|
24
24
|
import { BatchLogRecordProcessor, LogRecordExporter, LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
25
|
-
import { SessionRecorderConfig } from "@safaricom-mxl/session-recorder";
|
|
26
25
|
import { FetchInstrumentationConfig } from "@opentelemetry/instrumentation-fetch";
|
|
27
26
|
import { XMLHttpRequestInstrumentationConfig } from "@opentelemetry/instrumentation-xml-http-request";
|
|
27
|
+
import { SessionRecorderConfig } from "@safaricom-mxl/session-recorder";
|
|
28
28
|
|
|
29
29
|
//#region src/sdk/types.d.ts
|
|
30
30
|
type SessionRecorderUserConfig = Omit<SessionRecorderConfig, 'resource' | 'getSessionId' | 'tracer' | 'url' | 'headers' | 'apiKey'>;
|
package/dist/sdk/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyCY,yBAAA,GAA4B,IAAA,CACtC,qBAAA;AAAA,UAIe,uBAAA;EACf,WAAA;EACA,UAAA,GAAa,OAAA;AAAA;AAAA,UAGE,gBAAA;;;;;;EAMf,WAAA;;;;;;EAOA,+BAAA;EAvBU;;;EA4BV,WAAA;EA3BqB;AAIvB;;EA4BE,+BAAA;AAAA;AAAA,UAGe,oBAAA;EACf,mBAAA,QAA2B,OAAA;EAC3B,SAAA,GAAY,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAC5B,SAAA,QAAiB,gBAAA;EAhCY;AAG/B;;EAiCE,6BAAA,IAAiC,eAAA;AAAA;AAAA,KAG9B,iBAAA;EAvBH;;;;;AAaF;EAiBE,UAAA;;;;;;EAOA,WAAA;EArBiC;;;;;;EA6BjC,4BAAA,GAA+B,4BAAA;EA7B/B;;;;;;EAqCA,gBAAA,GAAmB,eAAA;EA9BC;;;;;EAqCpB,UAAA,GAAa,iBAAA;EAeF;;;;;EARX,cAAA,GAAiB,cAAA;EAoFS;;;;;;EA5E1B,QAAA,GAAW,QAAA;EA7CX;;;;;;;;EAuDA,cAAA,GAAiB,aAAA;EAlBA;;;;;;;;EA4BjB,aAAA,GAAgB,kBAAA;EAiBhB;;;;;EAVA,QAAA,GAAW,YAAA;EAmCX;;;;;;;;EAzBA,kBAAA,GAAqB,iBAAA;EAyErB;;;;;;;EAhEA,+BAAA;EA2FG;;;;;;;EAlFH,4BAAA;EAEA,UAAA,GAAa,UAAA;EA2FmB;;AAAA;EAtFhC,UAAA;;;;EAKA,YAAA;EA8F4B;;;;;;;EArF5B,uBAAA,GAA0B,oBAAA;EAqFE;;AAAA;;;;;EA5E5B,gBAAA,GAAmB,OAAA,CAAQ,gBAAA;EAyFK;;;;;EAlFhC,gBAAA;EAkFA;;;;AAGF;;;EA5EE,0BAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/sdk/types.ts"],"mappings":"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"}
|
package/dist/sdk/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["TEMPLATE_APP_VERSION"],"sources":["../../src/sdk/utils.ts"],"sourcesContent":["import { TEMPLATE_APP_VERSION } from '../resources/constants
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["TEMPLATE_APP_VERSION"],"sources":["../../src/sdk/utils.ts"],"sourcesContent":["import { TEMPLATE_APP_VERSION } from '../resources/constants';\n\nexport const validateAppID = (appID: unknown): string | undefined => {\n if (appID === undefined) return undefined;\n if (typeof appID !== 'string') {\n throw new Error(\n `appID must be a string, or omitted if not using MXL. Received ${String(appID)}`,\n );\n }\n // if (appID.length >= 25) {\n // throw new Error(\n // `appID should be 25 characters long, or omitted if not using MXL. Received \"${appID}\"`,\n // );\n // }\n return appID;\n};\n\nexport const validateAppVersion = (appVersion: unknown): string => {\n if (appVersion === undefined) {\n // TEMPLATE_APP_VERSION is rewritten by the CLI at build time and may be empty\n const trimmedTemplate = TEMPLATE_APP_VERSION.trim();\n if (trimmedTemplate === '') {\n return 'unspecified';\n }\n return trimmedTemplate;\n }\n if (typeof appVersion !== 'string') {\n throw new Error(\n `if appVersion is specified, it must be a string. Received ${String(appVersion)}`,\n );\n }\n const trimmedAppVersion = appVersion.trim();\n if (trimmedAppVersion === '') {\n throw new Error(\n 'if appVersion is specified, it cannot be an empty string.',\n );\n }\n return trimmedAppVersion;\n};\n"],"mappings":";;;AAEA,MAAa,iBAAiB,UAAuC;AACnE,KAAI,UAAU,KAAA,EAAW,QAAO,KAAA;AAChC,KAAI,OAAO,UAAU,SACnB,OAAM,IAAI,MACR,iEAAiE,OAAO,MAAM,GAC/E;AAOH,QAAO;;AAGT,MAAa,sBAAsB,eAAgC;AACjE,KAAI,eAAe,KAAA,GAAW;EAE5B,MAAM,kBAAkBA,kCAAAA,qBAAqB,MAAM;AACnD,MAAI,oBAAoB,GACtB,QAAO;AAET,SAAO;;AAET,KAAI,OAAO,eAAe,SACxB,OAAM,IAAI,MACR,6DAA6D,OAAO,WAAW,GAChF;CAEH,MAAM,oBAAoB,WAAW,MAAM;AAC3C,KAAI,sBAAsB,GACxB,OAAM,IAAI,MACR,4DACD;AAEH,QAAO"}
|
package/dist/sdk/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../src/sdk/utils.ts"],"sourcesContent":["import { TEMPLATE_APP_VERSION } from '../resources/constants
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../src/sdk/utils.ts"],"sourcesContent":["import { TEMPLATE_APP_VERSION } from '../resources/constants';\n\nexport const validateAppID = (appID: unknown): string | undefined => {\n if (appID === undefined) return undefined;\n if (typeof appID !== 'string') {\n throw new Error(\n `appID must be a string, or omitted if not using MXL. Received ${String(appID)}`,\n );\n }\n // if (appID.length >= 25) {\n // throw new Error(\n // `appID should be 25 characters long, or omitted if not using MXL. Received \"${appID}\"`,\n // );\n // }\n return appID;\n};\n\nexport const validateAppVersion = (appVersion: unknown): string => {\n if (appVersion === undefined) {\n // TEMPLATE_APP_VERSION is rewritten by the CLI at build time and may be empty\n const trimmedTemplate = TEMPLATE_APP_VERSION.trim();\n if (trimmedTemplate === '') {\n return 'unspecified';\n }\n return trimmedTemplate;\n }\n if (typeof appVersion !== 'string') {\n throw new Error(\n `if appVersion is specified, it must be a string. Received ${String(appVersion)}`,\n );\n }\n const trimmedAppVersion = appVersion.trim();\n if (trimmedAppVersion === '') {\n throw new Error(\n 'if appVersion is specified, it cannot be an empty string.',\n );\n }\n return trimmedAppVersion;\n};\n"],"mappings":";;AAEA,MAAa,iBAAiB,UAAuC;AACnE,KAAI,UAAU,KAAA,EAAW,QAAO,KAAA;AAChC,KAAI,OAAO,UAAU,SACnB,OAAM,IAAI,MACR,iEAAiE,OAAO,MAAM,GAC/E;AAOH,QAAO;;AAGT,MAAa,sBAAsB,eAAgC;AACjE,KAAI,eAAe,KAAA,GAAW;EAE5B,MAAM,kBAAkB,qBAAqB,MAAM;AACnD,MAAI,oBAAoB,GACtB,QAAO;AAET,SAAO;;AAET,KAAI,OAAO,eAAe,SACxB,OAAM,IAAI,MACR,6DAA6D,OAAO,WAAW,GAChF;CAEH,MAAM,oBAAoB,WAAW,MAAM;AAC3C,KAAI,sBAAsB,GACxB,OAAM,IAAI,MACR,4DACD;AAEH,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetchTransport.cjs","names":[],"sources":["../../../src/transport/FetchTransport/FetchTransport.ts"],"sourcesContent":["import { diag } from '@opentelemetry/api';\nimport type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { FetchRequestParameters } from './types
|
|
1
|
+
{"version":3,"file":"FetchTransport.cjs","names":[],"sources":["../../../src/transport/FetchTransport/FetchTransport.ts"],"sourcesContent":["import { diag } from '@opentelemetry/api';\nimport type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { FetchRequestParameters } from './types';\n\n// The fetch spec limits inflight keepalive request bodies to 64KiB total per\n// page context. We use a conservative budget to leave room for third-party\n// scripts that may also use keepalive or sendBeacon.\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nconst KEEPALIVE_BYTE_BUDGET = 49152; // 48KiB\n\n// Chrome enforces a 9-request concurrent keepalive limit per renderer process.\nconst MAX_KEEPALIVE_REQUESTS = 9;\n\nlet inflightKeepaliveBytes = 0;\nlet inflightKeepaliveCount = 0;\n\n/** @internal for testing only */\nexport function _resetKeepaliveTracking(): void {\n inflightKeepaliveBytes = 0;\n inflightKeepaliveCount = 0;\n}\n\nexport class FetchTransport implements IExporterTransport {\n public constructor(private readonly _config: FetchRequestParameters) {}\n\n // MXL endpoints require request bodies to be compressed with gzip\n private static async _compressRequest(\n data: Uint8Array<ArrayBuffer>,\n ): Promise<Uint8Array<ArrayBuffer>> {\n const stream = new CompressionStream('gzip');\n const writer = stream.writable.getWriter();\n\n void writer.write(data);\n void writer.close();\n\n const compressedChunks: Uint8Array[] = [];\n const reader = stream.readable.getReader();\n\n let done = false;\n while (!done) {\n const result = await reader.read();\n\n if (result.value) {\n compressedChunks.push(result.value);\n }\n\n done = result.done;\n }\n\n const compressedData = new Uint8Array(\n compressedChunks.reduce((acc, chunk) => acc + chunk.length, 0),\n );\n\n let offset = 0;\n\n for (const chunk of compressedChunks) {\n compressedData.set(chunk, offset);\n offset += chunk.length;\n }\n\n return compressedData;\n }\n\n public send(\n data: Uint8Array<ArrayBuffer>,\n timeoutMillis: number,\n ): Promise<ExportResponse> {\n return this._asyncSend(data, timeoutMillis);\n }\n\n public shutdown(): void {\n // Intentionally left empty, nothing to do.\n }\n\n public async _asyncSend(\n data: Uint8Array<ArrayBuffer>,\n timeoutMillis: number,\n ): Promise<ExportResponse> {\n let request = data;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...this._config.headers,\n };\n\n // Use AbortSignal.timeout if available, otherwise fallback to AbortController\n // https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static\n let signal: AbortSignal;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if ('timeout' in AbortSignal) {\n // ok to ignore because there is a guard\n // eslint-disable-next-line baseline-js/use-baseline\n signal = AbortSignal.timeout(timeoutMillis);\n } else {\n const controller = new AbortController();\n signal = controller.signal;\n timeoutId = setTimeout(() => {\n controller.abort(new DOMException('TimeoutError', 'TimeoutError'));\n }, timeoutMillis);\n }\n\n let keepalive = false;\n\n try {\n if (this._config.compression === 'gzip') {\n try {\n request = await FetchTransport._compressRequest(data);\n } catch (error) {\n const compressError =\n error instanceof Error ? error : new Error(String(error));\n diag.warn(\n `Fetch transport gzip compression failed: ${compressError.message}`,\n );\n return { status: 'failure', error: compressError };\n }\n headers['Content-Encoding'] = 'gzip';\n headers['Content-Length'] = request.length.toString();\n }\n\n const wouldExceedBytes =\n inflightKeepaliveBytes + request.byteLength > KEEPALIVE_BYTE_BUDGET;\n const wouldExceedCount = inflightKeepaliveCount >= MAX_KEEPALIVE_REQUESTS;\n keepalive = !wouldExceedBytes && !wouldExceedCount;\n\n if (keepalive) {\n inflightKeepaliveBytes += request.byteLength;\n inflightKeepaliveCount++;\n } else {\n const reason = wouldExceedBytes\n ? `inflight bytes (${inflightKeepaliveBytes} + ${request.byteLength}) would exceed ${KEEPALIVE_BYTE_BUDGET}B budget`\n : `concurrent count (${inflightKeepaliveCount}) at limit of ${MAX_KEEPALIVE_REQUESTS}`;\n diag.debug(`Sending without keepalive: ${reason}`);\n }\n\n const response = await fetch(this._config.url, {\n method: 'POST',\n keepalive,\n headers,\n body: request,\n signal,\n });\n\n if (response.ok) {\n return { status: 'success' };\n }\n\n const error = new Error(`${response.status} Fetch request failed`);\n const message = `Fetch transport received HTTP ${response.status} (keepalive=${keepalive})`;\n if (response.status >= 500) {\n diag.debug(message);\n return { status: 'retryable', error };\n }\n diag.warn(message);\n return { status: 'failure', error };\n } catch (error) {\n const fetchError =\n error instanceof Error ? error : new Error(String(error));\n const isRetryable =\n fetchError instanceof TypeError ||\n (fetchError instanceof DOMException &&\n fetchError.name === 'TimeoutError');\n const message = `Fetch transport failed (keepalive=${keepalive}): ${fetchError.message}`;\n if (isRetryable) {\n diag.debug(message);\n } else {\n diag.warn(message);\n }\n return {\n status: isRetryable ? 'retryable' : 'failure',\n error: fetchError,\n };\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n if (keepalive) {\n inflightKeepaliveBytes -= request.byteLength;\n inflightKeepaliveCount--;\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetchTransport.js","names":[],"sources":["../../../src/transport/FetchTransport/FetchTransport.ts"],"sourcesContent":["import { diag } from '@opentelemetry/api';\nimport type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { FetchRequestParameters } from './types
|
|
1
|
+
{"version":3,"file":"FetchTransport.js","names":[],"sources":["../../../src/transport/FetchTransport/FetchTransport.ts"],"sourcesContent":["import { diag } from '@opentelemetry/api';\nimport type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { FetchRequestParameters } from './types';\n\n// The fetch spec limits inflight keepalive request bodies to 64KiB total per\n// page context. We use a conservative budget to leave room for third-party\n// scripts that may also use keepalive or sendBeacon.\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nconst KEEPALIVE_BYTE_BUDGET = 49152; // 48KiB\n\n// Chrome enforces a 9-request concurrent keepalive limit per renderer process.\nconst MAX_KEEPALIVE_REQUESTS = 9;\n\nlet inflightKeepaliveBytes = 0;\nlet inflightKeepaliveCount = 0;\n\n/** @internal for testing only */\nexport function _resetKeepaliveTracking(): void {\n inflightKeepaliveBytes = 0;\n inflightKeepaliveCount = 0;\n}\n\nexport class FetchTransport implements IExporterTransport {\n public constructor(private readonly _config: FetchRequestParameters) {}\n\n // MXL endpoints require request bodies to be compressed with gzip\n private static async _compressRequest(\n data: Uint8Array<ArrayBuffer>,\n ): Promise<Uint8Array<ArrayBuffer>> {\n const stream = new CompressionStream('gzip');\n const writer = stream.writable.getWriter();\n\n void writer.write(data);\n void writer.close();\n\n const compressedChunks: Uint8Array[] = [];\n const reader = stream.readable.getReader();\n\n let done = false;\n while (!done) {\n const result = await reader.read();\n\n if (result.value) {\n compressedChunks.push(result.value);\n }\n\n done = result.done;\n }\n\n const compressedData = new Uint8Array(\n compressedChunks.reduce((acc, chunk) => acc + chunk.length, 0),\n );\n\n let offset = 0;\n\n for (const chunk of compressedChunks) {\n compressedData.set(chunk, offset);\n offset += chunk.length;\n }\n\n return compressedData;\n }\n\n public send(\n data: Uint8Array<ArrayBuffer>,\n timeoutMillis: number,\n ): Promise<ExportResponse> {\n return this._asyncSend(data, timeoutMillis);\n }\n\n public shutdown(): void {\n // Intentionally left empty, nothing to do.\n }\n\n public async _asyncSend(\n data: Uint8Array<ArrayBuffer>,\n timeoutMillis: number,\n ): Promise<ExportResponse> {\n let request = data;\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...this._config.headers,\n };\n\n // Use AbortSignal.timeout if available, otherwise fallback to AbortController\n // https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static\n let signal: AbortSignal;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if ('timeout' in AbortSignal) {\n // ok to ignore because there is a guard\n // eslint-disable-next-line baseline-js/use-baseline\n signal = AbortSignal.timeout(timeoutMillis);\n } else {\n const controller = new AbortController();\n signal = controller.signal;\n timeoutId = setTimeout(() => {\n controller.abort(new DOMException('TimeoutError', 'TimeoutError'));\n }, timeoutMillis);\n }\n\n let keepalive = false;\n\n try {\n if (this._config.compression === 'gzip') {\n try {\n request = await FetchTransport._compressRequest(data);\n } catch (error) {\n const compressError =\n error instanceof Error ? error : new Error(String(error));\n diag.warn(\n `Fetch transport gzip compression failed: ${compressError.message}`,\n );\n return { status: 'failure', error: compressError };\n }\n headers['Content-Encoding'] = 'gzip';\n headers['Content-Length'] = request.length.toString();\n }\n\n const wouldExceedBytes =\n inflightKeepaliveBytes + request.byteLength > KEEPALIVE_BYTE_BUDGET;\n const wouldExceedCount = inflightKeepaliveCount >= MAX_KEEPALIVE_REQUESTS;\n keepalive = !wouldExceedBytes && !wouldExceedCount;\n\n if (keepalive) {\n inflightKeepaliveBytes += request.byteLength;\n inflightKeepaliveCount++;\n } else {\n const reason = wouldExceedBytes\n ? `inflight bytes (${inflightKeepaliveBytes} + ${request.byteLength}) would exceed ${KEEPALIVE_BYTE_BUDGET}B budget`\n : `concurrent count (${inflightKeepaliveCount}) at limit of ${MAX_KEEPALIVE_REQUESTS}`;\n diag.debug(`Sending without keepalive: ${reason}`);\n }\n\n const response = await fetch(this._config.url, {\n method: 'POST',\n keepalive,\n headers,\n body: request,\n signal,\n });\n\n if (response.ok) {\n return { status: 'success' };\n }\n\n const error = new Error(`${response.status} Fetch request failed`);\n const message = `Fetch transport received HTTP ${response.status} (keepalive=${keepalive})`;\n if (response.status >= 500) {\n diag.debug(message);\n return { status: 'retryable', error };\n }\n diag.warn(message);\n return { status: 'failure', error };\n } catch (error) {\n const fetchError =\n error instanceof Error ? error : new Error(String(error));\n const isRetryable =\n fetchError instanceof TypeError ||\n (fetchError instanceof DOMException &&\n fetchError.name === 'TimeoutError');\n const message = `Fetch transport failed (keepalive=${keepalive}): ${fetchError.message}`;\n if (isRetryable) {\n diag.debug(message);\n } else {\n diag.warn(message);\n }\n return {\n status: isRetryable ? 'retryable' : 'failure',\n error: fetchError,\n };\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n if (keepalive) {\n inflightKeepaliveBytes -= request.byteLength;\n inflightKeepaliveCount--;\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createFetchTransport.cjs","names":["FetchTransport"],"sources":["../../../src/transport/FetchTransport/createFetchTransport.ts"],"sourcesContent":["import type { IExporterTransport } from '@opentelemetry/otlp-exporter-base';\nimport { FetchTransport } from './FetchTransport
|
|
1
|
+
{"version":3,"file":"createFetchTransport.cjs","names":["FetchTransport"],"sources":["../../../src/transport/FetchTransport/createFetchTransport.ts"],"sourcesContent":["import type { IExporterTransport } from '@opentelemetry/otlp-exporter-base';\nimport { FetchTransport } from './FetchTransport';\nimport type { FetchRequestParameters } from './types';\n\nexport const createFetchTransport = (\n config: FetchRequestParameters,\n): IExporterTransport => new FetchTransport(config);\n"],"mappings":";;;AAIA,MAAa,wBACX,WACuB,IAAIA,gDAAAA,eAAe,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createFetchTransport.js","names":[],"sources":["../../../src/transport/FetchTransport/createFetchTransport.ts"],"sourcesContent":["import type { IExporterTransport } from '@opentelemetry/otlp-exporter-base';\nimport { FetchTransport } from './FetchTransport
|
|
1
|
+
{"version":3,"file":"createFetchTransport.js","names":[],"sources":["../../../src/transport/FetchTransport/createFetchTransport.ts"],"sourcesContent":["import type { IExporterTransport } from '@opentelemetry/otlp-exporter-base';\nimport { FetchTransport } from './FetchTransport';\nimport type { FetchRequestParameters } from './types';\n\nexport const createFetchTransport = (\n config: FetchRequestParameters,\n): IExporterTransport => new FetchTransport(config);\n"],"mappings":";;AAIA,MAAa,wBACX,WACuB,IAAI,eAAe,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetryingTransport.cjs","names":["OTelPerformanceManager","INITIAL_BACKOFF","MAX_BACKOFF","BACKOFF_MULTIPLIER"],"sources":["../../../src/transport/RetryingTransport/RetryingTransport.ts"],"sourcesContent":["import type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { PerformanceManager } from '../../utils
|
|
1
|
+
{"version":3,"file":"RetryingTransport.cjs","names":["OTelPerformanceManager","INITIAL_BACKOFF","MAX_BACKOFF","BACKOFF_MULTIPLIER"],"sources":["../../../src/transport/RetryingTransport/RetryingTransport.ts"],"sourcesContent":["import type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { PerformanceManager } from '../../utils';\nimport { OTelPerformanceManager } from '../../utils';\nimport {\n BACKOFF_MULTIPLIER,\n INITIAL_BACKOFF,\n JITTER,\n MAX_ATTEMPTS,\n MAX_BACKOFF,\n} from './constants';\n\n/**\n * Get a pseudo-random jitter that falls in the range of [-JITTER, +JITTER]\n */\nconst getJitter = () => Math.random() * (2 * JITTER) - JITTER;\n\n// Taken directly from open-telemetry/opentelemetry-js/experimental/packages/otlp-exporter-base/src/retrying-transport.ts\n// File is not exposed externally\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class RetryingTransport implements IExporterTransport {\n public constructor(\n private readonly _transport: IExporterTransport,\n private readonly _perf: PerformanceManager = new OTelPerformanceManager(),\n ) {}\n\n public async send(\n data: Uint8Array,\n timeoutMillis: number,\n ): Promise<ExportResponse> {\n const deadline = this._perf.getNowMillis() + timeoutMillis;\n let result = await this._transport.send(data, timeoutMillis);\n let attempts = MAX_ATTEMPTS;\n let nextBackoff = INITIAL_BACKOFF;\n\n while (result.status === 'retryable' && attempts > 0) {\n attempts--;\n\n // use maximum of computed backoff and 0 to avoid negative timeouts\n const backoff = Math.max(\n Math.min(nextBackoff, MAX_BACKOFF) + getJitter(),\n 0,\n );\n nextBackoff = nextBackoff * BACKOFF_MULTIPLIER;\n const retryInMillis = result.retryInMillis ?? backoff;\n\n // return when expected retry time is after the export deadline.\n const remainingTimeoutMillis = deadline - this._perf.getNowMillis();\n if (retryInMillis > remainingTimeoutMillis) {\n return result;\n }\n\n result = await this._retry(data, remainingTimeoutMillis, retryInMillis);\n }\n\n return result;\n }\n\n public shutdown() {\n this._transport.shutdown();\n }\n\n private _retry(\n data: Uint8Array,\n timeoutMillis: number,\n inMillis: number,\n ): Promise<ExportResponse> {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this._transport.send(data, timeoutMillis).then(resolve, reject);\n }, inMillis);\n });\n }\n}\n"],"mappings":";;;;;;;AAiBA,MAAM,kBAAkB,KAAK,QAAQ,GAAI,KAAA;AAoBzC,IAAa,oBAAb,MAA6D;CAC3D,YACE,YACA,QAA6C,IAAIA,wDAAAA,wBAAwB,EACzE;AAFiB,OAAA,aAAA;AACA,OAAA,QAAA;;CAGnB,MAAa,KACX,MACA,eACyB;EACzB,MAAM,WAAW,KAAK,MAAM,cAAc,GAAG;EAC7C,IAAI,SAAS,MAAM,KAAK,WAAW,KAAK,MAAM,cAAc;EAC5D,IAAI,WAAA;EACJ,IAAI,cAAcC,8CAAAA;AAElB,SAAO,OAAO,WAAW,eAAe,WAAW,GAAG;AACpD;GAGA,MAAM,UAAU,KAAK,IACnB,KAAK,IAAI,aAAaC,8CAAAA,YAAY,GAAG,WAAW,EAChD,EACD;AACD,iBAAc,cAAcC,8CAAAA;GAC5B,MAAM,gBAAgB,OAAO,iBAAiB;GAG9C,MAAM,yBAAyB,WAAW,KAAK,MAAM,cAAc;AACnE,OAAI,gBAAgB,uBAClB,QAAO;AAGT,YAAS,MAAM,KAAK,OAAO,MAAM,wBAAwB,cAAc;;AAGzE,SAAO;;CAGT,WAAkB;AAChB,OAAK,WAAW,UAAU;;CAG5B,OACE,MACA,eACA,UACyB;AACzB,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,oBAAiB;AACf,SAAK,WAAW,KAAK,MAAM,cAAc,CAAC,KAAK,SAAS,OAAO;MAC9D,SAAS;IACZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RetryingTransport.js","names":[],"sources":["../../../src/transport/RetryingTransport/RetryingTransport.ts"],"sourcesContent":["import type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { PerformanceManager } from '../../utils
|
|
1
|
+
{"version":3,"file":"RetryingTransport.js","names":[],"sources":["../../../src/transport/RetryingTransport/RetryingTransport.ts"],"sourcesContent":["import type {\n ExportResponse,\n IExporterTransport,\n} from '@opentelemetry/otlp-exporter-base';\nimport type { PerformanceManager } from '../../utils';\nimport { OTelPerformanceManager } from '../../utils';\nimport {\n BACKOFF_MULTIPLIER,\n INITIAL_BACKOFF,\n JITTER,\n MAX_ATTEMPTS,\n MAX_BACKOFF,\n} from './constants';\n\n/**\n * Get a pseudo-random jitter that falls in the range of [-JITTER, +JITTER]\n */\nconst getJitter = () => Math.random() * (2 * JITTER) - JITTER;\n\n// Taken directly from open-telemetry/opentelemetry-js/experimental/packages/otlp-exporter-base/src/retrying-transport.ts\n// File is not exposed externally\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class RetryingTransport implements IExporterTransport {\n public constructor(\n private readonly _transport: IExporterTransport,\n private readonly _perf: PerformanceManager = new OTelPerformanceManager(),\n ) {}\n\n public async send(\n data: Uint8Array,\n timeoutMillis: number,\n ): Promise<ExportResponse> {\n const deadline = this._perf.getNowMillis() + timeoutMillis;\n let result = await this._transport.send(data, timeoutMillis);\n let attempts = MAX_ATTEMPTS;\n let nextBackoff = INITIAL_BACKOFF;\n\n while (result.status === 'retryable' && attempts > 0) {\n attempts--;\n\n // use maximum of computed backoff and 0 to avoid negative timeouts\n const backoff = Math.max(\n Math.min(nextBackoff, MAX_BACKOFF) + getJitter(),\n 0,\n );\n nextBackoff = nextBackoff * BACKOFF_MULTIPLIER;\n const retryInMillis = result.retryInMillis ?? backoff;\n\n // return when expected retry time is after the export deadline.\n const remainingTimeoutMillis = deadline - this._perf.getNowMillis();\n if (retryInMillis > remainingTimeoutMillis) {\n return result;\n }\n\n result = await this._retry(data, remainingTimeoutMillis, retryInMillis);\n }\n\n return result;\n }\n\n public shutdown() {\n this._transport.shutdown();\n }\n\n private _retry(\n data: Uint8Array,\n timeoutMillis: number,\n inMillis: number,\n ): Promise<ExportResponse> {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this._transport.send(data, timeoutMillis).then(resolve, reject);\n }, inMillis);\n });\n }\n}\n"],"mappings":";;;;;;AAiBA,MAAM,kBAAkB,KAAK,QAAQ,GAAI,KAAA;AAoBzC,IAAa,oBAAb,MAA6D;CAC3D,YACE,YACA,QAA6C,IAAI,wBAAwB,EACzE;AAFiB,OAAA,aAAA;AACA,OAAA,QAAA;;CAGnB,MAAa,KACX,MACA,eACyB;EACzB,MAAM,WAAW,KAAK,MAAM,cAAc,GAAG;EAC7C,IAAI,SAAS,MAAM,KAAK,WAAW,KAAK,MAAM,cAAc;EAC5D,IAAI,WAAA;EACJ,IAAI,cAAc;AAElB,SAAO,OAAO,WAAW,eAAe,WAAW,GAAG;AACpD;GAGA,MAAM,UAAU,KAAK,IACnB,KAAK,IAAI,aAAa,YAAY,GAAG,WAAW,EAChD,EACD;AACD,iBAAc,cAAc;GAC5B,MAAM,gBAAgB,OAAO,iBAAiB;GAG9C,MAAM,yBAAyB,WAAW,KAAK,MAAM,cAAc;AACnE,OAAI,gBAAgB,uBAClB,QAAO;AAGT,YAAS,MAAM,KAAK,OAAO,MAAM,wBAAwB,cAAc;;AAGzE,SAAO;;CAGT,WAAkB;AAChB,OAAK,WAAW,UAAU;;CAG5B,OACE,MACA,eACA,UACyB;AACzB,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,oBAAiB;AACf,SAAK,WAAW,KAAK,MAAM,cAAc,CAAC,KAAK,SAAS,OAAO;MAC9D,SAAS;IACZ"}
|