{"version":3,"mappings":"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","names":["isNodeEnv","isBrowserBundle","isBrowser","isElectronNodeRenderer","GLOBAL_OBJ","_nullishCoalesce","lhs","rhsFn","_optionalChain","ops","lastAccessLHS","value","i","op","fn","args","errorsInstrumented","registerSpanErrorInstrumentation","addGlobalErrorInstrumentationHandler","errorCallback","addGlobalUnhandledRejectionInstrumentationHandler","activeSpan","getActiveSpan","rootSpan","getRootSpan","message","DEBUG_BUILD","logger","SPAN_STATUS_ERROR","SCOPE_ON_START_SPAN_FIELD","ISOLATION_SCOPE_ON_START_SPAN_FIELD","setCapturedScopesOnSpan","span","scope","isolationScope","addNonEnumerableProperty","getCapturedScopesOnSpan","hasTracingEnabled","maybeOptions","client","getClient","options","SentryNonRecordingSpan","spanContext","uuid4","TRACE_FLAG_NONE","_timestamp","_key","_value","_values","_status","_name","_attributesOrStartTime","_startTime","_link","_links","_exception","_time","logSpanStart","description","parentSpanId","spanToJSON","spanId","sampled","spanIsSampled","isRootSpan","header","infoParts","logSpanEnd","msg","sampleSpan","samplingContext","sampleRate","parsedSampleRate","parseSampleRate","setMeasurement","name","unit","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT","timedEventsToMeasurements","events","measurements","event","attributes","MAX_SPAN_COUNT","SentrySpan","timestampInSeconds","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_OP","traceId","TRACE_FLAG_SAMPLED","key","timeInput","spanTimeInputToSeconds","endTimestamp","dropUndefinedKeys","getStatusMessage","getMetricSummaryJsonForSpan","SEMANTIC_ATTRIBUTE_PROFILE_ID","SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME","attributesOrStartTime","startTime","time","isSpanTimeInput","sendSpanEnvelope","createSpanEnvelope","transactionEvent","getCurrentScope","isFullFinishedSpan","capturedSpanScope","capturedSpanIsolationScope","spans","getSpanDescendants","isStandaloneSpan","source","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","transaction","spanToTransactionTraceContext","a","b","getDynamicSamplingContextFromSpan","input","envelope","spanItems","transport","reason","SUPPRESS_TRACING_KEY","startInactiveSpan","acs","getAcs","spanArguments","parseSentrySpanArguments","forceTransaction","customParentSpan","callback","withScope","withActiveSpan","parentSpan","getParentSpan","createChildOrRootSpan","_setSpanForScope","getIsolationScope","_startChildSpan","addChildSpanToSpan","dsc","parentSampled","_startRootSpan","freezeDscOnSpan","initialCtx","ctx","carrier","getMainCarrier","getAsyncContextStrategy","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","childSpan","_getSpanForScope","TRACING_DEFAULTS","FINISH_REASON_HEARTBEAT_FAILED","FINISH_REASON_IDLE_TIMEOUT","FINISH_REASON_FINAL_TIMEOUT","FINISH_REASON_EXTERNAL_FINISH","startIdleSpan","startSpanOptions","activities","_finished","_idleTimeoutID","_finishReason","_autoFinishAllowed","_cleanupHooks","idleTimeout","finalTimeout","childSpanTimeout","beforeSpanEnd","previousActiveSpan","_startIdleSpan","target","thisArg","definedEndTimestamp","rest","timestamp","spanEndTimestamp","child","onIdleSpanEnded","childEndTimestamps","latestSpanEndTimestamp","spanStartTimestamp","_cancelIdleTimeout","_restartIdleTimeout","_restartChildSpanTimeout","_pushActivity","_popActivity","cleanup","spanJSON","startTimestamp","SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON","childSpans","discardedSpans","childSpanJSON","childEndTimestamp","childStartTimestamp","spanStartedBeforeIdleSpanEnd","timeoutWithMarginOfError","spanEndedBeforeFinalTimeout","stringifiedSpan","removeChildSpanFromSpan","startedSpan","endedSpan","spanToAllowAutoFinish","isSentryRequestUrl","url","dsn","tunnel","checkDsn","checkTunnel","removeTrailingSlash","str","instrumentFetchRequest","handlerData","shouldCreateSpan","shouldAttachHeaders","spanOrigin","shouldCreateSpanResult","endSpan","method","fullUrl","getFullURL","host","parseUrl","hasParent","request","addTracingHeadersToFetchRequest","sentryTraceHeader","spanToTraceHeader","generateSentryTraceHeader","sentryBaggageHeader","dynamicSamplingContextToSentryBaggageHeader","getDynamicSamplingContextFromClient","headers","isInstanceOf","newHeaders","BAGGAGE_HEADER_NAME","existingBaggageHeader","newBaggageHeaders","setHttpStatus","contentLength","contentLengthNum","getRating","thresholds","bindReporter","metric","reportAllChanges","prevValue","delta","forceReport","generateUniqueID","getNavigationEntry","WINDOW","getActivationStart","navEntry","initMetric","navigationType","observe","type","opts","po","list","onHidden","cb","onHiddenOrPageHide","runOnce","called","arg","firstHiddenTime","initHiddenTime","onVisibilityUpdate","addChangeListeners","getVisibilityWatcher","whenActivated","FCPThresholds","onFCP","onReport","visibilityWatcher","report","entries","entry","CLSThresholds","onCLS","sessionValue","sessionEntries","handleEntries","firstSessionEntry","lastSessionEntry","FIDThresholds","onFID","handleEntry","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","e","getInteractionCount","initInteractionCountPolyfill","INPThresholds","prevInteractionCount","getInteractionCountForNavigation","MAX_INTERACTIONS_TO_CONSIDER","longestInteractionList","longestInteractionMap","processEntry","minLongestInteraction","existingInteraction","interaction","estimateP98LongestInteraction","candidateInteractionIndex","onINP","prevEntry","inp","LCPThresholds","reportedMetricIDs","onLCP","lastEntry","stopListening","TTFBThresholds","whenReady","onTTFB","responseStart","handlers","instrumented","_previousCls","_previousFid","_previousLcp","_previousTtfb","_previousInp","addClsInstrumentationHandler","stopOnCallback","addMetricObserver","instrumentCls","addLcpInstrumentationHandler","instrumentLcp","addFidInstrumentationHandler","instrumentFid","addTtfbInstrumentationHandler","instrumentTtfb","addInpInstrumentationHandler","instrumentInp","addPerformanceInstrumentationHandler","addHandler","instrumentPerformanceObserver","getCleanupCallback","triggerHandlers","data","typeHandlers","handler","getFunctionName","instrumentFn","previousValue","index","isPerformanceEventTiming","isMeasurementValue","startAndEndSpan","startTimeInSeconds","endTime","parentStartTime","startStandaloneWebVitalSpan","passedAttributes","release","environment","replay","replayId","user","userDisplay","profileId","getBrowserPerformanceAPI","msToSec","trackClsAsStandaloneSpan","standaloneCLsValue","standaloneClsEntry","pageloadSpanId","supportsLayoutShift","sentSpan","_collectClsOnce","sendStandaloneClsSpan","cleanupClsHandler","unsubscribeStartNavigation","_","_2","clsValue","browserPerformanceTimeOrigin","_3","duration","_4","routeName","htmlTreeAsString","_5","_6","_7","_8","_9","_10","_11","_12","_13","_14","_15","MAX_INT_AS_BYTES","_performanceCursor","_measurements","_lcpEntry","_clsEntry","startTrackingWebVitals","recordClsStandaloneSpans","performance","fidCleanupCallback","_trackFID","lcpCleanupCallback","_trackLCP","ttfbCleanupCallback","_trackTtfb","clsCleanupCallback","_trackCLS","startTrackingLongTasks","startTrackingLongAnimationFrames","initialScript","invoker","invokerType","sourceURL","sourceFunctionName","sourceCharPosition","startTrackingInteractions","spanOptions","componentName","getComponentName","timeOrigin","addPerformanceEntries","performanceEntries","transactionStartTime","_addNavigationSpans","_addMeasureSpans","firstHidden","shouldRecord","_addResourceSpans","_trackNavigator","_addTtfbRequestTimeToMeasurements","measurement","oldValue","measurementTimestamp","normalizedValue","fidMark","measurementName","_tagMetricInfo","requestTime","measureStartTimestamp","startTimeStamp","measureEndTimestamp","_addPerformanceNavigationTiming","_addRequest","eventEnd","end","start","requestStartTimestamp","responseEndTimestamp","responseStartTimestamp","resourceUrl","parsedUrl","setResourceEntrySizeData","navigator","connection","dataKey","entryVal","requestStart","LAST_INTERACTIONS","INTERACTIONS_SPAN_MAP","startTrackingINP","inpCallback","_trackINP","INP_ENTRY_MAP","interactionId","interactionType","spanToUse","registerInpInteractionListener","_latestRoute","activeRootSpan","last","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","SESSION_IDLE_PAUSE_DURATION","SESSION_IDLE_EXPIRE_DURATION","DEFAULT_FLUSH_MIN_DELAY","DEFAULT_FLUSH_MAX_DELAY","BUFFER_CHECKOUT_TIME","RETRY_BASE_INTERVAL","RETRY_MAX_COUNT","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","SLOW_CLICK_THRESHOLD","SLOW_CLICK_SCROLL_TIMEOUT","REPLAY_MAX_EVENT_BUFFER_SIZE","MIN_REPLAY_DURATION","MIN_REPLAY_DURATION_LIMIT","MAX_REPLAY_DURATION","_nullishCoalesce$1","_optionalChain$5","NodeType$1","NodeType","isElement$1","n","isShadowRoot","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule","statement","stringifyStylesheet","s","rules","stringifyRule","importStringified","isCSSImportRule","isCSSStyleRule","fixSafariColons","cssStringified","regex","Mirror","id","childNode","node","meta","oldNode","createMirror","shouldMaskInput","maskInputOptions","tagName","maskInputValue","isMasked","element","maskInputFn","text","toLowerCase","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","chunkSize","x","y","getImageData","originalGetImageData","pixel","getInputType","getInputValue","el","extractFileExtension","path","baseURL","match","cachedImplementations$1","getImplementation$1","cached","document","impl","sandbox","contentWindow","setTimeout$2","clearTimeout$2","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName","processedTagName","extractOrigin","origin","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","parts","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars","output","absoluteToDoc","descriptorsStr","inParens","isSVGElement","getHref","transformAttribute","maskAttributeFn","ignoreAttribute","_isBlockedElement","blockClass","blockSelector","unblockSelector","eIndex","className","elementClassMatchesRegex","distanceToMatch","matchPredicate","limit","distance","createMatchPredicate","selector","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","autocomplete","maskDistance","unmaskDistance","onceIframeLoaded","iframeEl","listener","iframeLoadTimeout","win","fired","readyState","timer","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","mirror","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","isTextarea","err","forceMask","isInputMasked","needBlock","len","attr","stylesheet","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","recordInlineImage","width","height","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","onSerialize","onIframeLoad","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","childN","serializedChildNode","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","_optionalChain$4","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","prop","receiver","throttle$1","func","wait","timeout","previous","now","remaining","context","clearTimeout$1","setTimeout$1","hookSetter","d","isRevoked","original","patch","replacement","wrapped","nowTimestamp","getWindowScroll","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","_18","StyleSheetMirror","newId","getShadowHost","shadowHost","_19","_20","_21","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","cachedImplementations","getImplementation","onRequestAnimationFrame","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","_optionalChain$3","isNodeInLinkedList","DoubleLinkedList","position","current","moveKey","parentId","MutationBuffer","mutations","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframe","childSn","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","payload","attribute","diffAsStr","unchangedAsStr","m","attributeName","item","old","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","parentNode","r","set","_isAncestorInSet","errorHandler","registerErrorHandler","unregisterErrorHandler","callbackWrapper","error","_optionalChain$2","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","observer","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","p","updatePosition","evt","clientX","clientY","h","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","eventName","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","v","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","result","_16","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","_17","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","ranges","count","range","startContainer","startOffset","endContainer","endOffset","initCustomElementObserver","customElementCb","constructor","initObservers","o","_hooks","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","plugin","_22","_23","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","map","ids","_optionalChain$1","IframeManagerNoop","IframeManager","crossOriginMessageEvent","transformedEvent","style","iframeMirror","obj","keys","ShadowDomManagerNoop","ShadowDomManager","iframeElement","manager","option","CanvasManagerNoop","StylesheetManager","linkEl","adoptedStyleSheetData","styles","ProcessedNodeManager","thisBuffer","buffers","buffer","wrappedEmit","_takeFullSnapshot","cleanFrame","record","emit","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","maxCanvasSize","packFn","mousemoveWait","recordDOM","recordCrossOriginIframes","recordAfter","collectFonts","plugins","onMutation","getCanvasManager","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","buf","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","canvasManager","_getCanvasManager","shadowDomManager","c","init","getCanvasManagerFn","CONSOLE_LEVELS","PREFIX","_addBreadcrumb","level","addBreadcrumb","makeReplayLogger","_capture","_trace","_logger","logger$1","captureException","ReplayEventTypeIncrementalSnapshot","ReplayEventTypeCustom","timestampToMs","timestampToS","addBreadcrumbEvent","breadcrumb","normalize","INTERACTIVE_SELECTOR","getClosestInteractive","getClickTargetNode","getTargetNode","isEventWithTarget","onWindowOpen","monkeyPatchWindowOpen","fill","originalWindowOpen","handleClick","clickDetector","clickBreadcrumb","ClickDetector","slowClickConfig","_addBreadcrumbEvent","cleanupWindowOpen","nowInSeconds","ignoreElement","isClickBreadcrumb","newClick","click","timedOutClicks","hadScroll","hadMutation","isSlowClick","clickCount","timeAfterClickMs","endReason","setTimeout$3","SLOW_CLICK_TAGS","updateClickDetectorForRecordingEvent","isIncrementalEvent","isIncrementalMouseInteraction","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","normalizedKey","handleDomListener","handleDom","isClick","getBaseDomBreadcrumb","isElement","getDomTarget","handleKeyboardEvent","getKeyboardBreadcrumb","metaKey","shiftKey","ctrlKey","altKey","isInputElement","hasModifierKey","isCharacterKey","baseBreadcrumb","ENTRY_TYPES","createResourceEntry","createPaintEntry","createNavigationEntry","webVitalHandler","getter","createPerformanceEntries","createPerformanceEntry","entryType","getAbsoluteTime","decodedBodySize","domComplete","encodedBodySize","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","transferSize","initiatorType","responseEnd","responseStatus","getLargestContentfulPaint","getWebVital","getCumulativeLayoutShift","nodes","getFirstInputDelay","getInteractionToNextPaint","rating","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","clearCallback","EventBufferSizeExceededError","EventBufferArray","eventSize","resolve","eventsRet","WorkerHandler","worker","reject","response","EventBufferCompressionWorker","EventBufferProxy","hasCheckout","addEventPromises","createEventBuffer","useCompression","customWorkerUrl","_loadWorker","workerUrl","_getWorkerUrl","hasSessionStorage","clearSession","deleteSession","isSampled","makeSession","session","started","lastActivity","segmentId","previousSessionId","saveSession","getSessionSampleType","sessionSampleRate","allowBuffering","createSession","stickySession","fetchSession","sessionStringFromStorage","sessionObj","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","existingSession","isCustomEvent","addEventSync","shouldAddEvent","_addEvent","addEvent","replayOptions","eventAfterPossibleCallback","maybeApplyCallback","timestampInMs","isErrorEvent","isTransactionEvent","isReplayEvent","isFeedbackEvent","handleAfterSendEvent","sendResponse","statusCode","handleTransactionEvent","handleErrorEvent","replayContext","beforeErrorSampling","handleBeforeSendEvent","handleHydrationError","exceptionValue","getLocationHref","handleBreadcrumbs","beforeAddBreadcrumb","isBreadcrumbWithCategory","normalizeBreadcrumb","normalizeConsoleBreadcrumb","isTruncated","normalizedArgs","normalizedArg","isRrwebError","hint","addFeedbackBreadcrumb","shouldSampleForBufferEvent","handleGlobalEventListener","createPerformanceSpans","handleHistory","from","to","handleHistorySpanListener","shouldFilterRequest","addNetworkBreadcrumb","getBodySize","body","textEncoder","formDataStr","_serializeFormData","parseContentLengthHeader","size","getBodyString","mergeWarning","info","warning","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","warnings","normalizeNetworkBody","getAllowedHeaders","allowedHeaders","filteredHeaders","formData","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","truncatedBody","first","urlMatches","urls","getFullUrl","stringMatchesSomePattern","baseURI","fixedUrl","captureFetchBreadcrumbToReplay","_prepareFetchData","enrichFetchBreadcrumb","_getFetchRequestArgBody","reqSize","resSize","requestBodySize","responseBodySize","captureDetails","_getRequestInfo","_getResponseInfo","networkCaptureBodies","networkRequestHeaders","getRequestHeaders","requestBody","bodyStr","networkResponseHeaders","getAllHeaders","bodyText","_parseFetchResponseBody","getResponseData","res","_tryCloneResponse","_tryGetResponseText","fetchArgs","allHeaders","getHeadersFromOptions","_getResponseText","txt","captureXhrBreadcrumbToReplay","_prepareXhrData","enrichXhrBreadcrumb","xhr","_getBodySize","xhrInfo","SENTRY_XHR_DATA_KEY","getResponseHeaders","requestWarning","responseBody","responseWarning","_getXhrResponseBody","acc","line","errors","_parseXhrResponse","responseType","handleNetworkBreadcrumbs","networkDetailAllowUrls","networkDetailDenyUrls","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","_isXhrHint","_isFetchBreadcrumb","_isFetchHint","addGlobalListeners","addClickKeypressInstrumentationHandler","addHistoryInstrumentationHandler","addEventProcessor","feedbackEvent","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","debounce","callbackReturnValue","timerId","maxTimerId","maxWait","invokeFunc","cancelTimers","flush","debounced","getHandleRecordingEmit","hadFirstEvent","_isCheckout","addSettingsEvent","earliestEvent","createOptionsEvent","createReplayEnvelope","replayEvent","recordingData","createEnvelope","createEventEnvelopeHeaders","getSdkMetadataForEnvelopeHeader","prepareRecordingData","payloadWithSequence","replayHeaders","sequence","prepareReplayEvent","event_id","integrations","eventHint","preparedEvent","prepareEvent","metadata","version","sendReplayRequest","segment_id","eventContext","preparedRecordingData","errorIds","traceIds","initialTimestamp","resolvedSyncPromise","baseEvent","TransportStatusCodeError","rateLimits","updateRateLimits","isRateLimited","RateLimitError","sendReplay","replayData","retryConfig","setContext","THROTTLED","SKIPPED","throttle","maxCount","durationSeconds","counter","_cleanup","_getTotalCount","isThrottled","wasThrottled","ReplayContainer","recordingOptions","slowClickTimeout","slowClickIgnoreSelectors","experiments","errorSampleRate","requiresManualStart","canvasOptions","forceFlush","continueRecording","activityTime","hasStoppedRecording","cbResult","urlPath","lastActiveSpan","lastRootSpan","currentSession","_lastActivity","eventBuffer","_context","force","tooShort","tooLong","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","getOption","selectors","defaultSelectors","getPrivacyOptions","mask","unmask","block","unblock","ignore","defaultBlockedElements","maskSelector","unmaskSelector","maskAttribute","maskAttributes","privacyOptions","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","replayIntegration","Replay","flushMinDelay","flushMaxDelay","minReplayDuration","_experiments","blockAllMedia","maskFn","beforeAddRecordingEvent","_getMergedNetworkHeaders","finalOptions","loadReplayOptionsFromClient","canvasIntegration","initialOptions","opt","replaysSessionSampleRate","replaysOnErrorSampleRate","consoleSandbox","responseToSpanId","spanIdToEndTimestamp","defaultRequestInstrumentationOptions","instrumentOutgoingRequests","_options","traceFetch","traceXHR","shouldCreateSpanForRequest","enableHTTPTimings","tracePropagationTargets","shouldAttachHeadersWithTargets","updatedTimestamp","addFetchEndInstrumentationHandler","addFetchInstrumentationHandler","createdSpan","addHTTPTimings","addXhrInstrumentationHandler","xhrCallback","isPerformanceResourceTiming","resourceTimingEntryToSpanData","extractNetworkProtocol","nextHopProtocol","char","resourceTiming","timingSpanData","targetUrl","resolvedUrl","currentOrigin","isSameOriginRequest","isRelativeSameOriginRequest","sentryXhrData","addTracingHeadersToXhrRequest","setHeaderOnXhr","registerBackgroundTabDetection","cancelledStatus","status","BROWSER_TRACING_INTEGRATION_ID","DEFAULT_BROWSER_TRACING_OPTIONS","browserTracingIntegration","enableInp","enableLongTask","enableLongAnimationFrame","enableInteractions","enableStandaloneClsSpans","beforeStartSpan","markBackgroundSpan","instrumentPageLoad","instrumentNavigation","_collectWebVitals","latestRoute","_createRouteSpan","isPageloadTransaction","finalStartSpanOptions","idleSpan","emitFinish","startingUrl","traceOptions","sentryTrace","getMetaContent","baggage","propagationContext","propagationContextFromHeaders","oldPropagationContext","startBrowserTracingPageLoadSpan","startBrowserTracingNavigationSpan","registerInteractionListener","generatePropagationContext","metaName","metaTag","getDomElement","inflightInteractionSpan","registerInteractionTransaction","currentRootSpanOp","applySdkMetadata","init$1","bind","toString","getPrototypeOf","kindOf","cache","thing","kindOfTest","typeOfTest","isArray","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","isString","isNumber","isObject","isBoolean","isPlainObject","prototype","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","allOwnKeys","l","findKey","_global","isContextDefined","merge","caseless","assignValue","targetKey","extend","stripBOM","content","inherits","superConstructor","props","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","lastIndex","toArray","arr","isTypedArray","TypedArray","forEachEntry","iterator","pair","matchAll","regExp","matches","isHTMLForm","toCamelCase","p1","p2","hasOwnProperty","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","ret","freezeMethods","toObjectSet","arrayOrString","delimiter","define","noop","toFiniteNumber","defaultValue","ALPHA","DIGIT","ALPHABET","generateString","alphabet","length","isSpecCompliantForm","toJSONObject","visit","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","asap","utils$1","AxiosError","code","config","utils","customProps","axiosError","httpAdapter","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","params","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","transitionalDefaults","URLSearchParams$1","FormData$1","Blob$1","platform$1","URLSearchParams","FormData","Blob","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","defaults","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","$internals","normalizeHeader","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","self","setHeader","_header","_rewrite","lHeader","setHeaders","matcher","deleted","deleteHeader","format","normalized","targets","asStrings","computed","accessors","defineAccessor","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","validateStatus","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","startedAt","bytesCount","passed","freq","lastArgs","invoke","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","msie","urlParsingNode","originURL","resolveURL","requestURL","cookies","expires","domain","secure","cookie","isAbsoluteURL","combineURLs","relativeURL","buildFullPath","requestedURL","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","xsrfValue","isXHRAdapterSupported","xhrAdapter","_config","requestData","requestHeaders","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","onloadend","responseHeaders","timeoutErrorMessage","cancel","protocol","composeSignals","signals","controller","aborted","onabort","unsubscribe","signal","streamChunk","chunk","readBytes","iterable","trackStream","stream","onProgress","onFinish","_onFinish","loadedBytes","isFetchSupported","isReadableStreamSupported","encodeText","test","supportsRequestStream","duplexAccessed","hasContentType","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","getBodyLength","resolveBodyLength","fetchAdapter","cancelToken","withCredentials","fetchOptions","composedSignal","stopTimeout","finished","requestContentLength","_request","contentTypeHeader","isStreamResponse","responseContentLength","responseData","knownAdapters","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","desc","assertOptions","schema","allowUnknown","Axios","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","fullPath","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","onfulfilled","_resolve","spread","isAxiosError","HttpStatusCode","createInstance","defaultConfig","instance","axios","promises","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","object","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","array","prev","next","deepmerge_1","cjs","root","factory","module","this","NProgress","Settings","clamp","progress","bar","speed","ease","queue","css","barPositionCSS","work","amount","initial","$promise","fromStart","addClass","perc","toBarPerc","parent","spinner","removeElement","removeClass","bodyStyle","vendorPrefix","max","barCSS","pending","cssPrefixes","cssProps","camelCase","string","letter","getVendorProp","capName","vendorName","getStyleProp","applyCss","properties","hasClass","classList","oldList","newList","L","t","M","H","$","N","q","W","X","K","I","A","z","J","B","k","g","f","O.stringify","ne","O.parse","Q","C","_a","_b","T","P","ie","D","U","F","S","R","G","j","E","V","re","Y","Z","oe","se","ae","le","u","ce","ee","te","Fe","LARGE_ARRAY_SIZE","HASH_UNDEFINED","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","MAX_SAFE_INTEGER","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","global","freeSelf","freeExports","exports","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsTypedArray","arrayFilter","predicate","resIndex","arrayPush","values","offset","arraySome","baseTimes","iteratee","baseUnary","cacheHas","getValue","mapToArray","overArg","transform","setToArray","arrayProto","funcProto","objectProto","coreJsData","funcToString","maskSrcKey","uid","nativeObjectToString","reIsNative","Buffer","Symbol","Uint8Array","propertyIsEnumerable","splice","symToStringTag","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","eq","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsEqual","other","bitmask","customizer","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsNative","pattern","baseIsTypedArray","isLength","baseKeys","isPrototype","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","tag","convert","objProps","getAllKeys","objLength","othProps","skipCtor","objValue","objCtor","othCtor","getSymbols","isKeyable","isOwn","unmasked","stubArray","Ctor","ctorString","proto","isArrayLike","stubFalse","isEqual","O","ue","pe","de","Sentry.init","Sentry.browserTracingIntegration","Sentry.replayIntegration","csrfToken","pages","createInertiaApp","page","App","hydrateRoot","jsx","BrowserRouter","SessionContextProvider","createRoot","React"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],"sources":["../../../node_modules/@sentry/utils/build/esm/node.js","../../../node_modules/@sentry/utils/build/esm/isBrowser.js","../../../node_modules/@sentry/utils/build/esm/buildPolyfills/_nullishCoalesce.js","../../../node_modules/@sentry/utils/build/esm/buildPolyfills/_optionalChain.js","../../../node_modules/@sentry/core/build/esm/tracing/errors.js","../../../node_modules/@sentry/core/build/esm/tracing/utils.js","../../../node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../../node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js","../../../node_modules/@sentry/core/build/esm/tracing/logSpans.js","../../../node_modules/@sentry/core/build/esm/tracing/sampling.js","../../../node_modules/@sentry/core/build/esm/tracing/measurement.js","../../../node_modules/@sentry/core/build/esm/tracing/sentrySpan.js","../../../node_modules/@sentry/core/build/esm/tracing/trace.js","../../../node_modules/@sentry/core/build/esm/tracing/idleSpan.js","../../../node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js","../../../node_modules/@sentry/core/build/esm/fetch.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js","../../../node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js","../../../node_modules/@sentry-internal/replay/build/npm/esm/index.js","../../../node_modules/@sentry/browser/build/npm/esm/tracing/request.js","../../../node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js","../../../node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js","../../../node_modules/@sentry/react/build/esm/sdk.js","../../../node_modules/axios/lib/helpers/bind.js","../../../node_modules/axios/lib/utils.js","../../../node_modules/axios/lib/core/AxiosError.js","../../../node_modules/axios/lib/helpers/null.js","../../../node_modules/axios/lib/helpers/toFormData.js","../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../node_modules/axios/lib/helpers/buildURL.js","../../../node_modules/axios/lib/core/InterceptorManager.js","../../../node_modules/axios/lib/defaults/transitional.js","../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../../node_modules/axios/lib/platform/browser/index.js","../../../node_modules/axios/lib/platform/common/utils.js","../../../node_modules/axios/lib/platform/index.js","../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../node_modules/axios/lib/defaults/index.js","../../../node_modules/axios/lib/helpers/parseHeaders.js","../../../node_modules/axios/lib/core/AxiosHeaders.js","../../../node_modules/axios/lib/core/transformData.js","../../../node_modules/axios/lib/cancel/isCancel.js","../../../node_modules/axios/lib/cancel/CanceledError.js","../../../node_modules/axios/lib/core/settle.js","../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../node_modules/axios/lib/helpers/speedometer.js","../../../node_modules/axios/lib/helpers/throttle.js","../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/axios/lib/helpers/cookies.js","../../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/axios/lib/core/mergeConfig.js","../../../node_modules/axios/lib/helpers/resolveConfig.js","../../../node_modules/axios/lib/adapters/xhr.js","../../../node_modules/axios/lib/helpers/composeSignals.js","../../../node_modules/axios/lib/helpers/trackStream.js","../../../node_modules/axios/lib/adapters/fetch.js","../../../node_modules/axios/lib/adapters/adapters.js","../../../node_modules/axios/lib/core/dispatchRequest.js","../../../node_modules/axios/lib/env/data.js","../../../node_modules/axios/lib/helpers/validator.js","../../../node_modules/axios/lib/core/Axios.js","../../../node_modules/axios/lib/cancel/CancelToken.js","../../../node_modules/axios/lib/helpers/spread.js","../../../node_modules/axios/lib/helpers/isAxiosError.js","../../../node_modules/axios/lib/helpers/HttpStatusCode.js","../../../node_modules/axios/lib/axios.js","../../../node_modules/deepmerge/dist/cjs.js","../../../node_modules/nprogress/nprogress.js","../../../node_modules/@inertiajs/core/dist/index.esm.js","../../../node_modules/lodash.isequal/index.js","../../../node_modules/@inertiajs/react/dist/index.esm.js","../../../app/javascript/entrypoints/inertia.jsx"],"sourcesContent":["import { isBrowserBundle } from './env.js';\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod, request) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nfunction loadModule(moduleName) {\n let mod;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) ;\n } catch (e) {\n // no-empty\n }\n\n return mod;\n}\n\nexport { dynamicRequire, isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Returns true if we are in the browser.\n */\nfunction isBrowser() {\n // eslint-disable-next-line no-restricted-globals\n return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer() {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (GLOBAL_OBJ ).process !== undefined && ((GLOBAL_OBJ ).process ).type === 'renderer'\n );\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nfunction _nullishCoalesce(lhs, rhsFn) {\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n// if (lhs != null) {\n// return lhs;\n// } else {\n// return rhsFn();\n// }\n// }\n\nexport { _nullishCoalesce };\n//# sourceMappingURL=_nullishCoalesce.js.map\n","/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nfunction _optionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i] ;\n const fn = ops[i + 1] ;\n i += 2;\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n return;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args) => (value ).call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n// let lastAccessLHS = undefined;\n// let value = ops[0];\n// let i = 1;\n// while (i < ops.length) {\n// const op = ops[i];\n// const fn = ops[i + 1];\n// i += 2;\n// if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n// return undefined;\n// }\n// if (op === 'access' || op === 'optionalAccess') {\n// lastAccessLHS = value;\n// value = fn(value);\n// } else if (op === 'call' || op === 'optionalCall') {\n// value = fn((...args) => value.call(lastAccessLHS, ...args));\n// lastAccessLHS = undefined;\n// }\n// }\n// return value;\n// }\n\nexport { _optionalChain };\n//# sourceMappingURL=_optionalChain.js.map\n","import { addGlobalErrorInstrumentationHandler, addGlobalUnhandledRejectionInstrumentationHandler, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\n\nlet errorsInstrumented = false;\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nfunction registerSpanErrorInstrumentation() {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback() {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const message = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occured`);\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n\nexport { registerSpanErrorInstrumentation };\n//# sourceMappingURL=errors.js.map\n","import { addNonEnumerableProperty } from '@sentry/utils';\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nfunction getCapturedScopesOnSpan(span) {\n return {\n scope: (span )[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: (span )[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n };\n}\n\nexport { getCapturedScopesOnSpan, setCapturedScopesOnSpan };\n//# sourceMappingURL=utils.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n maybeOptions,\n) {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n // eslint-disable-next-line deprecation/deprecation\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nexport { hasTracingEnabled };\n//# sourceMappingURL=hasTracingEnabled.js.map\n","import { uuid4 } from '@sentry/utils';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils.js';\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nclass SentryNonRecordingSpan {\n\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || uuid4();\n this._spanId = spanContext.spanId || uuid4().substring(16);\n }\n\n /** @inheritdoc */\n spanContext() {\n return {\n spanId: this._spanId,\n traceId: this._traceId,\n traceFlags: TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n end(_timestamp) {}\n\n /** @inheritdoc */\n setAttribute(_key, _value) {\n return this;\n }\n\n /** @inheritdoc */\n setAttributes(_values) {\n return this;\n }\n\n /** @inheritdoc */\n setStatus(_status) {\n return this;\n }\n\n /** @inheritdoc */\n updateName(_name) {\n return this;\n }\n\n /** @inheritdoc */\n isRecording() {\n return false;\n }\n\n /** @inheritdoc */\n addEvent(\n _name,\n _attributesOrStartTime,\n _startTime,\n ) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being comliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLink(_link) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being comliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLinks(_links) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being comliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n // noop\n }\n}\n\nexport { SentryNonRecordingSpan };\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { spanToJSON, spanIsSampled, getRootSpan } from '../utils/spanUtils.js';\n\n/**\n * Print a log message for a started span.\n */\nfunction logSpanStart(span) {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n const { spanId } = span.spanContext();\n\n const sampled = spanIsSampled(span);\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n const infoParts = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n if (parentSpanId) {\n infoParts.push(`parent ID: ${parentSpanId}`);\n }\n\n if (!isRootSpan) {\n const { op, description } = spanToJSON(rootSpan);\n infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n if (op) {\n infoParts.push(`root op: ${op}`);\n }\n if (description) {\n infoParts.push(`root description: ${description}`);\n }\n }\n\n logger.log(`${header}\n ${infoParts.join('\\n ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nfunction logSpanEnd(span) {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n const { spanId } = span.spanContext();\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n logger.log(msg);\n}\n\nexport { logSpanEnd, logSpanStart };\n//# sourceMappingURL=logSpans.js.map\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { parseSampleRate } from '../utils/parseSampleRate.js';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nfunction sampleSpan(\n options,\n samplingContext,\n) {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n return [false];\n }\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n } else {\n // When `enableTracing === true`, we use a sample rate of 100%\n sampleRate = 1;\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n // (The only valid values are booleans or numbers between 0 and 1.)\n const parsedSampleRate = parseSampleRate(sampleRate);\n\n if (parsedSampleRate === undefined) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n return [false];\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!parsedSampleRate) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n return [false, parsedSampleRate];\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n const shouldSample = Math.random() < parsedSampleRate;\n\n // if we're not going to keep it, we're done\n if (!shouldSample) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return [false, parsedSampleRate];\n }\n\n return [true, parsedSampleRate];\n}\n\nexport { sampleSpan };\n//# sourceMappingURL=sampling.js.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT } from '../semanticAttributes.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nfunction setMeasurement(name, value, unit) {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n if (rootSpan) {\n rootSpan.addEvent(name, {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit ,\n });\n }\n}\n\n/**\n * Convert timed events to measurements.\n */\nfunction timedEventsToMeasurements(events) {\n if (!events || events.length === 0) {\n return undefined;\n }\n\n const measurements = {};\n events.forEach(event => {\n const attributes = event.attributes || {};\n const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] ;\n const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] ;\n\n if (typeof unit === 'string' && typeof value === 'number') {\n measurements[event.name] = { value, unit };\n }\n });\n\n return measurements;\n}\n\nexport { setMeasurement, timedEventsToMeasurements };\n//# sourceMappingURL=measurement.js.map\n","import { uuid4, timestampInSeconds, dropUndefinedKeys, logger } from '@sentry/utils';\nimport { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { createSpanEnvelope } from '../envelope.js';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { TRACE_FLAG_SAMPLED, TRACE_FLAG_NONE, spanTimeInputToSeconds, getStatusMessage, getRootSpan, spanToJSON, getSpanDescendants, spanToTransactionTraceContext } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext.js';\nimport { logSpanEnd } from './logSpans.js';\nimport { timedEventsToMeasurements } from './measurement.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nclass SentrySpan {\n\n /** Epoch timestamp in seconds when the span started. */\n\n /** Epoch timestamp in seconds when the span ended. */\n\n /** Internal keeper of the status */\n\n /** The timed events added to this span. */\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || uuid4();\n this._spanId = spanContext.spanId || uuid4().substring(16);\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLink(_link) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLinks(_links) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n // noop\n }\n\n /** @inheritdoc */\n spanContext() {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n setAttribute(key, value) {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n setAttributes(attributes) {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n updateStartTime(timeInput) {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n setStatus(value) {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n updateName(name) {\n this._name = name;\n return this;\n }\n\n /** @inheritdoc */\n end(endTimestamp) {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n getSpanJSON() {\n return dropUndefinedKeys({\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n });\n }\n\n /** @inheritdoc */\n isRecording() {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n addEvent(\n name,\n attributesOrStartTime,\n startTime,\n ) {\n DEBUG_BUILD && logger.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n isStandaloneSpan() {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n _onSpanEnded() {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n logger.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n _convertSpanToTransaction() {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && logger.warn('Transaction has no name, falling back to ``.');\n this._name = '';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n const scope = capturedSpanScope || getCurrentScope();\n const client = scope.getClient() || getClient();\n\n if (this._sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] ;\n\n const transaction = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n ...dropUndefinedKeys({\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n }),\n },\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n logger.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value) {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input) {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span) {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope) {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n const transport = client.getTransport();\n if (transport) {\n transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending span:', reason);\n });\n }\n}\n\nexport { SentrySpan };\n//# sourceMappingURL=sentrySpan.js.map\n","import { propagationContextFromHeaders, generatePropagationContext, logger } from '@sentry/utils';\nimport { getMainCarrier } from '../carrier.js';\nimport { withScope, getCurrentScope, getIsolationScope, getClient } from '../currentScopes.js';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope, _getSpanForScope } from '../utils/spanOnScope.js';\nimport { spanToJSON, addChildSpanToSpan, spanIsSampled, spanTimeInputToSeconds, getRootSpan } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan, freezeDscOnSpan } from './dynamicSamplingContext.js';\nimport { logSpanStart } from './logSpans.js';\nimport { sampleSpan } from './sampling.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SentrySpan } from './sentrySpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { setCapturedScopesOnSpan } from './utils.js';\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpan(options, callback) {\n const acs = getAcs();\n if (acs.startSpan) {\n return acs.startSpan(options, callback);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n return withScope(options.scope, () => {\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = getActiveSpanWrapper(customParentSpan);\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n () => activeSpan.end(),\n );\n });\n });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpanManual(options, callback) {\n const acs = getAcs();\n if (acs.startSpanManual) {\n return acs.startSpanManual(options, callback);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n return withScope(options.scope, () => {\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = getActiveSpanWrapper(customParentSpan);\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n function finishAndSetSpan() {\n activeSpan.end();\n }\n\n return handleCallbackErrors(\n () => callback(activeSpan, finishAndSetSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n );\n });\n });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startInactiveSpan(options) {\n const acs = getAcs();\n if (acs.startInactiveSpan) {\n return acs.startInactiveSpan(options);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n // If `options.scope` is defined, we use this as as a wrapper,\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = options.scope\n ? (callback) => withScope(options.scope, callback)\n : customParentSpan !== undefined\n ? (callback) => withActiveSpan(customParentSpan, callback)\n : (callback) => callback();\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n\n if (shouldSkipSpan) {\n return new SentryNonRecordingSpan();\n }\n\n return createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from ``\n * and `` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nconst continueTrace = (\n {\n sentryTrace,\n baggage,\n }\n\n,\n callback,\n) => {\n return withScope(scope => {\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n scope.setPropagationContext(propagationContext);\n return callback();\n });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n const acs = getAcs();\n if (acs.withActiveSpan) {\n return acs.withActiveSpan(span, callback);\n }\n\n return withScope(scope => {\n _setSpanForScope(scope, span || undefined);\n return callback(scope);\n });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nfunction suppressTracing(callback) {\n const acs = getAcs();\n\n if (acs.suppressTracing) {\n return acs.suppressTracing(callback);\n }\n\n return withScope(scope => {\n scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n return callback();\n });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n * or page will automatically create a new trace.\n */\nfunction startNewTrace(callback) {\n return withScope(scope => {\n scope.setPropagationContext(generatePropagationContext());\n DEBUG_BUILD && logger.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n return withActiveSpan(null, callback);\n });\n}\n\nfunction createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n}\n\n) {\n if (!hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const isolationScope = getIsolationScope();\n\n let span;\n if (parentSpan && !forceTransaction) {\n span = _startChildSpan(parentSpan, scope, spanArguments);\n addChildSpanToSpan(parentSpan, span);\n } else if (parentSpan) {\n // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n const parentSampled = spanIsSampled(parentSpan);\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanArguments,\n },\n scope,\n parentSampled,\n );\n\n freezeDscOnSpan(span, dsc);\n } else {\n const {\n traceId,\n dsc,\n parentSpanId,\n sampled: parentSampled,\n } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanArguments,\n },\n scope,\n parentSampled,\n );\n\n if (dsc) {\n freezeDscOnSpan(span, dsc);\n }\n }\n\n logSpanStart(span);\n\n setCapturedScopesOnSpan(span, scope, isolationScope);\n\n return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options) {\n const exp = options.experimental || {};\n const initialCtx = {\n isStandalone: exp.standalone,\n ...options,\n };\n\n if (options.startTime) {\n const ctx = { ...initialCtx };\n ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n delete ctx.startTime;\n return ctx;\n }\n\n return initialCtx;\n}\n\nfunction getAcs() {\n const carrier = getMainCarrier();\n return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(spanArguments, scope, parentSampled) {\n const client = getClient();\n const options = (client && client.getOptions()) || {};\n\n const { name = '', attributes } = spanArguments;\n const [sampled, sampleRate] = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY]\n ? [false]\n : sampleSpan(options, {\n name,\n parentSampled,\n attributes,\n transactionContext: {\n name,\n parentSampled,\n },\n });\n\n const rootSpan = new SentrySpan({\n ...spanArguments,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n ...spanArguments.attributes,\n },\n sampled,\n });\n if (sampleRate !== undefined) {\n rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n }\n\n if (client) {\n client.emit('spanStart', rootSpan);\n }\n\n return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan, scope, spanArguments) {\n const { spanId, traceId } = parentSpan.spanContext();\n const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan);\n\n const childSpan = sampled\n ? new SentrySpan({\n ...spanArguments,\n parentSpanId: spanId,\n traceId,\n sampled,\n })\n : new SentryNonRecordingSpan({ traceId });\n\n addChildSpanToSpan(parentSpan, childSpan);\n\n const client = getClient();\n if (client) {\n client.emit('spanStart', childSpan);\n // If it has an endTimestamp, it's already ended\n if (spanArguments.endTimestamp) {\n client.emit('spanEnd', childSpan);\n }\n }\n\n return childSpan;\n}\n\nfunction getParentSpan(scope) {\n const span = _getSpanForScope(scope) ;\n\n if (!span) {\n return undefined;\n }\n\n const client = getClient();\n const options = client ? client.getOptions() : {};\n if (options.parentSpanIsAlwaysRootSpan) {\n return getRootSpan(span) ;\n }\n\n return span;\n}\n\nfunction getActiveSpanWrapper(parentSpan) {\n return parentSpan !== undefined\n ? (callback) => {\n return withActiveSpan(parentSpan, callback);\n }\n : (callback) => callback();\n}\n\nexport { continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan };\n//# sourceMappingURL=trace.js.map\n","import { timestampInSeconds, logger } from '@sentry/utils';\nimport { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '../semanticAttributes.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope } from '../utils/spanOnScope.js';\nimport { getActiveSpan, spanTimeInputToSeconds, getSpanDescendants, spanToJSON, removeChildSpanFromSpan } from '../utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { startInactiveSpan } from './trace.js';\n\nconst TRACING_DEFAULTS = {\n idleTimeout: 1000,\n finalTimeout: 30000,\n childSpanTimeout: 15000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nfunction startIdleSpan(startSpanOptions, options = {}) {\n // Activities store a list of active spans\n const activities = new Map();\n\n // We should not use heartbeat if we finished a span\n let _finished = false;\n\n // Timer that tracks idleTimeout\n let _idleTimeoutID;\n\n // The reason why the span was finished\n let _finishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n let _autoFinishAllowed = !options.disableAutoFinish;\n\n const _cleanupHooks = [];\n\n const {\n idleTimeout = TRACING_DEFAULTS.idleTimeout,\n finalTimeout = TRACING_DEFAULTS.finalTimeout,\n childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n beforeSpanEnd,\n } = options;\n\n const client = getClient();\n\n if (!client || !hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const scope = getCurrentScope();\n const previousActiveSpan = getActiveSpan();\n const span = _startIdleSpan(startSpanOptions);\n\n // We patch span.end to ensure we can run some things before the span is ended\n // eslint-disable-next-line @typescript-eslint/unbound-method\n span.end = new Proxy(span.end, {\n apply(target, thisArg, args) {\n if (beforeSpanEnd) {\n beforeSpanEnd(span);\n }\n\n // Just ensuring that this keeps working, even if we ever have more arguments here\n const [definedEndTimestamp, ...rest] = args;\n const timestamp = definedEndTimestamp || timestampInSeconds();\n const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n\n // Ensure we end with the last span timestamp, if possible\n const spans = getSpanDescendants(span).filter(child => child !== span);\n\n // If we have no spans, we just end, nothing else to do here\n if (!spans.length) {\n onIdleSpanEnded(spanEndTimestamp);\n return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n }\n\n const childEndTimestamps = spans\n .map(span => spanToJSON(span).timestamp)\n .filter(timestamp => !!timestamp) ;\n const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n // In reality this should always exist here, but type-wise it may be undefined...\n const spanStartTimestamp = spanToJSON(span).start_timestamp;\n\n // The final endTimestamp should:\n // * Never be before the span start timestamp\n // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n // * Otherwise be the passed end timestamp\n // Final timestamp can never be after finalTimeout\n const endTimestamp = Math.min(\n spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n );\n\n onIdleSpanEnded(endTimestamp);\n return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n },\n });\n\n /**\n * Cancels the existing idle timeout, if there is one.\n */\n function _cancelIdleTimeout() {\n if (_idleTimeoutID) {\n clearTimeout(_idleTimeoutID);\n _idleTimeoutID = undefined;\n }\n }\n\n /**\n * Restarts idle timeout, if there is no running idle timeout it will start one.\n */\n function _restartIdleTimeout(endTimestamp) {\n _cancelIdleTimeout();\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n span.end(endTimestamp);\n }\n }, idleTimeout);\n }\n\n /**\n * Restarts child span timeout, if there is none running it will start one.\n */\n function _restartChildSpanTimeout(endTimestamp) {\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n span.end(endTimestamp);\n }\n }, childSpanTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n function _pushActivity(spanId) {\n _cancelIdleTimeout();\n activities.set(spanId, true);\n\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n function _popActivity(spanId) {\n if (activities.has(spanId)) {\n activities.delete(spanId);\n }\n\n if (activities.size === 0) {\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n }\n }\n\n function onIdleSpanEnded(endTimestamp) {\n _finished = true;\n activities.clear();\n\n _cleanupHooks.forEach(cleanup => cleanup());\n\n _setSpanForScope(scope, previousActiveSpan);\n\n const spanJSON = spanToJSON(span);\n\n const { start_timestamp: startTimestamp } = spanJSON;\n // This should never happen, but to make TS happy...\n if (!startTimestamp) {\n return;\n }\n\n const attributes = spanJSON.data || {};\n if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n }\n\n logger.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n const childSpans = getSpanDescendants(span).filter(child => child !== span);\n\n let discardedSpans = 0;\n childSpans.forEach(childSpan => {\n // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n if (childSpan.isRecording()) {\n childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'cancelled' });\n childSpan.end(endTimestamp);\n DEBUG_BUILD &&\n logger.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n }\n\n const childSpanJSON = spanToJSON(childSpan);\n const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n // Add a delta with idle timeout so that we prevent false positives\n const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n\n if (DEBUG_BUILD) {\n const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n if (!spanStartedBeforeIdleSpanEnd) {\n logger.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n } else if (!spanEndedBeforeFinalTimeout) {\n logger.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n }\n }\n\n if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n removeChildSpanFromSpan(span, childSpan);\n discardedSpans++;\n }\n });\n\n if (discardedSpans > 0) {\n span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n }\n }\n\n _cleanupHooks.push(\n client.on('spanStart', startedSpan => {\n // If we already finished the idle span,\n // or if this is the idle span itself being started,\n // or if the started span has already been closed,\n // we don't care about it for activity\n if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) {\n return;\n }\n\n const allSpans = getSpanDescendants(span);\n\n // If the span that was just started is a child of the idle span, we should track it\n if (allSpans.includes(startedSpan)) {\n _pushActivity(startedSpan.spanContext().spanId);\n }\n }),\n );\n\n _cleanupHooks.push(\n client.on('spanEnd', endedSpan => {\n if (_finished) {\n return;\n }\n\n _popActivity(endedSpan.spanContext().spanId);\n }),\n );\n\n _cleanupHooks.push(\n client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n if (spanToAllowAutoFinish === span) {\n _autoFinishAllowed = true;\n _restartIdleTimeout();\n\n if (activities.size) {\n _restartChildSpanTimeout();\n }\n }\n }),\n );\n\n // We only start the initial idle timeout if we are not delaying the auto finish\n if (!options.disableAutoFinish) {\n _restartIdleTimeout();\n }\n\n setTimeout(() => {\n if (!_finished) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n span.end();\n }\n }, finalTimeout);\n\n return span;\n}\n\nfunction _startIdleSpan(options) {\n const span = startInactiveSpan(options);\n\n _setSpanForScope(getCurrentScope(), span);\n\n DEBUG_BUILD && logger.log('[Tracing] Started span is an idle span');\n\n return span;\n}\n\nexport { TRACING_DEFAULTS, startIdleSpan };\n//# sourceMappingURL=idleSpan.js.map\n","/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nfunction isSentryRequestUrl(url, client) {\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url, tunnel) {\n if (!tunnel) {\n return false;\n }\n\n return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url, dsn) {\n return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str) {\n return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\nexport { isSentryRequestUrl };\n//# sourceMappingURL=isSentryRequestUrl.js.map\n","import { parseUrl, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, isInstanceOf, BAGGAGE_HEADER_NAME } from '@sentry/utils';\nimport { getCurrentScope, getClient, getIsolationScope } from './currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP } from './semanticAttributes.js';\nimport './tracing/errors.js';\nimport './debug-build.js';\nimport { hasTracingEnabled } from './utils/hasTracingEnabled.js';\nimport { getActiveSpan, spanToTraceHeader } from './utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nimport { setHttpStatus, SPAN_STATUS_ERROR } from './tracing/spanstatus.js';\nimport { startInactiveSpan } from './tracing/trace.js';\nimport { getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext.js';\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n spanOrigin = 'auto.http.browser',\n) {\n if (!handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n endSpan(span, handlerData);\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const client = getClient();\n\n const { method, url } = handlerData.fetchData;\n\n const fullUrl = getFullURL(url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${method} ${url}`,\n attributes: {\n url,\n type: 'fetch',\n 'http.method': method,\n 'http.url': fullUrl,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n\n if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n const request = handlerData.args[0];\n\n // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n handlerData.args[1] = handlerData.args[1] || {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const options = handlerData.args[1];\n\n options.headers = addTracingHeadersToFetchRequest(\n request,\n client,\n scope,\n options,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nfunction addTracingHeadersToFetchRequest(\n request, // unknown is actually type Request but we can't export DOM types from this package,\n client,\n scope,\n options\n\n,\n span,\n) {\n const isolationScope = getIsolationScope();\n\n const { traceId, spanId, sampled, dsc } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n dsc || (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client)),\n );\n\n const headers =\n options.headers ||\n (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request ).headers : undefined);\n\n if (!headers) {\n return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n const newHeaders = new Headers(headers );\n\n newHeaders.append('sentry-trace', sentryTraceHeader);\n\n if (sentryBaggageHeader) {\n // If the same header is appended multiple times the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n\n return newHeaders ;\n } else if (Array.isArray(headers)) {\n const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n if (sentryBaggageHeader) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n }\n\n return newHeaders ;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n const newBaggageHeaders = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders.push(...existingBaggageHeader);\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(existingBaggageHeader);\n }\n\n if (sentryBaggageHeader) {\n newBaggageHeaders.push(sentryBaggageHeader);\n }\n\n return {\n ...(headers ),\n 'sentry-trace': sentryTraceHeader,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n\nfunction getFullURL(url) {\n try {\n const parsed = new URL(url);\n return parsed.href;\n } catch (e) {\n return undefined;\n }\n}\n\nfunction endSpan(span, handlerData) {\n if (handlerData.response) {\n setHttpStatus(span, handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n span.end();\n}\n\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","const getRating = (value, thresholds) => {\n if (value > thresholds[1]) {\n return 'poor';\n }\n if (value > thresholds[0]) {\n return 'needs-improvement';\n }\n return 'good';\n};\n\nconst bindReporter = (\n callback,\n metric,\n thresholds,\n reportAllChanges,\n) => {\n let prevValue;\n let delta;\n return (forceReport) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n metric.rating = getRating(metric.value, thresholds);\n callback(metric);\n }\n }\n }\n };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","/*\n * Copyright 2020 Google LLC\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 */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\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 */\n\n\nconst getNavigationEntry = () => {\n return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n};\n\nexport { getNavigationEntry };\n//# sourceMappingURL=getNavigationEntry.js.map\n","import { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2022 Google LLC\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 */\n\n\nconst getActivationStart = () => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n\nexport { getActivationStart };\n//# sourceMappingURL=getActivationStart.js.map\n","import { WINDOW } from '../../../types.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\nconst initMetric = (name, value) => {\n const navEntry = getNavigationEntry();\n let navigationType = 'navigate';\n\n if (navEntry) {\n if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else if (WINDOW.document && WINDOW.document.wasDiscarded) {\n navigationType = 'restore';\n } else if (navEntry.type) {\n navigationType = navEntry.type.replace(/_/g, '-') ;\n }\n }\n\n // Use `entries` type specific for the metric.\n const entries = [];\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good' , // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n delta: 0,\n entries,\n id: generateUniqueID(),\n navigationType,\n };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n type,\n callback,\n opts,\n) => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n // Delay by a microtask to workaround a bug in Safari where the\n // callback is invoked immediately, rather than in a separate task.\n // See: https://github.com/GoogleChrome/web-vitals/issues/277\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n callback(list.getEntries() );\n });\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) ,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\nconst onHidden = (cb) => {\n const onHiddenOrPageHide = (event) => {\n if (event.type === 'pagehide' || (WINDOW.document && WINDOW.document.visibilityState === 'hidden')) {\n cb(event);\n }\n };\n\n if (WINDOW.document) {\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n }\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","/*\n * Copyright 2022 Google LLC\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 */\n\nconst runOnce = (cb) => {\n let called = false;\n return (arg) => {\n if (!called) {\n cb(arg);\n called = true;\n }\n };\n};\n\nexport { runOnce };\n//# sourceMappingURL=runOnce.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n // If the document is hidden when this code runs, assume it was always\n // hidden and the page was loaded in the background, with the one exception\n // that visibility state is always 'hidden' during prerendering, so we have\n // to ignore that case until prerendering finishes (see: `prerenderingchange`\n // event logic below).\n firstHiddenTime = WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event) => {\n // If the document is 'hidden' and no previous hidden timestamp has been\n // set, update it based on the current event data.\n if (WINDOW.document.visibilityState === 'hidden' && firstHiddenTime > -1) {\n // If the event is a 'visibilitychange' event, it means the page was\n // visible prior to this change, so the event timestamp is the first\n // hidden time.\n // However, if the event is not a 'visibilitychange' event, then it must\n // be a 'prerenderingchange' event, and the fact that the document is\n // still 'hidden' from the above check means the tab was activated\n // in a background state and so has always been hidden.\n firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n // Remove all listeners now that a `firstHiddenTime` value has been set.\n removeEventListener('visibilitychange', onVisibilityUpdate, true);\n removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n }\n};\n\nconst addChangeListeners = () => {\n addEventListener('visibilitychange', onVisibilityUpdate, true);\n // IMPORTANT: when a page is prerendering, its `visibilityState` is\n // 'hidden', so in order to account for cases where this module checks for\n // visibility during prerendering, an additional check after prerendering\n // completes is also required.\n addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst getVisibilityWatcher = () => {\n if (WINDOW.document && firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n initHiddenTime();\n addChangeListeners();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\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 */\n\n\nconst whenActivated = (callback) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n addEventListener('prerenderingchange', () => callback(), true);\n } else {\n callback();\n }\n};\n\nexport { whenActivated };\n//# sourceMappingURL=whenActivated.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nconst FCPThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nconst onFCP = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FCP');\n let report;\n\n const handleEntries = (entries) => {\n (entries ).forEach(entry => {\n if (entry.name === 'first-contentful-paint') {\n po.disconnect();\n\n // Only report if the page wasn't hidden prior to the first paint.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The activationStart reference is used because FCP should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the FCP, this time should be clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries.push(entry);\n report(true);\n }\n }\n });\n };\n\n const po = observe('paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n }\n });\n};\n\nexport { FCPThresholds, onFCP };\n//# sourceMappingURL=onFCP.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { onFCP } from './onFCP.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nconst CLSThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (onReport, opts = {}) => {\n // Start monitoring FCP so we can only report CLS if FCP is also reported.\n // Note: this is done to match the current behavior of CrUX.\n onFCP(\n runOnce(() => {\n const metric = initMetric('CLS', 0);\n let report;\n\n let sessionValue = 0;\n let sessionEntries = [];\n\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry\n // and less than 5 seconds after the first entry in the session,\n // include the entry in the current session. Otherwise, start a new\n // session.\n if (\n sessionValue &&\n firstSessionEntry &&\n lastSessionEntry &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n }\n });\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n report();\n }\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n onHidden(() => {\n handleEntries(po.takeRecords() );\n report(true);\n });\n\n // Queue a task to report (if nothing else triggers a report first).\n // This allows CLS to be reported as soon as FCP fires when\n // `reportAllChanges` is true.\n setTimeout(report, 0);\n }\n }),\n );\n};\n\nexport { CLSThresholds, onCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nconst FIDThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntry = (entry) => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries) => {\n (entries ).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n if (po) {\n onHidden(\n runOnce(() => {\n handleEntries(po.takeRecords() );\n po.disconnect();\n }),\n );\n }\n });\n};\n\nexport { FIDThresholds, onFID };\n//# sourceMappingURL=getFID.js.map\n","import { observe } from '../observe.js';\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries) => {\n (entries ).forEach(e => {\n if (e.interactionId) {\n minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n }\n });\n};\n\nlet po;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nconst getInteractionCount = () => {\n return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nconst initInteractionCountPolyfill = () => {\n if ('interactionCount' in performance || po) return;\n\n po = observe('event', updateEstimate, {\n type: 'event',\n buffered: true,\n durationThreshold: 0,\n } );\n};\n\nexport { getInteractionCount, initInteractionCountPolyfill };\n//# sourceMappingURL=interactionCountPolyfill.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { initInteractionCountPolyfill, getInteractionCount } from './lib/polyfills/interactionCountPolyfill.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2022 Google LLC\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 */\n\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nconst INPThresholds = [200, 500];\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nconst prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n return getInteractionCount() - prevInteractionCount;\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry) => {\n // The least-long of the 10 longest interactions.\n const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const existingInteraction = longestInteractionMap[entry.interactionId];\n\n // Only process the entry if it's possibly one of the ten longest,\n // or if it's part of an existing interaction.\n if (\n existingInteraction ||\n longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n (minLongestInteraction && entry.duration > minLongestInteraction.latency)\n ) {\n // If the interaction already exists, update it. Otherwise create one.\n if (existingInteraction) {\n existingInteraction.entries.push(entry);\n existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n } else {\n const interaction = {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: entry.interactionId,\n latency: entry.duration,\n entries: [entry],\n };\n longestInteractionMap[interaction.id] = interaction;\n longestInteractionList.push(interaction);\n }\n\n // Sort the entries by latency (descending) and keep only the top ten.\n longestInteractionList.sort((a, b) => b.latency - a.latency);\n longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete longestInteractionMap[i.id];\n });\n }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = () => {\n const candidateInteractionIndex = Math.min(\n longestInteractionList.length - 1,\n Math.floor(getInteractionCountForNavigation() / 50),\n );\n\n return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onINP = (onReport, opts = {}) => {\n whenActivated(() => {\n // TODO(philipwalton): remove once the polyfill is no longer needed.\n initInteractionCountPolyfill();\n\n const metric = initMetric('INP');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n if (entry.interactionId) {\n processEntry(entry);\n }\n\n // Entries of type `first-input` don't currently have an `interactionId`,\n // so to consider them in INP we have to first check that an existing\n // entry doesn't match the `duration` and `startTime`.\n // Note that this logic assumes that `event` entries are dispatched\n // before `first-input` entries. This is true in Chrome (the only browser\n // that currently supports INP).\n // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n if (entry.entryType === 'first-input') {\n const noMatchingEntry = !longestInteractionList.some(interaction => {\n return interaction.entries.some(prevEntry => {\n return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n });\n });\n if (noMatchingEntry) {\n processEntry(entry);\n }\n }\n });\n\n const inp = estimateP98LongestInteraction();\n\n if (inp && inp.latency !== metric.value) {\n metric.value = inp.latency;\n metric.entries = inp.entries;\n report();\n }\n };\n\n const po = observe('event', handleEntries, {\n // Event Timing entries have their durations rounded to the nearest 8ms,\n // so a duration of 40ms would be any event that spans 2.5 or more frames\n // at 60Hz. This threshold is chosen to strike a balance between usefulness\n // and performance. Running this callback for any interaction that spans\n // just one or two frames is likely not worth the insight that could be\n // gained.\n durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : 40,\n } );\n\n report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n if (po) {\n // If browser supports interactionId (and so supports INP), also\n // observe entries of type `first-input`. This is useful in cases\n // where the first interaction is less than the `durationThreshold`.\n if ('PerformanceEventTiming' in WINDOW && 'interactionId' in PerformanceEventTiming.prototype) {\n po.observe({ type: 'first-input', buffered: true });\n }\n\n onHidden(() => {\n handleEntries(po.takeRecords() );\n\n // If the interaction count shows that there were interactions but\n // none were captured by the PerformanceObserver, report a latency of 0.\n if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n metric.value = 0;\n metric.entries = [];\n }\n\n report(true);\n });\n }\n });\n};\n\nexport { INPThresholds, onINP };\n//# sourceMappingURL=getINP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nconst LCPThresholds = [2500, 4000];\n\nconst reportedMetricIDs = {};\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nconst onLCP = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report;\n\n const handleEntries = (entries) => {\n const lastEntry = entries[entries.length - 1] ;\n if (lastEntry) {\n // Only report if the page wasn't hidden prior to LCP.\n if (lastEntry.startTime < visibilityWatcher.firstHiddenTime) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was prerendered. But in cases\n // where `activationStart` occurs after the LCP, this time should be\n // clamped at 0.\n metric.value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n metric.entries = [lastEntry];\n report();\n }\n }\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n const stopListening = runOnce(() => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() );\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n });\n\n // Stop listening after input. Note: while scrolling is an input that\n // stops LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n if (WINDOW.document) {\n // Wrap in a setTimeout so the callback is run in a separate task\n // to avoid extending the keyboard/click handler to reduce INP impact\n // https://github.com/GoogleChrome/web-vitals/issues/383\n addEventListener(type, () => setTimeout(stopListening, 0), true);\n }\n });\n\n onHidden(stopListening);\n }\n });\n};\n\nexport { LCPThresholds, onLCP };\n//# sourceMappingURL=getLCP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\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 */\n\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nconst TTFBThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n whenActivated(() => whenReady(callback));\n } else if (WINDOW.document && WINDOW.document.readyState !== 'complete') {\n addEventListener('load', () => whenReady(callback), true);\n } else {\n // Queue a task so the callback runs after `loadEventEnd`.\n setTimeout(callback, 0);\n }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nconst onTTFB = (onReport, opts = {}) => {\n const metric = initMetric('TTFB');\n const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n whenReady(() => {\n const navEntry = getNavigationEntry();\n\n if (navEntry) {\n const responseStart = navEntry.responseStart;\n\n // In some cases no value is reported by the browser (for\n // privacy/security reasons), and in other cases (bugs) the value is\n // negative or is larger than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n // https://github.com/GoogleChrome/web-vitals/issues/275\n if (responseStart <= 0 || responseStart > performance.now()) return;\n\n // The activationStart reference is used because TTFB should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the first byte is received, this time should be clamped at 0.\n metric.value = Math.max(responseStart - getActivationStart(), 0);\n\n metric.entries = [navEntry];\n report(true);\n }\n });\n};\n\nexport { TTFBThresholds, onTTFB };\n//# sourceMappingURL=onTTFB.js.map\n","import { logger, getFunctionName } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { onCLS } from './web-vitals/getCLS.js';\nimport { onFID } from './web-vitals/getFID.js';\nimport { onINP } from './web-vitals/getINP.js';\nimport { onLCP } from './web-vitals/getLCP.js';\nimport { observe } from './web-vitals/lib/observe.js';\nimport { onTTFB } from './web-vitals/onTTFB.js';\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nfunction addClsInstrumentationHandler(\n callback,\n stopOnCallback = false,\n) {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nfunction addLcpInstrumentationHandler(\n callback,\n stopOnCallback = false,\n) {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nfunction addTtfbInstrumentationHandler(callback) {\n return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addInpInstrumentationHandler(\n callback,\n) {\n return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n type,\n callback,\n) {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls() {\n return onCLS(\n metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n },\n // We want the callback to be called whenever the CLS value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentFid() {\n return onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp() {\n return onLCP(\n metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n },\n // We want the callback to be called whenever the LCP value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentTtfb() {\n return onTTFB(metric => {\n triggerHandlers('ttfb', {\n metric,\n });\n _previousTtfb = metric;\n });\n}\n\nfunction instrumentInp() {\n return onINP(metric => {\n triggerHandlers('inp', {\n metric,\n });\n _previousInp = metric;\n });\n}\n\nfunction addMetricObserver(\n type,\n callback,\n instrumentFn,\n previousValue,\n stopOnCallback = false,\n) {\n addHandler(type, callback);\n\n let stopListening;\n\n if (!instrumented[type]) {\n stopListening = instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type) {\n const options = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n type,\n callback,\n stopListening,\n) {\n return () => {\n if (stopListening) {\n stopListening();\n }\n\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n\n/**\n * Check if a PerformanceEntry is a PerformanceEventTiming by checking for the `duration` property.\n */\nfunction isPerformanceEventTiming(entry) {\n return 'duration' in entry;\n}\n\nexport { addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler, addTtfbInstrumentationHandler, isPerformanceEventTiming };\n//# sourceMappingURL=instrument.js.map\n","import { spanToJSON, withActiveSpan, startInactiveSpan, getClient, getCurrentScope } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction startAndEndSpan(\n parentSpan,\n startTimeInSeconds,\n endTime,\n { ...ctx },\n) {\n const parentStartTime = spanToJSON(parentSpan).start_timestamp;\n if (parentStartTime && parentStartTime > startTimeInSeconds) {\n // We can only do this for SentrySpans...\n if (typeof (parentSpan ).updateStartTime === 'function') {\n (parentSpan ).updateStartTime(startTimeInSeconds);\n }\n }\n\n // The return value only exists for tests\n return withActiveSpan(parentSpan, () => {\n const span = startInactiveSpan({\n startTime: startTimeInSeconds,\n ...ctx,\n });\n\n if (span) {\n span.end(endTime);\n }\n\n return span;\n });\n}\n\n/**\n * Starts an inactive, standalone span used to send web vital values to Sentry.\n * DO NOT use this for arbitrary spans, as these spans require special handling\n * during ingestion to extract metrics.\n *\n * This function adds a bunch of attributes and data to the span that's shared\n * by all web vital standalone spans. However, you need to take care of adding\n * the actual web vital value as an event to the span. Also, you need to assign\n * a transaction name and some other values that are specific to the web vital.\n *\n * Ultimately, you also need to take care of ending the span to send it off.\n *\n * @param options\n *\n * @returns an inactive, standalone and NOT YET ended span\n */\nfunction startStandaloneWebVitalSpan(options) {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const { name, transaction, attributes: passedAttributes, startTime } = options;\n\n const { release, environment } = client.getOptions();\n // We need to get the replay, user, and activeTransaction from the current scope\n // so that we can associate replay id, profile id, and a user display to the span\n const replay = client.getIntegrationByName('Replay');\n const replayId = replay && replay.getReplayId();\n\n const scope = getCurrentScope();\n\n const user = scope.getUser();\n const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n\n let profileId = undefined;\n try {\n // @ts-expect-error skip optional chaining to save bundle size with try catch\n profileId = scope.getScopeData().contexts.profile.profile_id;\n } catch (e) {\n // do nothing\n }\n\n const attributes = {\n release,\n environment,\n\n user: userDisplay || undefined,\n profile_id: profileId || undefined,\n replay_id: replayId || undefined,\n\n transaction,\n\n // Web vital score calculation relies on the user agent to account for different\n // browsers setting different thresholds for what is considered a good/meh/bad value.\n // For example: Chrome vs. Chrome Mobile\n 'user_agent.original': WINDOW.navigator && WINDOW.navigator.userAgent,\n\n ...passedAttributes,\n };\n\n return startInactiveSpan({\n name,\n attributes,\n startTime,\n experimental: {\n standalone: true,\n },\n });\n}\n\n/** Get the browser performance API. */\nfunction getBrowserPerformanceAPI() {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n return time / 1000;\n}\n\nexport { getBrowserPerformanceAPI, isMeasurementValue, msToSec, startAndEndSpan, startStandaloneWebVitalSpan };\n//# sourceMappingURL=utils.js.map\n","import { _optionalChain } from '@sentry/utils';\nimport { getClient, getActiveSpan, getRootSpan, spanToJSON, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { logger, browserPerformanceTimeOrigin, htmlTreeAsString, dropUndefinedKeys } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { addClsInstrumentationHandler } from './instrument.js';\nimport { msToSec, startStandaloneWebVitalSpan } from './utils.js';\nimport { onHidden } from './web-vitals/lib/onHidden.js';\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop CLS measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the CLS value is sent as a standalone span and we stop\n * measuring CLS.\n */\nfunction trackClsAsStandaloneSpan() {\n let standaloneCLsValue = 0;\n let standaloneClsEntry;\n let pageloadSpanId;\n\n if (!supportsLayoutShift()) {\n return;\n }\n\n let sentSpan = false;\n function _collectClsOnce() {\n if (sentSpan) {\n return;\n }\n sentSpan = true;\n if (pageloadSpanId) {\n sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId);\n }\n cleanupClsHandler();\n }\n\n const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1] ;\n if (!entry) {\n return;\n }\n standaloneCLsValue = metric.value;\n standaloneClsEntry = entry;\n }, true);\n\n // use pagehide event from web-vitals\n onHidden(() => {\n _collectClsOnce();\n });\n\n // Since the call chain of this function is synchronous and evaluates before the SDK client is created,\n // we need to wait with subscribing to a client hook until the client is created. Therefore, we defer\n // to the next tick after the SDK setup.\n setTimeout(() => {\n const client = getClient();\n\n const unsubscribeStartNavigation = _optionalChain([client, 'optionalAccess', _ => _.on, 'call', _2 => _2('startNavigationSpan', () => {\n _collectClsOnce();\n unsubscribeStartNavigation && unsubscribeStartNavigation();\n })]);\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n const spanJSON = rootSpan && spanToJSON(rootSpan);\n if (spanJSON && spanJSON.op === 'pageload') {\n pageloadSpanId = rootSpan.spanContext().spanId;\n }\n }, 0);\n}\n\nfunction sendStandaloneClsSpan(clsValue, entry, pageloadSpanId) {\n DEBUG_BUILD && logger.log(`Sending CLS span (${clsValue})`);\n\n const startTime = msToSec(browserPerformanceTimeOrigin ) + (_optionalChain([entry, 'optionalAccess', _3 => _3.startTime]) || 0);\n const duration = msToSec(_optionalChain([entry, 'optionalAccess', _4 => _4.duration]) || 0);\n const routeName = getCurrentScope().getScopeData().transactionName;\n\n const name = entry ? htmlTreeAsString(_optionalChain([entry, 'access', _5 => _5.sources, 'access', _6 => _6[0], 'optionalAccess', _7 => _7.node])) : 'Layout shift';\n\n const attributes = dropUndefinedKeys({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.cls',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.cls',\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: _optionalChain([entry, 'optionalAccess', _8 => _8.duration]) || 0,\n // attach the pageload span id to the CLS span so that we can link them in the UI\n 'sentry.pageload.span_id': pageloadSpanId,\n });\n\n const span = startStandaloneWebVitalSpan({\n name,\n transaction: routeName,\n attributes,\n startTime,\n });\n\n _optionalChain([span, 'optionalAccess', _9 => _9.addEvent, 'call', _10 => _10('cls', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: '',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue,\n })]);\n\n _optionalChain([span, 'optionalAccess', _11 => _11.end, 'call', _12 => _12(startTime + duration)]);\n}\n\nfunction supportsLayoutShift() {\n try {\n return _optionalChain([PerformanceObserver, 'access', _13 => _13.supportedEntryTypes, 'optionalAccess', _14 => _14.includes, 'call', _15 => _15('layout-shift')]);\n } catch (e) {\n return false;\n }\n}\n\nexport { trackClsAsStandaloneSpan };\n//# sourceMappingURL=cls.js.map\n","import { getActiveSpan, startInactiveSpan, spanToJSON, setMeasurement, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\nimport { browserPerformanceTimeOrigin, logger, parseUrl, htmlTreeAsString, getComponentName } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../types.js';\nimport { trackClsAsStandaloneSpan } from './cls.js';\nimport { addPerformanceInstrumentationHandler, addClsInstrumentationHandler, addLcpInstrumentationHandler, addFidInstrumentationHandler, addTtfbInstrumentationHandler } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startAndEndSpan, isMeasurementValue } from './utils.js';\nimport { getNavigationEntry } from './web-vitals/lib/getNavigationEntry.js';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher.js';\n\n/* eslint-disable max-lines */\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals({ recordClsStandaloneSpans }) {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCleanupCallback = _trackFID();\n const lcpCleanupCallback = _trackLCP();\n const ttfbCleanupCallback = _trackTtfb();\n const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan() : _trackCLS();\n\n return () => {\n fidCleanupCallback();\n lcpCleanupCallback();\n ttfbCleanupCallback();\n clsCleanupCallback && clsCleanupCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n if (!getActiveSpan()) {\n return;\n }\n for (const entry of entries) {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const span = startInactiveSpan({\n name: 'Main UI thread blocked',\n op: 'ui.long-task',\n startTime,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n if (span) {\n span.end(startTime + duration);\n }\n }\n });\n}\n\n/**\n * Start tracking long animation frames.\n */\nfunction startTrackingLongAnimationFrames() {\n // NOTE: the current web-vitals version (3.5.2) does not support long-animation-frame, so\n // we directly observe `long-animation-frame` events instead of through the web-vitals\n // `observe` helper function.\n const observer = new PerformanceObserver(list => {\n if (!getActiveSpan()) {\n return;\n }\n for (const entry of list.getEntries() ) {\n if (!entry.scripts[0]) {\n continue;\n }\n\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n };\n\n const initialScript = entry.scripts[0];\n const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n attributes['browser.script.invoker'] = invoker;\n attributes['browser.script.invoker_type'] = invokerType;\n if (sourceURL) {\n attributes['code.filepath'] = sourceURL;\n }\n if (sourceFunctionName) {\n attributes['code.function'] = sourceFunctionName;\n }\n if (sourceCharPosition !== -1) {\n attributes['browser.script.source_char_position'] = sourceCharPosition;\n }\n\n const span = startInactiveSpan({\n name: 'Main UI thread blocked',\n op: 'ui.long-animation-frame',\n startTime,\n attributes,\n });\n if (span) {\n span.end(startTime + duration);\n }\n }\n });\n\n observer.observe({ type: 'long-animation-frame', buffered: true });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n if (!getActiveSpan()) {\n return;\n }\n for (const entry of entries) {\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const spanOptions = {\n name: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n startTime: startTime,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n spanOptions.attributes['ui.component_name'] = componentName;\n }\n\n const span = startInactiveSpan(spanOptions);\n if (span) {\n span.end(startTime + duration);\n }\n }\n }\n });\n}\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value and last entry\n * to the `_measurements` object which ultimately is applied to the pageload span's measurements.\n */\nfunction _trackCLS() {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1] ;\n if (!entry) {\n return;\n }\n DEBUG_BUILD && logger.log(`[Measurements] Adding CLS ${metric.value}`);\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry;\n }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry ;\n }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin );\n const startTime = msToSec(entry.startTime);\n DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\nfunction _trackTtfb() {\n return addTtfbInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(span, options) {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n const { op, start_timestamp: transactionStartTime } = spanToJSON(span);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n performanceEntries.slice(_performanceCursor).forEach((entry) => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(\n // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n Math.max(0, entry.duration),\n );\n\n if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(span, entry, timeOrigin);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(span, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n _addResourceSpans(span, entry, entry.name , startTime, duration, timeOrigin);\n break;\n }\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(span);\n\n // Measurements are only available for pageload transactions\n if (op === 'pageload') {\n _addTtfbRequestTimeToMeasurements(_measurements);\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n const measurement = _measurements[name];\n if (!measurement || !transactionStartTime || timeOrigin >= transactionStartTime) {\n return;\n }\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the span span data, so these web vitals will need\n // to be adjusted to be relative to span.startTimestamp.\n const oldValue = measurement.value;\n const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n // normalizedValue should be in milliseconds\n const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n const delta = normalizedValue - oldValue;\n\n DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n measurement.value = normalizedValue;\n });\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements['fid'].value), {\n name: 'first input delay',\n op: 'ui.action',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n // TODO: Check if the first condition is still necessary: `onCLS` already only fires once `onFCP` was called.\n if (!('fcp' in _measurements) || !options.recordClsOnPageloadSpan) {\n delete _measurements.cls;\n }\n\n Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n setMeasurement(measurementName, measurement.value, measurement.unit);\n });\n\n _tagMetricInfo(span);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/** Create measure related spans */\nfunction _addMeasureSpans(\n span,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry,\n startTime,\n duration,\n timeOrigin,\n) {\n const navEntry = getNavigationEntry();\n const requestTime = msToSec(navEntry ? navEntry.requestStart : 0);\n // Because performance.measure accepts arbitrary timestamps it can produce\n // spans that happen before the browser even makes a request for the page.\n //\n // An example of this is the automatically generated Next.js-before-hydration\n // spans created by the Next.js framework.\n //\n // To prevent this we will pin the start timestamp to the request start time\n // This does make duration inaccruate, so if this does happen, we will add\n // an attribute to the span\n const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);\n const startTimeStamp = timeOrigin + startTime;\n const measureEndTimestamp = startTimeStamp + duration;\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n\n if (measureStartTimestamp !== startTimeStamp) {\n attributes['sentry.browser.measure_happened_before_request'] = true;\n attributes['sentry.browser.measure_start_time'] = measureStartTimestamp;\n }\n\n startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {\n name: entry.name ,\n op: entry.entryType ,\n attributes,\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(span, entry, timeOrigin) {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n _addRequest(span, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n span,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry,\n event,\n timeOrigin,\n name,\n eventEnd,\n) {\n const end = eventEnd ? (entry[eventEnd] ) : (entry[`${event}End`] );\n const start = entry[`${event}Start`] ;\n if (!start || !end) {\n return;\n }\n startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {\n op: 'browser',\n name: name || event,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(span, entry, timeOrigin) {\n const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart );\n const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd );\n const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart );\n if (entry.responseEnd) {\n // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {\n op: 'browser',\n name: 'request',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {\n op: 'browser',\n name: 'response',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n }\n}\n\n/** Create resource-related spans */\nfunction _addResourceSpans(\n span,\n entry,\n resourceUrl,\n startTime,\n duration,\n timeOrigin,\n) {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n const parsedUrl = parseUrl(resourceUrl);\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n if ('renderBlockingStatus' in entry) {\n attributes['resource.render_blocking_status'] = entry.renderBlockingStatus;\n }\n if (parsedUrl.protocol) {\n attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n }\n\n if (parsedUrl.host) {\n attributes['server.address'] = parsedUrl.host;\n }\n\n attributes['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n startAndEndSpan(span, startTimestamp, endTimestamp, {\n name: resourceUrl.replace(WINDOW.location.origin, ''),\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n attributes,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span) {\n const navigator = WINDOW.navigator ;\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n span.setAttribute('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n span.setAttribute('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _tagMetricInfo(span) {\n if (_lcpEntry) {\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n span.setAttribute('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n span.setAttribute('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n span.setAttribute('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n _clsEntry.sources.forEach((source, index) =>\n span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n attributes,\n entry,\n key,\n dataKey,\n) {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n attributes[dataKey] = entryVal;\n }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements) {\n const navEntry = getNavigationEntry();\n if (!navEntry) {\n return;\n }\n\n const { responseStart, requestStart } = navEntry;\n\n if (requestStart <= responseStart) {\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n _measurements['ttfb.requestTime'] = {\n value: responseStart - requestStart,\n unit: 'millisecond',\n };\n }\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingInteractions, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingWebVitals };\n//# sourceMappingURL=browserMetrics.js.map\n","import { _optionalChain } from '@sentry/utils';\nimport { getActiveSpan, getRootSpan, spanToJSON, getCurrentScope, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { browserPerformanceTimeOrigin, htmlTreeAsString, dropUndefinedKeys } from '@sentry/utils';\nimport { addInpInstrumentationHandler, addPerformanceInstrumentationHandler, isPerformanceEventTiming } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startStandaloneWebVitalSpan } from './utils.js';\n\nconst LAST_INTERACTIONS = [];\nconst INTERACTIONS_SPAN_MAP = new Map();\n\n/**\n * Start tracking INP webvital events.\n */\nfunction startTrackingINP() {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n const inpCallback = _trackINP();\n\n return () => {\n inpCallback();\n };\n }\n\n return () => undefined;\n}\n\nconst INP_ENTRY_MAP = {\n click: 'click',\n pointerdown: 'click',\n pointerup: 'click',\n mousedown: 'click',\n mouseup: 'click',\n touchstart: 'click',\n touchend: 'click',\n mouseover: 'hover',\n mouseout: 'hover',\n mouseenter: 'hover',\n mouseleave: 'hover',\n pointerover: 'hover',\n pointerout: 'hover',\n pointerenter: 'hover',\n pointerleave: 'hover',\n dragstart: 'drag',\n dragend: 'drag',\n drag: 'drag',\n dragenter: 'drag',\n dragleave: 'drag',\n dragover: 'drag',\n drop: 'drag',\n keydown: 'press',\n keyup: 'press',\n keypress: 'press',\n input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP() {\n return addInpInstrumentationHandler(({ metric }) => {\n if (metric.value == undefined) {\n return;\n }\n\n const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n if (!entry) {\n return;\n }\n\n const { interactionId } = entry;\n const interactionType = INP_ENTRY_MAP[entry.name];\n\n /** Build the INP span, create an envelope from the span, and then send the envelope */\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(metric.value);\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n // We first try to lookup the span from our INTERACTIONS_SPAN_MAP,\n // where we cache the route per interactionId\n const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : undefined;\n\n const spanToUse = cachedSpan || rootSpan;\n\n // Else, we try to use the active span.\n // Finally, we fall back to look at the transactionName on the scope\n const routeName = spanToUse ? spanToJSON(spanToUse).description : getCurrentScope().getScopeData().transactionName;\n\n const name = htmlTreeAsString(entry.target);\n const attributes = dropUndefinedKeys({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.inp',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`,\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration,\n });\n\n const span = startStandaloneWebVitalSpan({\n name,\n transaction: routeName,\n attributes,\n startTime,\n });\n\n _optionalChain([span, 'optionalAccess', _ => _.addEvent, 'call', _2 => _2('inp', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n })]);\n\n _optionalChain([span, 'optionalAccess', _3 => _3.end, 'call', _4 => _4(startTime + duration)]);\n });\n}\n\n/**\n * Register a listener to cache route information for INP interactions.\n * TODO(v9): `latestRoute` no longer needs to be passed in and will be removed in v9.\n */\nfunction registerInpInteractionListener(_latestRoute) {\n const handleEntries = ({ entries }) => {\n const activeSpan = getActiveSpan();\n const activeRootSpan = activeSpan && getRootSpan(activeSpan);\n\n entries.forEach(entry => {\n if (!isPerformanceEventTiming(entry) || !activeRootSpan) {\n return;\n }\n\n const interactionId = entry.interactionId;\n if (interactionId == null) {\n return;\n }\n\n // If the interaction was already recorded before, nothing more to do\n if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n return;\n }\n\n // We keep max. 10 interactions in the list, then remove the oldest one & clean up\n if (LAST_INTERACTIONS.length > 10) {\n const last = LAST_INTERACTIONS.shift() ;\n INTERACTIONS_SPAN_MAP.delete(last);\n }\n\n // We add the interaction to the list of recorded interactions\n // and store the span for this interaction\n LAST_INTERACTIONS.push(interactionId);\n INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan);\n });\n };\n\n addPerformanceInstrumentationHandler('event', handleEntries);\n addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n\nexport { registerInpInteractionListener, startTrackingINP };\n//# sourceMappingURL=inp.js.map\n","import { _nullishCoalesce, _optionalChain } from '@sentry/utils';\nimport { captureException, addBreadcrumb, getClient, isSentryRequestUrl, addEventProcessor, prepareEvent, getIsolationScope, getCurrentScope, setContext, getActiveSpan, getRootSpan, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, parseSampleRate } from '@sentry/core';\nimport { GLOBAL_OBJ, logger as logger$1, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, uuid4, getLocationHref, dropUndefinedKeys, stringMatchesSomePattern, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, resolvedSyncPromise, updateRateLimits, isRateLimited, isBrowser, consoleSandbox } from '@sentry/utils';\nimport { setTimeout as setTimeout$3, addPerformanceInstrumentationHandler, addLcpInstrumentationHandler, addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, SENTRY_XHR_DATA_KEY, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nfunction _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var NodeType$1;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\n\nfunction isElement$1(n) {\n return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n const host = _optionalChain$5([n, 'optionalAccess', _ => _.host]);\n return Boolean(_optionalChain$5([host, 'optionalAccess', _2 => _2.shadowRoot]) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(' background-clip: text;') &&\n !cssText.includes(' -webkit-background-clip: text;')) {\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\n }\n return cssText;\n}\nfunction escapeImportStatement(rule) {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3)\n return cssText;\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === '') {\n statement.push(`layer`);\n }\n else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n try {\n const rules = s.rules || s.cssRules;\n return rules\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n : null;\n }\n catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule) {\n let importStringified;\n if (isCSSImportRule(rule)) {\n try {\n importStringified =\n stringifyStylesheet(rule.styleSheet) ||\n escapeImportStatement(rule);\n }\n catch (error) {\n }\n }\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n return fixSafariColons(rule.cssText);\n }\n return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\nclass Mirror {\n constructor() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n getId(n) {\n if (!n)\n return -1;\n const id = _optionalChain$5([this, 'access', _3 => _3.getMeta, 'call', _4 => _4(n), 'optionalAccess', _5 => _5.id]);\n return _nullishCoalesce$1(id, () => ( -1));\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n) {\n return this.nodeMetaMap.get(n) || null;\n }\n removeNodeFromMap(n) {\n const id = this.getId(n);\n this.idNodeMap.delete(id);\n if (n.childNodes) {\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n);\n this.nodeMetaMap.set(n, meta);\n }\n replace(id, n) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n, meta);\n }\n this.idNodeMap.set(id, n);\n }\n reset() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n}\nfunction createMirror() {\n return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n if (tagName === 'OPTION') {\n tagName = 'SELECT';\n }\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n (type && maskInputOptions[type]) ||\n type === 'password' ||\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n let text = value || '';\n if (!isMasked) {\n return text;\n }\n if (maskInputFn) {\n text = maskInputFn(text, element);\n }\n return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext('2d');\n if (!ctx)\n return true;\n const chunkSize = 50;\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some((pixel) => pixel !== 0))\n return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ?\n toLowerCase(type)\n : null;\n}\nfunction getInputValue(el, tagName, type) {\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return el.getAttribute('value') || '';\n }\n return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, _nullishCoalesce$1(baseURL, () => ( window.location.href)));\n }\n catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return _nullishCoalesce$1(_optionalChain$5([match, 'optionalAccess', _6 => _6[1]]), () => ( null));\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n const cached = cachedImplementations$1[name];\n if (cached) {\n return cached;\n }\n const document = window.document;\n let impl = window[name];\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl =\n contentWindow[name];\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedImplementations$1[name] = impl.bind(window));\n}\nfunction setTimeout$2(...rest) {\n return getImplementation$1('setTimeout')(...rest);\n}\nfunction clearTimeout$2(...rest) {\n return getImplementation$1('clearTimeout')(...rest);\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return 'form';\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return 'div';\n }\n return processedTagName;\n}\nfunction extractOrigin(url) {\n let origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n }\n else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === '/') {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split('/');\n const parts = filePath.split('/');\n stack.pop();\n for (const part of parts) {\n if (part === '.') {\n continue;\n }\n else if (part === '..') {\n stack.pop();\n }\n else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === '') {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars = match[0];\n pos += chars.length;\n return chars;\n }\n return '';\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === ',') {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n }\n else {\n let descriptorsStr = '';\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c = attributeValue.charAt(pos);\n if (c === '') {\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (!inParens) {\n if (c === ',') {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (c === '(') {\n inParens = true;\n }\n }\n else {\n if (c === ')') {\n inParens = false;\n }\n }\n descriptorsStr += c;\n pos += 1;\n }\n }\n }\n return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n const a = doc.createElement('a');\n a.href = attributeValue;\n return a.href;\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n const a = document.createElement('a');\n a.href = '';\n return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n if (!value) {\n return value;\n }\n if (name === 'src' ||\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'xlink:href' && value[0] !== '#') {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'background' &&\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'srcset') {\n return getAbsoluteSrcsetString(doc, value);\n }\n else if (name === 'style') {\n return absoluteToStylesheet(value, getHref());\n }\n else if (tagName === 'object' && name === 'data') {\n return absoluteToDoc(doc, value);\n }\n if (typeof maskAttributeFn === 'function') {\n return maskAttributeFn(name, value, element);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n try {\n if (unblockSelector && element.matches(unblockSelector)) {\n return false;\n }\n if (typeof blockClass === 'string') {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n }\n else {\n for (let eIndex = element.classList.length; eIndex--;) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n }\n catch (e) {\n }\n return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n for (let eIndex = el.classList.length; eIndex--;) {\n const className = el.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n if (!node)\n return -1;\n if (node.nodeType !== node.ELEMENT_NODE)\n return -1;\n if (distance > limit)\n return -1;\n if (matchPredicate(node))\n return distance;\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n return (node) => {\n const el = node;\n if (el === null)\n return false;\n try {\n if (className) {\n if (typeof className === 'string') {\n if (el.matches(`.${className}`))\n return true;\n }\n else if (elementClassMatchesRegex(el, className)) {\n return true;\n }\n }\n if (selector && el.matches(selector))\n return true;\n return false;\n }\n catch (e2) {\n return false;\n }\n };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n try {\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (el === null)\n return false;\n if (el.tagName === 'INPUT') {\n const autocomplete = el.getAttribute('autocomplete');\n const disallowedAutocompleteValues = [\n 'current-password',\n 'new-password',\n 'cc-number',\n 'cc-exp',\n 'cc-exp-month',\n 'cc-exp-year',\n 'cc-csc',\n ];\n if (disallowedAutocompleteValues.includes(autocomplete)) {\n return true;\n }\n }\n let maskDistance = -1;\n let unmaskDistance = -1;\n if (maskAllText) {\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n if (unmaskDistance < 0) {\n return true;\n }\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n }\n else {\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n if (maskDistance < 0) {\n return false;\n }\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n }\n return maskDistance >= 0\n ? unmaskDistance >= 0\n ? maskDistance <= unmaskDistance\n : true\n : unmaskDistance >= 0\n ? false\n : !!maskAllText;\n }\n catch (e) {\n }\n return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n }\n catch (error) {\n return;\n }\n if (readyState !== 'complete') {\n const timer = setTimeout$2(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', () => {\n clearTimeout$2(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = 'about:blank';\n if (win.location.href !== blankUrl ||\n iframeEl.src === blankUrl ||\n iframeEl.src === '') {\n setTimeout$2(listener, 0);\n return iframeEl.addEventListener('load', listener);\n }\n iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n }\n catch (error) {\n return;\n }\n if (styleSheetLoaded)\n return;\n const timer = setTimeout$2(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener('load', () => {\n clearTimeout$2(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n const rootId = getRootId(doc, mirror);\n switch (n.nodeType) {\n case n.DOCUMENT_NODE:\n if (n.compatMode !== 'CSS1Compat') {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n compatMode: n.compatMode,\n };\n }\n else {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$1.DocumentType,\n name: n.name,\n publicId: n.publicId,\n systemId: n.systemId,\n rootId,\n };\n case n.ELEMENT_NODE:\n return serializeElementNode(n, {\n doc,\n blockClass,\n blockSelector,\n unblockSelector,\n inlineStylesheet,\n maskAttributeFn,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n });\n case n.TEXT_NODE:\n return serializeTextNode(n, {\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskTextFn,\n maskInputOptions,\n maskInputFn,\n rootId,\n });\n case n.CDATA_SECTION_NODE:\n return {\n type: NodeType$1.CDATA,\n textContent: '',\n rootId,\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType$1.Comment,\n textContent: n.textContent || '',\n rootId,\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror) {\n if (!mirror.hasNode(doc))\n return undefined;\n const docId = mirror.getId(doc);\n return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n const parentTagName = n.parentNode && n.parentNode.tagName;\n let textContent = n.textContent;\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n if (isStyle && textContent) {\n try {\n if (n.nextSibling || n.previousSibling) {\n }\n else if (_optionalChain$5([n, 'access', _7 => _7.parentNode, 'access', _8 => _8.sheet, 'optionalAccess', _9 => _9.cssRules])) {\n textContent = stringifyStylesheet(n.parentNode.sheet);\n }\n }\n catch (err) {\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n }\n textContent = absoluteToStylesheet(textContent, getHref());\n }\n if (isScript) {\n textContent = 'SCRIPT_PLACEHOLDER';\n }\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n textContent = maskTextFn\n ? maskTextFn(textContent, n.parentElement)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n textContent = maskInputFn\n ? maskInputFn(textContent, n.parentNode)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (parentTagName === 'OPTION' && textContent) {\n const isInputMasked = shouldMaskInput({\n type: null,\n tagName: parentTagName,\n maskInputOptions,\n });\n textContent = maskInputValue({\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n element: n,\n value: textContent,\n maskInputFn,\n });\n }\n return {\n type: NodeType$1.Text,\n textContent: textContent || '',\n isStyle,\n rootId,\n };\n}\nfunction serializeElementNode(n, options) {\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n const tagName = getValidTagName(n);\n let attributes = {};\n const len = n.attributes.length;\n for (let i = 0; i < len; i++) {\n const attr = n.attributes[i];\n if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n }\n }\n if (tagName === 'link' && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\n return s.href === n.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === 'style' &&\n n.sheet &&\n !(n.innerText || n.textContent || '').trim().length) {\n const cssText = stringifyStylesheet(n.sheet);\n if (cssText) {\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\n }\n }\n if (tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select' ||\n tagName === 'option') {\n const el = n;\n const type = getInputType(el);\n const value = getInputValue(el, toUpperCase(tagName), type);\n const checked = el.checked;\n if (type !== 'submit' && type !== 'button' && value) {\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n type,\n tagName: toUpperCase(tagName),\n maskInputOptions,\n }));\n attributes.value = maskInputValue({\n isMasked: forceMask,\n element: el,\n value,\n maskInputFn,\n });\n }\n if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === 'option') {\n if (n.selected && !maskInputOptions['select']) {\n attributes.selected = true;\n }\n else {\n delete attributes.selected;\n }\n }\n if (tagName === 'canvas' && recordCanvas) {\n if (n.__context === '2d') {\n if (!is2DCanvasBlank(n)) {\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n }\n else if (!('__context' in n)) {\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n const blankCanvas = document.createElement('canvas');\n blankCanvas.width = n.width;\n blankCanvas.height = n.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === 'img' && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement('canvas');\n canvasCtx = canvasService.getContext('2d');\n }\n const image = n;\n const oldValue = image.crossOrigin;\n image.crossOrigin = 'anonymous';\n const recordInlineImage = () => {\n image.removeEventListener('load', recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n catch (err) {\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\n }\n oldValue\n ? (attributes.crossOrigin = oldValue)\n : image.removeAttribute('crossorigin');\n };\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n }\n if (tagName === 'audio' || tagName === 'video') {\n attributes.rr_mediaState = n.paused\n ? 'paused'\n : 'played';\n attributes.rr_mediaCurrentTime = n.currentTime;\n }\n if (!newlyAddedElement) {\n if (n.scrollLeft) {\n attributes.rr_scrollLeft = n.scrollLeft;\n }\n if (n.scrollTop) {\n attributes.rr_scrollTop = n.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n };\n }\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n if (!needBlock && !n.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName))\n isCustomElement = true;\n }\n catch (e) {\n }\n return {\n type: NodeType$1.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n) || undefined,\n needBlock,\n rootId,\n isCustom: isCustomElement,\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === undefined || maybeAttr === null) {\n return '';\n }\n else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n return true;\n }\n else if (sn.type === NodeType$1.Element) {\n if (slimDOMOptions.script &&\n (sn.tagName === 'script' ||\n (sn.tagName === 'link' &&\n (sn.attributes.rel === 'preload' ||\n sn.attributes.rel === 'modulepreload') &&\n sn.attributes.as === 'script') ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n extractFileExtension(sn.attributes.href) === 'js'))) {\n return true;\n }\n else if (slimDOMOptions.headFavicon &&\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n (sn.tagName === 'meta' &&\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n lowerIfExists(sn.attributes.name) === 'application-name' ||\n lowerIfExists(sn.attributes.rel) === 'icon' ||\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n return true;\n }\n else if (sn.tagName === 'meta') {\n if (slimDOMOptions.headMetaDescKeywords &&\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n }\n else if (slimDOMOptions.headMetaSocial &&\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\n return true;\n }\n else if (slimDOMOptions.headMetaRobots &&\n (lowerIfExists(sn.attributes.name) === 'robots' ||\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\n return true;\n }\n else if (slimDOMOptions.headMetaHttpEquiv &&\n sn.attributes['http-equiv'] !== undefined) {\n return true;\n }\n else if (slimDOMOptions.headMetaAuthorship &&\n (lowerIfExists(sn.attributes.name) === 'author' ||\n lowerIfExists(sn.attributes.name) === 'generator' ||\n lowerIfExists(sn.attributes.name) === 'framework' ||\n lowerIfExists(sn.attributes.name) === 'publisher' ||\n lowerIfExists(sn.attributes.name) === 'progid' ||\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n }\n else if (slimDOMOptions.headMetaVerification &&\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n lowerIfExists(sn.attributes.name) === 'verification' ||\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n let { preserveWhiteSpace = true } = options;\n const _serializedNode = serializeNode(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n });\n if (!_serializedNode) {\n console.warn(n, 'not serialized');\n return null;\n }\n let id;\n if (mirror.hasNode(n)) {\n id = mirror.getId(n);\n }\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n (!preserveWhiteSpace &&\n _serializedNode.type === NodeType$1.Text &&\n !_serializedNode.isStyle &&\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n id = IGNORED_NODE;\n }\n else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror.add(n, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$1.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRoot = n.shadowRoot;\n if (shadowRoot && isNativeShadowDom(shadowRoot))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$1.Document ||\n serializedNode.type === NodeType$1.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'head') {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n };\n for (const childN of Array.from(n.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n if (isElement$1(n) && n.shadowRoot) {\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(n.shadowRoot) &&\n (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n.parentNode &&\n isShadowRoot(n.parentNode) &&\n isNativeShadowDom(n.parentNode)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, () => {\n const iframeDoc = n.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedIframeNode) {\n onIframeLoad(n, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'link' &&\n typeof serializedNode.attributes.rel === 'string' &&\n (serializedNode.attributes.rel === 'stylesheet' ||\n (serializedNode.attributes.rel === 'preload' &&\n typeof serializedNode.attributes.href === 'string' &&\n extractFileExtension(serializedNode.attributes.href) === 'css'))) {\n onceStylesheetLoaded(n, () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n, options) {\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n }\n : maskAllInputs === false\n ? {}\n : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n ?\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === 'all',\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true,\n }\n : slimDOM === false\n ? {}\n : slimDOM;\n return serializeNodeWithId(n, {\n doc: n,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false,\n });\n}\n\nfunction _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n '\\r\\n' +\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n '\\r\\n' +\n 'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === 'map') {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\nfunction throttle$1(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function (...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout$1(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout$1(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked\n ? d\n : {\n set(value) {\n setTimeout$1(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n },\n });\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === 'function') {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original,\n },\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n }\n catch (e2) {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : _optionalChain$4([doc, 'optionalAccess', _ => _.documentElement, 'access', _2 => _2.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _3 => _3.body, 'optionalAccess', _4 => _4.parentElement, 'optionalAccess', _5 => _5.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _6 => _6.body, 'optionalAccess', _7 => _7.scrollLeft]) ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : _optionalChain$4([doc, 'optionalAccess', _8 => _8.documentElement, 'access', _9 => _9.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _10 => _10.body, 'optionalAccess', _11 => _11.parentElement, 'optionalAccess', _12 => _12.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _13 => _13.body, 'optionalAccess', _14 => _14.scrollTop]) ||\n 0,\n };\n}\nfunction getWindowHeight() {\n return (window.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n return (window.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth));\n}\nfunction closestElementOfNode(node) {\n if (!node) {\n return null;\n }\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = closestElementOfNode(node);\n if (!el) {\n return false;\n }\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n if (!checkAncestors) {\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\n return blockedPredicate(el) && !isUnblocked;\n }\n const blockDistance = distanceToMatch(el, blockedPredicate);\n let unblockDistance = -1;\n if (blockDistance < 0) {\n return false;\n }\n if (unblockSelector) {\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n }\n if (blockDistance > -1 && unblockDistance < 0) {\n return true;\n }\n return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror.getId(target);\n if (!mirror.has(id)) {\n return true;\n }\n if (target.parentNode &&\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype\n .forEach;\n }\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype\n .forEach;\n }\n if (!Node.prototype.contains) {\n Node.prototype.contains = (...args) => {\n let node = args[0];\n if (!(0 in args)) {\n throw new TypeError('1 argument is required');\n }\n do {\n if (this === node) {\n return true;\n }\n } while ((node = node && node.parentNode));\n return false;\n };\n }\n}\nfunction isSerializedIframe(n, mirror) {\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n return Boolean(n.nodeName === 'LINK' &&\n n.nodeType === n.ELEMENT_NODE &&\n n.getAttribute &&\n n.getAttribute('rel') === 'stylesheet' &&\n mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n return Boolean(_optionalChain$4([n, 'optionalAccess', _18 => _18.shadowRoot]));\n}\nclass StyleSheetMirror {\n constructor() {\n this.id = 1;\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n }\n getId(stylesheet) {\n return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => ( -1));\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n add(stylesheet, id) {\n if (this.has(stylesheet))\n return this.getId(stylesheet);\n let newId;\n if (id === undefined) {\n newId = this.id++;\n }\n else\n newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n) {\n let shadowHost = null;\n if (_optionalChain$4([n, 'access', _19 => _19.getRootNode, 'optionalCall', _20 => _20(), 'optionalAccess', _21 => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE &&\n n.getRootNode().host)\n shadowHost = n.getRootNode().host;\n return shadowHost;\n}\nfunction getRootShadowHost(n) {\n let rootShadowHost = n;\n let shadowHost;\n while ((shadowHost = getShadowHost(rootShadowHost)))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n const shadowHost = getRootShadowHost(n);\n return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n return doc.contains(n) || shadowHostInDom(n);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n const document = window.document;\n let impl = window[name];\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl =\n contentWindow[name];\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedImplementations[name] = impl.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n return getImplementation('requestAnimationFrame')(...rest);\n}\nfunction setTimeout$1(...rest) {\n return getImplementation('setTimeout')(...rest);\n}\nfunction clearTimeout$1(...rest) {\n return getImplementation('clearTimeout')(...rest);\n}\n\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\n\nfunction _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction isNodeInLinkedList(n) {\n return '__ln' in n;\n}\nclass DoubleLinkedList {\n constructor() {\n this.length = 0;\n this.head = null;\n this.tail = null;\n }\n get(position) {\n if (position >= this.length) {\n throw new Error('Position outside of list range');\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = _optionalChain$3([current, 'optionalAccess', _ => _.next]) || null;\n }\n return current;\n }\n addNode(n) {\n const node = {\n value: n,\n previous: null,\n next: null,\n };\n n.__ln = node;\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n const current = n.previousSibling.__ln.next;\n node.next = current;\n node.previous = n.previousSibling.__ln;\n n.previousSibling.__ln.next = node;\n if (current) {\n current.previous = node;\n }\n }\n else if (n.nextSibling &&\n isNodeInLinkedList(n.nextSibling) &&\n n.nextSibling.__ln.previous) {\n const current = n.nextSibling.__ln.previous;\n node.previous = current;\n node.next = n.nextSibling.__ln;\n n.nextSibling.__ln.previous = node;\n if (current) {\n current.next = node;\n }\n }\n else {\n if (this.head) {\n this.head.previous = node;\n }\n node.next = this.head;\n this.head = node;\n }\n if (node.next === null) {\n this.tail = node;\n }\n this.length++;\n }\n removeNode(n) {\n const current = n.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n }\n else {\n this.tail = null;\n }\n }\n else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n }\n else {\n this.tail = current.previous;\n }\n }\n if (n.__ln) {\n delete n.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n this.frozen = false;\n this.locked = false;\n this.texts = [];\n this.attributes = [];\n this.attributeMap = new WeakMap();\n this.removes = [];\n this.mapRemoves = [];\n this.movedMap = {};\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.processMutations = (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n };\n this.emit = () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n) => {\n let ns = n;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n) => {\n if (!n.parentNode || !inDom(n)) {\n return;\n }\n const parentId = isShadowRoot(n.parentNode)\n ? this.mirror.getId(getShadowHost(n))\n : this.mirror.getId(n.parentNode);\n const nextId = getNextId(n);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n);\n }\n const sn = serializeNodeWithId(n, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskAllText: this.maskAllText,\n unblockSelector: this.unblockSelector,\n maskTextClass: this.maskTextClass,\n unmaskTextClass: this.unmaskTextClass,\n maskTextSelector: this.maskTextSelector,\n unmaskTextSelector: this.unmaskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskAttributeFn: this.maskAttributeFn,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n)) {\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n if (iframe.contentWindow) {\n this.canvasManager.addWindow(iframe.contentWindow);\n }\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n },\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn,\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n of this.movedSet) {\n if (isParentRemoved(this.removes, n, this.mirror) &&\n !this.movedSet.has(n.parentNode)) {\n continue;\n }\n pushAdd(n);\n }\n for (const n of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n) &&\n !isParentRemoved(this.removes, n, this.mirror)) {\n pushAdd(n);\n }\n else if (isAncestorInSet(this.movedSet, n)) {\n pushAdd(n);\n }\n else {\n this.droppedSet.add(n);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node = null;\n if (candidate) {\n const parentId = this.mirror.getId(candidate.value.parentNode);\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node = candidate;\n }\n }\n if (!node) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(_node.value.parentNode);\n const nextId = getNextId(_node.value);\n if (nextId === -1)\n continue;\n else if (parentId !== -1) {\n node = _node;\n break;\n }\n else {\n const unhandledNode = _node.value;\n if (unhandledNode.parentNode &&\n unhandledNode.parentNode.nodeType ===\n Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = unhandledNode.parentNode\n .host;\n const parentId = this.mirror.getId(shadowHost);\n if (parentId !== -1) {\n node = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node.previous;\n addList.removeNode(node.value);\n pushAdd(node.value);\n }\n const payload = {\n texts: this.texts\n .map((text) => ({\n id: this.mirror.getId(text.node),\n value: text.value,\n }))\n .filter((text) => !addedIds.has(text.id))\n .filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes\n .map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === 'string') {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\n attributes.style.split('var(').length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes: attributes,\n };\n })\n .filter((attribute) => !addedIds.has(attribute.id))\n .filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds,\n };\n if (!payload.texts.length &&\n !payload.attributes.length &&\n !payload.removes.length &&\n !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.attributeMap = new WeakMap();\n this.removes = [];\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n };\n this.processMutation = (m) => {\n if (isIgnored(m.target, this.mirror)) {\n return;\n }\n switch (m.type) {\n case 'characterData': {\n const value = m.target.textContent;\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n ? this.maskTextFn\n ? this.maskTextFn(value, closestElementOfNode(m.target))\n : value.replace(/[\\S]/g, '*')\n : value,\n node: m.target,\n });\n }\n break;\n }\n case 'attributes': {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === 'value') {\n const type = getInputType(target);\n const tagName = target.tagName;\n value = getInputValue(target, tagName, type);\n const isInputMasked = shouldMaskInput({\n maskInputOptions: this.maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n value = maskInputValue({\n isMasked: forceMask,\n element: target,\n value,\n maskInputFn: this.maskInputFn,\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n value === m.oldValue) {\n return;\n }\n let item = this.attributeMap.get(m.target);\n if (target.tagName === 'IFRAME' &&\n attributeName === 'src' &&\n !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = 'rr_src';\n }\n else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {},\n };\n this.attributes.push(item);\n this.attributeMap.set(m.target, item);\n }\n if (attributeName === 'type' &&\n target.tagName === 'INPUT' &&\n (m.oldValue || '').toLowerCase() === 'password') {\n target.setAttribute('data-rr-is-password', 'true');\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n if (attributeName === 'style') {\n if (!this.unattachedDoc) {\n try {\n this.unattachedDoc =\n document.implementation.createHTMLDocument();\n }\n catch (e) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.unattachedDoc.createElement('span');\n if (m.oldValue) {\n old.setAttribute('style', m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) ||\n newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === '') {\n item.styleDiff[pname] = newValue;\n }\n else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n }\n else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === '') {\n item.styleDiff[pname] = false;\n }\n }\n }\n }\n break;\n }\n case 'childList': {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n return;\n }\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n m.removedNodes.forEach((n) => {\n const nodeId = this.mirror.getId(n);\n const parentId = isShadowRoot(m.target)\n ? this.mirror.getId(m.target.host)\n : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n isIgnored(n, this.mirror) ||\n !isSerialized(n, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n)) {\n deepDelete(this.addedSet, n);\n this.droppedSet.add(n);\n }\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n) &&\n this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n);\n }\n else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n ? true\n : undefined,\n });\n }\n this.mapRemoves.push(n);\n });\n break;\n }\n }\n };\n this.genAdds = (n, target) => {\n if (this.processedNodeManager.inOtherBuffer(n, this))\n return;\n if (this.addedSet.has(n) || this.movedSet.has(n))\n return;\n if (this.mirror.hasNode(n)) {\n if (isIgnored(n, this.mirror)) {\n return;\n }\n this.movedSet.add(n);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n }\n }\n else {\n this.addedSet.add(n);\n this.droppedSet.delete(n);\n }\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n n.childNodes.forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n)) {\n n.shadowRoot.childNodes.forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n);\n });\n }\n }\n };\n }\n init(options) {\n [\n 'mutationCb',\n 'blockClass',\n 'blockSelector',\n 'unblockSelector',\n 'maskAllText',\n 'maskTextClass',\n 'unmaskTextClass',\n 'maskTextSelector',\n 'unmaskTextSelector',\n 'inlineStylesheet',\n 'maskInputOptions',\n 'maskAttributeFn',\n 'maskTextFn',\n 'maskInputFn',\n 'keepIframeSrcFn',\n 'recordCanvas',\n 'inlineImages',\n 'slimDOMOptions',\n 'dataURLOptions',\n 'doc',\n 'mirror',\n 'iframeManager',\n 'stylesheetManager',\n 'shadowDomManager',\n 'canvasManager',\n 'processedNodeManager',\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n) {\n addsSet.delete(n);\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n if (removes.length === 0)\n return false;\n return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n const parentId = mirror.getId(parentNode);\n if (removes.some((r) => r.id === parentId)) {\n return true;\n }\n return _isParentRemoved(removes, parentNode, mirror);\n}\nfunction isAncestorInSet(set, n) {\n if (set.size === 0)\n return false;\n return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n if (set.has(parentNode)) {\n return true;\n }\n return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = ((...rest) => {\n try {\n return cb(...rest);\n }\n catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return () => {\n };\n }\n throw error;\n }\n });\n return rrwebWrapped;\n};\n\nfunction _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if ('composedPath' in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n }\n else if ('path' in event && event.path.length) {\n return event.path[0];\n }\n }\n catch (e2) {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n let mutationObserverCtor = window.MutationObserver ||\n window.__rrMutationObserver;\n const angularZoneSymbol = _optionalChain$2([window, 'optionalAccess', _ => _.Zone, 'optionalAccess', _2 => _2.__symbol__, 'optionalCall', _3 => _3('MutationObserver')]);\n if (angularZoneSymbol &&\n window[angularZoneSymbol]) {\n mutationObserverCtor = window[angularZoneSymbol];\n }\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n if (options.onMutation && options.onMutation(mutations) === false) {\n return;\n }\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n }));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n ? sampling.mousemoveCallback\n : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle$1(callbackWrapper((source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt)\n ? evt.changedTouches[0]\n : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror.getId(target),\n timeOffset: nowTimestamp() - timeBaseline,\n });\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n ? IncrementalSource.Drag\n : evt instanceof MouseEvent\n ? IncrementalSource.MouseMove\n : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false,\n }));\n const handlers = [\n on('mousemove', updatePosition, doc),\n on('touchmove', updatePosition, doc),\n on('drag', updatePosition, doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true ||\n sampling.mouseInteraction === undefined\n ? {}\n : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if ('pointerType' in event) {\n switch (event.pointerType) {\n case 'mouse':\n pointerType = PointerTypes.Mouse;\n break;\n case 'touch':\n pointerType = PointerTypes.Touch;\n break;\n case 'pen':\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = 'TouchStart';\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = 'TouchEnd';\n }\n }\n else if (pointerType === PointerTypes.Pen) ;\n }\n else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if ((thisEventKey.startsWith('Touch') &&\n pointerType === PointerTypes.Touch) ||\n (thisEventKey.startsWith('Mouse') &&\n pointerType === PointerTypes.Mouse)) {\n pointerType = null;\n }\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e) {\n return;\n }\n const id = mirror.getId(target);\n const { clientX, clientY } = e;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...(pointerType !== null && { pointerType }),\n });\n };\n };\n Object.keys(MouseInteractions)\n .filter((key) => Number.isNaN(Number(key)) &&\n !key.endsWith('_Departed') &&\n disableMap[key] !== false)\n .forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace('mouse', 'pointer');\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const id = mirror.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top,\n });\n }\n else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop,\n });\n }\n }), sampling.scroll || 100));\n return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height),\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && toUpperCase(target.tagName);\n if (tagName === 'OPTION')\n target = target.parentElement;\n if (!target ||\n !tagName ||\n INPUT_TAGS.indexOf(tagName) < 0 ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const el = target;\n if (el.classList.contains(ignoreClass) ||\n (ignoreSelector && el.matches(ignoreSelector))) {\n return;\n }\n const type = getInputType(target);\n let text = getInputValue(el, tagName, type);\n let isChecked = false;\n const isInputMasked = shouldMaskInput({\n maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n if (type === 'radio' || type === 'checkbox') {\n isChecked = target.checked;\n }\n text = maskInputValue({\n isMasked: forceMask,\n element: target,\n value: text,\n maskInputFn,\n });\n cbWithDedup(target, userTriggeredOnInput\n ? { text, isChecked, userTriggered }\n : { text, isChecked });\n const name = target.name;\n if (type === 'radio' && name && isChecked) {\n doc\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n .forEach((el) => {\n if (el !== target) {\n const text = maskInputValue({\n isMasked: forceMask,\n element: el,\n value: getInputValue(el, tagName, type),\n maskInputFn,\n });\n cbWithDedup(el, userTriggeredOnInput\n ? { text, isChecked: !isChecked, userTriggered: false }\n : { text, isChecked: !isChecked });\n }\n });\n }\n }\n function cbWithDedup(target, v) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue ||\n lastInputValue.text !== v.text ||\n lastInputValue.isChecked !== v.isChecked) {\n lastInputValueMap.set(target, v);\n const id = mirror.getId(target);\n callbackWrapper(inputCb)({\n ...v,\n id,\n });\n }\n }\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, 'value'],\n [currentWindow.HTMLInputElement.prototype, 'checked'],\n [currentWindow.HTMLSelectElement.prototype, 'value'],\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false,\n });\n },\n }, false, currentWindow)));\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule) {\n const positions = [];\n function recurse(childRule, pos) {\n if ((hasNestedCSSRule('CSSGroupingRule') &&\n childRule.parentRule instanceof CSSGroupingRule) ||\n (hasNestedCSSRule('CSSMediaRule') &&\n childRule.parentRule instanceof CSSMediaRule) ||\n (hasNestedCSSRule('CSSSupportsRule') &&\n childRule.parentRule instanceof CSSSupportsRule) ||\n (hasNestedCSSRule('CSSConditionRule') &&\n childRule.parentRule instanceof CSSConditionRule)) {\n const rules = Array.from(childRule.parentRule.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n else if (childRule.parentStyleSheet) {\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n return pos;\n }\n return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n let id, styleId;\n if (!sheet)\n return {};\n if (sheet.ownerNode)\n id = mirror.getId(sheet.ownerNode);\n else\n styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id,\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule, index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n }\n else {\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n insertRule: type.prototype.insertRule,\n deleteRule: type.prototype.deleteRule,\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index || 0,\n ],\n },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index] },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n let hostId = null;\n if (host.nodeName === '#document')\n hostId = mirror.getId(host);\n else\n hostId = mirror.getId(host.host);\n const patchTarget = host.nodeName === '#document'\n ? _optionalChain$2([host, 'access', _4 => _4.defaultView, 'optionalAccess', _5 => _5.Document])\n : _optionalChain$2([host, 'access', _6 => _6.ownerDocument, 'optionalAccess', _7 => _7.defaultView, 'optionalAccess', _8 => _8.ShadowRoot]);\n const originalPropertyDescriptor = _optionalChain$2([patchTarget, 'optionalAccess', _9 => _9.prototype])\n ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, 'optionalAccess', _10 => _10.prototype]), 'adoptedStyleSheets')\n : undefined;\n if (hostId === null ||\n hostId === -1 ||\n !patchTarget ||\n !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n return _optionalChain$2([originalPropertyDescriptor, 'access', _11 => _11.get, 'optionalAccess', _12 => _12.call, 'call', _13 => _13(this)]);\n },\n set(sheets) {\n const result = _optionalChain$2([originalPropertyDescriptor, 'access', _14 => _14.set, 'optionalAccess', _15 => _15.call, 'call', _16 => _16(this, sheets)]);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n }\n catch (e) {\n }\n }\n return result;\n },\n });\n return callbackWrapper(() => {\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: originalPropertyDescriptor.get,\n set: originalPropertyDescriptor.set,\n });\n });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _17 => _17.parentRule, 'optionalAccess', _18 => _18.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _19 => _19.parentRule, 'optionalAccess', _20 => _20.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate } = target;\n mediaInteractionCb({\n type,\n id: mirror.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n });\n }), sampling.media || 500));\n const handlers = [\n on('play', handler(0), doc),\n on('pause', handler(1), doc),\n on('seeked', handler(2), doc),\n on('volumechange', handler(3), doc),\n on('ratechange', handler(4), doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== 'string',\n descriptors,\n fontSource: typeof source === 'string'\n ? source\n : JSON.stringify(Array.from(new Uint8Array(source))),\n });\n return fontFace;\n };\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\n return function (fontFace) {\n setTimeout$1(callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [fontFace]);\n };\n });\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || (collapsed && _optionalChain$2([selection, 'optionalAccess', _21 => _21.isCollapsed])))\n return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i = 0; i < count; i++) {\n const range = selection.getRangeAt(i);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n if (blocked)\n continue;\n ranges.push({\n start: mirror.getId(startContainer),\n startOffset,\n end: mirror.getId(endContainer),\n endOffset,\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n const win = doc.defaultView;\n if (!win || !win.customElements)\n return () => { };\n const restoreHandler = patch(win.customElements, 'define', function (original) {\n return function (name, constructor, options) {\n try {\n customElementCb({\n define: {\n name,\n },\n });\n }\n catch (e) {\n }\n return original.apply(this, [name, constructor, options]);\n };\n });\n return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n const currentWindow = o.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n let mutationObserver;\n if (o.recordDOM) {\n mutationObserver = initMutationObserver(o, o.doc);\n }\n const mousemoveHandler = initMoveObserver(o);\n const mouseInteractionHandler = initMouseInteractionObserver(o);\n const scrollHandler = initScrollObserver(o);\n const viewportResizeHandler = initViewportResizeObserver(o, {\n win: currentWindow,\n });\n const inputHandler = initInputObserver(o);\n const mediaInteractionHandler = initMediaInteractionObserver(o);\n let styleSheetObserver = () => { };\n let adoptedStyleSheetObserver = () => { };\n let styleDeclarationObserver = () => { };\n let fontObserver = () => { };\n if (o.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o, {\n win: currentWindow,\n });\n if (o.collectFonts) {\n fontObserver = initFontObserver(o);\n }\n }\n const selectionObserver = initSelectionObserver(o);\n const customElementObserver = initCustomElementObserver(o);\n const pluginHandlers = [];\n for (const plugin of o.plugins) {\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n _optionalChain$2([mutationObserver, 'optionalAccess', _22 => _22.disconnect, 'call', _23 => _23()]);\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== 'undefined' &&\n window[prop].prototype &&\n 'insertRule' in window[prop].prototype &&\n 'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n this.generateIdFn = generateIdFn;\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== 'number')\n return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId)\n return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\n\nfunction _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nclass IframeManagerNoop {\n constructor() {\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n }\n addIframe() {\n }\n addLoadListener() {\n }\n attachIframe() {\n }\n}\nclass IframeManager {\n constructor(options) {\n this.iframes = new WeakMap();\n this.crossOriginIframeMap = new WeakMap();\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n });\n _optionalChain$1([this, 'access', _ => _.loadListener, 'optionalCall', _2 => _2(iframeEl)]);\n if (iframeEl.contentDocument &&\n iframeEl.contentDocument.adoptedStyleSheets &&\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow)\n return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl)\n return;\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent)\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n }\n transformCrossOriginEvent(iframeEl, e) {\n switch (e.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e.data.node, iframeEl);\n const rootId = e.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e.data.node, rootId);\n return {\n timestamp: e.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e.data.node,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n },\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e;\n }\n case EventType.Custom: {\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n return e;\n }\n case EventType.IncrementalSnapshot: {\n switch (e.data.source) {\n case IncrementalSource.Mutation: {\n e.data.adds.forEach((n) => {\n this.replaceIds(n, iframeEl, [\n 'parentId',\n 'nextId',\n 'previousId',\n ]);\n this.replaceIdOnNode(n.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n.node, rootId);\n });\n e.data.removes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\n });\n e.data.attributes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n e.data.texts.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e.data, iframeEl, ['id']);\n return e;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n return e;\n }\n case IncrementalSource.Font: {\n return e;\n }\n case IncrementalSource.Selection: {\n e.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, ['start', 'end']);\n });\n return e;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n _optionalChain$1([e, 'access', _3 => _3.data, 'access', _4 => _4.styles, 'optionalAccess', _5 => _5.forEach, 'call', _6 => _6((style) => {\n this.replaceStyleIds(style, iframeEl, ['styleId']);\n })]);\n return e;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n }\n else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node, iframeEl) {\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node, rootId) {\n if (node.type !== NodeType$1.Document && !node.rootId)\n node.rootId = rootId;\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\n\nclass ShadowDomManagerNoop {\n init() {\n }\n addShadowRoot() {\n }\n observeAttachShadow() {\n }\n reset() {\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n this.shadowDoms = new WeakSet();\n this.restoreHandlers = [];\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot, doc) {\n if (!isNativeShadowDom(shadowRoot))\n return;\n if (this.shadowDoms.has(shadowRoot))\n return;\n this.shadowDoms.add(shadowRoot);\n this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);\n const observer = initMutationObserver({\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this,\n }, shadowRoot);\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n doc: shadowRoot,\n mirror: this.mirror,\n }));\n setTimeout$1(() => {\n if (shadowRoot.adoptedStyleSheets &&\n shadowRoot.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager,\n }, shadowRoot));\n }, 0);\n }\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n }\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n return function (option) {\n const shadowRoot = original.call(this, option);\n if (this.shadowRoot && inDom(this))\n manager.addShadowRoot(this.shadowRoot, doc);\n return shadowRoot;\n };\n }));\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n }\n catch (e) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = new WeakSet();\n this.bypassOptions.canvasManager.resetShadowRoots();\n }\n}\n\nclass CanvasManagerNoop {\n reset() {\n }\n freeze() {\n }\n unfreeze() {\n }\n lock() {\n }\n unlock() {\n }\n snapshot() {\n }\n addWindow() {\n }\n addShadowRoot() {\n }\n resetShadowRoots() {\n }\n}\n\nclass StylesheetManager {\n constructor(options) {\n this.trackedLinkElements = new WeakSet();\n this.styleMirror = new StyleSheetMirror();\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if ('_cssText' in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn\n .attributes,\n },\n ],\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl))\n return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0)\n return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: [],\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n rule: stringifyRule(r),\n index,\n })),\n });\n }\n else\n styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0)\n adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = new WeakSet();\n }\n trackStylesheetInLinkElement(linkEl) {\n }\n}\n\nclass ProcessedNodeManager {\n constructor() {\n this.nodeMap = new WeakMap();\n this.loop = true;\n this.periodicallyClear();\n }\n periodicallyClear() {\n onRequestAnimationFrame(() => {\n this.clear();\n if (this.loop)\n this.periodicallyClear();\n });\n }\n inOtherBuffer(node, thisBuffer) {\n const buffers = this.nodeMap.get(node);\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n }\n add(node, buffer) {\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n }\n clear() {\n this.nodeMap = new WeakMap();\n }\n destroy() {\n this.loop = false;\n }\n}\n\nlet wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n if (Array.from([1], (x) => x * 2)[0] !== 2) {\n const cleanFrame = document.createElement('iframe');\n document.body.appendChild(cleanFrame);\n Array.from = _optionalChain([cleanFrame, 'access', _ => _.contentWindow, 'optionalAccess', _2 => _2.Array, 'access', _3 => _3.from]) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n}\ncatch (err) {\n console.debug('Unable to override Array.from', err);\n}\nconst mirror = createMirror();\nfunction record(options = {}) {\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n ? options.recordAfter\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n registerErrorHandler(errorHandler);\n const inEmittingFrame = recordCrossOriginIframes\n ? window.parent === window\n : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n }\n catch (e) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error('emit function is required');\n }\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n radio: true,\n checkbox: true,\n }\n : _maskInputOptions !== undefined\n ? _maskInputOptions\n : {};\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n headMetaAuthorship: _slimDOMOptions === 'all',\n headMetaDescKeywords: _slimDOMOptions === 'all',\n }\n : _slimDOMOptions\n ? _slimDOMOptions\n : {};\n polyfill();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e) => {\n for (const plugin of plugins || []) {\n if (plugin.eventProcessor) {\n e = plugin.eventProcessor(e);\n }\n }\n if (packFn &&\n !passEmitsToParent) {\n e = packFn(e);\n }\n return e;\n };\n wrappedEmit = (r, isCheckout) => {\n const e = r;\n e.timestamp = nowTimestamp();\n if (_optionalChain([mutationBuffers, 'access', _4 => _4[0], 'optionalAccess', _5 => _5.isFrozen, 'call', _6 => _6()]) &&\n e.type !== EventType.FullSnapshot &&\n !(e.type === EventType.IncrementalSnapshot &&\n e.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n _optionalChain([emit, 'optionalCall', _7 => _7(eventProcessor(e), isCheckout)]);\n }\n else if (passEmitsToParent) {\n const message = {\n type: 'rrweb',\n event: eventProcessor(e),\n origin: window.location.origin,\n isCheckout,\n };\n window.parent.postMessage(message, '*');\n }\n if (e.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e;\n incrementalSnapshotCount = 0;\n }\n else if (e.type === EventType.IncrementalSnapshot) {\n if (e.data.source === IncrementalSource.Mutation &&\n e.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms &&\n lastFullSnapshotEvent &&\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m,\n },\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p,\n },\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n });\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a,\n },\n });\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n });\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n ? new IframeManagerNoop()\n : new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit,\n });\n for (const plugin of plugins || []) {\n if (plugin.getMirror)\n plugin.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n const canvasManager = _getCanvasManager(getCanvasManager, {\n mirror,\n win: window,\n mutationCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n }),\n recordCanvas,\n blockClass,\n blockSelector,\n unblockSelector,\n maxCanvasSize,\n sampling: sampling['canvas'],\n dataURLOptions,\n errorHandler,\n });\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n __RRWEB_EXCLUDE_SHADOW_DOM__\n ? new ShadowDomManagerNoop()\n : new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n onMutation,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager,\n },\n mirror,\n });\n const takeFullSnapshot = (isCheckout = false) => {\n if (!recordDOM) {\n return;\n }\n wrappedEmit({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight(),\n },\n }, isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n) => {\n if (isSerializedIframe(n, mirror)) {\n iframeManager.addIframe(n);\n }\n if (isSerializedStylesheet(n, mirror)) {\n stylesheetManager.trackLinkElement(n);\n }\n if (hasShadowRoot(n)) {\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n if (iframe.contentWindow) {\n canvasManager.addWindow(iframe.contentWindow);\n }\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn,\n });\n if (!node) {\n return console.warn('Failed to snapshot the document');\n }\n wrappedEmit({\n type: EventType.FullSnapshot,\n data: {\n node,\n initialOffset: getWindowScroll(window),\n },\n });\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n _takeFullSnapshot = takeFullSnapshot;\n try {\n const handlers = [];\n const observe = (doc) => {\n return callbackWrapper(initObservers)({\n onMutation,\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions,\n },\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d,\n },\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d,\n },\n }),\n inputCb: (v) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v,\n },\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p,\n },\n }),\n styleSheetRuleCb: (r) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r,\n },\n }),\n styleDeclarationCb: (r) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r,\n },\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p,\n },\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p,\n },\n });\n },\n customElementCb: (c) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c,\n },\n });\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordDOM,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n unblockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: _optionalChain([plugins\n, 'optionalAccess', _8 => _8.filter, 'call', _9 => _9((p) => p.observer)\n, 'optionalAccess', _10 => _10.map, 'call', _11 => _11((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload,\n },\n }),\n }))]) || [],\n }, {});\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n }\n catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot();\n handlers.push(observe(document));\n };\n if (document.readyState === 'interactive' ||\n document.readyState === 'complete') {\n init();\n }\n else {\n handlers.push(on('DOMContentLoaded', () => {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {},\n });\n if (recordAfter === 'DOMContentLoaded')\n init();\n }));\n handlers.push(on('load', () => {\n wrappedEmit({\n type: EventType.Load,\n data: {},\n });\n if (recordAfter === 'load')\n init();\n }, window));\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n _takeFullSnapshot = undefined;\n unregisterErrorHandler();\n };\n }\n catch (error) {\n console.warn(error);\n }\n}\nfunction takeFullSnapshot(isCheckout) {\n if (!_takeFullSnapshot) {\n throw new Error('please take full snapshot after start recording');\n }\n _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n try {\n return getCanvasManagerFn\n ? getCanvasManagerFn(options)\n : new CanvasManagerNoop();\n }\n catch (e2) {\n console.warn('Unable to initialize CanvasManager');\n return new CanvasManagerNoop();\n }\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst CONSOLE_LEVELS = ['info', 'warn', 'error', 'log'] ;\nconst PREFIX = '[Replay] ';\n\nfunction _addBreadcrumb(message, level = 'info') {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level,\n message: `${PREFIX}${message}`,\n },\n { level },\n );\n}\n\nfunction makeReplayLogger() {\n let _capture = false;\n let _trace = false;\n\n const _logger = {\n exception: () => undefined,\n infoTick: () => undefined,\n setConfig: (opts) => {\n _capture = opts.captureExceptions;\n _trace = opts.traceInternals;\n },\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n _logger[name] = (...args) => {\n logger$1[name](PREFIX, ...args);\n if (_trace) {\n _addBreadcrumb(args[0]);\n }\n };\n });\n\n _logger.exception = (error, ...message) => {\n if (_logger.error) {\n _logger.error(...message);\n }\n\n logger$1.error(PREFIX, error);\n\n if (_capture) {\n captureException(error);\n } else if (_trace) {\n // No need for a breadcrumb is `_capture` is enabled since it should be\n // captured as an exception\n _addBreadcrumb(error);\n }\n };\n\n _logger.infoTick = (...args) => {\n logger$1.info(PREFIX, ...args);\n if (_trace) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => _addBreadcrumb(args[0]), 0);\n }\n };\n } else {\n CONSOLE_LEVELS.forEach(name => {\n _logger[name] = () => undefined;\n });\n }\n\n return _logger ;\n}\n\nconst logger = makeReplayLogger();\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n replay.triggerUserActivity();\n } else {\n replay.checkAndHandleExpiredSession();\n }\n\n replay.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n // but maybe we should just keep them as milliseconds\n timestamp: (breadcrumb.timestamp || 0) * 1000,\n data: {\n tag: 'breadcrumb',\n // normalize to max. 10 depth and 1_000 properties per object\n payload: normalize(breadcrumb, 10, 1000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in ,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n const target = getTargetNode(event);\n\n if (!target || !(target instanceof Element)) {\n return target;\n }\n\n return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n if (isEventWithTarget(event)) {\n return event.target ;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event) {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n // Ensure to only register this once\n if (!handlers) {\n handlers = [];\n monkeyPatchWindowOpen();\n }\n\n handlers.push(cb);\n\n return () => {\n const pos = handlers ? handlers.indexOf(cb) : -1;\n if (pos > -1) {\n (handlers ).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen() {\n fill(WINDOW, 'open', function (originalWindowOpen) {\n return function (...args) {\n if (handlers) {\n try {\n handlers.forEach(handler => handler());\n } catch (e) {\n // ignore errors in here\n }\n }\n\n return originalWindowOpen.apply(WINDOW, args);\n };\n });\n}\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector {\n // protected for testing\n\n constructor(\n replay,\n slowClickConfig,\n // Just for easier testing\n _addBreadcrumbEvent = addBreadcrumbEvent,\n ) {\n this._lastMutation = 0;\n this._lastScroll = 0;\n this._clicks = [];\n\n // We want everything in s, but options are in ms\n this._timeout = slowClickConfig.timeout / 1000;\n this._threshold = slowClickConfig.threshold / 1000;\n this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n this._replay = replay;\n this._ignoreSelector = slowClickConfig.ignoreSelector;\n this._addBreadcrumbEvent = _addBreadcrumbEvent;\n }\n\n /** Register click detection handlers on mutation or scroll. */\n addListeners() {\n const cleanupWindowOpen = onWindowOpen(() => {\n // Treat window.open as mutation\n this._lastMutation = nowInSeconds();\n });\n\n this._teardown = () => {\n cleanupWindowOpen();\n\n this._clicks = [];\n this._lastMutation = 0;\n this._lastScroll = 0;\n };\n }\n\n /** Clean up listeners. */\n removeListeners() {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n handleClick(breadcrumb, node) {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick = {\n timestamp: timestampToS(breadcrumb.timestamp),\n clickBreadcrumb: breadcrumb,\n // Set this to 0 so we know it originates from the click breadcrumb\n clickCount: 0,\n node,\n };\n\n // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n if (\n this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n ) {\n return;\n }\n\n this._clicks.push(newClick);\n\n // If this is the first new click, set a timeout to check for multi clicks\n if (this._clicks.length === 1) {\n this._scheduleCheckClicks();\n }\n }\n\n /** @inheritDoc */\n registerMutation(timestamp = Date.now()) {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerScroll(timestamp = Date.now()) {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerClick(element) {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node );\n }\n\n /** Count multiple clicks on elements. */\n _handleMultiClick(node) {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n _getClicks(node) {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n _checkClicks() {\n const timedOutClicks = [];\n\n const now = nowInSeconds();\n\n this._clicks.forEach(click => {\n if (!click.mutationAfter && this._lastMutation) {\n click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n }\n if (!click.scrollAfter && this._lastScroll) {\n click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n }\n\n // All of these are in seconds!\n if (click.timestamp + this._timeout <= now) {\n timedOutClicks.push(click);\n }\n });\n\n // Remove \"old\" clicks\n for (const click of timedOutClicks) {\n const pos = this._clicks.indexOf(click);\n\n if (pos > -1) {\n this._generateBreadcrumbs(click);\n this._clicks.splice(pos, 1);\n }\n }\n\n // Trigger new check, unless no clicks left\n if (this._clicks.length) {\n this._scheduleCheckClicks();\n }\n }\n\n /** Generate matching breadcrumb(s) for the click. */\n _generateBreadcrumbs(click) {\n const replay = this._replay;\n const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n const isSlowClick = !hadScroll && !hadMutation;\n const { clickCount, clickBreadcrumb } = click;\n\n // Slow click\n if (isSlowClick) {\n // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n // If not, it means we just timed out without scroll & mutation\n const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.slowClickDetected',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n timeAfterClickMs,\n endReason,\n // If clickCount === 0, it means multiClick was not correctly captured here\n // - we still want to send 1 in this case\n clickCount: clickCount || 1,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n return;\n }\n\n // Multi click\n if (clickCount > 1) {\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.multiClick',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n clickCount,\n metric: true,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n }\n }\n\n /** Schedule to check current clicks. */\n _scheduleCheckClicks() {\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n\n this._checkClickTimeout = setTimeout$3(() => this._checkClicks(), 1000);\n }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n return true;\n }\n\n // If tag, we only want to consider input[type='submit'] & input[type='button']\n if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n return true;\n }\n\n // If tag, detect special variants that may not lead to an action\n // If target !== _self, we may open the link somewhere else, which would lead to no action\n // Also, when downloading a file, we may not leave the page, but still not trigger an action\n if (\n node.tagName === 'A' &&\n (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n ) {\n return true;\n }\n\n if (ignoreSelector && node.matches(ignoreSelector)) {\n return true;\n }\n\n return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n try {\n // note: We only consider incremental snapshots here\n // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n if (!isIncrementalEvent(event)) {\n return;\n }\n\n const { source } = event.data;\n if (source === IncrementalSource.Mutation) {\n clickDetector.registerMutation(event.timestamp);\n }\n\n if (source === IncrementalSource.Scroll) {\n clickDetector.registerScroll(event.timestamp);\n }\n\n if (isIncrementalMouseInteraction(event)) {\n const { type, id } = event.data;\n const node = record.mirror.getNode(id);\n\n if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n clickDetector.registerClick(node);\n }\n }\n } catch (e) {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event) {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event,\n) {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n breadcrumb,\n) {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n\nvar NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n 'id',\n 'class',\n 'aria-label',\n 'role',\n 'name',\n 'alt',\n 'title',\n 'data-test-id',\n 'data-testid',\n 'disabled',\n 'aria-disabled',\n 'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n const obj = {};\n if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n attributes['data-sentry-component'] = attributes['data-sentry-element'];\n }\n for (const key in attributes) {\n if (ATTRIBUTES_TO_RECORD.has(key)) {\n let normalizedKey = key;\n\n if (key === 'data-testid' || key === 'data-test-id') {\n normalizedKey = 'testId';\n }\n\n obj[normalizedKey] = attributes[key];\n }\n }\n\n return obj;\n}\n\nconst handleDomListener = (\n replay,\n) => {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleDom(handlerData);\n\n if (!result) {\n return;\n }\n\n const isClick = handlerData.name === 'click';\n const event = isClick ? (handlerData.event ) : undefined;\n // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n if (\n isClick &&\n replay.clickDetector &&\n event &&\n event.target &&\n !event.altKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n handleClick(\n replay.clickDetector,\n result ,\n getClickTargetNode(handlerData.event ) ,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n const nodeId = record.mirror.getId(target);\n const node = nodeId && record.mirror.getNode(nodeId);\n const meta = node && record.mirror.getMeta(node);\n const element = meta && isElement(meta) ? meta : null;\n\n return {\n message,\n data: element\n ? {\n nodeId,\n node: {\n id: nodeId,\n tagName: element.tagName,\n textContent: Array.from(element.childNodes)\n .map((node) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text ).trim())\n .join(''),\n attributes: getAttributesToRecord(element.attributes),\n },\n }\n : {},\n };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n const { target, message } = getDomTarget(handlerData);\n\n return createBreadcrumb({\n category: `ui.${handlerData.name}`,\n ...getBaseDomBreadcrumb(target, message),\n });\n}\n\nfunction getDomTarget(handlerData) {\n const isClick = handlerData.name === 'click';\n\n let message;\n let target = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n } catch (e) {\n message = '';\n }\n\n return { target, message };\n}\n\nfunction isElement(node) {\n return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n if (!replay.isEnabled()) {\n return;\n }\n\n // Update user activity, but do not restart recording as it can create\n // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n // session with a single \"keydown\" breadcrumb is created)\n replay.updateUserActivity();\n\n const breadcrumb = getKeyboardBreadcrumb(event);\n\n if (!breadcrumb) {\n return;\n }\n\n addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target ) || !key) {\n return null;\n }\n\n // Note: We do not consider shift here, as that means \"uppercase\"\n const hasModifierKey = metaKey || ctrlKey || altKey;\n const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n // Do not capture breadcrumb if only a word key is pressed\n // This could leak e.g. user input\n if (!hasModifierKey && isCharacterKey) {\n return null;\n }\n\n const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n return createBreadcrumb({\n category: 'ui.keyDown',\n message,\n data: {\n ...baseBreadcrumb.data,\n metaKey,\n shiftKey,\n ctrlKey,\n altKey,\n key,\n },\n });\n}\n\nfunction isInputElement(target) {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n resource: createResourceEntry,\n paint: createPaintEntry,\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n navigation: createNavigationEntry,\n};\n\n/**\n * Handler creater for web vitals\n */\nfunction webVitalHandler(\n getter,\n replay,\n) {\n return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\n}\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n entries,\n) {\n return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n const entryType = ENTRY_TYPES[entry.entryType];\n if (!entryType) {\n return null;\n }\n\n return entryType(entry);\n}\n\nfunction getAbsoluteTime(time) {\n // browserPerformanceTimeOrigin can be undefined if `performance` or\n // `performance.now` doesn't exist, but this is already checked by this integration\n return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n const { duration, entryType, name, startTime } = entry;\n\n const start = getAbsoluteTime(startTime);\n return {\n type: entryType,\n name,\n start,\n end: start + duration,\n data: undefined,\n };\n}\n\nfunction createNavigationEntry(entry) {\n const {\n entryType,\n name,\n decodedBodySize,\n duration,\n domComplete,\n encodedBodySize,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n domInteractive,\n loadEventStart,\n loadEventEnd,\n redirectCount,\n startTime,\n transferSize,\n type,\n } = entry;\n\n // Ignore entries with no duration, they do not seem to be useful and cause dupes\n if (duration === 0) {\n return null;\n }\n\n return {\n type: `${entryType}.${type}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(domComplete),\n name,\n data: {\n size: transferSize,\n decodedBodySize,\n encodedBodySize,\n duration,\n domInteractive,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n loadEventStart,\n loadEventEnd,\n domComplete,\n redirectCount,\n },\n };\n}\n\nfunction createResourceEntry(\n entry,\n) {\n const {\n entryType,\n initiatorType,\n name,\n responseEnd,\n startTime,\n decodedBodySize,\n encodedBodySize,\n responseStatus,\n transferSize,\n } = entry;\n\n // Core SDK handles these\n if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n return null;\n }\n\n return {\n type: `${entryType}.${initiatorType}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(responseEnd),\n name,\n data: {\n size: transferSize,\n statusCode: responseStatus,\n decodedBodySize,\n encodedBodySize,\n },\n };\n}\n\n/**\n * Add a LCP event to the replay based on a LCP metric.\n */\nfunction getLargestContentfulPaint(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.element ? [lastEntry.element] : undefined;\n return getWebVital(metric, 'largest-contentful-paint', node);\n}\n\n/**\n * Add a CLS event to the replay based on a CLS metric.\n */\nfunction getCumulativeLayoutShift(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1]\n\n;\n const nodes = [];\n if (lastEntry && lastEntry.sources) {\n for (const source of lastEntry.sources) {\n if (source.node) {\n nodes.push(source.node);\n }\n }\n }\n return getWebVital(metric, 'cumulative-layout-shift', nodes);\n}\n\n/**\n * Add a FID event to the replay based on a FID metric.\n */\nfunction getFirstInputDelay(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n return getWebVital(metric, 'first-input-delay', node);\n}\n\n/**\n * Add an INP event to the replay based on an INP metric.\n */\nfunction getInteractionToNextPaint(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n return getWebVital(metric, 'interaction-to-next-paint', node);\n}\n\n/**\n * Add an web vital event to the replay based on the web vital metric.\n */\nfunction getWebVital(metric, name, nodes) {\n const value = metric.value;\n const rating = metric.rating;\n\n const end = getAbsoluteTime(value);\n\n const data = {\n type: 'web-vital',\n name,\n start: end,\n end,\n data: {\n value,\n size: value,\n rating,\n nodeIds: nodes ? nodes.map(node => record.mirror.getId(node)) : undefined,\n },\n };\n\n return data;\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n function addPerformanceEntry(entry) {\n // It is possible for entries to come up multiple times\n if (!replay.performanceEntries.includes(entry)) {\n replay.performanceEntries.push(entry);\n }\n }\n\n function onEntries({ entries }) {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks = [];\n\n (['navigation', 'paint', 'resource'] ).forEach(type => {\n clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n });\n\n clearCallbacks.push(\n addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)),\n addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)),\n addFidInstrumentationHandler(webVitalHandler(getFirstInputDelay, replay)),\n addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)),\n );\n\n // A callback to cleanup all handlers\n return () => {\n clearCallbacks.forEach(clearCallback => clearCallback());\n };\n}\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}},L=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},O=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&j(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(O(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J=\"undefined\"!=typeof TextEncoder&&new TextEncoder,K=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(r){for(var e=new t(n.length),i=0;i>1)),o=0,f=function(t){s[o++]=t};for(i=0;is.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&\"function\"==typeof V[n])try{const t=V[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray {\n /** All the events that are buffered to be sent. */\n\n /** @inheritdoc */\n\n constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n get type() {\n return 'sync';\n }\n\n /** @inheritdoc */\n destroy() {\n this.events = [];\n }\n\n /** @inheritdoc */\n async addEvent(event) {\n const eventSize = JSON.stringify(event).length;\n this._totalSize += eventSize;\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n throw new EventBufferSizeExceededError();\n }\n\n this.events.push(event);\n }\n\n /** @inheritdoc */\n finish() {\n return new Promise(resolve => {\n // Make a copy of the events array reference and immediately clear the\n // events member so that we do not lose new events while uploading\n // attachment.\n const eventsRet = this.events;\n this.clear();\n resolve(JSON.stringify(eventsRet));\n });\n }\n\n /** @inheritdoc */\n clear() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n if (!timestamp) {\n return null;\n }\n\n return timestampToMs(timestamp);\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n constructor(worker) {\n this._worker = worker;\n this._id = 0;\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n // Ensure we only check once\n if (this._ensureReadyPromise) {\n return this._ensureReadyPromise;\n }\n\n this._ensureReadyPromise = new Promise((resolve, reject) => {\n this._worker.addEventListener(\n 'message',\n ({ data }) => {\n if ((data ).success) {\n resolve();\n } else {\n reject();\n }\n },\n { once: true },\n );\n\n this._worker.addEventListener(\n 'error',\n error => {\n reject(error);\n },\n { once: true },\n );\n });\n\n return this._ensureReadyPromise;\n }\n\n /**\n * Destroy the worker.\n */\n destroy() {\n DEBUG_BUILD && logger.info('Destroying compression worker');\n this._worker.terminate();\n }\n\n /**\n * Post message to worker and wait for response before resolving promise.\n */\n postMessage(method, arg) {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }) => {\n const response = data ;\n if (response.method !== method) {\n return;\n }\n\n // There can be multiple listeners for a single method, the id ensures\n // that the response matches the caller.\n if (response.id !== id) {\n return;\n }\n\n // At this point, we'll always want to remove listener regardless of result status\n this._worker.removeEventListener('message', listener);\n\n if (!response.success) {\n // TODO: Do some error handling, not sure what\n DEBUG_BUILD && logger.error('Error in compression worker: ', response.response);\n\n reject(new Error('Error in compression worker'));\n return;\n }\n\n resolve(response.response );\n };\n\n // Note: we can't use `once` option because it's possible it needs to\n // listen to multiple messages\n this._worker.addEventListener('message', listener);\n this._worker.postMessage({ id, method, arg });\n });\n }\n\n /** Get the current ID and increment it for the next call. */\n _getAndIncrementId() {\n return this._id++;\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker {\n /** @inheritdoc */\n\n constructor(worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n get type() {\n return 'worker';\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n destroy() {\n this._worker.destroy();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfuly received and processed by worker.\n */\n addEvent(event) {\n const timestamp = timestampToMs(event.timestamp);\n if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n this._earliestTimestamp = timestamp;\n }\n\n const data = JSON.stringify(event);\n this._totalSize += data.length;\n\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n return Promise.reject(new EventBufferSizeExceededError());\n }\n\n return this._sendEventToWorker(data);\n }\n\n /**\n * Finish the event buffer and return the compressed data.\n */\n finish() {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n clear() {\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n\n // We do not wait on this, as we assume the order of messages is consistent for the worker\n this._worker.postMessage('clear').then(null, e => {\n DEBUG_BUILD && logger.exception(e, 'Sending \"clear\" message to worker failed', e);\n });\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n _sendEventToWorker(data) {\n return this._worker.postMessage('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n async _finishRequest() {\n const response = await this._worker.postMessage('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy {\n\n constructor(worker) {\n this._fallback = new EventBufferArray();\n this._compression = new EventBufferCompressionWorker(worker);\n this._used = this._fallback;\n\n this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n }\n\n /** @inheritdoc */\n get type() {\n return this._used.type;\n }\n\n /** @inheritDoc */\n get hasEvents() {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n get hasCheckout() {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n set hasCheckout(value) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritDoc */\n destroy() {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n clear() {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._used.getEarliestTimestamp();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully added.\n */\n addEvent(event) {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n async finish() {\n // Ensure the worker is loaded, so the sent event is compressed\n await this.ensureWorkerIsLoaded();\n\n return this._used.finish();\n }\n\n /** Ensure the worker has loaded. */\n ensureWorkerIsLoaded() {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n async _ensureWorkerIsLoaded() {\n try {\n await this._compression.ensureReady();\n } catch (error) {\n // If the worker fails to load, we fall back to the simple buffer.\n // Nothing more to do from our side here\n DEBUG_BUILD && logger.exception(error, 'Failed to load the compression worker, falling back to simple buffer');\n return;\n }\n\n // Now we need to switch over the array buffer to the compression worker\n await this._switchToCompressionWorker();\n }\n\n /** Switch the used buffer to the compression worker. */\n async _switchToCompressionWorker() {\n const { events, hasCheckout } = this._fallback;\n\n const addEventPromises = [];\n for (const event of events) {\n addEventPromises.push(this._compression.addEvent(event));\n }\n\n this._compression.hasCheckout = hasCheckout;\n\n // We switch over to the new buffer immediately - any further events will be added\n // after the previously buffered ones\n this._used = this._compression;\n\n // Wait for original events to be re-added before resolving\n try {\n await Promise.all(addEventPromises);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to add events when switching buffers.');\n }\n }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}) {\n if (\n useCompression &&\n // eslint-disable-next-line no-restricted-globals\n window.Worker\n ) {\n const worker = _loadWorker(customWorkerUrl);\n\n if (worker) {\n return worker;\n }\n }\n\n DEBUG_BUILD && logger.info('Using simple buffer');\n return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n try {\n const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n if (!workerUrl) {\n return;\n }\n\n DEBUG_BUILD && logger.info(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to create compression worker');\n // Fall back to use simple event buffer array\n }\n}\n\nfunction _getWorkerUrl() {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return e();\n }\n\n return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n if (sampleRate === undefined) {\n return false;\n }\n\n // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n return Math.random() < sampleRate;\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n const now = Date.now();\n const id = session.id || uuid4();\n // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n const started = session.started || now;\n const lastActivity = session.lastActivity || now;\n const segmentId = session.segmentId || 0;\n const sampled = session.sampled;\n const previousSessionId = session.previousSessionId;\n\n return {\n id,\n started,\n lastActivity,\n segmentId,\n sampled,\n previousSessionId,\n };\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n { sessionSampleRate, allowBuffering, stickySession = false },\n { previousSessionId } = {},\n) {\n const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n const session = makeSession({\n sampled,\n previousSessionId,\n });\n\n if (stickySession) {\n saveSession(session);\n }\n\n return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession() {\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n // This can throw if cookies are disabled\n const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n if (!sessionStringFromStorage) {\n return null;\n }\n\n const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n DEBUG_BUILD && logger.infoTick('Loading existing session');\n\n return makeSession(sessionObj);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n initialTime,\n expiry,\n targetTime = +new Date(),\n) {\n // Always expired if < 0\n if (initialTime === null || expiry === undefined || expiry < 0) {\n return true;\n }\n\n // Never expires if == 0\n if (expiry === 0) {\n return false;\n }\n\n return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n },\n) {\n return (\n // First, check that maximum session length has not been exceeded\n isExpired(session.started, maxReplayDuration, targetTime) ||\n // check that the idle timeout has not been exceeded (i.e. user has\n // performed an action within the last `sessionIdleExpire` ms)\n isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n session,\n { sessionIdleExpire, maxReplayDuration },\n) {\n // If not expired, all good, just keep the session\n if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n return false;\n }\n\n // If we are buffering & haven't ever flushed yet, always continue\n if (session.sampled === 'buffer' && session.segmentId === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n {\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }\n\n,\n sessionOptions,\n) {\n const existingSession = sessionOptions.stickySession && fetchSession();\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n DEBUG_BUILD && logger.infoTick('Creating new session');\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n DEBUG_BUILD && logger.infoTick('Session in sessionStorage is expired, creating new one...');\n return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n if (!shouldAddEvent(replay, event)) {\n return false;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n _addEvent(replay, event, isCheckout);\n\n return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!shouldAddEvent(replay, event)) {\n return Promise.resolve(null);\n }\n\n return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!replay.eventBuffer) {\n return null;\n }\n\n try {\n if (isCheckout && replay.recordingMode === 'buffer') {\n replay.eventBuffer.clear();\n }\n\n if (isCheckout) {\n replay.eventBuffer.hasCheckout = true;\n }\n\n const replayOptions = replay.getOptions();\n\n const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n if (!eventAfterPossibleCallback) {\n return;\n }\n\n return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n replay.handleException(error);\n\n await replay.stop({ reason });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('internal_sdk_error', 'replay');\n }\n }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n return false;\n }\n\n const timestampInMs = timestampToMs(event.timestamp);\n\n // Throw out events that happen more than 5 minutes ago. This can happen if\n // page has been left open and idle for a long period of time and user\n // comes back to trigger a new session. The performance entries rely on\n // `performance.timeOrigin`, which is when the page first opened.\n if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n return false;\n }\n\n // Throw out events that are +60min from the initial timestamp\n if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n DEBUG_BUILD &&\n logger.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\n return false;\n }\n\n return true;\n}\n\nfunction maybeApplyCallback(\n event,\n callback,\n) {\n try {\n if (typeof callback === 'function' && isCustomEvent(event)) {\n return callback(event);\n }\n } catch (error) {\n DEBUG_BUILD &&\n logger.exception(error, 'An error occured in the `beforeAddRecordingEvent` callback, skipping the event...');\n return null;\n }\n\n return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n return (event, sendResponse) => {\n if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n return;\n }\n\n const statusCode = sendResponse && sendResponse.statusCode;\n\n // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n // If we do use the base transport, we skip if we encountered an non-OK status code\n if (!statusCode || statusCode < 200 || statusCode >= 300) {\n return;\n }\n\n if (isTransactionEvent(event)) {\n handleTransactionEvent(replay, event);\n return;\n }\n\n handleErrorEvent(replay, event);\n };\n}\n\nfunction handleTransactionEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Collect traceIds in _context regardless of `recordingMode`\n // In error mode, _context gets cleared on every checkout\n // We limit to max. 100 transactions linked\n if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n replayContext.traceIds.add(event.contexts.trace.trace_id );\n }\n}\n\nfunction handleErrorEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Add error to list of errorIds of replay. This is ok to do even if not\n // sampled because context will get reset at next checkout.\n // XXX: There is also a race condition where it's possible to capture an\n // error to Sentry before Replay SDK has loaded, but response returns after\n // it was loaded, and this gets called.\n // We limit to max. 100 errors linked\n if (event.event_id && replayContext.errorIds.size < 100) {\n replayContext.errorIds.add(event.event_id);\n }\n\n // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n // Need to be very careful that this does not cause an infinite loop\n if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n return;\n }\n\n const { beforeErrorSampling } = replay.getOptions();\n if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n return;\n }\n\n setTimeout$3(() => {\n // Capture current event buffer as new replay\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.sendBufferedReplayOrFlush();\n });\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n return (event) => {\n if (!replay.isEnabled() || !isErrorEvent(event)) {\n return;\n }\n\n handleHydrationError(replay, event);\n };\n}\n\nfunction handleHydrationError(replay, event) {\n const exceptionValue =\n event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].value;\n if (typeof exceptionValue !== 'string') {\n return;\n }\n\n if (\n // Only matches errors in production builds of react-dom\n // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n exceptionValue.match(\n /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n ) ||\n // Development builds of react-dom\n // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n ) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.hydrate-error',\n data: {\n url: getLocationHref(),\n },\n });\n addBreadcrumbEvent(replay, breadcrumb);\n }\n}\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nfunction handleBreadcrumbs(replay) {\n const client = getClient();\n\n if (!client) {\n return;\n }\n\n client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay, breadcrumb) {\n if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n return;\n }\n\n const result = normalizeBreadcrumb(breadcrumb);\n if (result) {\n addBreadcrumbEvent(replay, result);\n }\n}\n\n/** Exported only for tests. */\nfunction normalizeBreadcrumb(breadcrumb) {\n if (\n !isBreadcrumbWithCategory(breadcrumb) ||\n [\n // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n 'fetch',\n 'xhr',\n // These two are breadcrumbs for emitted sentry events, we don't care about them\n 'sentry.event',\n 'sentry.transaction',\n ].includes(breadcrumb.category) ||\n // We capture UI breadcrumbs separately\n breadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (breadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(breadcrumb);\n }\n\n return createBreadcrumb(breadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n breadcrumb,\n) {\n const args = breadcrumb.data && breadcrumb.data.arguments;\n\n if (!Array.isArray(args) || args.length === 0) {\n return createBreadcrumb(breadcrumb);\n }\n\n let isTruncated = false;\n\n // Avoid giant args captures\n const normalizedArgs = args.map(arg => {\n if (!arg) {\n return arg;\n }\n if (typeof arg === 'string') {\n if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n\n return arg;\n }\n if (typeof arg === 'object') {\n try {\n const normalizedArg = normalize(arg, 7);\n const stringified = JSON.stringify(normalizedArg);\n if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n // We use the pretty printed JSON string here as a base\n return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n return normalizedArg;\n } catch (e) {\n // fall back to default\n }\n }\n\n return arg;\n });\n\n return createBreadcrumb({\n ...breadcrumb,\n data: {\n ...breadcrumb.data,\n arguments: normalizedArgs,\n ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n },\n });\n}\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n return !!breadcrumb.category;\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n return false;\n }\n\n // @ts-expect-error this may be set by rrweb when it finds errors\n if (hint.originalException && hint.originalException.__rrweb__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n replay.triggerUserActivity();\n replay.addUpdate(() => {\n if (!event.timestamp) {\n // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n // Return true here so that we don't flush\n return true;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: event.timestamp * 1000,\n data: {\n tag: 'breadcrumb',\n payload: {\n timestamp: event.timestamp,\n type: 'default',\n category: 'sentry.feedback',\n data: {\n feedbackId: event.event_id,\n },\n },\n },\n } );\n\n return false;\n });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n if (replay.recordingMode !== 'buffer') {\n return false;\n }\n\n // ignore this error because otherwise we could loop indefinitely with\n // trying to capture replay and failing\n if (event.message === UNABLE_TO_SEND_REPLAY) {\n return false;\n }\n\n // Require the event to be an error event & to have an exception\n if (!event.exception || event.type) {\n return false;\n }\n\n return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(replay) {\n return Object.assign(\n (event, hint) => {\n // Do nothing if replay has been disabled\n if (!replay.isEnabled()) {\n return event;\n }\n\n if (isReplayEvent(event)) {\n // Replays have separate set of breadcrumbs, do not include breadcrumbs\n // from core SDK\n delete event.breadcrumbs;\n return event;\n }\n\n // We only want to handle errors, transactions, and feedbacks, nothing else\n if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n return event;\n }\n\n // Ensure we do not add replay_id if the session is expired\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (!isSessionActive) {\n return event;\n }\n\n if (isFeedbackEvent(event)) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.flush();\n event.contexts.feedback.replay_id = replay.getSessionId();\n // Add a replay breadcrumb for this piece of feedback\n addFeedbackBreadcrumb(replay, event);\n return event;\n }\n\n // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n DEBUG_BUILD && logger.log('Ignoring error from rrweb internals', event);\n return null;\n }\n\n // When in buffer mode, we decide to sample here.\n // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n // And convert the buffer session to a full session\n const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n // Tag errors if it has been sampled in buffer mode, or if it is session mode\n // Only tag transactions if in session mode\n const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n if (shouldTagReplayId) {\n event.tags = { ...event.tags, replayId: replay.getSessionId() };\n }\n\n return event;\n },\n { id: 'Replay' },\n );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n replay,\n entries,\n) {\n return entries.map(({ type, start, end, name, data }) => {\n const response = replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: start,\n data: {\n tag: 'performanceSpan',\n payload: {\n op: type,\n description: name,\n startTimestamp: start,\n endTimestamp: end,\n data,\n },\n },\n });\n\n // If response is a string, it means its either THROTTLED or SKIPPED\n return typeof response === 'string' ? Promise.resolve(null) : response;\n });\n}\n\nfunction handleHistory(handlerData) {\n const { from, to } = handlerData;\n\n const now = Date.now() / 1000;\n\n return {\n type: 'navigation.push',\n start: now,\n end: now,\n name: to,\n data: {\n previous: from,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleHistory(handlerData);\n\n if (result === null) {\n return;\n }\n\n // Need to collect visited URLs\n replay.getContext().urls.push(result.name);\n replay.triggerUserActivity();\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning false to flush\n return false;\n });\n };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n // If we enabled the `traceInternals` experiment, we want to trace everything\n if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n return false;\n }\n\n return isSentryRequestUrl(url, getClient());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n replay,\n result,\n) {\n if (!replay.isEnabled()) {\n return;\n }\n\n if (result === null) {\n return;\n }\n\n if (shouldFilterRequest(replay, result.name)) {\n return;\n }\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning true will cause `addUpdate` to not flush\n // We do not want network requests to cause a flush. This will prevent\n // recurring/polling requests from keeping the replay session alive.\n return true;\n });\n}\n\n/** Get the size of a body. */\nfunction getBodySize(body) {\n if (!body) {\n return undefined;\n }\n\n const textEncoder = new TextEncoder();\n\n try {\n if (typeof body === 'string') {\n return textEncoder.encode(body).length;\n }\n\n if (body instanceof URLSearchParams) {\n return textEncoder.encode(body.toString()).length;\n }\n\n if (body instanceof FormData) {\n const formDataStr = _serializeFormData(body);\n return textEncoder.encode(formDataStr).length;\n }\n\n if (body instanceof Blob) {\n return body.size;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n // Currently unhandled types: ArrayBufferView, ReadableStream\n } catch (e) {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nfunction parseContentLengthHeader(header) {\n if (!header) {\n return undefined;\n }\n\n const size = parseInt(header, 10);\n return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof URLSearchParams) {\n return [body.toString()];\n }\n\n if (body instanceof FormData) {\n return [_serializeFormData(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n info,\n warning,\n) {\n if (!info) {\n return {\n headers: {},\n size: undefined,\n _meta: {\n warnings: [warning],\n },\n };\n }\n\n const newMeta = { ...info._meta };\n const existingWarnings = newMeta.warnings || [];\n newMeta.warnings = [...existingWarnings, warning];\n\n info._meta = newMeta;\n return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n type,\n data,\n) {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result = {\n type,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: dropUndefinedKeys({\n method,\n statusCode,\n request,\n response,\n }),\n };\n\n return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n return {\n headers: {},\n size: bodySize,\n _meta: {\n warnings: ['URL_SKIPPED'],\n },\n };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n headers,\n bodySize,\n body,\n) {\n if (!bodySize && Object.keys(headers).length === 0) {\n return undefined;\n }\n\n if (!bodySize) {\n return {\n headers,\n };\n }\n\n if (!body) {\n return {\n headers,\n size: bodySize,\n };\n }\n\n const info = {\n headers,\n size: bodySize,\n };\n\n const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n info.body = normalizedBody;\n if (warnings && warnings.length > 0) {\n info._meta = {\n warnings,\n };\n }\n\n return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n return Object.entries(headers).reduce((filteredHeaders, [key, value]) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = value;\n }\n return filteredHeaders;\n }, {});\n}\n\nfunction _serializeFormData(formData) {\n // This is a bit simplified, but gives us a decent estimate\n // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n // @ts-expect-error passing FormData to URLSearchParams actually works\n return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n if (!body || typeof body !== 'string') {\n return {\n body,\n };\n }\n\n const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n const isProbablyJson = _strIsProbablyJson(body);\n\n if (exceedsSizeLimit) {\n const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n if (isProbablyJson) {\n return {\n body: truncatedBody,\n warnings: ['MAYBE_JSON_TRUNCATED'],\n };\n }\n\n return {\n body: `${truncatedBody}…`,\n warnings: ['TEXT_TRUNCATED'],\n };\n }\n\n if (isProbablyJson) {\n try {\n const jsonBody = JSON.parse(body);\n return {\n body: jsonBody,\n };\n } catch (e2) {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str) {\n const first = str[0];\n const last = str[str.length - 1];\n\n // Simple check: If this does not start & end with {} or [], it's not JSON\n return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n // Short circuit for common cases:\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n return url;\n }\n const fixedUrl = new URL(url, baseURI);\n\n // If these do not match, we are not dealing with a relative URL, so just return it\n if (fixedUrl.origin !== new URL(baseURI).origin) {\n return url;\n }\n\n const fullUrl = fixedUrl.href;\n\n // Remove trailing slashes, if they don't match the original URL\n if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n return fullUrl.slice(0, -1);\n }\n\n return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n breadcrumb,\n hint,\n options\n\n,\n) {\n try {\n const data = await _prepareFetchData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to capture fetch breadcrumb');\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n breadcrumb,\n hint,\n) {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body);\n\n const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nasync function _prepareFetchData(\n breadcrumb,\n hint,\n options,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n const captureDetails =\n urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n const request = captureDetails\n ? _getRequestInfo(options, hint.input, requestBodySize)\n : buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction _getRequestInfo(\n { networkCaptureBodies, networkRequestHeaders },\n input,\n requestBodySize,\n) {\n const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n if (!networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n }\n\n // We only want to transmit string or string-like bodies\n const requestBody = _getFetchRequestArgBody(input);\n const [bodyStr, warning] = getBodyString(requestBody);\n const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n if (warning) {\n return mergeWarning(data, warning);\n }\n\n return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n captureDetails,\n {\n networkCaptureBodies,\n networkResponseHeaders,\n },\n response,\n responseBodySize,\n) {\n if (!captureDetails && responseBodySize !== undefined) {\n return buildSkippedNetworkRequestOrResponse(responseBodySize);\n }\n\n const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n\n const [bodyText, warning] = await _parseFetchResponseBody(response);\n const result = getResponseData(bodyText, {\n networkCaptureBodies,\n\n responseBodySize,\n captureDetails,\n headers,\n });\n\n if (warning) {\n return mergeWarning(result, warning);\n }\n\n return result;\n}\n\nfunction getResponseData(\n bodyText,\n {\n networkCaptureBodies,\n responseBodySize,\n captureDetails,\n headers,\n }\n\n,\n) {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined ? getBodySize(bodyText) : responseBodySize;\n\n if (!captureDetails) {\n return buildSkippedNetworkRequestOrResponse(size);\n }\n\n if (networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, size, bodyText);\n }\n\n return buildNetworkRequestOrResponse(headers, size, undefined);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize response body');\n // fallback\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n}\n\nasync function _parseFetchResponseBody(response) {\n const res = _tryCloneResponse(response);\n\n if (!res) {\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n try {\n const text = await _tryGetResponseText(res);\n return [text];\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to get text body from response');\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n // We only support getting the body from the fetch options\n if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n return undefined;\n }\n\n return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n const allHeaders = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) ;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input,\n allowedHeaders,\n) {\n if (!input) {\n return {};\n }\n\n const headers = input.headers;\n\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n return getAllHeaders(headers, allowedHeaders);\n }\n\n // We do not support this, as it is not really documented (anymore?)\n if (Array.isArray(headers)) {\n return {};\n }\n\n return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n try {\n // We have to clone this, as the body can only be read once\n return response.clone();\n } catch (error) {\n // this can throw if the response was already consumed before\n DEBUG_BUILD && logger.exception(error, 'Failed to clone response body');\n }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout$3(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n _getResponseText(response)\n .then(\n txt => resolve(txt),\n reason => reject(reason),\n )\n .finally(() => clearTimeout(timeout));\n });\n}\n\nasync function _getResponseText(response) {\n // Force this to be a promise, just to be safe\n // eslint-disable-next-line no-return-await\n return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n breadcrumb,\n hint,\n options,\n) {\n try {\n const data = _prepareXhrData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to capture xhr breadcrumb');\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n breadcrumb,\n hint,\n) {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType);\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nfunction _prepareXhrData(\n breadcrumb,\n hint,\n options,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n if (!url) {\n return null;\n }\n\n if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n }\n\n const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n const networkRequestHeaders = xhrInfo\n ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n : {};\n const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request: requestWarning ? mergeWarning(request, requestWarning) : request,\n response: responseWarning ? mergeWarning(response, responseWarning) : response,\n };\n}\n\nfunction getResponseHeaders(xhr) {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc, line) => {\n const [key, value] = line.split(': ') ;\n if (value) {\n acc[key.toLowerCase()] = value;\n }\n return acc;\n }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n // We collect errors that happen, but only log them if we can't get any response body\n const errors = [];\n\n try {\n return [xhr.responseText];\n } catch (e) {\n errors.push(e);\n }\n\n // Try to manually parse the response body, if responseText fails\n try {\n return _parseXhrResponse(xhr.response, xhr.responseType);\n } catch (e) {\n errors.push(e);\n }\n\n DEBUG_BUILD && logger.warn('Failed to get xhr response body', ...errors);\n\n return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n body,\n responseType,\n) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof Document) {\n return [body.body.outerHTML];\n }\n\n if (responseType === 'json' && body && typeof body === 'object') {\n return [JSON.stringify(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n body,\n responseType,\n) {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr);\n } catch (e2) {\n return undefined;\n }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n * (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n const client = getClient();\n\n try {\n const {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options = {\n replay,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n }\n } catch (e2) {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n options,\n breadcrumb,\n hint,\n) {\n if (!breadcrumb.data) {\n return;\n }\n\n try {\n if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichXhrBreadcrumb(breadcrumb, hint);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n }\n\n if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichFetchBreadcrumb(breadcrumb, hint);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n }\n } catch (e) {\n DEBUG_BUILD && logger.exception(e, 'Error when enriching network breadcrumb');\n }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n return hint && hint.response;\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n // Listeners from core SDK //\n const client = getClient();\n\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleBreadcrumbs(replay);\n handleNetworkBreadcrumbs(replay);\n\n // Tag all (non replay) events that get sent to Sentry with the current\n // replay ID so that we can reference them later in the UI\n const eventProcessor = handleGlobalEventListener(replay);\n addEventProcessor(eventProcessor);\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (client) {\n client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n client.on('afterSendEvent', handleAfterSendEvent(replay));\n client.on('createDsc', (dsc) => {\n const replayId = replay.getSessionId();\n // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n // Ensure to check that the session is still active - it could have expired in the meanwhile\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (isSessionActive) {\n dsc.replay_id = replayId;\n }\n }\n });\n\n client.on('spanStart', span => {\n replay.lastActiveSpan = span;\n });\n\n // We may be missing the initial spanStart due to timing issues,\n // so we capture it on finish again.\n client.on('spanEnd', span => {\n replay.lastActiveSpan = span;\n });\n\n // We want to flush replay\n client.on('beforeSendFeedback', (feedbackEvent, options) => {\n const replayId = replay.getSessionId();\n if (options && options.includeReplay && replay.isEnabled() && replayId) {\n // This should never reject\n if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n feedbackEvent.contexts.feedback.replay_id = replayId;\n }\n }\n });\n }\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n try {\n return Promise.all(\n createPerformanceSpans(replay, [\n // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n createMemoryEntry(WINDOW.performance.memory),\n ]),\n );\n } catch (error) {\n // Do nothing\n return [];\n }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n // we don't want to use `getAbsoluteTime` because it adds the event time to the\n // time origin, so we get the current timestamp instead\n const time = Date.now() / 1000;\n return {\n type: 'memory',\n name: 'memory',\n start: time,\n end: time,\n data: {\n memory: {\n jsHeapSizeLimit,\n totalJSHeapSize,\n usedJSHeapSize,\n },\n },\n };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n * debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n * was already invoked in the meantime, return @param func's return value.\n * The debounced function has two additional properties:\n * - `flush`: Invokes the debounced function immediately and returns its return value\n * - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n let callbackReturnValue;\n\n let timerId;\n let maxTimerId;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc() {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers() {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush() {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced() {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout$3(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout$3(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n let hadFirstEvent = false;\n\n return (event, _isCheckout) => {\n // If this is false, it means session is expired, create and a new session and wait for checkout\n if (!replay.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.warn('Received replay event after session expired.');\n\n return;\n }\n\n // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n // We also want to treat the first event as a checkout, so we handle this specifically here\n const isCheckout = _isCheckout || !hadFirstEvent;\n hadFirstEvent = true;\n\n if (replay.clickDetector) {\n updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n }\n\n // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n replay.addUpdate(() => {\n // The session is always started immediately on pageload/init, but for\n // error-only replays, it should reflect the most recent checkout\n // when an error occurs. Clear any state that happens before this current\n // checkout. This needs to happen before `addEvent()` which updates state\n // dependent on this reset.\n if (replay.recordingMode === 'buffer' && isCheckout) {\n replay.setInitialState();\n }\n\n // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n // Skip all further steps\n if (!addEventSync(replay, event, isCheckout)) {\n // Return true to skip scheduling a debounced flush\n return true;\n }\n\n // Different behavior for full snapshots (type=2), ignore other event types\n // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n if (!isCheckout) {\n return false;\n }\n\n // Additionally, create a meta event that will capture certain SDK settings.\n // In order to handle buffer mode, this needs to either be done when we\n // receive checkout events or at flush time.\n //\n // `isCheckout` is always true, but want to be explicit that it should\n // only be added for checkouts\n addSettingsEvent(replay, isCheckout);\n\n // If there is a previousSessionId after a full snapshot occurs, then\n // the replay session was started due to session expiration. The new session\n // is started before triggering a new checkout and contains the id\n // of the previous session. Do not immediately flush in this case\n // to avoid capturing only the checkout and instead the replay will\n // be captured if they perform any follow-up actions.\n if (replay.session && replay.session.previousSessionId) {\n return true;\n }\n\n // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n // this should usually be the timestamp of the checkout event, but to be safe...\n if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n DEBUG_BUILD &&\n logger.info(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n\n replay.session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(replay.session);\n }\n }\n }\n\n if (replay.recordingMode === 'session') {\n // If the full snapshot is due to an initial load, we will not have\n // a previous session ID. In this case, we want to buffer events\n // for a set amount of time before flushing. This can help avoid\n // capturing replays of users that immediately close the window.\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void replay.flush();\n }\n\n return true;\n });\n };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n const options = replay.getOptions();\n return {\n type: EventType.Custom,\n timestamp: Date.now(),\n data: {\n tag: 'options',\n payload: {\n shouldRecordCanvas: replay.isRecordingCanvas(),\n sessionSampleRate: options.sessionSampleRate,\n errorSampleRate: options.errorSampleRate,\n useCompressionOption: options.useCompression,\n blockAllMedia: options.blockAllMedia,\n maskAllText: options.maskAllText,\n maskAllInputs: options.maskAllInputs,\n useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n networkCaptureBodies: options.networkCaptureBodies,\n networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n },\n },\n };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n // Only need to add this event when sending the first segment\n if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n return;\n }\n\n addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n replayEvent,\n recordingData,\n dsn,\n tunnel,\n) {\n return createEnvelope(\n createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n [\n [{ type: 'replay_event' }, replayEvent],\n [\n {\n type: 'replay_recording',\n // If string then we need to encode to UTF8, otherwise will have\n // wrong size. TextEncoder has similar browser support to\n // MutationObserver, although it does not accept IE11.\n length:\n typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n },\n recordingData,\n ],\n ],\n );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n recordingData,\n headers,\n}\n\n) {\n let payloadWithSequence;\n\n // XXX: newline is needed to separate sequence id from events\n const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n if (typeof recordingData === 'string') {\n payloadWithSequence = `${replayHeaders}${recordingData}`;\n } else {\n const enc = new TextEncoder();\n // XXX: newline is needed to separate sequence id from events\n const sequence = enc.encode(replayHeaders);\n // Merge the two Uint8Arrays\n payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n payloadWithSequence.set(sequence);\n payloadWithSequence.set(recordingData, sequence.length);\n }\n\n return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}\n\n) {\n const integrations =\n typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n ? Object.keys(client._integrations)\n : undefined;\n\n const eventHint = { event_id, integrations };\n\n client.emit('preprocessEvent', event, eventHint);\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n getIsolationScope(),\n )) ;\n\n // If e.g. a global event processor returned null\n if (!preparedEvent) {\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n const metadata = client.getSdkMetadata();\n const { name, version } = (metadata && metadata.sdk) || {};\n\n preparedEvent.sdk = {\n ...preparedEvent.sdk,\n name: name || 'sentry.javascript.unknown',\n version: version || '0.0.0',\n };\n\n return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}) {\n const preparedRecordingData = prepareRecordingData({\n recordingData,\n headers: {\n segment_id,\n },\n });\n\n const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n const client = getClient();\n const scope = getCurrentScope();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn || !session.sampled) {\n return resolvedSyncPromise({});\n }\n\n const baseEvent = {\n type: REPLAY_EVENT_NAME,\n replay_start_timestamp: initialTimestamp / 1000,\n timestamp: timestamp / 1000,\n error_ids: errorIds,\n trace_ids: traceIds,\n urls,\n replay_id: replayId,\n segment_id,\n replay_type: session.sampled,\n };\n\n const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n if (!replayEvent) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n DEBUG_BUILD && logger.info('An event processor returned `null`, will not send event.');\n return resolvedSyncPromise({});\n }\n\n /*\n For reference, the fully built event looks something like this:\n {\n \"type\": \"replay_event\",\n \"timestamp\": 1670837008.634,\n \"error_ids\": [\n \"errorId\"\n ],\n \"trace_ids\": [\n \"traceId\"\n ],\n \"urls\": [\n \"https://example.com\"\n ],\n \"replay_id\": \"eventId\",\n \"segment_id\": 3,\n \"replay_type\": \"error\",\n \"platform\": \"javascript\",\n \"event_id\": \"eventId\",\n \"environment\": \"production\",\n \"sdk\": {\n \"integrations\": [\n \"BrowserTracing\",\n \"Replay\"\n ],\n \"name\": \"sentry.javascript.browser\",\n \"version\": \"7.25.0\"\n },\n \"sdkProcessingMetadata\": {},\n \"contexts\": {\n },\n }\n */\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete replayEvent.sdkProcessingMetadata;\n\n const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n let response;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n throw error;\n }\n\n // If the status code is invalid, we want to immediately stop & not retry\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new TransportStatusCodeError(response.statusCode);\n }\n\n const rateLimits = updateRateLimits({}, response);\n if (isRateLimited(rateLimits, 'replay')) {\n throw new RateLimitError(rateLimits);\n }\n\n return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n constructor(statusCode) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n constructor(rateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n replayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n) {\n const { recordingData, options } = replayData;\n\n // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n if (!recordingData.length) {\n return;\n }\n\n try {\n await sendReplayRequest(replayData);\n return true;\n } catch (err) {\n if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n throw err;\n }\n\n // Capture error for every failed replay\n setContext('Replays', {\n _retryCount: retryConfig.count,\n });\n\n if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n captureException(err);\n }\n\n // If an error happened here, it's likely that uploading the attachment\n // failed, we'll can retry with the same events payload\n if (retryConfig.count >= RETRY_MAX_COUNT) {\n const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n\n throw error;\n }\n\n // will retry in intervals of 5, 10, 30\n retryConfig.interval *= ++retryConfig.count;\n\n return new Promise((resolve, reject) => {\n setTimeout$3(async () => {\n try {\n await sendReplay(replayData, retryConfig);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n }, retryConfig.interval);\n });\n }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n fn,\n maxCount,\n durationSeconds,\n) {\n const counter = new Map();\n\n const _cleanup = (now) => {\n const threshold = now - durationSeconds;\n counter.forEach((_value, key) => {\n if (key < threshold) {\n counter.delete(key);\n }\n });\n };\n\n const _getTotalCount = () => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest) => {\n // Date in second-precision, which we use as basis for the throttling\n const now = Math.floor(Date.now() / 1000);\n\n // First, make sure to delete any old entries\n _cleanup(now);\n\n // If already over limit, do nothing\n if (_getTotalCount() >= maxCount) {\n const wasThrottled = isThrottled;\n isThrottled = true;\n return wasThrottled ? SKIPPED : THROTTLED;\n }\n\n isThrottled = false;\n const count = counter.get(now) || 0;\n counter.set(now, count + 1);\n\n return fn(...rest);\n };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer {\n\n /**\n * Recording can happen in one of three modes:\n * - session: Record the whole session, sending it continuously\n * - buffer: Always keep the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n\n /**\n * The current or last active span.\n * This is only available when performance is enabled.\n */\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n\n /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n\n /**\n * Is the integration currently active?\n */\n\n /**\n * Paused is a state where:\n * - DOM Recording is not listening at all\n * - Nothing will be added to event buffer (e.g. core SDK events)\n */\n\n /**\n * Have we attached listeners to the core SDK?\n * Note we have to track this as there is no way to remove instrumentation handlers.\n */\n\n /**\n * Function to stop recording\n */\n\n /**\n * Internal use for canvas recording options\n */\n\n constructor({\n options,\n recordingOptions,\n }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n this.eventBuffer = null;\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n this.recordingMode = 'session';\n this.timeouts = {\n sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n } ;\n this._lastActivity = Date.now();\n this._isEnabled = false;\n this._isPaused = false;\n this._requiresManualStart = false;\n this._hasInitializedCoreListeners = false;\n this._context = {\n errorIds: new Set(),\n traceIds: new Set(),\n urls: [],\n initialTimestamp: Date.now(),\n initialUrl: '',\n };\n\n this._recordingOptions = recordingOptions;\n this._options = options;\n\n this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n maxWait: this._options.flushMaxDelay,\n });\n\n this._throttledAddEvent = throttle(\n (event, isCheckout) => addEvent(this, event, isCheckout),\n // Max 300 events...\n 300,\n // ... per 5s\n 5,\n );\n\n const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n const slowClickConfig = slowClickTimeout\n ? {\n threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n timeout: slowClickTimeout,\n scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n }\n : undefined;\n\n if (slowClickConfig) {\n this.clickDetector = new ClickDetector(this, slowClickConfig);\n }\n\n // Configure replay logger w/ experimental options\n if (DEBUG_BUILD) {\n const experiments = options._experiments;\n logger.setConfig({\n captureExceptions: !!experiments.captureExceptions,\n traceInternals: !!experiments.traceInternals,\n });\n }\n }\n\n /** Get the event context. */\n getContext() {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n isEnabled() {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n isPaused() {\n return this._isPaused;\n }\n\n /**\n * Determine if canvas recording is enabled\n */\n isRecordingCanvas() {\n return Boolean(this._canvas);\n }\n\n /** Get the replay integration options. */\n getOptions() {\n return this._options;\n }\n\n /** A wrapper to conditionally capture exceptions. */\n handleException(error) {\n DEBUG_BUILD && logger.exception(error);\n }\n\n /**\n * Initializes the plugin based on sampling configuration. Should not be\n * called outside of constructor.\n */\n initializeSampling(previousSessionId) {\n const { errorSampleRate, sessionSampleRate } = this._options;\n\n // If neither sample rate is > 0, then do nothing - user will need to call one of\n // `start()` or `startBuffering` themselves.\n const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n\n this._requiresManualStart = requiresManualStart;\n\n if (requiresManualStart) {\n return;\n }\n\n // Otherwise if there is _any_ sample rate set, try to load an existing\n // session, or create a new one.\n this._initializeSessionForSampling(previousSessionId);\n\n if (!this.session) {\n // This should not happen, something wrong has occurred\n DEBUG_BUILD && logger.exception(new Error('Unable to initialize and create session'));\n return;\n }\n\n if (this.session.sampled === false) {\n // This should only occur if `errorSampleRate` is 0 and was unsampled for\n // session-based replay. In this case there is nothing to do.\n return;\n }\n\n // If segmentId > 0, it means we've previously already captured this session\n // In this case, we still want to continue in `session` recording mode\n this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n DEBUG_BUILD && logger.infoTick(`Starting replay in ${this.recordingMode} mode`);\n\n this._initializeRecording();\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will log a message if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * _performanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (this._isEnabled && this.recordingMode === 'session') {\n DEBUG_BUILD && logger.info('Recording is already in progress');\n return;\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n return;\n }\n\n DEBUG_BUILD && logger.infoTick('Starting replay in session mode');\n\n // Required as user activity is initially set in\n // constructor, so if `start()` is called after\n // session idle expiration, a replay will not be\n // created due to an idle timeout.\n this._updateUserActivity();\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n },\n {\n stickySession: this._options.stickySession,\n // This is intentional: create a new session-based replay when calling `start()`\n sessionSampleRate: 1,\n allowBuffering: false,\n },\n );\n\n this.session = session;\n\n this._initializeRecording();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, an error occurs.\n */\n startBuffering() {\n if (this._isEnabled) {\n DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n return;\n }\n\n DEBUG_BUILD && logger.infoTick('Starting replay in buffer mode');\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: 0,\n allowBuffering: true,\n },\n );\n\n this.session = session;\n\n this.recordingMode = 'buffer';\n this._initializeRecording();\n }\n\n /**\n * Start recording.\n *\n * Note that this will cause a new DOM checkout\n */\n startRecording() {\n try {\n const canvasOptions = this._canvas;\n\n this._stopRecording = record({\n ...this._recordingOptions,\n // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n // Without this, it would record forever, until an error happens, which we don't want\n // instead, we'll always keep the last 60 seconds of replay before an error happened\n ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n emit: getHandleRecordingEmit(this),\n onMutation: this._onMutationHandler,\n ...(canvasOptions\n ? {\n recordCanvas: canvasOptions.recordCanvas,\n getCanvasManager: canvasOptions.getCanvasManager,\n sampling: canvasOptions.sampling,\n dataURLOptions: canvasOptions.dataURLOptions,\n }\n : {}),\n });\n } catch (err) {\n this.handleException(err);\n }\n }\n\n /**\n * Stops the recording, if it was running.\n *\n * Returns true if it was previously stopped, or is now stopped,\n * otherwise false.\n */\n stopRecording() {\n try {\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = undefined;\n }\n\n return true;\n } catch (err) {\n this.handleException(err);\n return false;\n }\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n async stop({ forceFlush = false, reason } = {}) {\n if (!this._isEnabled) {\n return;\n }\n\n // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n // enter into an infinite loop when `stop()` is called while flushing.\n this._isEnabled = false;\n\n try {\n DEBUG_BUILD && logger.info(`Stopping Replay${reason ? ` triggered by ${reason}` : ''}`);\n\n this._removeListeners();\n this.stopRecording();\n\n this._debouncedFlush.cancel();\n // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n // `_isEnabled` state of the plugin since it was disabled above.\n if (forceFlush) {\n await this._flush({ force: true });\n }\n\n // After flush, destroy event buffer\n this.eventBuffer && this.eventBuffer.destroy();\n this.eventBuffer = null;\n\n // Clear session from session storage, note this means if a new session\n // is started after, it will not have `previousSessionId`\n clearSession(this);\n } catch (err) {\n this.handleException(err);\n }\n }\n\n /**\n * Pause some replay functionality. See comments for `_isPaused`.\n * This differs from stop as this only stops DOM recording, it is\n * not as thorough of a shutdown as `stop()`.\n */\n pause() {\n if (this._isPaused) {\n return;\n }\n\n this._isPaused = true;\n this.stopRecording();\n\n DEBUG_BUILD && logger.info('Pausing replay');\n }\n\n /**\n * Resumes recording, see notes for `pause().\n *\n * Note that calling `startRecording()` here will cause a\n * new DOM checkout.`\n */\n resume() {\n if (!this._isPaused || !this._checkSession()) {\n return;\n }\n\n this._isPaused = false;\n this.startRecording();\n\n DEBUG_BUILD && logger.info('Resuming replay');\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n if (this.recordingMode === 'session') {\n return this.flushImmediate();\n }\n\n const activityTime = Date.now();\n\n DEBUG_BUILD && logger.info('Converting buffer to session');\n\n // Allow flush to complete before resuming as a session recording, otherwise\n // the checkout from `startRecording` may be included in the payload.\n // Prefer to keep the error replay as a separate (and smaller) segment\n // than the session replay.\n await this.flushImmediate();\n\n const hasStoppedRecording = this.stopRecording();\n\n if (!continueRecording || !hasStoppedRecording) {\n return;\n }\n\n // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n if ((this.recordingMode ) === 'session') {\n return;\n }\n\n // Re-start recording in session-mode\n this.recordingMode = 'session';\n\n // Once this session ends, we do not want to refresh it\n if (this.session) {\n this._updateUserActivity(activityTime);\n this._updateSessionActivity(activityTime);\n this._maybeSaveSession();\n }\n\n this.startRecording();\n }\n\n /**\n * We want to batch uploads of replay events. Save events only if\n * `` milliseconds have elapsed since the last event\n * *OR* if `` milliseconds have elapsed.\n *\n * Accepts a callback to perform side-effects and returns true to stop batch\n * processing and hand back control to caller.\n */\n addUpdate(cb) {\n // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n const cbResult = cb();\n\n // If this option is turned on then we will only want to call `flush`\n // explicitly\n if (this.recordingMode === 'buffer') {\n return;\n }\n\n // If callback is true, we do not want to continue with flushing -- the\n // caller will need to handle it.\n if (cbResult === true) {\n return;\n }\n\n // addUpdate is called quite frequently - use _debouncedFlush so that it\n // respects the flush delays and does not flush immediately\n this._debouncedFlush();\n }\n\n /**\n * Updates the user activity timestamp and resumes recording. This should be\n * called in an event handler for a user action that we consider as the user\n * being \"active\" (e.g. a mouse click).\n */\n triggerUserActivity() {\n this._updateUserActivity();\n\n // This case means that recording was once stopped due to inactivity.\n // Ensure that recording is resumed.\n if (!this._stopRecording) {\n // Create a new session, otherwise when the user action is flushed, it\n // will get rejected due to an expired session.\n if (!this._checkSession()) {\n return;\n }\n\n // Note: This will cause a new DOM checkout\n this.resume();\n return;\n }\n\n // Otherwise... recording was never suspended, continue as normalish\n this.checkAndHandleExpiredSession();\n\n this._updateSessionActivity();\n }\n\n /**\n * Updates the user activity timestamp *without* resuming\n * recording. Some user events (e.g. keydown) can be create\n * low-value replays that only contain the keypress as a\n * breadcrumb. Instead this would require other events to\n * create a new replay after a session has expired.\n */\n updateUserActivity() {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n conditionalFlush() {\n if (this.recordingMode === 'buffer') {\n return Promise.resolve();\n }\n\n return this.flushImmediate();\n }\n\n /**\n * Flush using debounce flush\n */\n flush() {\n return this._debouncedFlush() ;\n }\n\n /**\n * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n * cases of mulitple flushes happening closely together.\n */\n flushImmediate() {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() ;\n }\n\n /**\n * Cancels queued up flushes.\n */\n cancelFlush() {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current sesion (=replay) ID */\n getSessionId() {\n return this.session && this.session.id;\n }\n\n /**\n * Checks if recording should be stopped due to user inactivity. Otherwise\n * check if session is expired and create a new session if so. Triggers a new\n * full snapshot on new session.\n *\n * Returns true if session is not expired, false otherwise.\n * @hidden\n */\n checkAndHandleExpiredSession() {\n // Prevent starting a new session if the last user activity is older than\n // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n // session+recording. This creates noisy replays that do not have much\n // content in them.\n if (\n this._lastActivity &&\n isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n this.session &&\n this.session.sampled === 'session'\n ) {\n // Pause recording only for session-based replays. Otherwise, resuming\n // will create a new replay and will conflict with users who only choose\n // to record error-based replays only. (e.g. the resumed replay will not\n // contain a reference to an error)\n this.pause();\n return;\n }\n\n // --- There is recent user activity --- //\n // This will create a new session if expired, based on expiry length\n if (!this._checkSession()) {\n // Check session handles the refreshing itself\n return false;\n }\n\n return true;\n }\n\n /**\n * Capture some initial state that can change throughout the lifespan of the\n * replay. This is required because otherwise they would be captured at the\n * first flush.\n */\n setInitialState() {\n const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n const url = `${WINDOW.location.origin}${urlPath}`;\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // Reset _context as well\n this._clearContext();\n\n this._context.initialUrl = url;\n this._context.initialTimestamp = Date.now();\n this._context.urls.push(url);\n }\n\n /**\n * Add a breadcrumb event, that may be throttled.\n * If it was throttled, we add a custom breadcrumb to indicate that.\n */\n throttledAddEvent(\n event,\n isCheckout,\n ) {\n const res = this._throttledAddEvent(event, isCheckout);\n\n // If this is THROTTLED, it means we have throttled the event for the first time\n // In this case, we want to add a breadcrumb indicating that something was skipped\n if (res === THROTTLED) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.throttled',\n });\n\n this.addUpdate(() => {\n // Return `false` if the event _was_ added, as that means we schedule a flush\n return !addEventSync(this, {\n type: ReplayEventTypeCustom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n metric: true,\n },\n });\n });\n }\n\n return res;\n }\n\n /**\n * This will get the parametrized route name of the current page.\n * This is only available if performance is enabled, and if an instrumented router is used.\n */\n getCurrentRoute() {\n const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n\n const attributes = (lastRootSpan && spanToJSON(lastRootSpan).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastRootSpan).description;\n }\n\n /**\n * Initialize and start all listeners to varying events (DOM,\n * Performance Observer, Recording, Sentry SDK, etc)\n */\n _initializeRecording() {\n this.setInitialState();\n\n // this method is generally called on page load or manually - in both cases\n // we should treat it as an activity\n this._updateSessionActivity();\n\n this.eventBuffer = createEventBuffer({\n useCompression: this._options.useCompression,\n workerUrl: this._options.workerUrl,\n });\n\n this._removeListeners();\n this._addListeners();\n\n // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n this._isEnabled = true;\n this._isPaused = false;\n\n this.startRecording();\n }\n\n /**\n * Loads (or refreshes) the current session.\n */\n _initializeSessionForSampling(previousSessionId) {\n // Whenever there is _any_ error sample rate, we always allow buffering\n // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n const allowBuffering = this._options.errorSampleRate > 0;\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n previousSessionId,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: this._options.sessionSampleRate,\n allowBuffering,\n },\n );\n\n this.session = session;\n }\n\n /**\n * Checks and potentially refreshes the current session.\n * Returns false if session is not recorded.\n */\n _checkSession() {\n // If there is no session yet, we do not want to refresh anything\n // This should generally not happen, but to be safe....\n if (!this.session) {\n return false;\n }\n\n const currentSession = this.session;\n\n if (\n shouldRefreshSession(currentSession, {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n })\n ) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._refreshSession(currentSession);\n return false;\n }\n\n return true;\n }\n\n /**\n * Refresh a session with a new one.\n * This stops the current session (without forcing a flush, as that would never work since we are expired),\n * and then does a new sampling based on the refreshed session.\n */\n async _refreshSession(session) {\n if (!this._isEnabled) {\n return;\n }\n await this.stop({ reason: 'refresh session' });\n this.initializeSampling(session.id);\n }\n\n /**\n * Adds listeners to record events for the replay\n */\n _addListeners() {\n try {\n WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n WINDOW.addEventListener('blur', this._handleWindowBlur);\n WINDOW.addEventListener('focus', this._handleWindowFocus);\n WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.addListeners();\n }\n\n // There is no way to remove these listeners, so ensure they are only added once\n if (!this._hasInitializedCoreListeners) {\n addGlobalListeners(this);\n\n this._hasInitializedCoreListeners = true;\n }\n } catch (err) {\n this.handleException(err);\n }\n\n this._performanceCleanupCallback = setupPerformanceObserver(this);\n }\n\n /**\n * Cleans up listeners that were created in `_addListeners`\n */\n _removeListeners() {\n try {\n WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n WINDOW.removeEventListener('blur', this._handleWindowBlur);\n WINDOW.removeEventListener('focus', this._handleWindowFocus);\n WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.removeListeners();\n }\n\n if (this._performanceCleanupCallback) {\n this._performanceCleanupCallback();\n }\n } catch (err) {\n this.handleException(err);\n }\n }\n\n /**\n * Handle when visibility of the page content changes. Opening a new tab will\n * cause the state to change to hidden because of content of current page will\n * be hidden. Likewise, moving a different window to cover the contents of the\n * page will also trigger a change to a hidden state.\n */\n __init() {this._handleVisibilityChange = () => {\n if (WINDOW.document.visibilityState === 'visible') {\n this._doChangeToForegroundTasks();\n } else {\n this._doChangeToBackgroundTasks();\n }\n };}\n\n /**\n * Handle when page is blurred\n */\n __init2() {this._handleWindowBlur = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.blur',\n });\n\n // Do not count blur as a user action -- it's part of the process of them\n // leaving the page\n this._doChangeToBackgroundTasks(breadcrumb);\n };}\n\n /**\n * Handle when page is focused\n */\n __init3() {this._handleWindowFocus = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.focus',\n });\n\n // Do not count focus as a user action -- instead wait until they focus and\n // interactive with page\n this._doChangeToForegroundTasks(breadcrumb);\n };}\n\n /** Ensure page remains active when a key is pressed. */\n __init4() {this._handleKeyboardEvent = (event) => {\n handleKeyboardEvent(this, event);\n };}\n\n /**\n * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n */\n _doChangeToBackgroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const expired = isSessionExpired(this.session, {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n });\n\n if (expired) {\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Send replay when the page/tab becomes hidden. There is no reason to send\n // replay if it becomes visible, since no actions we care about were done\n // while it was hidden\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void this.conditionalFlush();\n }\n\n /**\n * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n */\n _doChangeToForegroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const isSessionActive = this.checkAndHandleExpiredSession();\n\n if (!isSessionActive) {\n // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n // ms, we will re-use the existing session, otherwise create a new\n // session\n DEBUG_BUILD && logger.info('Document has become active, but session has expired');\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n }\n\n /**\n * Update user activity (across session lifespans)\n */\n _updateUserActivity(_lastActivity = Date.now()) {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n _updateSessionActivity(_lastActivity = Date.now()) {\n if (this.session) {\n this.session.lastActivity = _lastActivity;\n this._maybeSaveSession();\n }\n }\n\n /**\n * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n */\n _createCustomBreadcrumb(breadcrumb) {\n this.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.throttledAddEvent({\n type: EventType.Custom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n },\n });\n });\n }\n\n /**\n * Observed performance events are added to `this.performanceEntries`. These\n * are included in the replay event before it is finished and sent to Sentry.\n */\n _addPerformanceEntries() {\n const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n return Promise.all(createPerformanceSpans(this, performanceEntries));\n }\n\n /**\n * Clear _context\n */\n _clearContext() {\n // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n this._context.errorIds.clear();\n this._context.traceIds.clear();\n this._context.urls = [];\n }\n\n /** Update the initial timestamp based on the buffer content. */\n _updateInitialTimestampFromEventBuffer() {\n const { session, eventBuffer } = this;\n // If replay was started manually (=no sample rate was given),\n // We do not want to back-port the initial timestamp\n if (!session || !eventBuffer || this._requiresManualStart) {\n return;\n }\n\n // we only ever update this on the initial segment\n if (session.segmentId) {\n return;\n }\n\n const earliestEvent = eventBuffer.getEarliestTimestamp();\n if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n this._context.initialTimestamp = earliestEvent;\n }\n }\n\n /**\n * Return and clear _context\n */\n _popEventContext() {\n const _context = {\n initialTimestamp: this._context.initialTimestamp,\n initialUrl: this._context.initialUrl,\n errorIds: Array.from(this._context.errorIds),\n traceIds: Array.from(this._context.traceIds),\n urls: this._context.urls,\n };\n\n this._clearContext();\n\n return _context;\n }\n\n /**\n * Flushes replay event buffer to Sentry.\n *\n * Performance events are only added right before flushing - this is\n * due to the buffered performance observer events.\n *\n * Should never be called directly, only by `flush`\n */\n async _runFlush() {\n const replayId = this.getSessionId();\n\n if (!this.session || !this.eventBuffer || !replayId) {\n DEBUG_BUILD && logger.error('No session or eventBuffer found to flush.');\n return;\n }\n\n await this._addPerformanceEntries();\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n return;\n }\n\n // Only attach memory event if eventBuffer is not empty\n await addMemoryEntry(this);\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer) {\n return;\n }\n\n // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n if (replayId !== this.getSessionId()) {\n return;\n }\n\n try {\n // This uses the data from the eventBuffer, so we need to call this before `finish()\n this._updateInitialTimestampFromEventBuffer();\n\n const timestamp = Date.now();\n\n // Check total duration again, to avoid sending outdated stuff\n // We leave 30s wiggle room to accomodate late flushing etc.\n // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n throw new Error('Session is too long, not sending replay');\n }\n\n const eventContext = this._popEventContext();\n // Always increment segmentId regardless of outcome of sending replay\n const segmentId = this.session.segmentId++;\n this._maybeSaveSession();\n\n // Note this empties the event buffer regardless of outcome of sending replay\n const recordingData = await this.eventBuffer.finish();\n\n await sendReplay({\n replayId,\n recordingData,\n segmentId,\n eventContext,\n session: this.session,\n options: this.getOptions(),\n timestamp,\n });\n } catch (err) {\n this.handleException(err);\n\n // This means we retried 3 times and all of them failed,\n // or we ran into a problem we don't want to retry, like rate limiting.\n // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'sendReplay' });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('send_error', 'replay');\n }\n }\n }\n\n /**\n * Flush recording data to Sentry. Creates a lock so that only a single flush\n * can be active at a time. Do not call this directly.\n */\n __init5() {this._flush = async ({\n force = false,\n }\n\n = {}) => {\n if (!this._isEnabled && !force) {\n // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n return;\n }\n\n if (!this.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.error('Attempting to finish replay event after session expired.');\n return;\n }\n\n if (!this.session) {\n // should never happen, as we would have bailed out before\n return;\n }\n\n const start = this.session.started;\n const now = Date.now();\n const duration = now - start;\n\n // A flush is about to happen, cancel any queued flushes\n this._debouncedFlush.cancel();\n\n // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n const tooShort = duration < this._options.minReplayDuration;\n const tooLong = duration > this._options.maxReplayDuration + 5000;\n if (tooShort || tooLong) {\n DEBUG_BUILD &&\n logger.info(\n `Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\n );\n\n if (tooShort) {\n this._debouncedFlush();\n }\n return;\n }\n\n const eventBuffer = this.eventBuffer;\n if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n DEBUG_BUILD && logger.info('Flushing initial segment without checkout.');\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n // this._flushLock acts as a lock so that future calls to `_flush()`\n // will be blocked until this promise resolves\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n await this._flushLock;\n this._flushLock = undefined;\n return;\n }\n\n // Wait for previous flush to finish, then call the debounced `_flush()`.\n // It's possible there are other flush requests queued and waiting for it\n // to resolve. We want to reduce all outstanding requests (as well as any\n // new flush requests that occur within a second of the locked flush\n // completing) into a single flush.\n\n try {\n await this._flushLock;\n } catch (err) {\n DEBUG_BUILD && logger.error(err);\n } finally {\n this._debouncedFlush();\n }\n };}\n\n /** Save the session, if it is sticky */\n _maybeSaveSession() {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n __init6() {this._onMutationHandler = (mutations) => {\n const count = mutations.length;\n\n const mutationLimit = this._options.mutationLimit;\n const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n const overMutationLimit = mutationLimit && count > mutationLimit;\n\n // Create a breadcrumb if a lot of mutations happen at the same time\n // We can show this in the UI as an information with potential performance improvements\n if (count > mutationBreadcrumbLimit || overMutationLimit) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.mutations',\n data: {\n count,\n limit: overMutationLimit,\n },\n });\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Stop replay if over the mutation limit\n if (overMutationLimit) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n return false;\n }\n\n // `true` means we use the regular mutation handling by rrweb\n return true;\n };}\n}\n\nfunction getOption(selectors, defaultSelectors) {\n return [\n ...selectors,\n // sentry defaults\n ...defaultSelectors,\n ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({ mask, unmask, block, unblock, ignore }) {\n const defaultBlockedElements = ['base[href=\"/\"]'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n const unmaskSelector = getOption(unmask, []);\n\n const options = {\n // We are making the decision to make text and input selectors the same\n maskTextSelector: maskSelector,\n unmaskTextSelector: unmaskSelector,\n\n blockSelector: getOption(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n unblockSelector: getOption(unblock, []),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\n };\n\n return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}) {\n // We only mask attributes if `maskAllText` is true\n if (!maskAllText) {\n return value;\n }\n\n // unmaskTextSelector takes precendence\n if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n return value;\n }\n\n if (\n maskAttributes.includes(key) ||\n // Need to mask `value` attribute for `` if it's a button-like\n // type\n (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n ) {\n return value.replace(/[\\S]/g, '*');\n }\n\n return value;\n}\n\nconst MEDIA_SELECTORS =\n 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\n/**\n * Sentry integration for [Session Replay](https://sentry.io/for/session-replay/).\n *\n * See the [Replay documentation](https://docs.sentry.io/platforms/javascript/guides/session-replay/) for more information.\n *\n * @example\n *\n * ```\n * Sentry.init({\n * dsn: '__DSN__',\n * integrations: [Sentry.replayIntegration()],\n * });\n * ```\n */\nconst replayIntegration = ((options) => {\n return new Replay(options);\n}) ;\n\n/**\n * Replay integration\n *\n * TODO: Rewrite this to be functional integration\n * Exported for tests.\n */\nclass Replay {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'Replay';}\n\n /**\n * @inheritDoc\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Initial options passed to the replay integration, merged with default values.\n * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n * can only be finally set when setupOnce() is called.\n *\n * @private\n */\n\n constructor({\n flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n minReplayDuration = MIN_REPLAY_DURATION,\n maxReplayDuration = MAX_REPLAY_DURATION,\n stickySession = true,\n useCompression = true,\n workerUrl,\n _experiments = {},\n maskAllText = true,\n maskAllInputs = true,\n blockAllMedia = true,\n\n mutationBreadcrumbLimit = 750,\n mutationLimit = 10000,\n\n slowClickTimeout = 7000,\n slowClickIgnoreSelectors = [],\n\n networkDetailAllowUrls = [],\n networkDetailDenyUrls = [],\n networkCaptureBodies = true,\n networkRequestHeaders = [],\n networkResponseHeaders = [],\n\n mask = [],\n maskAttributes = ['title', 'placeholder'],\n unmask = [],\n block = [],\n unblock = [],\n ignore = [],\n maskFn,\n\n beforeAddRecordingEvent,\n beforeErrorSampling,\n } = {}) {\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n maskInputOptions: { password: true },\n maskTextFn: maskFn,\n maskInputFn: maskFn,\n maskAttributeFn: (key, value, el) =>\n maskAttribute({\n maskAttributes,\n maskAllText,\n privacyOptions,\n key,\n value,\n el,\n }),\n\n ...privacyOptions,\n\n // Our defaults\n slimDOMOptions: 'all',\n inlineStylesheet: true,\n // Disable inline images as it will increase segment/replay size\n inlineImages: false,\n // collect fonts, but be aware that `sentry.io` needs to be an allowed\n // origin for playback\n collectFonts: true,\n errorHandler: (err) => {\n try {\n err.__rrweb__ = true;\n } catch (error) {\n // ignore errors here\n // this can happen if the error is frozen or does not allow mutation for other reasons\n }\n },\n };\n\n this._initialOptions = {\n flushMinDelay,\n flushMaxDelay,\n minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n stickySession,\n useCompression,\n workerUrl,\n blockAllMedia,\n maskAllInputs,\n maskAllText,\n mutationBreadcrumbLimit,\n mutationLimit,\n slowClickTimeout,\n slowClickIgnoreSelectors,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n _experiments,\n };\n\n if (this._initialOptions.blockAllMedia) {\n // `blockAllMedia` is a more user friendly option to configure blocking\n // embedded media elements\n this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n ? MEDIA_SELECTORS\n : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n }\n\n if (this._isInitialized && isBrowser()) {\n throw new Error('Multiple Sentry Session Replay instances are not supported');\n }\n\n this._isInitialized = true;\n }\n\n /** If replay has already been initialized */\n get _isInitialized() {\n return _initialized;\n }\n\n /** Update _isInitialized */\n set _isInitialized(value) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n afterAllSetup(client) {\n if (!isBrowser() || this._replay) {\n return;\n }\n\n this._setup(client);\n this._initialize(client);\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will log a message if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * PerformanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (!this._replay) {\n return;\n }\n this._replay.start();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, until an error occurs.\n */\n startBuffering() {\n if (!this._replay) {\n return;\n }\n\n this._replay.startBuffering();\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n stop() {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * If replay is not enabled, a new session replay is started.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n flush(options) {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n // assuming a session should be recorded in this case\n if (!this._replay.isEnabled()) {\n this._replay.start();\n return Promise.resolve();\n }\n\n return this._replay.sendBufferedReplayOrFlush(options);\n }\n\n /**\n * Get the current session ID.\n */\n getReplayId() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n\n /**\n * Initializes replay.\n */\n _initialize(client) {\n if (!this._replay) {\n return;\n }\n\n this._maybeLoadFromReplayCanvasIntegration(client);\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n _setup(client) {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);\n\n this._replay = new ReplayContainer({\n options: finalOptions,\n recordingOptions: this._recordingOptions,\n });\n }\n\n /** Get canvas options from ReplayCanvas integration, if it is also added. */\n _maybeLoadFromReplayCanvasIntegration(client) {\n // To save bundle size, we skip checking for stuff here\n // and instead just try-catch everything - as generally this should all be defined\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n try {\n const canvasIntegration = client.getIntegrationByName('ReplayCanvas')\n\n;\n if (!canvasIntegration) {\n return;\n }\n\n this._replay['_canvas'] = canvasIntegration.getOptions();\n } catch (e) {\n // ignore errors here\n }\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n }\n}Replay.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions, client) {\n const opt = client.getOptions() ;\n\n const finalOptions = {\n sessionSampleRate: 0,\n errorSampleRate: 0,\n ...dropUndefinedKeys(initialOptions),\n };\n\n const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);\n const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate);\n\n if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n );\n });\n }\n\n if (replaysSessionSampleRate != null) {\n finalOptions.sessionSampleRate = replaysSessionSampleRate;\n }\n\n if (replaysOnErrorSampleRate != null) {\n finalOptions.errorSampleRate = replaysOnErrorSampleRate;\n }\n\n return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\nfunction getReplay() {\n const client = getClient();\n return client && client.getIntegrationByName('Replay');\n}\n\nexport { getReplay, replayIntegration };\n//# sourceMappingURL=index.js.map\n","import { addXhrInstrumentationHandler, addPerformanceInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { instrumentFetchRequest, spanToJSON, hasTracingEnabled, setHttpStatus, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SentryNonRecordingSpan, getClient, getCurrentScope, getIsolationScope, spanToTraceHeader, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseUrl, browserPerformanceTimeOrigin, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, BAGGAGE_HEADER_NAME, stringMatchesSomePattern } from '@sentry/utils';\nimport { WINDOW } from '../helpers.js';\n\n/** Options for Request Instrumentation */\n\nconst responseToSpanId = new WeakMap();\nconst spanIdToEndTimestamp = new Map();\n\nconst defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n};\n\n/** Registers span creators for xhr and fetch requests */\nfunction instrumentOutgoingRequests(client, _options) {\n const { traceFetch, traceXHR, shouldCreateSpanForRequest, enableHTTPTimings, tracePropagationTargets } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n\n const spans = {};\n\n if (traceFetch) {\n // Keeping track of http requests, whose body payloads resolved later than the intial resolved request\n // e.g. streaming using server sent events (SSE)\n client.addEventProcessor(event => {\n if (event.type === 'transaction' && event.spans) {\n event.spans.forEach(span => {\n if (span.op === 'http.client') {\n const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n if (updatedTimestamp) {\n span.timestamp = updatedTimestamp / 1000;\n spanIdToEndTimestamp.delete(span.span_id);\n }\n }\n });\n }\n return event;\n });\n\n addFetchEndInstrumentationHandler(handlerData => {\n if (handlerData.response) {\n const span = responseToSpanId.get(handlerData.response);\n if (span && handlerData.endTimestamp) {\n spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n }\n }\n });\n\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n if (handlerData.response && handlerData.fetchData.__span) {\n responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n }\n\n // We cannot use `window.location` in the generic fetch instrumentation,\n // but we need it for reliable `server.address` attribute.\n // so we extend this in here\n if (createdSpan) {\n const fullUrl = getFullURL(handlerData.fetchData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n createdSpan.setAttributes({\n 'http.url': fullUrl,\n 'server.address': host,\n });\n }\n\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry ).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/') ;\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1] ;\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nfunction getAbsoluteTime(time = 0) {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nfunction shouldAttachHeaders(\n targetUrl,\n tracePropagationTargets,\n) {\n // window.location.href not being defined is an edge case in the browser but we need to handle it.\n // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n const href = WINDOW.location && WINDOW.location.href;\n\n if (!href) {\n // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n // so we need a to exclude those requests, because they might be cross origin.\n const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n if (!tracePropagationTargets) {\n return isRelativeSameOriginRequest;\n } else {\n return stringMatchesSomePattern(targetUrl, tracePropagationTargets);\n }\n } else {\n let resolvedUrl;\n let currentOrigin;\n\n // URL parsing may fail, we default to not attaching trace headers in that case.\n try {\n resolvedUrl = new URL(targetUrl, href);\n currentOrigin = new URL(href).origin;\n } catch (e) {\n return false;\n }\n\n const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n if (!tracePropagationTargets) {\n return isSameOriginRequest;\n } else {\n return (\n stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) ||\n (isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets))\n );\n }\n }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction xhrCallback(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n) {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n setHttpStatus(span, sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const fullUrl = getFullURL(sentryXhrData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n attributes: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n 'http.url': fullUrl,\n url: sentryXhrData.url,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n\n const client = getClient();\n\n if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n addTracingHeadersToXhrRequest(\n xhr,\n client,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n }\n\n return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr, client, span) {\n const scope = getCurrentScope();\n const isolationScope = getIsolationScope();\n const { traceId, spanId, sampled, dsc } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n const sentryTraceHeader =\n span && hasTracingEnabled() ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n dsc || (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client)),\n );\n\n setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n}\n\nfunction setHeaderOnXhr(\n xhr,\n sentryTraceHeader,\n sentryBaggageHeader,\n) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n\nfunction getFullURL(url) {\n try {\n // By adding a base URL to new URL(), this will also work for relative urls\n // If `url` is a full URL, the base URL is ignored anyhow\n const parsed = new URL(url, WINDOW.location.origin);\n return parsed.href;\n } catch (e2) {\n return undefined;\n }\n}\n\nexport { defaultRequestInstrumentationOptions, extractNetworkProtocol, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { getActiveSpan, getRootSpan, spanToJSON, SPAN_STATUS_ERROR } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n\n const rootSpan = getRootSpan(activeSpan);\n\n if (WINDOW.document.hidden && rootSpan) {\n const cancelledStatus = 'cancelled';\n\n const { op, status } = spanToJSON(rootSpan);\n\n if (DEBUG_BUILD) {\n logger.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n }\n\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n }\n\n rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n rootSpan.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { startTrackingWebVitals, startTrackingINP, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingInteractions, addHistoryInstrumentationHandler, registerInpInteractionListener, addPerformanceEntries } from '@sentry-internal/browser-utils';\nimport { TRACING_DEFAULTS, registerSpanErrorInstrumentation, getClient, spanToJSON, getCurrentScope, getRootSpan, spanIsSampled, getDynamicSamplingContextFromSpan, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, getIsolationScope, startIdleSpan, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '@sentry/core';\nimport { GLOBAL_OBJ, logger, propagationContextFromHeaders, browserPerformanceTimeOrigin, generatePropagationContext, getDomElement } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\n\n/* eslint-disable max-lines */\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n ...TRACING_DEFAULTS,\n instrumentNavigation: true,\n instrumentPageLoad: true,\n markBackgroundSpan: true,\n enableLongTask: true,\n enableLongAnimationFrame: true,\n enableInp: true,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nconst browserTracingIntegration = ((_options = {}) => {\n registerSpanErrorInstrumentation();\n\n const {\n enableInp,\n enableLongTask,\n enableLongAnimationFrame,\n _experiments: { enableInteractions, enableStandaloneClsSpans },\n beforeStartSpan,\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n markBackgroundSpan,\n traceFetch,\n traceXHR,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n instrumentPageLoad,\n instrumentNavigation,\n } = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false });\n\n if (enableInp) {\n startTrackingINP();\n }\n\n if (\n enableLongAnimationFrame &&\n GLOBAL_OBJ.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n ) {\n startTrackingLongAnimationFrames();\n } else if (enableLongTask) {\n startTrackingLongTasks();\n }\n\n if (enableInteractions) {\n startTrackingInteractions();\n }\n\n const latestRoute = {\n name: undefined,\n source: undefined,\n };\n\n /** Create routing idle transaction. */\n function _createRouteSpan(client, startSpanOptions) {\n const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n const finalStartSpanOptions = beforeStartSpan\n ? beforeStartSpan(startSpanOptions)\n : startSpanOptions;\n\n const attributes = finalStartSpanOptions.attributes || {};\n\n // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n if (startSpanOptions.name !== finalStartSpanOptions.name) {\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n finalStartSpanOptions.attributes = attributes;\n }\n\n latestRoute.name = finalStartSpanOptions.name;\n latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n const idleSpan = startIdleSpan(finalStartSpanOptions, {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n // should wait for finish signal if it's a pageload transaction\n disableAutoFinish: isPageloadTransaction,\n beforeSpanEnd: span => {\n _collectWebVitals();\n addPerformanceEntries(span, { recordClsOnPageloadSpan: !enableStandaloneClsSpans });\n },\n });\n\n function emitFinish() {\n if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n client.emit('idleSpanEnableAutoFinish', idleSpan);\n }\n }\n\n if (isPageloadTransaction && WINDOW.document) {\n WINDOW.document.addEventListener('readystatechange', () => {\n emitFinish();\n });\n\n emitFinish();\n }\n\n return idleSpan;\n }\n\n return {\n name: BROWSER_TRACING_INTEGRATION_ID,\n afterAllSetup(client) {\n let activeSpan;\n let startingUrl = WINDOW.location && WINDOW.location.href;\n\n client.on('startNavigationSpan', startSpanOptions => {\n if (getClient() !== client) {\n return;\n }\n\n if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current root span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeSpan.end();\n }\n\n activeSpan = _createRouteSpan(client, {\n op: 'navigation',\n ...startSpanOptions,\n });\n });\n\n client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n if (getClient() !== client) {\n return;\n }\n\n if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current root span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeSpan.end();\n }\n\n const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n getCurrentScope().setPropagationContext(propagationContext);\n\n activeSpan = _createRouteSpan(client, {\n op: 'pageload',\n ...startSpanOptions,\n });\n });\n\n // A trace should to stay the consistent over the entire time span of one route.\n // Therefore, when the initial pageload or navigation root span ends, we update the\n // scope's propagation context to keep span-specific attributes like the `sampled` decision and\n // the dynamic sampling context valid, even after the root span has ended.\n // This ensures that the trace data is consistent for the entire duration of the route.\n client.on('spanEnd', span => {\n const op = spanToJSON(span).op;\n if (span !== getRootSpan(span) || (op !== 'navigation' && op !== 'pageload')) {\n return;\n }\n\n const scope = getCurrentScope();\n const oldPropagationContext = scope.getPropagationContext();\n\n scope.setPropagationContext({\n ...oldPropagationContext,\n sampled: oldPropagationContext.sampled !== undefined ? oldPropagationContext.sampled : spanIsSampled(span),\n dsc: oldPropagationContext.dsc || getDynamicSamplingContextFromSpan(span),\n });\n });\n\n if (WINDOW.location) {\n if (instrumentPageLoad) {\n startBrowserTracingPageLoadSpan(client, {\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTime: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n },\n });\n }\n\n if (instrumentNavigation) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n startBrowserTracingNavigationSpan(client, {\n name: WINDOW.location.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n },\n });\n }\n });\n }\n }\n\n if (markBackgroundSpan) {\n registerBackgroundTabDetection();\n }\n\n if (enableInteractions) {\n registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n }\n\n if (enableInp) {\n registerInpInteractionListener();\n }\n\n instrumentOutgoingRequests(client, {\n traceFetch,\n traceXHR,\n tracePropagationTargets: client.getOptions().tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n },\n };\n}) ;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the tags.\n */\nfunction startBrowserTracingPageLoadSpan(\n client,\n spanOptions,\n traceOptions,\n) {\n client.emit('startPageLoadSpan', spanOptions, traceOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nfunction startBrowserTracingNavigationSpan(client, spanOptions) {\n getIsolationScope().setPropagationContext(generatePropagationContext());\n getCurrentScope().setPropagationContext(generatePropagationContext());\n\n client.emit('startNavigationSpan', spanOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'navigation' ? span : undefined;\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n latestRoute,\n) {\n let inflightInteractionSpan;\n const registerInteractionTransaction = () => {\n const op = 'ui.action.click';\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const currentRootSpanOp = spanToJSON(rootSpan).op;\n if (['navigation', 'pageload'].includes(currentRootSpanOp )) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n return undefined;\n }\n }\n\n if (inflightInteractionSpan) {\n inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n inflightInteractionSpan.end();\n inflightInteractionSpan = undefined;\n }\n\n if (!latestRoute.name) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n inflightInteractionSpan = startIdleSpan(\n {\n name: latestRoute.name,\n op,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n },\n },\n {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n },\n );\n };\n\n if (WINDOW.document) {\n addEventListener('click', registerInteractionTransaction, { once: false, capture: true });\n }\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, browserTracingIntegration, getMetaContent, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","import { setContext, init as init$1 } from '@sentry/browser';\nimport { applySdkMetadata } from '@sentry/core';\nimport { version } from 'react';\n\n/**\n * Inits the React SDK\n */\nfunction init(options) {\n const opts = {\n ...options,\n };\n\n applySdkMetadata(opts, 'react');\n setContext('react', { version });\n return init$1(opts);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n isStreamResponse && onFinish();\n }, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.4\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.NProgress = factory();\n }\n\n})(this, function() {\n var NProgress = {};\n\n NProgress.version = '0.2.0';\n\n var Settings = NProgress.settings = {\n minimum: 0.08,\n easing: 'ease',\n positionUsing: '',\n speed: 200,\n trickle: true,\n trickleRate: 0.02,\n trickleSpeed: 800,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n template: '
'\n };\n\n /**\n * Updates configuration.\n *\n * NProgress.configure({\n * minimum: 0.1\n * });\n */\n NProgress.configure = function(options) {\n var key, value;\n for (key in options) {\n value = options[key];\n if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n }\n\n return this;\n };\n\n /**\n * Last number.\n */\n\n NProgress.status = null;\n\n /**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n *\n * NProgress.set(0.4);\n * NProgress.set(1.0);\n */\n\n NProgress.set = function(n) {\n var started = NProgress.isStarted();\n\n n = clamp(n, Settings.minimum, 1);\n NProgress.status = (n === 1 ? null : n);\n\n var progress = NProgress.render(!started),\n bar = progress.querySelector(Settings.barSelector),\n speed = Settings.speed,\n ease = Settings.easing;\n\n progress.offsetWidth; /* Repaint */\n\n queue(function(next) {\n // Set positionUsing if it hasn't already been set\n if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n // Add transition\n css(bar, barPositionCSS(n, speed, ease));\n\n if (n === 1) {\n // Fade out\n css(progress, { \n transition: 'none', \n opacity: 1 \n });\n progress.offsetWidth; /* Repaint */\n\n setTimeout(function() {\n css(progress, { \n transition: 'all ' + speed + 'ms linear', \n opacity: 0 \n });\n setTimeout(function() {\n NProgress.remove();\n next();\n }, speed);\n }, speed);\n } else {\n setTimeout(next, speed);\n }\n });\n\n return this;\n };\n\n NProgress.isStarted = function() {\n return typeof NProgress.status === 'number';\n };\n\n /**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n *\n * NProgress.start();\n *\n */\n NProgress.start = function() {\n if (!NProgress.status) NProgress.set(0);\n\n var work = function() {\n setTimeout(function() {\n if (!NProgress.status) return;\n NProgress.trickle();\n work();\n }, Settings.trickleSpeed);\n };\n\n if (Settings.trickle) work();\n\n return this;\n };\n\n /**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * NProgress.done();\n *\n * If `true` is passed, it will show the progress bar even if its hidden.\n *\n * NProgress.done(true);\n */\n\n NProgress.done = function(force) {\n if (!force && !NProgress.status) return this;\n\n return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n };\n\n /**\n * Increments by a random amount.\n */\n\n NProgress.inc = function(amount) {\n var n = NProgress.status;\n\n if (!n) {\n return NProgress.start();\n } else {\n if (typeof amount !== 'number') {\n amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n }\n\n n = clamp(n + amount, 0, 0.994);\n return NProgress.set(n);\n }\n };\n\n NProgress.trickle = function() {\n return NProgress.inc(Math.random() * Settings.trickleRate);\n };\n\n /**\n * Waits for all supplied jQuery promises and\n * increases the progress as the promises resolve.\n *\n * @param $promise jQUery Promise\n */\n (function() {\n var initial = 0, current = 0;\n\n NProgress.promise = function($promise) {\n if (!$promise || $promise.state() === \"resolved\") {\n return this;\n }\n\n if (current === 0) {\n NProgress.start();\n }\n\n initial++;\n current++;\n\n $promise.always(function() {\n current--;\n if (current === 0) {\n initial = 0;\n NProgress.done();\n } else {\n NProgress.set((initial - current) / initial);\n }\n });\n\n return this;\n };\n\n })();\n\n /**\n * (Internal) renders the progress bar markup based on the `template`\n * setting.\n */\n\n NProgress.render = function(fromStart) {\n if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n addClass(document.documentElement, 'nprogress-busy');\n \n var progress = document.createElement('div');\n progress.id = 'nprogress';\n progress.innerHTML = Settings.template;\n\n var bar = progress.querySelector(Settings.barSelector),\n perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n parent = document.querySelector(Settings.parent),\n spinner;\n \n css(bar, {\n transition: 'all 0 linear',\n transform: 'translate3d(' + perc + '%,0,0)'\n });\n\n if (!Settings.showSpinner) {\n spinner = progress.querySelector(Settings.spinnerSelector);\n spinner && removeElement(spinner);\n }\n\n if (parent != document.body) {\n addClass(parent, 'nprogress-custom-parent');\n }\n\n parent.appendChild(progress);\n return progress;\n };\n\n /**\n * Removes the element. Opposite of render().\n */\n\n NProgress.remove = function() {\n removeClass(document.documentElement, 'nprogress-busy');\n removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n var progress = document.getElementById('nprogress');\n progress && removeElement(progress);\n };\n\n /**\n * Checks if the progress bar is rendered.\n */\n\n NProgress.isRendered = function() {\n return !!document.getElementById('nprogress');\n };\n\n /**\n * Determine which positioning CSS rule to use.\n */\n\n NProgress.getPositioningCSS = function() {\n // Sniff on document.body.style\n var bodyStyle = document.body.style;\n\n // Sniff prefixes\n var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n ('MozTransform' in bodyStyle) ? 'Moz' :\n ('msTransform' in bodyStyle) ? 'ms' :\n ('OTransform' in bodyStyle) ? 'O' : '';\n\n if (vendorPrefix + 'Perspective' in bodyStyle) {\n // Modern browsers with 3D support, e.g. Webkit, IE10\n return 'translate3d';\n } else if (vendorPrefix + 'Transform' in bodyStyle) {\n // Browsers without 3D support, e.g. IE9\n return 'translate';\n } else {\n // Browsers without translate() support, e.g. IE7-8\n return 'margin';\n }\n };\n\n /**\n * Helpers\n */\n\n function clamp(n, min, max) {\n if (n < min) return min;\n if (n > max) return max;\n return n;\n }\n\n /**\n * (Internal) converts a percentage (`0..1`) to a bar translateX\n * percentage (`-100%..0%`).\n */\n\n function toBarPerc(n) {\n return (-1 + n) * 100;\n }\n\n\n /**\n * (Internal) returns the correct CSS for changing the bar's\n * position given an n percentage, and speed and ease from Settings\n */\n\n function barPositionCSS(n, speed, ease) {\n var barCSS;\n\n if (Settings.positionUsing === 'translate3d') {\n barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n } else if (Settings.positionUsing === 'translate') {\n barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n } else {\n barCSS = { 'margin-left': toBarPerc(n)+'%' };\n }\n\n barCSS.transition = 'all '+speed+'ms '+ease;\n\n return barCSS;\n }\n\n /**\n * (Internal) Queues a function to be executed.\n */\n\n var queue = (function() {\n var pending = [];\n \n function next() {\n var fn = pending.shift();\n if (fn) {\n fn(next);\n }\n }\n\n return function(fn) {\n pending.push(fn);\n if (pending.length == 1) next();\n };\n })();\n\n /**\n * (Internal) Applies css properties to an element, similar to the jQuery \n * css method.\n *\n * While this helper does assist with vendor prefixed property names, it \n * does not perform any manipulation of values prior to setting styles.\n */\n\n var css = (function() {\n var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n cssProps = {};\n\n function camelCase(string) {\n return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n return letter.toUpperCase();\n });\n }\n\n function getVendorProp(name) {\n var style = document.body.style;\n if (name in style) return name;\n\n var i = cssPrefixes.length,\n capName = name.charAt(0).toUpperCase() + name.slice(1),\n vendorName;\n while (i--) {\n vendorName = cssPrefixes[i] + capName;\n if (vendorName in style) return vendorName;\n }\n\n return name;\n }\n\n function getStyleProp(name) {\n name = camelCase(name);\n return cssProps[name] || (cssProps[name] = getVendorProp(name));\n }\n\n function applyCss(element, prop, value) {\n prop = getStyleProp(prop);\n element.style[prop] = value;\n }\n\n return function(element, properties) {\n var args = arguments,\n prop, \n value;\n\n if (args.length == 2) {\n for (prop in properties) {\n value = properties[prop];\n if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n }\n } else {\n applyCss(element, args[1], args[2]);\n }\n }\n })();\n\n /**\n * (Internal) Determines if an element or space separated list of class names contains a class name.\n */\n\n function hasClass(element, name) {\n var list = typeof element == 'string' ? element : classList(element);\n return list.indexOf(' ' + name + ' ') >= 0;\n }\n\n /**\n * (Internal) Adds a class to an element.\n */\n\n function addClass(element, name) {\n var oldList = classList(element),\n newList = oldList + name;\n\n if (hasClass(oldList, name)) return; \n\n // Trim the opening space.\n element.className = newList.substring(1);\n }\n\n /**\n * (Internal) Removes a class from an element.\n */\n\n function removeClass(element, name) {\n var oldList = classList(element),\n newList;\n\n if (!hasClass(element, name)) return;\n\n // Replace the class name.\n newList = oldList.replace(' ' + name + ' ', ' ');\n\n // Trim the opening and closing spaces.\n element.className = newList.substring(1, newList.length - 1);\n }\n\n /**\n * (Internal) Gets a space separated list of the class names on the element. \n * The list is wrapped with a single space on each end to facilitate finding \n * matches within the list.\n */\n\n function classList(element) {\n return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n }\n\n /**\n * (Internal) Removes an element from the DOM.\n */\n\n function removeElement(element) {\n element && element.parentNode && element.parentNode.removeChild(element);\n }\n\n return NProgress;\n});\n\n","import{default as _}from\"axios\";function L(t,e){let i;return function(...n){clearTimeout(i),i=setTimeout(()=>t.apply(this,n),e)}}function m(t,e){return document.dispatchEvent(new CustomEvent(`inertia:${t}`,e))}var M=t=>m(\"before\",{cancelable:!0,detail:{visit:t}}),H=t=>m(\"error\",{detail:{errors:t}}),$=t=>m(\"exception\",{cancelable:!0,detail:{exception:t}}),N=t=>m(\"finish\",{detail:{visit:t}}),q=t=>m(\"invalid\",{cancelable:!0,detail:{response:t}}),x=t=>m(\"navigate\",{detail:{page:t}}),W=t=>m(\"progress\",{detail:{progress:t}}),X=t=>m(\"start\",{detail:{visit:t}}),K=t=>m(\"success\",{detail:{page:t}});function I(t){return t instanceof File||t instanceof Blob||t instanceof FileList&&t.length>0||t instanceof FormData&&Array.from(t.values()).some(e=>I(e))||typeof t==\"object\"&&t!==null&&Object.values(t).some(e=>I(e))}function A(t,e=new FormData,i=null){t=t||{};for(let n in t)Object.prototype.hasOwnProperty.call(t,n)&&z(e,J(i,n),t[n]);return e}function J(t,e){return t?t+\"[\"+e+\"]\":e}function z(t,e,i){if(Array.isArray(i))return Array.from(i.keys()).forEach(n=>z(t,J(e,n.toString()),i[n]));if(i instanceof Date)return t.append(e,i.toISOString());if(i instanceof File)return t.append(e,i,i.name);if(i instanceof Blob)return t.append(e,i);if(typeof i==\"boolean\")return t.append(e,i?\"1\":\"0\");if(typeof i==\"string\")return t.append(e,i);if(typeof i==\"number\")return t.append(e,`${i}`);if(i==null)return t.append(e,\"\");A(i,t,e)}var B={modal:null,listener:null,show(t){typeof t==\"object\"&&(t=`All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.
${JSON.stringify(t)}`);let e=document.createElement(\"html\");e.innerHTML=t,e.querySelectorAll(\"a\").forEach(n=>n.setAttribute(\"target\",\"_top\")),this.modal=document.createElement(\"div\"),this.modal.style.position=\"fixed\",this.modal.style.width=\"100vw\",this.modal.style.height=\"100vh\",this.modal.style.padding=\"50px\",this.modal.style.boxSizing=\"border-box\",this.modal.style.backgroundColor=\"rgba(0, 0, 0, .6)\",this.modal.style.zIndex=2e5,this.modal.addEventListener(\"click\",()=>this.hide());let i=document.createElement(\"iframe\");if(i.style.backgroundColor=\"white\",i.style.borderRadius=\"5px\",i.style.width=\"100%\",i.style.height=\"100%\",this.modal.appendChild(i),document.body.prepend(this.modal),document.body.style.overflow=\"hidden\",!i.contentWindow)throw new Error(\"iframe not yet ready.\");i.contentWindow.document.open(),i.contentWindow.document.write(e.outerHTML),i.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener(\"keydown\",this.listener)},hide(){this.modal.outerHTML=\"\",this.modal=null,document.body.style.overflow=\"visible\",document.removeEventListener(\"keydown\",this.listener)},hideOnEscape(t){t.keyCode===27&&this.hide()}};import ne from\"deepmerge\";import*as O from\"qs\";function b(t){return new URL(t.toString(),window.location.toString())}function k(t,e,i,n=\"brackets\"){let s=/^https?:\\/\\//.test(e.toString()),l=s||e.toString().startsWith(\"/\"),h=!l&&!e.toString().startsWith(\"#\")&&!e.toString().startsWith(\"?\"),g=e.toString().includes(\"?\")||t===\"get\"&&Object.keys(i).length,f=e.toString().includes(\"#\"),c=new URL(e.toString(),\"http://localhost\");return t===\"get\"&&Object.keys(i).length&&(c.search=O.stringify(ne(O.parse(c.search,{ignoreQueryPrefix:!0}),i),{encodeValuesOnly:!0,arrayFormat:n}),i={}),[[s?`${c.protocol}//${c.host}`:\"\",l?c.pathname:\"\",h?c.pathname.substring(1):\"\",g?c.search:\"\",f?c.hash:\"\"].join(\"\"),i]}function w(t){return t=new URL(t.href),t.hash=\"\",t}var Q=typeof window>\"u\",C=class{constructor(){this.visitId=null}init({initialPage:e,resolveComponent:i,swapComponent:n}){this.page=e,this.resolveComponent=i,this.swapComponent=n,this.setNavigationType(),this.clearRememberedStateOnReload(),this.isBackForwardVisit()?this.handleBackForwardVisit(this.page):this.isLocationVisit()?this.handleLocationVisit(this.page):this.handleInitialPageVisit(this.page),this.setupEventListeners()}setNavigationType(){this.navigationType=window.performance&&window.performance.getEntriesByType(\"navigation\").length>0?window.performance.getEntriesByType(\"navigation\")[0].type:\"navigate\"}clearRememberedStateOnReload(){this.navigationType===\"reload\"&&window.history.state?.rememberedState&&delete window.history.state.rememberedState}handleInitialPageVisit(e){this.page.url+=window.location.hash,this.setPage(e,{preserveState:!0}).then(()=>x(e))}setupEventListeners(){window.addEventListener(\"popstate\",this.handlePopstateEvent.bind(this)),document.addEventListener(\"scroll\",L(this.handleScrollEvent.bind(this),100),!0)}scrollRegions(){return document.querySelectorAll(\"[scroll-region]\")}handleScrollEvent(e){typeof e.target.hasAttribute==\"function\"&&e.target.hasAttribute(\"scroll-region\")&&this.saveScrollPositions()}saveScrollPositions(){this.replaceState({...this.page,scrollRegions:Array.from(this.scrollRegions()).map(e=>({top:e.scrollTop,left:e.scrollLeft}))})}resetScrollPositions(){window.scrollTo(0,0),this.scrollRegions().forEach(e=>{typeof e.scrollTo==\"function\"?e.scrollTo(0,0):(e.scrollTop=0,e.scrollLeft=0)}),this.saveScrollPositions(),window.location.hash&&setTimeout(()=>document.getElementById(window.location.hash.slice(1))?.scrollIntoView())}restoreScrollPositions(){this.page.scrollRegions&&this.scrollRegions().forEach((e,i)=>{let n=this.page.scrollRegions[i];if(n)typeof e.scrollTo==\"function\"?e.scrollTo(n.left,n.top):(e.scrollTop=n.top,e.scrollLeft=n.left);else return})}isBackForwardVisit(){return window.history.state&&this.navigationType===\"back_forward\"}handleBackForwardVisit(e){window.history.state.version=e.version,this.setPage(window.history.state,{preserveScroll:!0,preserveState:!0}).then(()=>{this.restoreScrollPositions(),x(e)})}locationVisit(e,i){try{let n={preserveScroll:i};window.sessionStorage.setItem(\"inertiaLocationVisit\",JSON.stringify(n)),window.location.href=e.href,w(window.location).href===w(e).href&&window.location.reload()}catch{return!1}}isLocationVisit(){try{return window.sessionStorage.getItem(\"inertiaLocationVisit\")!==null}catch{return!1}}handleLocationVisit(e){let i=JSON.parse(window.sessionStorage.getItem(\"inertiaLocationVisit\")||\"\");window.sessionStorage.removeItem(\"inertiaLocationVisit\"),e.url+=window.location.hash,e.rememberedState=window.history.state?.rememberedState??{},e.scrollRegions=window.history.state?.scrollRegions??[],this.setPage(e,{preserveScroll:i.preserveScroll,preserveState:!0}).then(()=>{i.preserveScroll&&this.restoreScrollPositions(),x(e)})}isLocationVisitResponse(e){return!!(e&&e.status===409&&e.headers[\"x-inertia-location\"])}isInertiaResponse(e){return!!e?.headers[\"x-inertia\"]}createVisitId(){return this.visitId={},this.visitId}cancelVisit(e,{cancelled:i=!1,interrupted:n=!1}){e&&!e.completed&&!e.cancelled&&!e.interrupted&&(e.cancelToken.abort(),e.onCancel(),e.completed=!1,e.cancelled=i,e.interrupted=n,N(e),e.onFinish(e))}finishVisit(e){!e.cancelled&&!e.interrupted&&(e.completed=!0,e.cancelled=!1,e.interrupted=!1,N(e),e.onFinish(e))}resolvePreserveOption(e,i){return typeof e==\"function\"?e(i):e===\"errors\"?Object.keys(i.props.errors||{}).length>0:e}cancel(){this.activeVisit&&this.cancelVisit(this.activeVisit,{cancelled:!0})}visit(e,{method:i=\"get\",data:n={},replace:s=!1,preserveScroll:l=!1,preserveState:h=!1,only:g=[],except:f=[],headers:c={},errorBag:o=\"\",forceFormData:v=!1,onCancelToken:T=()=>{},onBefore:d=()=>{},onStart:p=()=>{},onProgress:P=()=>{},onFinish:y=()=>{},onCancel:ie=()=>{},onSuccess:D=()=>{},onError:U=()=>{},queryStringArrayFormat:F=\"brackets\"}={}){let S=typeof e==\"string\"?b(e):e;if((I(n)||v)&&!(n instanceof FormData)&&(n=A(n)),!(n instanceof FormData)){let[r,a]=k(i,S,n,F);S=b(r),n=a}let R={url:S,method:i,data:n,replace:s,preserveScroll:l,preserveState:h,only:g,except:f,headers:c,errorBag:o,forceFormData:v,queryStringArrayFormat:F,cancelled:!1,completed:!1,interrupted:!1};if(d(R)===!1||!M(R))return;this.activeVisit&&this.cancelVisit(this.activeVisit,{interrupted:!0}),this.saveScrollPositions();let G=this.createVisitId();this.activeVisit={...R,onCancelToken:T,onBefore:d,onStart:p,onProgress:P,onFinish:y,onCancel:ie,onSuccess:D,onError:U,queryStringArrayFormat:F,cancelToken:new AbortController},T({cancel:()=>{this.activeVisit&&this.cancelVisit(this.activeVisit,{cancelled:!0})}}),X(R),p(R);let j=!!(g.length||f.length);_({method:i,url:w(S).href,data:i===\"get\"?{}:n,params:i===\"get\"?n:{},signal:this.activeVisit.cancelToken.signal,headers:{...c,Accept:\"text/html, application/xhtml+xml\",\"X-Requested-With\":\"XMLHttpRequest\",\"X-Inertia\":!0,...j?{\"X-Inertia-Partial-Component\":this.page.component}:{},...g.length?{\"X-Inertia-Partial-Data\":g.join(\",\")}:{},...f.length?{\"X-Inertia-Partial-Except\":f.join(\",\")}:{},...o&&o.length?{\"X-Inertia-Error-Bag\":o}:{},...this.page.version?{\"X-Inertia-Version\":this.page.version}:{}},onUploadProgress:r=>{n instanceof FormData&&(r.percentage=r.progress?Math.round(r.progress*100):0,W(r),P(r))}}).then(r=>{if(!this.isInertiaResponse(r))return Promise.reject({response:r});let a=r.data;j&&a.component===this.page.component&&(a.props={...this.page.props,...a.props}),l=this.resolvePreserveOption(l,a),h=this.resolvePreserveOption(h,a),h&&window.history.state?.rememberedState&&a.component===this.page.component&&(a.rememberedState=window.history.state.rememberedState);let E=S,V=b(a.url);return E.hash&&!V.hash&&w(E).href===V.href&&(V.hash=E.hash,a.url=V.href),this.setPage(a,{visitId:G,replace:s,preserveScroll:l,preserveState:h})}).then(()=>{let r=this.page.props.errors||{};if(Object.keys(r).length>0){let a=o?r[o]?r[o]:{}:r;return H(a),U(a)}return K(this.page),D(this.page)}).catch(r=>{if(this.isInertiaResponse(r.response))return this.setPage(r.response.data,{visitId:G});if(this.isLocationVisitResponse(r.response)){let a=b(r.response.headers[\"x-inertia-location\"]),E=S;E.hash&&!a.hash&&w(E).href===a.href&&(a.hash=E.hash),this.locationVisit(a,l===!0)}else if(r.response)q(r.response)&&B.show(r.response.data);else return Promise.reject(r)}).then(()=>{this.activeVisit&&this.finishVisit(this.activeVisit)}).catch(r=>{if(!_.isCancel(r)){let a=$(r);if(this.activeVisit&&this.finishVisit(this.activeVisit),a)return Promise.reject(r)}})}setPage(e,{visitId:i=this.createVisitId(),replace:n=!1,preserveScroll:s=!1,preserveState:l=!1}={}){return Promise.resolve(this.resolveComponent(e.component)).then(h=>{i===this.visitId&&(e.scrollRegions=e.scrollRegions||[],e.rememberedState=e.rememberedState||{},n=n||b(e.url).href===window.location.href,n?this.replaceState(e):this.pushState(e),this.swapComponent({component:h,page:e,preserveState:l}).then(()=>{s||this.resetScrollPositions(),n||x(e)}))})}pushState(e){this.page=e,window.history.pushState(e,\"\",e.url)}replaceState(e){this.page=e,window.history.replaceState(e,\"\",e.url)}handlePopstateEvent(e){if(e.state!==null){let i=e.state,n=this.createVisitId();Promise.resolve(this.resolveComponent(i.component)).then(s=>{n===this.visitId&&(this.page=i,this.swapComponent({component:s,page:i,preserveState:!1}).then(()=>{this.restoreScrollPositions(),x(i)}))})}else{let i=b(this.page.url);i.hash=window.location.hash,this.replaceState({...this.page,url:i.href}),this.resetScrollPositions()}}get(e,i={},n={}){return this.visit(e,{...n,method:\"get\",data:i})}reload(e={}){return this.visit(window.location.href,{...e,preserveScroll:!0,preserveState:!0})}replace(e,i={}){return console.warn(`Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${i.method??\"get\"}() instead.`),this.visit(e,{preserveState:!0,...i,replace:!0})}post(e,i={},n={}){return this.visit(e,{preserveState:!0,...n,method:\"post\",data:i})}put(e,i={},n={}){return this.visit(e,{preserveState:!0,...n,method:\"put\",data:i})}patch(e,i={},n={}){return this.visit(e,{preserveState:!0,...n,method:\"patch\",data:i})}delete(e,i={}){return this.visit(e,{preserveState:!0,...i,method:\"delete\"})}remember(e,i=\"default\"){Q||this.replaceState({...this.page,rememberedState:{...this.page?.rememberedState,[i]:e}})}restore(e=\"default\"){if(!Q)return window.history.state?.rememberedState?.[e]}on(e,i){let n=s=>{let l=i(s);s.cancelable&&!s.defaultPrevented&&l===!1&&s.preventDefault()};return document.addEventListener(`inertia:${e}`,n),()=>document.removeEventListener(`inertia:${e}`,n)}};var re={buildDOMElement(t){let e=document.createElement(\"template\");e.innerHTML=t;let i=e.content.firstChild;if(!t.startsWith(\"