@jaak.ai/stamps 2.5.6-dev.1 → 2.5.6-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cjs/{index-ucw61xdq.js → index-D6NBn_qu.js} +2 -9
  2. package/dist/cjs/{index-ucw61xdq.js.map → index-D6NBn_qu.js.map} +1 -1
  3. package/dist/cjs/jaak-stamps-webcomponent.cjs.js +1 -1
  4. package/dist/cjs/jaak-stamps.cjs.entry.js +11 -5
  5. package/dist/cjs/jaak-stamps.cjs.entry.js.map +1 -1
  6. package/dist/cjs/jaak-stamps.entry.cjs.js.map +1 -1
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/collection/components/my-component/my-component.js +10 -5
  9. package/dist/collection/components/my-component/my-component.js.map +1 -1
  10. package/dist/collection/components/my-component/watermark-fallback.js +2 -0
  11. package/dist/collection/components/my-component/watermark-fallback.js.map +1 -0
  12. package/dist/components/jaak-stamps.js +11 -5
  13. package/dist/components/jaak-stamps.js.map +1 -1
  14. package/dist/esm/{index-CqdAwiLj.js → index-BCfAsrzL.js} +3 -9
  15. package/dist/esm/{index-CqdAwiLj.js.map → index-BCfAsrzL.js.map} +1 -1
  16. package/dist/esm/jaak-stamps-webcomponent.js +2 -2
  17. package/dist/esm/jaak-stamps.entry.js +11 -5
  18. package/dist/esm/jaak-stamps.entry.js.map +1 -1
  19. package/dist/esm/loader.js +2 -2
  20. package/dist/jaak-stamps-webcomponent/jaak-stamps-webcomponent.esm.js +1 -1
  21. package/dist/jaak-stamps-webcomponent/jaak-stamps.entry.esm.js.map +1 -1
  22. package/dist/jaak-stamps-webcomponent/p-5724f34b.entry.js +7 -0
  23. package/dist/jaak-stamps-webcomponent/p-5724f34b.entry.js.map +1 -0
  24. package/dist/jaak-stamps-webcomponent/p-BCfAsrzL.js +3 -0
  25. package/dist/jaak-stamps-webcomponent/{p-CqdAwiLj.js.map → p-BCfAsrzL.js.map} +1 -1
  26. package/dist/types/components/my-component/watermark-fallback.d.ts +1 -0
  27. package/package.json +1 -1
  28. package/dist/jaak-stamps-webcomponent/p-569b2c6e.entry.js +0 -7
  29. package/dist/jaak-stamps-webcomponent/p-569b2c6e.entry.js.map +0 -1
  30. package/dist/jaak-stamps-webcomponent/p-CqdAwiLj.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EventBusService","events","Map","on","event","callback","this","has","set","get","push","off","callbacks","index","indexOf","splice","emit","data","forEach","error","once","onceCallback","clear","StateManagerService","eventBus","captureState","step","isCapturing","isDetectionPaused","isVideoActive","isLoading","showFlipAnimation","showSuccessAnimation","bestScore","hasScreenshotTaken","capturedImages","front","fullFrame","cropped","back","metadata","totalImages","processCompleted","backCaptureSkipped","constructor","getCaptureState","updateCaptureState","updates","previousState","previous","current","changes","getCapturedImages","JSON","parse","stringify","setCapturedImages","images","reset","isProcessCompleted","canProceedToBack","CameraService","availableCameras","selectedCameraId","deviceType","preferredCameraFacing","preferredCamera","static","currentStreamPromise","lastStreamConstraints","detectDeviceType","userAgent","navigator","isMobile","test","isTablet","window","innerWidth","enumerateDevices","now","Date","deviceEnumerationCache","timestamp","CACHE_DURATION","devices","setInitialCameraPreference","permissionStatus","checkCameraPermission","tempStream","mediaDevices","getUserMedia","video","getTracks","track","stop","allCameras","filter","device","kind","camera","isVirtual","isVirtualCamera","console","log","label","length","Error","handleCameraPermissionError","getAvailableCameras","isMultipleCamerasAvailable","getSelectedCameraId","setSelectedCamera","cameraId","find","cam","deviceId","updatePreferredFacing","getPreferredFacing","setupCamera","constraints","finalConstraints","getMaxResolution","constraintsEqual","audio","stream","videoTrack","getVideoTracks","settings","getSettings","currentDevice","basicConstraints","width","ideal","height","facingMode","switchCamera","selectedCamera","isRearCamera","getCameraInfo","availableCamerasWithAutofocus","Promise","all","map","async","hasAutofocus","checkCameraAutofocus","id","selected","preferredFacing","permissions","permission","query","name","state","message","selectFrontCamera","selectBackCamera","selectAutoCamera","cameraCapabilitiesCache","cached","exact","capabilities","getCapabilities","hasFocusMode","focusMode","Array","isArray","includes","frontCameras","toLowerCase","backCameras","lastCamera","videoConstraints","facingConstraint","isMobileDevice","targetWidth","targetHeight","Math","min","max","capabilitiesAny","err","fallbackWidth","fallbackHeight","fallbackConstraints","a","b","clearCaches","invalidateDeviceCache","virtualCameraIndicators","some","indicator","LowMemoryDeviceStrategy","getDeviceInfo","nav","memory","deviceMemory","hardwareConcurrency","connection","mozConnection","webkitConnection","isSlowConnection","effectiveType","estimatedRAM","isLowMemory","getSessionOptions","_debug","executionProviders","graphOptimizationLevel","logSeverityLevel","logVerbosityLevel","enableCpuMemArena","enableMemPattern","executionMode","interOpNumThreads","intraOpNumThreads","shouldUseSequentialLoading","HighPerformanceDeviceStrategy","debug","IOSSafariStrategy","DeviceStrategyFactory","createStrategy","ua","isIOS","DetectionService","useDocumentClassification","useDocumentDetector","session","mobileNetSession","mobileNetClassMap","modelLoaded","deviceStrategy","MODEL_PATH","MODEL_PATH_FP32","MOBILENET_MODEL_PATH","MOBILENET_CLASSES_PATH","INPUT_SIZE","CONFIDENCE_THRESHOLD","useFloat16","preprocessCanvas","preprocessCtx","captureCanvas","initializeCanvasPool","loadModel","sessionOptions","ort","InferenceSession","create","detectFloat16Support","errorMsg","isMemoryError","isFloat16Error","fp32Error","wasmOptions","fallbackOptions","enableProfiling","sessionLogSeverityLevel","sessionLogVerbosityLevel","fallbackError","loadClassificationModel","classResponse","fetch","ok","json","isModelLoaded","preprocess","clearRect","drawImage","imageData","getImageData","R","G","B","i","transposedData","Float32Array","concat","float16Data","Uint16Array","float32ToFloat16","Tensor","runInference","inputTensor","feeds","inputNames","results","run","output","outputNames","detections","x1","y1","x2","y2","score","classId","slice","x","y","w","h","classifyDocument","canvas","preprocessMobileNet","Object","keys","maxIdx","reduce","bestIdx","val","idx","arr","confidence","className","toString","class","classIndex","checkSideAlignment","box","maskConfig","ID1_ASPECT_RATIO","shouldMirrorVideo","alignmentTolerance","maskSize","videoRef","top","right","bottom","left","videoWidth","videoHeight","videoAspectRatio","containerAspectRatio","displayedVideoWidth","displayedVideoHeight","maxWidthByHeight","visualMaskWidth","visualMaskHeight","sizeRatio","modelMaskWidth","modelMaskHeight","maskCenterX","maskCenterY","maskLeft","maskRight","maskTop","maskBottom","docLeft","docRight","docTop","docBottom","originalDocLeft","originalDocRight","tolerance","topAligned","abs","rightAligned","bottomAligned","leftAligned","isCardInFrame","cardCenterX","cardCenterY","frameCenterX","frameCenterY","toleranceX","toleranceY","isCentered","isGoodSize","areAllSidesAligned","alignment","cleanup","cleanupCanvasPool","release","undefined","document","createElement","getContext","alpha","willReadFrequently","testData","value","buffer","ArrayBuffer","view","DataView","setFloat32","f","getUint32","sign","exp","frac","newExp","tempCanvas","getCanvas","tempCtx","hw","returnCanvas","key","canvasPool","pool","pop","ctx","MAX_POOL_SIZE","clearCanvasPools","getPoolStats","stats","_globalThis","globalThis","self","global","VERSION","re","_makeCompatibilityCheck","ownVersion","acceptedVersions","Set","rejectedVersions","myVersionMatch","match","ownVersionParsed","major","minor","patch","prerelease","isExactmatch","globalVersion","_reject","v","add","_accept","isCompatible","globalVersionMatch","globalVersionParsed","split","GLOBAL_OPENTELEMETRY_API_KEY","Symbol","for","_global","registerGlobal","type","instance","diag","allowOverride","_a","api","version","stack","getGlobal","_b","unregisterGlobal","__read","o","n","m","iterator","call","r","ar","e","next","done","__spreadArray","to","from","pack","arguments","l","prototype","DiagComponentLogger","props","_namespace","namespace","args","_i","logProxy","info","warn","verbose","funcName","logger","unshift","apply","DiagLogLevel","createLogLevelDiagLogger","maxLevel","NONE","ALL","_filterFunc","theLevel","theFunc","bind","ERROR","WARN","INFO","DEBUG","VERBOSE","API_NAME","DiagAPI","_logProxy","setLogger","optionsOrLogLevel","_c","logLevel","oldLogger","newLogger","suppressOverrideMessage","disable","createComponentLogger","options","_instance","__values","s","TypeError","BaggageImpl","entries","_entries","getEntry","entry","assign","getAllEntries","k","setEntry","newBaggage","removeEntry","delete","removeEntries","e_1","keys_1","keys_1_1","e_1_1","return","baggageEntryMetadataSymbol","createBaggage","baggageEntryMetadataFromString","str","__TYPE__","createContextKey","description","BaseContext","parentContext","_currentContext","getValue","setValue","context","deleteValue","ROOT_CONTEXT","__extends","extendStatics","d","setPrototypeOf","__proto__","p","hasOwnProperty","String","__","NoopMeter","createGauge","_name","_options","NOOP_GAUGE_METRIC","createHistogram","NOOP_HISTOGRAM_METRIC","createCounter","NOOP_COUNTER_METRIC","createUpDownCounter","NOOP_UP_DOWN_COUNTER_METRIC","createObservableGauge","NOOP_OBSERVABLE_GAUGE_METRIC","createObservableCounter","NOOP_OBSERVABLE_COUNTER_METRIC","createObservableUpDownCounter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","addBatchObservableCallback","_callback","_observables","removeBatchObservableCallback","NoopMetric","NoopCounterMetric","_super","_value","_attributes","NoopUpDownCounterMetric","NoopGaugeMetric","record","NoopHistogramMetric","NoopObservableMetric","addCallback","removeCallback","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","NOOP_METER","createNoopMeter","ValueType","defaultTextMapGetter","carrier","defaultTextMapSetter","NoopContextManager","active","with","_context","fn","thisArg","target","enable","NOOP_CONTEXT_MANAGER","ContextAPI","getInstance","setGlobalContextManager","contextManager","_getContextManager","TraceFlags","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","traceId","spanId","traceFlags","NonRecordingSpan","_spanContext","spanContext","setAttribute","_key","setAttributes","addEvent","addLink","_link","addLinks","_links","setStatus","_status","updateName","end","_endTime","isRecording","recordException","_exception","_time","SPAN_KEY","getSpan","getActiveSpan","setSpan","span","deleteSpan","setSpanContext","getSpanContext","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isValidTraceId","isValidSpanId","isSpanContextValid","wrapSpanContext","contextApi","NoopTracer","startSpan","root","Boolean","parentFromContext","isSpanContext","startActiveSpan","arg2","arg3","arg4","opts","contextWithSpanSet","NOOP_TRACER","ProxyTracer","_provider","_getTracer","_fn","tracer","Reflect","_delegate","getDelegateTracer","NoopTracerProvider","getTracer","_version","NOOP_TRACER_PROVIDER","ProxyTracerProvider","getDelegate","setDelegate","delegate","SamplingDecision","SpanKind","SpanStatusCode","NoopMeterProvider","getMeter","NOOP_METER_PROVIDER","MetricsAPI","setGlobalMeterProvider","provider","getMeterProvider","metrics","NoopTextMapPropagator","inject","_carrier","extract","fields","BAGGAGE_KEY","getBaggage","getActiveBaggage","setBaggage","baggage","deleteBaggage","NOOP_TEXT_MAP_PROPAGATOR","PropagationAPI","setGlobalPropagator","propagator","setter","_getGlobalPropagator","getter","propagation","TraceAPI","_proxyTracerProvider","setGlobalTracerProvider","success","getTracerProvider","trace","SUPPRESS_TRACING_KEY","suppressTracing","isTracingSuppressed","BAGGAGE_KEY_PAIR_SEPARATOR","BAGGAGE_PROPERTIES_SEPARATOR","BAGGAGE_ITEMS_SEPARATOR","BAGGAGE_HEADER","BAGGAGE_MAX_NAME_VALUE_PAIRS","BAGGAGE_MAX_PER_NAME_VALUE_PAIRS","BAGGAGE_MAX_TOTAL_LENGTH","serializeKeyPairs","keyPairs","hValue","getKeyPairs","encodeURIComponent","parsePairKeyValue","valueProps","keyPairPart","shift","separatorIndex","decodeURIComponent","substring","trim","join","W3CBaggagePropagator","pair","headerValue","baggageString","pairs","keyPair","baggageEntry","sanitizeAttributes","attributes","out","isAttributeKey","isAttributeValue","isHomogeneousAttributeValueArray","isValidPrimitiveAttributeValueType","element","elementType","valType","loggingErrorHandler","ex","stringifyException","flattenException","result","getOwnPropertyNames","propertyName","getPrototypeOf","delegateHandler","globalErrorHandler","getNumberFromEnv","_","otperformance","performance","ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","ATTR_SERVICE_NAME","ATTR_TELEMETRY_SDK_LANGUAGE","TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS","ATTR_TELEMETRY_SDK_NAME","ATTR_TELEMETRY_SDK_VERSION","ATTR_PROCESS_RUNTIME_NAME","SDK_INFO","ATTR_PROCESS_RUNTIME_NAME$1","NANOSECOND_DIGITS","NANOSECOND_DIGITS_IN_MILLIS","MILLISECONDS_TO_NANOSECONDS","pow","SECOND_TO_NANOSECONDS","millisToHrTime","epochMillis","epochSeconds","seconds","trunc","nanos","round","getTimeOrigin","timeOrigin","perf","timing","fetchStart","hrTime","performanceNow","addHrTimes","hrTimeDuration","startTime","endTime","hrTimeToNanoseconds","time","isTimeInputHrTime","isTimeInput","time1","time2","ExportResultCode","CompositePropagator","_propagators","_fields","config","propagators","VALID_KEY_CHAR_RANGE","VALID_KEY","VALID_VENDOR_KEY","VALID_KEY_REGEX","RegExp","VALID_VALUE_BASE_REGEX","INVALID_VALUE_COMMA_EQUAL_REGEX","validateKey","validateValue","MAX_TRACE_STATE_ITEMS","MAX_TRACE_STATE_LEN","LIST_MEMBERS_SEPARATOR","LIST_MEMBER_KEY_VALUE_SPLITTER","TraceState","_internalState","rawTraceState","_parse","traceState","_clone","unset","serialize","_keys","agg","reverse","part","listMember","size","TRACE_PARENT_HEADER","TRACE_STATE_HEADER","VERSION_PART","TRACE_ID_PART","PARENT_ID_PART","FLAGS_PART","TRACE_PARENT_REGEX","parseTraceParent","traceParent","exec","parseInt","W3CTraceContextPropagator","Number","traceParentHeader","isRemote","traceStateHeader","objectTag","nullTag","undefinedTag","funcProto","Function","funcToString","objectCtorString","objectProto","symToStringTag","toStringTag","nativeObjectToString","isPlainObject","isObjectLike","baseGetTag","proto","Ctor","getRawTag","objectToString","isOwn","tag","unmasked","MAX_LEVEL","merge","objects","WeakMap","mergeTwoObjects","takeValue","one","two","level","isPrimitive","isFunction","j","isObject","shouldMerge","twoValue","obj1","obj2","wasObjectReferenced","arr1","arr2","obj","Deferred","_promise","_resolve","resolve","reject","promise","BindOnceFuture","_that","_isCalled","_deferred","isCalled","then","defaultServiceName","isPromiseLike","ResourceImpl","_rawAttributes","_asyncAttributesPending","_schemaUrl","_memoizedAttributes","FromAttributeList","res","guardedRawAttributes","resource","validateSchemaUrl","schemaUrl","asyncAttributesPending","waitForAsyncAttributes","attrs","getRawAttributes","mergedSchemaUrl","mergeSchemaUrl","mergedOptions","resourceFromAttributes","defaultResource","ATTR_SERVICE_NAME$1","catch","old","updating","oldSchemaUrl","updatingSchemaUrl","isOldEmpty","isUpdatingEmpty","ExceptionEventName","SpanImpl","parentSpanContext","links","instrumentationScope","_droppedAttributesCount","_droppedEventsCount","_droppedLinksCount","status","code","UNSET","_ended","_duration","_spanProcessor","_spanLimits","_attributeValueLengthLimit","_performanceStartTime","_performanceOffset","_startTimeProvided","spanLimits","attributeValueLengthLimit","spanProcessor","_getTime","scope","onStart","_isSpanEnded","attributeCountLimit","_truncateToSize","attributesOrStartTime","timeStamp","eventCountLimit","droppedAttributesCount","link","onEnd","inp","getTime","msDuration","exception","duration","ended","droppedEventsCount","droppedLinksCount","_truncateToLimitUtil","limit","AlwaysOffSampler","shouldSample","decision","NOT_RECORD","AlwaysOnSampler","RECORD_AND_SAMPLED","ParentBasedSampler","_root","_remoteParentSampled","_remoteParentNotSampled","_localParentSampled","_localParentNotSampled","remoteParentSampled","remoteParentNotSampled","localParentSampled","localParentNotSampled","spanName","spanKind","SAMPLED","TraceIdRatioBasedSampler","_ratio","_upperBound","_normalize","floor","_accumulate","ratio","isNaN","accumulation","pos","TracesSamplerValues","DEFAULT_RATIO","loadDefaultConfig","sampler","buildSamplerFromEnv","forceFlushTimeoutMillis","generalLimits","Infinity","linkCountLimit","attributePerEventCountLimit","attributePerLinkCountLimit","ParentBasedAlwaysOn","AlwaysOn","AlwaysOff","ParentBasedAlwaysOff","TraceIdRatio","getSamplerProbabilityFromEnv","ParentBasedTraceIdRatio","DEFAULT_ATTRIBUTE_COUNT_LIMIT","DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT","mergeConfig","userConfig","perInstanceDefaults","DEFAULT_CONFIG","reconfigureLimits","BatchSpanProcessorBase","_exporter","_maxExportBatchSize","_maxQueueSize","_scheduledDelayMillis","_exportTimeoutMillis","_isExporting","_finishedSpans","_timer","_shutdownOnce","_droppedSpansCount","maxExportBatchSize","maxQueueSize","scheduledDelayMillis","exportTimeoutMillis","_shutdown","forceFlush","_flushAll","_span","_parentContext","_addToBuffer","shutdown","onShutdown","_maybeStartTimer","promises","count","ceil","_flushOneBatch","_clearTimer","timer","setTimeout","spans","doExport","export","clearTimeout","SUCCESS","pendingResources","len","flush","finally","unref","BatchSpanProcessor","_visibilityChangeListener","_pageHideListener","super","onInit","disableAutoFlushOnDocumentHide","visibilityState","addEventListener","removeEventListener","SPAN_ID_BYTES","TRACE_ID_BYTES","RandomIdGenerator","generateTraceId","getIdGenerator","generateSpanId","SHARED_CHAR_CODES_ARRAY","bytes","generateId","random","fromCharCode","Tracer","_sampler","_generalLimits","_idGenerator","_resource","localConfig","idGenerator","api.context","api.trace","parentSpan","api.diag","nonRecordingSpan","api.INVALID_SPAN_CONTEXT","validParentSpanContext","api.SpanKind","INTERNAL","samplingResult","api.SamplingDecision","api.TraceFlags","initAttributes","getGeneralLimits","getSpanLimits","MultiSpanProcessor","_spanProcessors","ForceFlushState","BasicTracerProvider","_config","_tracers","_activeSpanProcessor","mergedConfig","spanProcessors","timeout","timeoutInterval","resolved","errors","StackContextManager","_enabled","_bindFunction","manager","contextWrapper","defineProperty","enumerable","configurable","writable","previousContext","setupContextManager","defaultContextManager","setupPropagator","WebTracerProvider","register","getElementXPath","optimised","nodeType","Node","DOCUMENT_NODE","targetValue","getNodeValue","xpath","parentNode","getNodeIndex","allowedTypes","CDATA_SECTION_NODE","TEXT_NODE","elements","childNodes","localName","nodeValue","ELEMENT_NODE","getAttribute","COMMENT_NODE","OTLPExporterBase","items","resultCallback","OTLPExporterError","validateTimeoutMillis","timeoutMillis","isFinite","wrapStaticHeadersInFunction","headers","mergeOtlpSharedConfigurationWithDefaults","userProvidedConfiguration","fallbackConfiguration","defaultConfiguration","concurrencyLimit","compression","getSharedConfigurationDefaults","BoundedQueueExportPromiseHandler","_concurrencyLimit","_sendingPromises","pushPromise","hasReachedLimit","popPromise","awaitAll","createBoundedQueueExportPromiseHandler","isPartialSuccessResponse","response","createLoggingPartialSuccessResponseHandler","handleResponse","partialSuccess","OTLPExportDelegate","_transport","_serializer","_responseHandler","_promiseQueue","_timeout","_diagLogger","internalRepresentation","FAILED","serializedRequest","serializeRequest","send","deserializeResponse","reason","createOtlpExportDelegate","components","transport","serializer","promiseHandler","createOtlpNetworkExportDelegate","intValue","charCode","hexToBinary","hexStr","buf","Uint8Array","offset","hi","charCodeAt","lo","hrTimeToNanos","NANOSECONDS","BigInt","toLongBits","low","asUintN","high","encodeAsLongBits","encodeAsString","encodeTimestamp","identity","optionalHexToBinary","DEFAULT_ENCODER","encodeHrTime","encodeSpanContext","encodeOptionalSpanContext","getOtlpEncoder","useLongBits","useHex","createResource","toAttributes","createInstrumentationScope","toKeyValue","toAnyValue","t","stringValue","isInteger","doubleValue","boolValue","bytesValue","arrayValue","values","kvlistValue","AggregationTemporality","InstrumentType","DataPointType","EAggregationTemporality","toResourceMetrics","resourceMetrics","encoder","processedResource","scopeMetrics","toScopeMetrics","metricData","toMetric","descriptor","unit","aggregationTemporality","toAggregationTemporality","dataPointType","SUM","sum","isMonotonic","dataPoints","toSingularDataPoints","GAUGE","gauge","HISTOGRAM","histogram","toHistogramDataPoints","EXPONENTIAL_HISTOGRAM","exponentialHistogram","toExponentialHistogramDataPoints","toSingularDataPoint","dataPoint","valueType","startTimeUnixNano","timeUnixNano","INT","asInt","DOUBLE","asDouble","bucketCounts","buckets","counts","explicitBounds","boundaries","positive","negative","scale","zeroCount","temporality","DELTA","AGGREGATION_TEMPORALITY_DELTA","CUMULATIVE","AGGREGATION_TEMPORALITY_CUMULATIVE","createExportMetricsServiceRequest","SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK","SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK","buildSpanFlagsFrom","flags","sdkSpanToOtlpSpan","parentSpanId","endTimeUnixNano","toOtlpSpanEvent","toOtlpLink","timedEvent","createExportTraceServiceRequest","resourceSpans","spanRecordsToResourceSpans","createResourceMap","readableSpans","resourceMap","ilsMap","instrumentationScopeKey","records","entryIterator","ilmMap","scopeResourceSpans","ilmIterator","ilmEntry","scopeSpans","readableSpan","transformedSpans","JsonMetricsSerializer","arg","request","TextEncoder","encode","decoder","TextDecoder","decode","JsonTraceSerializer","MAX_ATTEMPTS","INITIAL_BACKOFF","MAX_BACKOFF","BACKOFF_MULTIPLIER","JITTER","getJitter","RetryingTransport","retry","inMillis","deadline","attempts","nextBackoff","backoff","retryInMillis","remainingTimeoutMillis","createRetryingTransport","isExportRetryable","statusCode","retryCodes","parseRetryAfterToMills","retryAfter","delay","XhrTransport","_parameters","xhr","XMLHttpRequest","open","url","setRequestHeader","ontimeout","onreadystatechange","getResponseHeader","onabort","onerror","createXhrTransport","parameters","SendBeaconTransport","_params","blobType","sendBeacon","Blob","createSendBeaconTransport","FetchTransport","abortController","AbortController","abort","isBrowserEnvironment","location","URL","href","method","body","signal","keepalive","mode","origin","cause","createFetchTransport","createOtlpXhrExportDelegate","createOtlpFetchExportDelegate","createOtlpSendBeaconExportDelegate","validateAndNormalizeHeaders","partialHeaders","mergeHeaders","userProvidedHeaders","fallbackHeaders","defaultHeaders","requiredHeaders","validateUserProvidedUrl","base","mergeOtlpHttpConfigurationWithDefaults","getHttpConfigurationDefaults","signalResourcePath","convertLegacyHeaders","convertLegacyBrowserHttpOptions","createLegacyOtlpBrowserExportDelegate","inferExportDelegateToUse","configHeaders","OTLPTraceExporter","isListenerObject","ZONE_CONTEXT_KEY","ZoneContextManager","_zoneCounter","_activeContextFromZone","activeZone","_bindListener","__ot_listeners","_patchAddEventListener","_patchRemoveEventListener","_createZoneName","_createZone","zoneName","Zone","fork","properties","ZONE_CONTEXT_KEY$1","_getActiveZone","original","listener","listeners","patchedListener","newZone","__assign","factory","__symbol__","symbolPrefix","initZone","mark","performanceMeasure","ZoneImpl","parent","zoneSpec","_parent","_properties","_zoneDelegate","_ZoneDelegate","assertZonePatched","patches","zone","_currentZoneFrame","_currentTask","__load_patch","ignoreDuplicate","checkDuplicate","perfName","_api","getZoneWith","wrap","source","intercept","runGuarded","applyThis","applyArgs","invoke","handleError","runTask","task","NO_ZONE","zoneTask","isPeriodic","_d","isRefreshable","notScheduled","eventTask","macroTask","reEntryGuard","running","_transitionTo","scheduled","previousTask","cancelFn","invokeTask","unknown","scheduling","zoneDelegates","_zoneDelegates","_updateTaskCount","scheduleTask","_zone","scheduleMicroTask","customSchedule","ZoneTask","microTask","scheduleMacroTask","customCancel","scheduleEventTask","cancelTask","canceling","runCount","DELEGATE_ZS","onHasTask","hasTaskState","hasTask","onScheduleTask","onInvokeTask","onCancelTask","parentDelegate","_taskCounts","_parentDelegate","_forkZS","onFork","_forkDlgt","_forkCurrZone","_interceptZS","onIntercept","_interceptDlgt","_interceptCurrZone","_invokeZS","onInvoke","_invokeDlgt","_invokeCurrZone","_handleErrorZS","onHandleError","_handleErrorDlgt","_handleErrorCurrZone","_scheduleTaskZS","_scheduleTaskDlgt","_scheduleTaskCurrZone","_invokeTaskZS","_invokeTaskDlgt","_invokeTaskCurrZone","_cancelTaskZS","_cancelTaskDlgt","_cancelTaskCurrZone","_hasTaskZS","_hasTaskDlgt","_hasTaskDlgtOwner","_hasTaskCurrZone","zoneSpecHasTask","parentHasTask","targetZone","returnTask","scheduleFn","isEmpty","prev","change","_state","useG","_numberOfNestedTaskFrames","drainMicroTaskQueue","cancelScheduleRequest","toState","fromState1","fromState2","handleId","toJSON","symbolSetTimeout","symbolPromise","symbolThen","_microTaskQueue","_isDrainingMicrotaskQueue","nativeMicroTaskQueuePromise","nativeScheduleMicroTask","func","nativeThen","queue","onUnhandledError","microtaskDrainDone","symbol","currentZoneFrame","noop","showUncaughtError","patchEventTarget","patchOnProperties","patchMethod","bindArguments","patchThen","patchMacroTask","patchEventPrototype","isIEOrEdge","getGlobalObjects","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectCreate","ArraySlice","patchClass","wrapWithCurrentZone","filterProperties","attachOriginToPatched","_redefineProperty","patchCallbacks","loadZone","getOwnPropertyDescriptor","ObjectGetPrototypeOf","ADD_EVENT_LISTENER_STR","REMOVE_EVENT_LISTENER_STR","ZONE_SYMBOL_ADD_EVENT_LISTENER","ZONE_SYMBOL_REMOVE_EVENT_LISTENER","TRUE_STR","FALSE_STR","ZONE_SYMBOL_PREFIX","scheduleMacroTaskWithCurrentZone","zoneSymbol","isWindowExists","internalWindow","REMOVE_ATTRIBUTE","patchPrototype","fnNames","_loop_1","name_1","prototypeDesc","isPropertyWritable","patched","propertyDesc","isWebWorker","WorkerGlobalScope","isNode","process","isBrowser","isMix","zoneSymbolEventNames$1","enableBeforeunloadSymbol","wrapFn","eventNameSymbol","errorEvent","filename","lineno","colno","preventDefault","returnValue","patchProperty","prop","desc","onPropPatchedSymbol","originalDescGet","originalDescSet","eventName","newValue","previousValue","removeAttribute","onProperties","originalInstanceKey","OriginalClass","patchFn","delegateName","patchDelegate_1","metaCreator","setNative","cbIdx","meta","isDetectedIEOrEdge","ieOrEdge","isNumber","OPTIMIZED_ZONE_EVENT_TASK_DATA","zoneSymbolEventNames","globalSources","EVENT_NAME_SYMBOL_REGX","IMMEDIATE_PROPAGATION_SYMBOL","prepareEventNames","eventNameToString","falseEventName","trueEventName","symbolCapture","apis","patchOptions","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","rm","LISTENERS_EVENT_LISTENER","REMOVE_ALL_LISTENERS_EVENT_LISTENER","rmAll","zoneSymbolAddEventListener","ADD_EVENT_LISTENER_SOURCE","PREPEND_EVENT_LISTENER","PREPEND_EVENT_LISTENER_SOURCE","isRemoved","handleEvent","originalDelegate","delegate_1","globalCallback","isCapture","tasks","copyTasks","_loop_2","globalZoneAwareCallback","globalZoneAwareCaptureCallback","patchEventTargetMethods","useGlobalCallback","validateHandler","vh","chkDup","returnTarget","rt","taskData","nativeAddEventListener","nativeRemoveEventListener","nativeListeners","nativeRemoveAllListeners","nativePrependEventListener","prepend","buildEventListenerOptions","passive","capture","customScheduleGlobal","isExisting","customCancelGlobal","symbolEventNames","symbolEventName","existingTasks","existingTask","removeAbortListener","allRemoved","customScheduleNonGlobal","customSchedulePrepend","customCancelNonGlobal","compareTaskCallbackVsDelegate","typeOfDelegate","compare","diff","unpatchedEvents","passiveEvents","copyEventListenerOptions","newOptions","makeAddListener","nativeListener","addSource","customScheduleFn","customCancelFn","transferEventName","isEventListenerObject","aborted","constructorName","targetSource","onAbort_1","onPropertySymbol","findEventTasks","evtName","symbolCaptureEventName","captureTasks","removeTasks","foundTasks","captureFalseTasks","captureTrueTasks","Event","patchQueueMicrotask","taskSymbol","patchTimer","setName","cancelName","nameSuffix","clearNative","tasksByHandleId","handleOrId","handle","refresh","clearTask","options_1","callback_1","handle_1","handleId_1","isPeriodic_1","isRefreshable_1","task_1","originalRefresh_1","patchCustomElements","customElements","eventTargetPatch","eventNames","EVENT_TARGET","patchEvent","ignoreProperties","tip","ip","targetIgnoreProperties","op","patchFilteredProperties","filteredProperties","getOnEventNames","startsWith","propertyDescriptorPatch","patchTargets","internalWindow_1","ignoreErrorProperties","patchBrowser","legacyPatch","blockingMethods","name_2","XMLHttpRequestEventTarget","patchXHR","XHR_TASK","XHR_SYNC","XHR_LISTENER","XHR_SCHEDULED","XHR_URL","XHR_ERROR_BEFORE_SCHEDULED","XMLHttpRequestPrototype","findPendingTask","oriAddListener","oriRemoveListener","XMLHttpRequestEventTarget_1","XMLHttpRequestEventTargetPrototype","READY_STATE_CHANGE","SCHEDULED","newListener","readyState","DONE","loadTasks","oriInvoke_1","storedTask","sendNative","placeholderCallback","abortNative","openNative","XMLHTTPREQUEST_SOURCE","fetchTaskAborting","fetchTaskScheduling","geolocation","findPromiseRejectionHandler","eventTasks","PromiseRejectionEvent","evt","rejection","patchPromise","readableObjectToString","_uncaughtPromiseErrors","isDisableWrappingUncaughtPromiseRejection","creationTrace","_loop_3","uncaughtPromiseError","throwOriginal","handleUnhandledRejection","UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL","handler","isThenable","forwardResolution","forwardRejection","ZoneAwarePromise","symbolState","symbolValue","symbolFinally","symbolParentPromiseValue","symbolParentPromiseState","UNRESOLVED","RESOLVED","REJECTED","REJECTED_NO_CATCH","makeResolver","resolvePromise","wasCalled","wrapper","wrappedFunction","TYPE_ERROR","CURRENT_TASK_TRACE_SYMBOL","onceWrapper","clearRejectedNoCatch","currentTask","scheduleResolveOrReject","REJECTION_HANDLED_HANDLER","chainPromise","onFulfilled","onRejected","promiseState","parentPromiseValue","isFinallyPromise","ZONE_AWARE_PROMISE_TO_STRING","AggregateError","executor","withResolvers","rej","any","values_1","finished","race","onResolve","onReject","values_2","allWithCallback","allSettled","P","thenCallback","errorCallback","unresolvedCount","valueIndex","resolvedValues","_loop_4","this_1","curValueIndex","thenErr","values_3","species","C","onFinally","NativePromise","symbolThenPatched","originalThen","_this","wrapped","zoneify","resultPromise","ctor","patchToString","originalFunctionToString","ORIGINAL_DELEGATE_SYMBOL","PROMISE_SYMBOL","ERROR_SYMBOL","newFunctionToString","nativePromise","nativeError","originalObjectToString","PROMISE_OBJECT_TO_STRING","targetName","nativeDelegate","patchUtil","SYMBOL_BLACK_LISTED_EVENTS","SYMBOL_UNPATCHED_EVENTS","patchCommon","Zone$1","NoopLogger","_logRecord","NOOP_LOGGER","NoopLoggerProvider","getLogger","NOOP_LOGGER_PROVIDER","ProxyLogger","logRecord","_getLogger","_getDelegateLogger","ProxyLoggerProvider","_getDelegate","_setDelegate","GLOBAL_LOGS_API_KEY","makeGetter","requiredVersion","fallback","API_BACKWARDS_COMPATIBILITY_VERSION","LogsAPI","_proxyLoggerProvider","setGlobalLoggerProvider","getLoggerProvider","logs","enableInstrumentations","instrumentations","tracerProvider","meterProvider","loggerProvider","instrumentation","setTracerProvider","setMeterProvider","setLoggerProvider","getConfig","enabled","disableInstrumentations","registerInstrumentations","flat","propertyIsEnumerable","nodule","massWrap","nodules","names","unwrap","__unwrap","massUnwrap","InstrumentationAbstract","instrumentationName","instrumentationVersion","_tracer","_meter","_logger","_diag","setConfig","_updateMetricInstruments","_wrap","shimmer.wrap","_unwrap","shimmer.unwrap","_massWrap","shimmer.massWrap","_massUnwrap","shimmer.massUnwrap","meter","getModuleDefinitions","initResult","init","_runSpanCustomizationHook","hookHandler","triggerName","InstrumentationBase","isWrapped","__original","__wrapped","AttributeNames","PACKAGE_VERSION","PACKAGE_NAME","EVENT_NAVIGATION_NAME","DEFAULT_EVENT_NAMES","defaultShouldPreventSpanCreation","UserInteractionInstrumentation","moduleName","_spansData","_wrappedListeners","_eventsSpanMap","_eventNames","_shouldPreventSpanCreation","shouldPreventSpanCreation","_checkForTimeout","spanData","hrTimeLastTimeout","_allowEventName","_createSpan","HTMLElement","hasAttribute","EVENT_TYPE","TARGET_ELEMENT","tagName","TARGET_XPATH","HTTP_URL","taskCount","_decrementTask","_tryToEndSpan","_getCurrentSpan","_incrementTask","addPatchedListener","wrappedListener","listener2Type","element2patched","removePatchedListener","_invokeListener","plugin","addEventListenerPatched","useCapture","removeEventListenerPatched","_getPatchableEventTargets","EventTarget","Window","_patchHistoryApi","_unpatchHistoryApi","history","_patchHistoryMethod","patchHistoryMethod","pathname","hash","search","urlAfter","_updateInteractionName","replaceState","pushState","forward","go","_patchZoneCancelTask","patchCancelTask","currentZone","currentSpan","_shouldCountTask","_patchZoneScheduleTask","patchScheduleTask","_patchZoneRunTask","patchRunTask","ZoneWithPrototype","_getZoneWithPrototype","_zonePatched","targets","_window","LIBVERSION","EMPTY","UNKNOWN","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","UA_MAX_LENGTH","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","EDGE","FIREFOX","GOOGLE","HONOR","HUAWEI","LENOVO","LG","MICROSOFT","MOTOROLA","NVIDIA","ONEPLUS","OPERA","OPPO","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","SUFFIX_BROWSER","extend","regexes","extensions","mergedRegexes","enumerize","enums","toUpperCase","str1","str2","lowerize","majorize","replace","rgxMapper","arrays","q","matches","regex","strMapper","oldSafariMap","windowsVersionMap","ME","XP","Vista","RT","browser","cpu","OnePlus","tablet","engine","os","UAParser","getResult","_navigator","_ua","_uach","userAgentData","_rgxmap","_isSelfNav","getBrowser","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","platform","getUA","setUA","CPU","DEVICE","ENGINE","OS","module","exports","$","jQuery","Zepto","parser","ATTR_SERVICE_VERSION","AUTH_TOKEN","interceptorsInstalled","installAuthInterceptors","RealXHR","originalOpen","originalSend","isCollectorRequest","urlString","originalFetch","input","Headers","TracingService","sessionTraceId","collectorUrl","serviceName","serviceVersion","customerId","tenantId","environment","enableAutoInstrumentation","geoCache","geoCacheTimestamp","GEO_CACHE_DURATION_MS","initialize","baseExporter","Authorization","useSendBeacon","exporter","initializeAutoInstrumentation","_eventType","vendor","model","getBrowserInfo","getOSInfo","setSessionTraceId","getSessionTraceId","crypto","getRandomValues","byte","padStart","getGeoLocation","AbortSignal","country","country_name","region","city","latitude","longitude","currentContext","remoteSpanContext","remoteSpan","deviceInfo","browserInfo","osInfo","component","user_agent","geo","endSpan","addSpanEvent","setSpanAttribute","OK","traceAsync","getCurrentTraceId","getCurrentSpanId","hashAttributes","sort","instrumentationScopeId","TimeoutError","callWithTimeout","timeoutHandle","timeoutPromise","timeoutFunction","timeoutHandler","setEquals","lhs","rhs","item","binarySearchUB","ret","mid","equalsCaseInsensitive","AggregatorKind","DropAggregator","DROP","createAccumulation","_previous","_delta","_current","toMetricData","_descriptor","_aggregationTemporality","_accumulationByAttributes","createNewEmptyCheckpoint","hasMinMax","HistogramAccumulation","_boundaries","_recordMinMax","recordMinMax","setStartTime","toPointValue","HistogramAggregator","delta","deltaValue","previousCounts","deltaCounts","mergedCounts","currentValue","currentCounts","diffedCounts","accumulationByAttributes","pointValue","allowsNegativeValues","UP_DOWN_COUNTER","OBSERVABLE_GAUGE","OBSERVABLE_UP_DOWN_COUNTER","Buckets","backing","indexBase","indexStart","indexEnd","BucketsBacking","at","position","bias","countAt","incrementBucket","bucketIndex","increment","decrementBucket","decrement","_rotate","downscale","by","each","inpos","outpos","mod","_relocateBucket","clone","dest","src","emptyBucket","_counts","growTo","newSize","oldPositiveLimit","newPositiveLimit","tmp","fill","num","SIGNIFICAND_WIDTH","EXPONENT_MASK","SIGNIFICAND_MASK","EXPONENT_BIAS","MIN_NORMAL_EXPONENT","MAX_NORMAL_EXPONENT","MIN_VALUE","getNormalBase2","dv","setFloat64","hiBits","expBits","getSignificand","loBits","significandHiBits","ldexp","POSITIVE_INFINITY","NEGATIVE_INFINITY","nextGreaterSquare","MappingError","ExponentMapping","_shift","mapToIndex","ieee754.MIN_VALUE","_minNormalLowerBoundaryIndex","ieee754.getNormalBase2","correction","_rightShift","ieee754.getSignificand","ieee754.SIGNIFICAND_WIDTH","lowerBoundary","minIndex","maxIndex","_maxNormalLowerBoundaryIndex","util.ldexp","ieee754.MIN_NORMAL_EXPONENT","ieee754.MAX_NORMAL_EXPONENT","LogarithmMapping","_scale","_scaleFactor","_inverseFactor","LOG2E","LN2","MIN_SCALE","MAX_SCALE","PREBUILT_MAPPINGS","getMapping","HighLow","combine","h1","h2","DEFAULT_MAX_SIZE","MIN_MAX_SIZE","ExponentialHistogramAccumulation","_maxSize","_sum","_count","_zeroCount","_min","_max","_positive","_negative","_mapping","maxSize","mapping","updateByIncrement","_updateBuckets","minScale","_minScale","_downscale","_mergeBuckets","other","_diffBuckets","rescalingNeeded","_changeScale","_incrementIndexBy","_grow","needed","newScale","highLowPos","_highLowAtScale","highLowNeg","currentScale","ours","theirs","theirOffset","theirChange","ourIndex","ExponentialHistogramAggregator","hrTimeToMicroseconds","_export","internal","LastValueAccumulation","sampleTime","LastValueAggregator","LAST_VALUE","latestAccumulation","SumAccumulation","monotonic","SumAggregator","prevPv","deltaPv","currPv","DropAggregation","createAggregator","_instrument","DEFAULT_INSTANCE","SumAggregation","instrument","COUNTER","OBSERVABLE_COUNTER","MONOTONIC_INSTANCE","NON_MONOTONIC_INSTANCE","LastValueAggregation","HistogramAggregation","ExplicitBucketHistogramAggregation","minusInfinityIndex","lastIndexOf","infinityIndex","ExponentialHistogramAggregation","DefaultAggregation","SUM_AGGREGATION","LAST_VALUE_AGGREGATION","advice","explicitBucketBoundaries","HISTOGRAM_AGGREGATION","DROP_AGGREGATION","DEFAULT_AGGREGATION","AggregationType","toAggregation","option","DEFAULT","expOption","EXPLICIT_BUCKET_HISTOGRAM","DEFAULT_AGGREGATION_SELECTOR","_instrumentType","DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR","MetricReader","_metricProducers","_sdkMetricProducer","_aggregationTemporalitySelector","_aggregationSelector","_cardinalitySelector","aggregationSelector","aggregationTemporalitySelector","metricProducers","cardinalitySelector","setMetricProducer","metricProducer","onInitialized","selectAggregation","instrumentType","selectAggregationTemporality","selectCardinalityLimit","collect","sdkCollectionResults","additionalCollectionResults","producer","flatMap","onForceFlush","PeriodicExportingMetricReader","_interval","_exportInterval","_exportTimeout","exportIntervalMillis","_runOnce","_doRun","setInterval","clearInterval","argv0","ViewRegistry","_registeredViews","addView","findViews","views","registeredView","_matchInstrument","instrumentSelector","_matchMeter","meterSelector","selector","getType","getNameFilter","getUnitFilter","getVersionFilter","getSchemaUrlFilter","createInstrumentDescriptor","isValidName","createInstrumentDescriptorWithView","isDescriptorCompatibleWith","otherDescriptor","NAME_REGEXP","SyncInstrument","_writableMetricStorage","writableMetricStorage","_record","UpDownCounterInstrument","CounterInstrument","GaugeInstrument","HistogramInstrument","ObservableInstrument","_metricStorages","_observableRegistry","metricStorages","observableRegistry","ObservableCounterInstrument","ObservableGaugeInstrument","ObservableUpDownCounterInstrument","isObservableInstrument","it","Meter","_meterSharedState","meterSharedState","storage","registerMetricStorage","storages","registerAsyncMetricStorage","observables","addBatchCallback","removeBatchCallback","MetricStorage","_instrumentDescriptor","instrumentDescriptor","getInstrumentDescriptor","updateDescription","HashMap","_valueMap","_keyMap","_hash","hashCode","getOrDefault","defaultFactory","keyIterator","valueIterator","AttributeHashMap","DeltaMetricProcessor","_activeCollectionStorage","_cumulativeMemoStorage","_cardinalityLimit","_overflowAttributes","_overflowHashCode","_aggregator","aggregator","aggregationCardinalityLimit","collectionTime","overflowAccumulation","batchCumulate","measurements","unreportedDelta","TemporalMetricProcessor","_unreportedAccumulations","_reportHistory","collectorHandles","buildMetrics","collector","currentAccumulations","_stashAccumulations","unreportedAccumulations","_getMergedUnreportedAccumulations","last","lastCollectionTime","accumulations","calibrateStartTime","accumulationRecords","AttributesMapToAccumulationRecords","currentAccumulation","registeredCollectors","stash","unreportedList","lastAccumulation","AsyncMetricStorage","_aggregationCardinalityLimit","_deltaMetricStorage","_temporalMetricStorage","_attributesProcessor","attributesProcessor","observationTime","processed","getIncompatibilityDetails","existing","incompatibility","getValueTypeConflictResolutionRecipe","getUnitConflictResolutionRecipe","getTypeConflictResolutionRecipe","selectorString","getDescriptionResolutionRecipe","getConflictResolutionRecipe","MetricStorageRegistry","_sharedRegistry","_perCollectorRegistry","getStorages","perCollectorStorages","_registerStorage","registerForCollector","storageMap","findOrUpdateCompatibleStorage","expectedDescriptor","_findOrUpdateCompatibleStorage","findOrUpdateCompatibleCollectorStorage","existingStorages","compatibleStorage","existingStorage","existingDescriptor","MultiMetricStorage","_backingStorages","backingStorages","recordTime","ObservableResultImpl","_buffer","_instrumentName","_valueType","instrumentName","observe","BatchObservableResultImpl","metric","ObservableRegistry","_callbacks","_batchCallbacks","_findCallback","instruments","observableInstruments","_findBatchCallback","callbackFutures","_observeCallbacks","batchCallbackFutures","_observeBatchCallbacks","rejections","observableResult","callPromise","metricStorage","findIndex","SyncMetricStorage","NoopAttributesProcessor","incoming","MultiAttributesProcessor","_processors","processors","filteredAttributes","processor","createNoopAttributesProcessor","NOOP","createMultiAttributesProcessor","MeterSharedState","metricStorageRegistry","_meterProviderSharedState","_instrumentationScope","meterProviderSharedState","_registerMetricStorage","metricDataList","MetricStorageType","viewRegistry","viewDescriptor","aggregation","viewStorage","metricCollectors","perCollectorAggregations","selectAggregations","collectorStorages","cardinalityLimit","MeterProviderSharedState","meterSharedStates","getMeterSharedState","MetricCollector","_sharedState","_metricReader","sharedState","metricReader","meterCollectionPromises","ESCAPE","PatternPredicate","_matchAll","_regexp","pattern","escapePattern","hasWildcard","ExactPredicate","_pattern","InstrumentSelector","_nameFilter","_type","_unitFilter","criteria","MeterSelector","_versionFilter","_schemaUrlFilter","isSelectorNotProvided","instrumentUnit","meterName","meterVersion","meterSchemaUrl","validateViewOptions","viewOptions","View","attributesProcessors","MeterProvider","viewOption","readers","AggregationTemporalityPreference","CumulativeTemporalitySelector","DeltaTemporalitySelector","LowMemoryTemporalitySelector","chooseTemporalitySelectorFromEnvironment","configuredTemporality","chooseTemporalitySelector","temporalityPreference","LOWMEMORY","freeze","chooseAggregationSelector","aggregationPreference","OTLPMetricExporterBase","OTLPMetricExporter","MetricsService","captureCounter","errorCounter","modelLoadCounter","userInteractionCounter","captureLatencyHistogram","modelLoadLatencyHistogram","detectionLatencyHistogram","imageSizeHistogram","activeSessionsGauge","memoryUsageGauge","activeSessions","gaugeValues","initializeMetrics","baseAttributes","getBaseAttributes","memInfo","usedJSHeapSize","incrementCounter","baseAttrs","allAttrs","counter","recordHistogram","setGauge","measureDuration","recordCapture","side","durationMs","recordError","errorType","operation","error_type","recordModelLoad","modelType","model_type","recordDetection","detectionsFound","detections_found","recordImageSize","sizeBytes","updateActiveSessions","recordUserInteraction","interactionType","interaction_type","ServiceContainer","services","cleanedUp","initializeServices","stateManager","cameraService","detectionService","tracingService","enableTelemetry","telemetryCollectorUrl","propagateTraceHeaderCorsUrls","metricsService","enableMetrics","metricsCollectorUrl","metricsExportIntervalMillis","service","getEventBus","getStateManager","getCameraService","getDetectionService","getTracingService","getMetricsService","updateConfig","POWERED_BY_JAAK_FALLBACK","LicenseValidationService","apiEndpoint","baseUrl","dev","qa","sandbox","prod","ENVIRONMENT_URLS","validateLicense","license","appId","effectiveTraceId","requestBody","app_id","product","sdk_version","errorData","error_description","statusText","status_code","responseData","array","extractTraceIdFromLicense","myComponentCss","JaakStamps","cropMargin","captureDelay","enableBackDocumentTimer","backDocumentTimerDuration","licenseEnvironment","captureCompleted","isReady","traceIdGenerated","detectionBoxes","sideAlignment","isMaskReady","showCameraSelector","isSwitchingCamera","hasDocumentDetected","cameraInfoWithAutofocus","currentStatus","isInitialized","performanceData","fps","inferenceTime","memoryUsage","onnxLoadTime","frameProcessingTime","totalDetections","successfulDetections","detectionRate","backDocumentTimerRemaining","showManualCaptureButton","performanceDegradedMode","showPerformanceMessage","captureStateVersion","processingButton","licenseValid","licenseError","classificationDisabled","licenseValidationService","serviceContainer","detectionContainer","videoStream","animationId","lastDetectedBox","alignmentStartTime","alignmentTimer","backDocumentTimer","orientationTimer","performanceMetrics","lastUpdateTime","performanceUpdateInterval","frameSkipCounter","BASE_FRAME_SKIP","MAX_FRAME_SKIP","consecutiveFailures","MAX_FAILURES","lastInferenceTime","MIN_INFERENCE_INTERVAL","MOBILE_MIN_INFERENCE_INTERVAL","performanceHistory","PERFORMANCE_HISTORY_SIZE","PERFORMANCE_THRESHOLD_MS","SLOW_FRAMES_TO_TRIGGER","slowFrameCount","processedFramesCount","hasAutoSwitchedToManual","_manualModeLoggedOnce","VIDEO_DIAGNOSTIC_EVENTS","MAX_CANVAS_POOL_SIZE","componentWillLoad","updateStatus","componentDidLoad","setupEventListeners","initializeComponent","initializePerformanceMonitor","propagateUrls","access_token","handleStateChange","validateProps","updateCameraInfoWithAutofocus","loadOnnxRuntime","initializeResizeObserver","validOptions","ORT_VERSION","ORT_CDN_BASE","script","head","appendChild","onload","env","wasm","wasmPaths","simd","numThreads","proxy","finalizeInitialization","hasPermissions","checkCameraPermissions","emitReadyEvent","isDocumentReady","resizeObserver","ResizeObserver","handleResize","parentElement","container","rect","getBoundingClientRect","updateMaskDimensions","triggerRerender","getGuideText","containerRect","videoOffsetX","videoOffsetY","maskWidthInVideo","maskHeightInVideo","maskWidthPercent","maskHeightPercent","videoCenterX","videoCenterY","videoCenterXPercent","videoCenterYPercent","el","style","setProperty","isComponentReady","ready","readyCheck","startCapture","startDetection","stopCapture","exitSession","resetCapture","resetDetection","skipBackCapture","completeProcess","getStatus","captureStep","hasImages","isModelPreloaded","componentStatus","componentMessage","preloadModel","loadStartTime","detectionStartTime","modelSpan","detectionLoadTime","modelError","switchToManualModeWithError","classificationStartTime","classSpan","classificationLoadTime","classificationError","loadEndTime","loadTime","recordOnnxPerformance","setPreferredCamera","setCaptureDelay","getCaptureDelay","checkDeviceCapabilities","canUseML","memoryMB","debugLog","details","debugWarn","summarizeId","getCameraDevicesSnapshot","groupId","sanitizeTrackSettings","sanitizeTrackConstraints","getConstraints","sanitizedConstraints","getStreamSnapshot","hasStream","streamActive","trackCount","hasVideoTrack","trackLabel","trackEnabled","trackMuted","muted","trackReadyState","getVideoElementSnapshot","hasVideoRef","computedStyle","ownerDocument","defaultView","getComputedStyle","isConnected","networkState","paused","autoplay","playsInline","currentTime","toFixed","clientWidth","clientHeight","hasSrcObject","srcObject","display","visibility","attachVideoDiagnosticListeners","switchToManualModeWithWarning","memoryInfo","cameras","enumerateError","cameraInfo","cameraInfoError","setupError","initializeVideoStream","videoError","detectFrame","detachVideoDiagnosticListeners","isRear","LOAD_METADATA_TIMEOUT_MS","waitStart","trackEvents","recordTrackEvent","onTrackMute","onTrackUnmute","onTrackEnded","cleanupTrackListeners","captureDiagnostics","computed","waitedMs","videoTrackCount","audioTrackCount","getAudioTracks","frameRate","offsetWidth","offsetHeight","hasFocus","finalizeStreamInitialization","play","playError","settled","onloadedmetadata","timeoutId","diagnostics","frameStartTime","requestAnimationFrame","currentFrameSkip","getAdaptiveFrameSkip","minInterval","inferenceStartTime","preprocessError","inferenceError","detection","isWellPositioned","effectiveScore","wasDocumentDetected","startBackDocumentTimer","updateDetectionBoxes","updateMaskColor","frameEndTime","totalFrameTime","switchToManualMode","recordFrameProcessing","disconnectedCallback","cancelAnimationFrame","releaseOnnxResources","render","viewBox","xmlns","stroke","cx","cy","ref","playsinline","opacity","border","pointerEvents","boxSizing","onClick","takeManualScreenshot","disabled","toggleCameraSelector","title","handleCameraSwitch","alt","onError","img","boxes","containerWidth","containerHeight","scaleX","scaleY","det","cardOutline","shadowRoot","querySelector","corners","querySelectorAll","topSide","rightSide","bottomSide","leftSide","bestBox","currentAlignment","best","classList","toggle","allSidesAligned","anyBorderAligned","corner","alignmentDuration","takeScreenshot","remove","captureStartTime","takeScreenshotWithMaskCoordinates","captureDuration","triggerCaptureAnimation","getPooledCanvas","captureCtx","parseFloat","getPropertyValue","maskCenterXPercent","maskCenterYPercent","maskWidthInContainer","maskHeightInContainer","maskCenterXInContainer","maskCenterYInContainer","maskCenterXInVideo","maskCenterYInVideo","cropX","cropY","cropWidth","cropHeight","croppedCanvas","croppedCtx","toDataURL","classification","returnCanvasToPool","classifyError","frontImageData","croppedImageData","backImageData","croppedBackImageData","stopPerformanceMonitoring","resetMaskToWhite","warningMessage","continueWithCameraSetup","errorMessage","skippedBack","stopDetection","finalImages","toISOString","clearBackDocumentTimer","currentCameraId","newStream","fallbackStream","currentCaptureState","wasVideoActive","updatePerformanceMetrics","deltaTime","processingTime","mobileBaseSkip","avgProcessingTime","matchingIndex"],"sources":["src/services/EventBusService.ts","src/services/StateManagerService.ts","src/services/CameraService.ts","src/services/strategies/LowMemoryDeviceStrategy.ts","src/services/strategies/HighPerformanceDeviceStrategy.ts","src/services/strategies/IOSSafariStrategy.ts","src/services/factories/DeviceStrategyFactory.ts","src/services/DetectionService.ts","node_modules/@opentelemetry/api/build/esm/platform/browser/globalThis.js","node_modules/@opentelemetry/api/build/esm/version.js","node_modules/@opentelemetry/api/build/esm/internal/semver.js","node_modules/@opentelemetry/api/build/esm/internal/global-utils.js","node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js","node_modules/@opentelemetry/api/build/esm/diag/types.js","node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js","node_modules/@opentelemetry/api/build/esm/api/diag.js","node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js","node_modules/@opentelemetry/api/build/esm/baggage/internal/symbol.js","node_modules/@opentelemetry/api/build/esm/baggage/utils.js","node_modules/@opentelemetry/api/build/esm/context/context.js","node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js","node_modules/@opentelemetry/api/build/esm/metrics/Metric.js","node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js","node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js","node_modules/@opentelemetry/api/build/esm/api/context.js","node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js","node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js","node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js","node_modules/@opentelemetry/api/build/esm/trace/context-utils.js","node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js","node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js","node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js","node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js","node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js","node_modules/@opentelemetry/api/build/esm/trace/SamplingResult.js","node_modules/@opentelemetry/api/build/esm/trace/span_kind.js","node_modules/@opentelemetry/api/build/esm/trace/status.js","node_modules/@opentelemetry/api/build/esm/context-api.js","node_modules/@opentelemetry/api/build/esm/diag-api.js","node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js","node_modules/@opentelemetry/api/build/esm/api/metrics.js","node_modules/@opentelemetry/api/build/esm/metrics-api.js","node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js","node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js","node_modules/@opentelemetry/api/build/esm/api/propagation.js","node_modules/@opentelemetry/api/build/esm/propagation-api.js","node_modules/@opentelemetry/api/build/esm/api/trace.js","node_modules/@opentelemetry/api/build/esm/trace-api.js","node_modules/@opentelemetry/core/build/esm/trace/suppress-tracing.js","node_modules/@opentelemetry/core/build/esm/baggage/constants.js","node_modules/@opentelemetry/core/build/esm/baggage/utils.js","node_modules/@opentelemetry/core/build/esm/baggage/propagation/W3CBaggagePropagator.js","node_modules/@opentelemetry/core/build/esm/common/attributes.js","node_modules/@opentelemetry/core/build/esm/common/logging-error-handler.js","node_modules/@opentelemetry/core/build/esm/common/global-error-handler.js","node_modules/@opentelemetry/core/build/esm/platform/browser/environment.js","node_modules/@opentelemetry/core/build/esm/platform/browser/performance.js","node_modules/@opentelemetry/core/build/esm/version.js","node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js","node_modules/@opentelemetry/core/build/esm/semconv.js","node_modules/@opentelemetry/core/build/esm/platform/browser/sdk-info.js","node_modules/@opentelemetry/core/build/esm/common/time.js","node_modules/@opentelemetry/core/build/esm/ExportResult.js","node_modules/@opentelemetry/core/build/esm/propagation/composite.js","node_modules/@opentelemetry/core/build/esm/internal/validators.js","node_modules/@opentelemetry/core/build/esm/trace/TraceState.js","node_modules/@opentelemetry/core/build/esm/trace/W3CTraceContextPropagator.js","node_modules/@opentelemetry/core/build/esm/utils/lodash.merge.js","node_modules/@opentelemetry/core/build/esm/utils/merge.js","node_modules/@opentelemetry/core/build/esm/utils/promise.js","node_modules/@opentelemetry/core/build/esm/utils/callback.js","node_modules/@opentelemetry/resources/build/esm/platform/browser/default-service-name.js","node_modules/@opentelemetry/resources/build/esm/utils.js","node_modules/@opentelemetry/resources/build/esm/ResourceImpl.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/enums.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/Span.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/Sampler.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/AlwaysOffSampler.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/AlwaysOnSampler.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/ParentBasedSampler.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/TraceIdRatioBasedSampler.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/config.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/utility.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/export/BatchSpanProcessorBase.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/browser/export/BatchSpanProcessor.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/browser/RandomIdGenerator.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/Tracer.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/MultiSpanProcessor.js","node_modules/@opentelemetry/sdk-trace-base/build/esm/BasicTracerProvider.js","node_modules/@opentelemetry/sdk-trace-web/build/esm/StackContextManager.js","node_modules/@opentelemetry/sdk-trace-web/build/esm/WebTracerProvider.js","node_modules/@opentelemetry/sdk-trace-web/build/esm/utils.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/OTLPExporterBase.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/types.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/shared-configuration.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/bounded-queue-export-promise-handler.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/logging-response-handler.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-export-delegate.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-network-export-delegate.js","node_modules/@opentelemetry/otlp-transformer/build/esm/common/hex-to-binary.js","node_modules/@opentelemetry/otlp-transformer/build/esm/common/utils.js","node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js","node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationTemporality.js","node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricData.js","node_modules/@opentelemetry/otlp-transformer/build/esm/metrics/internal-types.js","node_modules/@opentelemetry/otlp-transformer/build/esm/metrics/internal.js","node_modules/@opentelemetry/otlp-transformer/build/esm/trace/internal.js","node_modules/@opentelemetry/otlp-transformer/build/esm/metrics/json/metrics.js","node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/trace.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/retrying-transport.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/is-export-retryable.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/xhr-transport.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/send-beacon-transport.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/fetch-transport.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-browser-http-export-delegate.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/util.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-http-configuration.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-http-options.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-browser-http-options.js","node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/create-legacy-browser-delegate.js","node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/browser/OTLPTraceExporter.js","node_modules/@opentelemetry/context-zone-peer-dep/build/esm/util.js","node_modules/@opentelemetry/context-zone-peer-dep/build/esm/ZoneContextManager.js","node_modules/zone.js/bundles/zone.umd.js","node_modules/@opentelemetry/api-logs/build/esm/NoopLogger.js","node_modules/@opentelemetry/api-logs/build/esm/NoopLoggerProvider.js","node_modules/@opentelemetry/api-logs/build/esm/ProxyLogger.js","node_modules/@opentelemetry/api-logs/build/esm/ProxyLoggerProvider.js","node_modules/@opentelemetry/api-logs/build/esm/platform/browser/globalThis.js","node_modules/@opentelemetry/api-logs/build/esm/internal/global-utils.js","node_modules/@opentelemetry/api-logs/build/esm/api/logs.js","node_modules/@opentelemetry/api-logs/build/esm/index.js","node_modules/@opentelemetry/instrumentation/build/esm/autoLoaderUtils.js","node_modules/@opentelemetry/instrumentation/build/esm/autoLoader.js","node_modules/@opentelemetry/instrumentation/build/esm/shimmer.js","node_modules/@opentelemetry/instrumentation/build/esm/instrumentation.js","node_modules/@opentelemetry/instrumentation/build/esm/platform/browser/instrumentation.js","node_modules/@opentelemetry/instrumentation/build/esm/utils.js","node_modules/@opentelemetry/instrumentation-user-interaction/build/esm/enums/AttributeNames.js","node_modules/@opentelemetry/instrumentation-user-interaction/build/esm/version.js","node_modules/@opentelemetry/instrumentation-user-interaction/build/esm/instrumentation.js","node_modules/ua-parser-js/src/ua-parser.js","src/services/TracingService.ts","node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationTemporality.js","node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricData.js","node_modules/@opentelemetry/sdk-metrics/build/esm/utils.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/types.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Drop.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Histogram.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/Buckets.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/ieee754.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/util.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/types.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/ExponentMapping.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/LogarithmMapping.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/getMapping.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/ExponentialHistogram.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/trace/suppress-tracing.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/common/logging-error-handler.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/common/global-error-handler.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/version.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/semconv.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/platform/browser/sdk-info.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/common/time.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/ExportResult.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/internal/exporter.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core/build/esm/index.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/LastValue.js","node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Sum.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/Aggregation.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/AggregationOption.js","node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationSelector.js","node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricReader.js","node_modules/@opentelemetry/sdk-metrics/build/esm/export/PeriodicExportingMetricReader.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources/build/esm/default-service-name.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources/build/esm/utils.js","node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources/build/esm/ResourceImpl.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/ViewRegistry.js","node_modules/@opentelemetry/sdk-metrics/build/esm/InstrumentDescriptor.js","node_modules/@opentelemetry/sdk-metrics/build/esm/Instruments.js","node_modules/@opentelemetry/sdk-metrics/build/esm/Meter.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricStorage.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/HashMap.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/DeltaMetricProcessor.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/TemporalMetricProcessor.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/AsyncMetricStorage.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/RegistrationConflicts.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricStorageRegistry.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/MultiWritableMetricStorage.js","node_modules/@opentelemetry/sdk-metrics/build/esm/ObservableResult.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/ObservableRegistry.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/SyncMetricStorage.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/AttributesProcessor.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/MeterSharedState.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/MeterProviderSharedState.js","node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricCollector.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/Predicate.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/InstrumentSelector.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/MeterSelector.js","node_modules/@opentelemetry/sdk-metrics/build/esm/view/View.js","node_modules/@opentelemetry/sdk-metrics/build/esm/MeterProvider.js","node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationTemporality.js","node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricData.js","node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics/build/esm/view/AggregationOption.js","node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/OTLPMetricExporterOptions.js","node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/OTLPMetricExporterBase.js","node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/platform/browser/OTLPMetricExporter.js","src/services/MetricsService.ts","src/services/ServiceContainer.ts","src/components/my-component/watermark-fallback.ts","src/services/LicenseValidationService.ts","src/components/my-component/my-component.css?tag=jaak-stamps&encapsulation=shadow","src/components/my-component/my-component.tsx"],"sourcesContent":["import { IEventBus, EventCallback } from './interfaces/IEventBus';\n\nexport class EventBusService implements IEventBus {\n private events: Map<string, EventCallback[]> = new Map();\n\n on<T = any>(event: string, callback: EventCallback<T>): void {\n if (!this.events.has(event)) {\n this.events.set(event, []);\n }\n this.events.get(event)!.push(callback as EventCallback);\n }\n\n off(event: string, callback: EventCallback): void {\n const callbacks = this.events.get(event);\n if (callbacks) {\n const index = callbacks.indexOf(callback);\n if (index > -1) {\n callbacks.splice(index, 1);\n }\n }\n }\n\n emit<T = any>(event: string, data?: T): void {\n const callbacks = this.events.get(event);\n if (callbacks) {\n callbacks.forEach(callback => {\n try {\n callback(data);\n } catch (error) {\n // Silently handle callback errors\n }\n });\n }\n }\n\n once<T = any>(event: string, callback: EventCallback<T>): void {\n const onceCallback = (data: T) => {\n callback(data);\n this.off(event, onceCallback as EventCallback);\n };\n this.on(event, onceCallback);\n }\n\n clear(): void {\n this.events.clear();\n }\n}","import { IStateManager, CaptureState, CapturedImages } from './interfaces/IStateManager';\nimport { IEventBus } from './interfaces/IEventBus';\n\nexport class StateManagerService implements IStateManager {\n private captureState: CaptureState = {\n step: 'front',\n isCapturing: false,\n isDetectionPaused: false,\n isVideoActive: false,\n isLoading: false,\n showFlipAnimation: false,\n showSuccessAnimation: false,\n bestScore: 0,\n hasScreenshotTaken: false\n };\n\n private capturedImages: CapturedImages = {\n front: {\n fullFrame: null,\n cropped: null\n },\n back: {\n fullFrame: null,\n cropped: null\n },\n metadata: {\n totalImages: 0,\n processCompleted: false,\n backCaptureSkipped: false\n }\n };\n\n constructor(private eventBus: IEventBus) {}\n\n getCaptureState(): CaptureState {\n return { ...this.captureState };\n }\n\n updateCaptureState(updates: Partial<CaptureState>): void {\n const previousState = { ...this.captureState };\n this.captureState = { ...this.captureState, ...updates };\n \n // Emit state change event\n this.eventBus.emit('state-changed', {\n previous: previousState,\n current: this.captureState,\n changes: updates\n });\n }\n\n getCapturedImages(): CapturedImages {\n return JSON.parse(JSON.stringify(this.capturedImages));\n }\n\n setCapturedImages(images: Partial<CapturedImages>): void {\n this.capturedImages = {\n ...this.capturedImages,\n ...images,\n metadata: {\n ...this.capturedImages.metadata,\n ...images.metadata\n }\n };\n\n // Update total images count\n let totalImages = 0;\n if (this.capturedImages.front.fullFrame && this.capturedImages.front.cropped) {\n totalImages += 2;\n }\n if (this.capturedImages.back.fullFrame && this.capturedImages.back.cropped) {\n totalImages += 2;\n }\n this.capturedImages.metadata.totalImages = totalImages;\n }\n\n reset(): void {\n this.captureState = {\n step: 'front',\n isCapturing: false,\n isDetectionPaused: false,\n isVideoActive: false,\n isLoading: false,\n showFlipAnimation: false,\n showSuccessAnimation: false,\n bestScore: 0,\n hasScreenshotTaken: false\n };\n\n this.capturedImages = {\n front: {\n fullFrame: null,\n cropped: null\n },\n back: {\n fullFrame: null,\n cropped: null\n },\n metadata: {\n totalImages: 0,\n processCompleted: false,\n backCaptureSkipped: false\n }\n };\n\n this.eventBus.emit('state-changed', {\n previous: null,\n current: this.captureState,\n changes: { reset: true }\n });\n }\n\n isProcessCompleted(): boolean {\n return this.captureState.step === 'completed';\n }\n\n canProceedToBack(): boolean {\n return this.captureState.step === 'front' && \n this.capturedImages.front.fullFrame !== null && \n this.capturedImages.front.cropped !== null;\n }\n}","import { ICameraService, CameraInfo } from './interfaces/ICameraService';\nimport { IEventBus } from './interfaces/IEventBus';\n\nexport class CameraService implements ICameraService {\n private availableCameras: MediaDeviceInfo[] = [];\n private selectedCameraId: string | null = null;\n private deviceType: 'mobile' | 'desktop' | 'tablet' = 'desktop';\n private preferredCameraFacing: 'environment' | 'user' | null = null;\n private preferredCamera: 'auto' | 'front' | 'back' = 'auto';\n\n // Optimization: Static caches for performance\n private static cameraCapabilitiesCache = new Map<string, boolean | string>();\n private static deviceEnumerationCache: {\n devices: MediaDeviceInfo[];\n timestamp: number;\n } | null = null;\n private static readonly CACHE_DURATION = 30000; // 30 seconds\n \n // Stream management for optimization\n private currentStreamPromise?: Promise<MediaStream>;\n private lastStreamConstraints?: MediaTrackConstraints;\n\n constructor(\n private eventBus: IEventBus,\n preferredCamera: 'auto' | 'front' | 'back' = 'auto'\n ) {\n this.preferredCamera = preferredCamera;\n }\n\n async detectDeviceType(): Promise<'mobile' | 'desktop' | 'tablet'> {\n const userAgent = navigator.userAgent;\n const isMobile = /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);\n const isTablet = /iPad|Android/i.test(userAgent) && window.innerWidth >= 768;\n \n if (isTablet) {\n this.deviceType = 'tablet';\n } else if (isMobile) {\n this.deviceType = 'mobile';\n } else {\n this.deviceType = 'desktop';\n }\n \n \n return this.deviceType;\n }\n\n async enumerateDevices(): Promise<MediaDeviceInfo[]> {\n try {\n // Check cache first for optimization\n const now = Date.now();\n if (CameraService.deviceEnumerationCache &&\n (now - CameraService.deviceEnumerationCache.timestamp) < CameraService.CACHE_DURATION) {\n this.availableCameras = CameraService.deviceEnumerationCache.devices;\n await this.setInitialCameraPreference();\n this.eventBus.emit('camera-changed', this.selectedCameraId);\n return this.availableCameras;\n }\n\n const permissionStatus = await this.checkCameraPermission();\n\n if (permissionStatus === 'denied') {\n return [];\n }\n\n if (permissionStatus === 'prompt') {\n const tempStream = await navigator.mediaDevices.getUserMedia({ video: true });\n tempStream.getTracks().forEach(track => track.stop());\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const allCameras = devices.filter(device => device.kind === 'videoinput');\n\n // Filter out virtual cameras\n this.availableCameras = allCameras.filter(camera => {\n const isVirtual = this.isVirtualCamera(camera);\n if (isVirtual) {\n console.log(`Virtual camera detected and filtered: ${camera.label}`);\n }\n return !isVirtual;\n });\n\n // Check if there are physical cameras available\n if (this.availableCameras.length === 0) {\n console.log('No physical cameras available');\n this.eventBus.emit('error', new Error('Cámaras virtuales no están permitidas. Use una cámara física.'));\n return [];\n }\n\n // Cache the results for optimization\n CameraService.deviceEnumerationCache = {\n devices: this.availableCameras,\n timestamp: now\n };\n\n await this.setInitialCameraPreference();\n\n this.eventBus.emit('camera-changed', this.selectedCameraId);\n\n return this.availableCameras;\n } catch (error) {\n this.handleCameraPermissionError(error);\n return [];\n }\n }\n\n getAvailableCameras(): MediaDeviceInfo[] {\n return [...this.availableCameras];\n }\n\n isMultipleCamerasAvailable(): boolean {\n return this.availableCameras.length > 1;\n }\n\n getSelectedCameraId(): string | null {\n return this.selectedCameraId;\n }\n\n async setSelectedCamera(cameraId: string): Promise<void> {\n const camera = this.availableCameras.find(cam => cam.deviceId === cameraId);\n if (!camera) {\n throw new Error(`Camera with ID ${cameraId} not found`);\n }\n \n this.selectedCameraId = cameraId;\n this.updatePreferredFacing(camera);\n this.eventBus.emit('camera-changed', cameraId);\n }\n\n getPreferredFacing(): 'environment' | 'user' | null {\n return this.preferredCameraFacing;\n }\n\n async setupCamera(constraints?: MediaTrackConstraints): Promise<MediaStream> {\n try {\n const finalConstraints = constraints || await this.getMaxResolution();\n\n // Optimization: Check if we can reuse existing stream with same constraints\n if (this.currentStreamPromise && this.constraintsEqual(finalConstraints, this.lastStreamConstraints)) {\n return await this.currentStreamPromise;\n }\n\n // Create new stream promise for lazy loading\n this.currentStreamPromise = navigator.mediaDevices.getUserMedia({\n video: finalConstraints,\n audio: false\n });\n\n this.lastStreamConstraints = finalConstraints;\n\n const stream = await this.currentStreamPromise;\n\n // Validate that active stream is not from a virtual camera\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n const settings = videoTrack.getSettings();\n const deviceId = settings.deviceId;\n if (deviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const currentDevice = devices.find(device => device.deviceId === deviceId);\n if (currentDevice && this.isVirtualCamera(currentDevice)) {\n console.log(`Virtual camera detected in active stream: ${currentDevice.label}`);\n stream.getTracks().forEach(track => track.stop());\n throw new Error('Cámaras virtuales no están permitidas. Use una cámara física.');\n }\n }\n }\n\n return stream;\n } catch (error) {\n\n // Fallback to basic constraints if getMaxResolution fails\n const basicConstraints: MediaTrackConstraints = {\n width: { ideal: 1280 },\n height: { ideal: 720 }\n };\n\n // Only add facingMode if not on desktop to avoid OverconstrainedError\n if (this.deviceType !== 'desktop' && this.preferredCameraFacing) {\n basicConstraints.facingMode = this.preferredCameraFacing;\n }\n\n this.currentStreamPromise = navigator.mediaDevices.getUserMedia({\n video: basicConstraints,\n audio: false\n });\n\n this.lastStreamConstraints = basicConstraints;\n\n const stream = await this.currentStreamPromise;\n\n // Validate fallback stream as well\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n const settings = videoTrack.getSettings();\n const deviceId = settings.deviceId;\n if (deviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const currentDevice = devices.find(device => device.deviceId === deviceId);\n if (currentDevice && this.isVirtualCamera(currentDevice)) {\n console.log(`Virtual camera detected in fallback stream: ${currentDevice.label}`);\n stream.getTracks().forEach(track => track.stop());\n throw new Error('Cámaras virtuales no están permitidas. Use una cámara física.');\n }\n }\n }\n\n return stream;\n }\n }\n\n async switchCamera(cameraId: string): Promise<void> {\n const selectedCamera = this.availableCameras.find(cam => cam.deviceId === cameraId);\n if (!selectedCamera) {\n await this.enumerateDevices();\n return;\n }\n\n // Validate that the target camera is not virtual\n if (this.isVirtualCamera(selectedCamera)) {\n console.log(`Attempted to switch to virtual camera: ${selectedCamera.label}`);\n this.eventBus.emit('error', new Error('No se puede cambiar a cámara virtual'));\n return;\n }\n\n await this.setSelectedCamera(cameraId);\n }\n\n\n\n\n isRearCamera(stream: MediaStream): boolean {\n const videoTrack = stream.getVideoTracks()[0];\n if (!videoTrack) return false;\n \n const settings = videoTrack.getSettings();\n return settings.facingMode === 'environment';\n }\n\n async getCameraInfo(): Promise<{\n availableCameras: CameraInfo[];\n selectedCameraId: string | null;\n deviceType: string;\n isMultipleCamerasAvailable: boolean;\n preferredFacing: 'environment' | 'user' | null;\n }> {\n const availableCamerasWithAutofocus = await Promise.all(\n this.availableCameras.map(async (camera) => {\n const hasAutofocus = await this.checkCameraAutofocus(camera.deviceId);\n return {\n id: camera.deviceId,\n label: camera.label || 'Unknown Camera',\n selected: camera.deviceId === this.selectedCameraId,\n hasAutofocus\n };\n })\n );\n\n return {\n availableCameras: availableCamerasWithAutofocus,\n selectedCameraId: this.selectedCameraId,\n deviceType: this.deviceType,\n isMultipleCamerasAvailable: this.isMultipleCamerasAvailable(),\n preferredFacing: this.preferredCameraFacing\n };\n }\n\n private async checkCameraPermission(): Promise<'granted' | 'denied' | 'prompt'> {\n try {\n if (!navigator.permissions) {\n return 'prompt';\n }\n \n const permission = await navigator.permissions.query({ name: 'camera' as PermissionName });\n return permission.state;\n } catch (error) {\n return 'prompt';\n }\n }\n\n private handleCameraPermissionError(error: any): void {\n this.availableCameras = [];\n this.eventBus.emit('error', new Error(`Camera permission error: ${error.message}`));\n }\n\n private async setInitialCameraPreference(): Promise<void> {\n if (this.availableCameras.length === 0) return;\n \n \n if (this.preferredCamera === 'front') {\n await this.selectFrontCamera();\n } else if (this.preferredCamera === 'back') {\n await this.selectBackCamera();\n } else {\n await this.selectAutoCamera();\n }\n \n }\n\n private async checkCameraAutofocus(deviceId: string): Promise<boolean> {\n try {\n // Check cache first for optimization\n if (CameraService.cameraCapabilitiesCache.has(deviceId)) {\n const cached = CameraService.cameraCapabilitiesCache.get(deviceId)!;\n return typeof cached === 'boolean' ? cached : false;\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({\n video: { deviceId: { exact: deviceId } }\n });\n \n const videoTrack = stream.getVideoTracks()[0];\n const capabilities = videoTrack.getCapabilities() as any;\n \n stream.getTracks().forEach(track => track.stop());\n \n const hasFocusMode = capabilities.focusMode && Array.isArray(capabilities.focusMode) && capabilities.focusMode.length > 0;\n const hasAutofocus = hasFocusMode && (\n capabilities.focusMode.includes('continuous') || \n capabilities.focusMode.includes('auto')\n );\n \n // Cache the result for future use\n CameraService.cameraCapabilitiesCache.set(deviceId, hasAutofocus);\n \n return hasAutofocus;\n } catch (error) {\n // Cache negative result to avoid repeated failures\n CameraService.cameraCapabilitiesCache.set(deviceId, false);\n return false;\n }\n }\n\n private async selectFrontCamera(): Promise<void> {\n this.preferredCameraFacing = 'user';\n \n const frontCameras = this.availableCameras.filter(camera => {\n const label = camera.label.toLowerCase();\n return label.includes('front') || \n label.includes('user') ||\n label.includes('selfie') ||\n label.includes('frontal') ||\n (!label.includes('back') && !label.includes('rear') && !label.includes('environment'));\n });\n \n let selectedCamera = null;\n \n if (frontCameras.length > 0) {\n for (const camera of frontCameras) {\n const hasAutofocus = await this.checkCameraAutofocus(camera.deviceId);\n if (hasAutofocus) {\n selectedCamera = camera;\n break;\n }\n }\n \n if (!selectedCamera) {\n selectedCamera = frontCameras[0];\n }\n }\n \n this.selectedCameraId = selectedCamera ? selectedCamera.deviceId : this.availableCameras[0].deviceId;\n }\n\n private async selectBackCamera(): Promise<void> {\n this.preferredCameraFacing = 'environment';\n \n const backCameras = this.availableCameras.filter(camera => {\n const label = camera.label.toLowerCase();\n return label.includes('back') || \n label.includes('rear') ||\n label.includes('environment') ||\n label.includes('trasera') ||\n label.includes('posterior');\n });\n \n let selectedCamera = null;\n \n if (backCameras.length > 0) {\n for (const camera of backCameras) {\n const hasAutofocus = await this.checkCameraAutofocus(camera.deviceId);\n if (hasAutofocus) {\n selectedCamera = camera;\n break;\n }\n }\n \n if (!selectedCamera) {\n selectedCamera = backCameras[0];\n }\n } else if (this.availableCameras.length > 1) {\n const lastCamera = this.availableCameras[this.availableCameras.length - 1];\n const hasAutofocus = await this.checkCameraAutofocus(lastCamera.deviceId);\n selectedCamera = hasAutofocus ? lastCamera : this.availableCameras[this.availableCameras.length - 1];\n }\n \n this.selectedCameraId = selectedCamera ? selectedCamera.deviceId : this.availableCameras[0].deviceId;\n }\n\n private async selectAutoCamera(): Promise<void> {\n if (this.deviceType === 'mobile' || this.deviceType === 'tablet') {\n await this.selectBackCamera();\n } else {\n // For desktop, prefer front camera (usually built-in webcam)\n await this.selectFrontCamera();\n }\n }\n\n private updatePreferredFacing(camera: MediaDeviceInfo): void {\n const isRearCamera = camera.label.toLowerCase().includes('back') || \n camera.label.toLowerCase().includes('rear') ||\n camera.label.toLowerCase().includes('environment');\n this.preferredCameraFacing = isRearCamera ? 'environment' : 'user';\n }\n\n private async getMaxResolution(): Promise<MediaTrackConstraints> {\n try {\n // Ensure device type is detected before determining constraints\n if (!this.deviceType || this.deviceType === 'desktop') {\n await this.detectDeviceType();\n }\n \n const videoConstraints: MediaTrackConstraints = {};\n \n // Priority 1: Always use deviceId if available (ensures specific camera with autofocus)\n if (this.selectedCameraId) {\n videoConstraints.deviceId = { exact: this.selectedCameraId };\n } \n // Priority 2: Use facingMode as fallback when no specific camera is selected\n else if (this.preferredCameraFacing) {\n const facingConstraint = this.deviceType === 'desktop' \n ? { ideal: this.preferredCameraFacing }\n : { exact: this.preferredCameraFacing };\n videoConstraints.facingMode = facingConstraint;\n } \n // Priority 3: Fallback to preferredCamera setting\n else {\n if (this.preferredCamera === 'front') {\n videoConstraints.facingMode = \"user\";\n } else if (this.preferredCamera === 'back') {\n videoConstraints.facingMode = \"environment\"; \n } else {\n videoConstraints.facingMode = (this.deviceType === 'mobile' || this.deviceType === 'tablet') ? \"environment\" : \"user\";\n }\n }\n \n // Optimization: Use cached capabilities if available\n let capabilities: MediaTrackCapabilities;\n \n if (this.selectedCameraId && CameraService.cameraCapabilitiesCache.has(this.selectedCameraId + '_caps')) {\n capabilities = JSON.parse(CameraService.cameraCapabilitiesCache.get(this.selectedCameraId + '_caps') as string);\n } else {\n const tempStream = await navigator.mediaDevices.getUserMedia({ video: videoConstraints });\n const videoTrack = tempStream.getVideoTracks()[0];\n capabilities = videoTrack.getCapabilities();\n tempStream.getTracks().forEach(track => track.stop());\n \n // Cache capabilities for future use\n if (this.selectedCameraId) {\n CameraService.cameraCapabilitiesCache.set(this.selectedCameraId + '_caps', JSON.stringify(capabilities));\n }\n }\n \n const constraints: MediaTrackConstraints = { ...videoConstraints };\n \n if (capabilities.width && capabilities.height) {\n const isTablet = /iPad|Android/i.test(navigator.userAgent) && window.innerWidth >= 768;\n const isMobileDevice = this.deviceType === 'mobile' ||\n /Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n // Optimize resolution based on device type to prevent \"slow motion\" effect\n // on devices with high-resolution cameras\n let targetWidth: number;\n let targetHeight: number;\n\n if (isMobileDevice && !isTablet) {\n // Mobile phones: Use 720p max to ensure smooth detection performance\n targetWidth = Math.min(capabilities.width.max, 1280);\n targetHeight = Math.min(capabilities.height.max, 720);\n } else if (isTablet) {\n // Tablets: Can handle slightly higher resolution\n targetWidth = Math.min(capabilities.width.max, 1280);\n targetHeight = Math.min(capabilities.height.max, 720);\n } else {\n // Desktop: Can handle full HD\n targetWidth = Math.min(capabilities.width.max, 1920);\n targetHeight = Math.min(capabilities.height.max, 1080);\n }\n\n constraints.width = { ideal: targetWidth };\n constraints.height = { ideal: targetHeight };\n }\n \n // Configure autofocus if camera has the capability\n const capabilitiesAny = capabilities as any;\n if (capabilitiesAny.focusMode && Array.isArray(capabilitiesAny.focusMode)) {\n if (capabilitiesAny.focusMode.includes('continuous')) {\n (constraints as any).focusMode = 'continuous';\n } else if (capabilitiesAny.focusMode.includes('auto')) {\n (constraints as any).focusMode = 'auto';\n }\n }\n \n return constraints;\n } catch (err) {\n // Fallback logic with minimal temporary streams\n if (!this.deviceType || this.deviceType === 'desktop') {\n await this.detectDeviceType();\n }\n \n const isTablet = /iPad|Android/i.test(navigator.userAgent) && window.innerWidth >= 768;\n const isMobileDevice = this.deviceType === 'mobile' ||\n /Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n // Optimized fallback constraints for device type\n let fallbackWidth: number;\n let fallbackHeight: number;\n\n if (isMobileDevice && !isTablet) {\n // Mobile phones: Use 720p for smooth performance\n fallbackWidth = 1280;\n fallbackHeight = 720;\n } else if (isTablet) {\n fallbackWidth = 1280;\n fallbackHeight = 720;\n } else {\n // Desktop\n fallbackWidth = 1920;\n fallbackHeight = 1080;\n }\n\n const fallbackConstraints: MediaTrackConstraints = {\n width: { ideal: fallbackWidth },\n height: { ideal: fallbackHeight }\n };\n \n if (this.selectedCameraId) {\n fallbackConstraints.deviceId = { exact: this.selectedCameraId };\n } else if (this.preferredCameraFacing) {\n const facingConstraint = this.deviceType === 'desktop' \n ? { ideal: this.preferredCameraFacing }\n : { exact: this.preferredCameraFacing };\n fallbackConstraints.facingMode = facingConstraint;\n } else {\n if (this.preferredCamera === 'front') {\n fallbackConstraints.facingMode = \"user\";\n } else if (this.preferredCamera === 'back') {\n fallbackConstraints.facingMode = \"environment\"; \n } else {\n fallbackConstraints.facingMode = (this.deviceType === 'mobile' || this.deviceType === 'tablet') ? \"environment\" : \"user\";\n }\n }\n \n return fallbackConstraints;\n }\n }\n\n\n // Optimization helper methods\n private constraintsEqual(a?: MediaTrackConstraints, b?: MediaTrackConstraints): boolean {\n if (!a || !b) return false;\n return JSON.stringify(a) === JSON.stringify(b);\n }\n\n // Cleanup method for optimization\n public static clearCaches(): void {\n CameraService.cameraCapabilitiesCache.clear();\n CameraService.deviceEnumerationCache = null;\n }\n\n // Method to invalidate device cache when needed\n public invalidateDeviceCache(): void {\n CameraService.deviceEnumerationCache = null;\n }\n\n private isVirtualCamera(device: MediaDeviceInfo): boolean {\n const label = device.label.toLowerCase();\n const virtualCameraIndicators = [\n 'obs',\n 'virtual',\n 'snap camera',\n 'manycam',\n 'xsplit',\n 'camtwist',\n 'ecamm',\n 'nvidia broadcast',\n 'droidcam',\n 'iriun',\n 'elgato',\n 'streamlabs',\n 'wirecast',\n 'zoom virtual',\n 'teams virtual',\n 'mmhmm',\n 'camo',\n 'reincubate camo',\n 'webcamoid',\n 'splitcam',\n 'cheese',\n 'guvcview',\n 'yawcam',\n 'webcam 7',\n 'altserver'\n ];\n\n return virtualCameraIndicators.some(indicator => label.includes(indicator));\n }\n\n}","import { IDeviceStrategy, DeviceInfo, SessionOptions } from './IDeviceStrategy';\n\nexport class LowMemoryDeviceStrategy implements IDeviceStrategy {\n getDeviceInfo(): DeviceInfo {\n const nav = navigator as any;\n const memory = nav.deviceMemory || nav.hardwareConcurrency || 4;\n const connection = nav.connection || nav.mozConnection || nav.webkitConnection;\n const isSlowConnection = connection && (connection.effectiveType === 'slow-2g' || connection.effectiveType === '2g');\n \n return {\n estimatedRAM: memory,\n isLowMemory: true,\n isSlowConnection: isSlowConnection\n };\n }\n\n getSessionOptions(_debug: boolean): SessionOptions {\n return {\n executionProviders: ['wasm'],\n graphOptimizationLevel: 'basic',\n logSeverityLevel: 4,\n logVerbosityLevel: 0,\n enableCpuMemArena: false,\n enableMemPattern: false,\n executionMode: 'sequential',\n interOpNumThreads: 1,\n intraOpNumThreads: 1,\n };\n }\n\n shouldUseSequentialLoading(): boolean {\n return true;\n }\n}","import { IDeviceStrategy, DeviceInfo, SessionOptions } from './IDeviceStrategy';\n\nexport class HighPerformanceDeviceStrategy implements IDeviceStrategy {\n getDeviceInfo(): DeviceInfo {\n const nav = navigator as any;\n const memory = nav.deviceMemory || nav.hardwareConcurrency || 4;\n const connection = nav.connection || nav.mozConnection || nav.webkitConnection;\n const isSlowConnection = connection && (connection.effectiveType === 'slow-2g' || connection.effectiveType === '2g');\n \n return {\n estimatedRAM: memory,\n isLowMemory: false,\n isSlowConnection: isSlowConnection\n };\n }\n\n getSessionOptions(debug: boolean): SessionOptions {\n return {\n executionProviders: ['webgl', 'wasm'],\n graphOptimizationLevel: 'all',\n logSeverityLevel: debug ? 2 : 4,\n logVerbosityLevel: 0,\n enableCpuMemArena: true,\n enableMemPattern: true,\n executionMode: 'parallel',\n interOpNumThreads: 2,\n intraOpNumThreads: 2,\n };\n }\n\n shouldUseSequentialLoading(): boolean {\n return false;\n }\n}","import { IDeviceStrategy, DeviceInfo, SessionOptions } from './IDeviceStrategy';\n\n/**\n * Strategy for iOS Safari to prevent jetsam memory kills.\n * WebKit 26+ has a known bug with ONNX Runtime JSEP mode that causes memory exhaustion.\n * This strategy forces pure WASM execution without GPU acceleration.\n * See: https://github.com/microsoft/onnxruntime/issues/26827\n */\nexport class IOSSafariStrategy implements IDeviceStrategy {\n getDeviceInfo(): DeviceInfo {\n return {\n estimatedRAM: 3,\n isLowMemory: true,\n isSlowConnection: false\n };\n }\n\n getSessionOptions(_debug: boolean): SessionOptions {\n return {\n // Force pure WASM - no WebGL, no WebGPU, no JSEP\n executionProviders: ['wasm'],\n graphOptimizationLevel: 'disabled', // Disable graph optimization to reduce memory\n logSeverityLevel: 4,\n logVerbosityLevel: 0,\n enableCpuMemArena: false, // Don't use CPU memory arena\n enableMemPattern: false, // Don't use memory pattern optimization\n executionMode: 'sequential', // Sequential execution uses less memory\n interOpNumThreads: 1, // Single thread\n intraOpNumThreads: 1, // Single thread\n };\n }\n\n shouldUseSequentialLoading(): boolean {\n return true;\n }\n}\n","import { IDeviceStrategy } from '../strategies/IDeviceStrategy';\nimport { LowMemoryDeviceStrategy } from '../strategies/LowMemoryDeviceStrategy';\nimport { HighPerformanceDeviceStrategy } from '../strategies/HighPerformanceDeviceStrategy';\nimport { IOSSafariStrategy } from '../strategies/IOSSafariStrategy';\n\nexport class DeviceStrategyFactory {\n static createStrategy(): IDeviceStrategy {\n const nav = navigator as any;\n const ua = navigator.userAgent;\n\n // All iOS browsers use WebKit, which has memory constraints\n const isIOS = /iPad|iPhone|iPod/.test(ua);\n\n if (isIOS) {\n return new IOSSafariStrategy();\n }\n\n const memory = nav.deviceMemory || nav.hardwareConcurrency || 4;\n const isLowMemory = memory <= 4;\n\n if (isLowMemory) {\n return new LowMemoryDeviceStrategy();\n } else {\n return new HighPerformanceDeviceStrategy();\n }\n }\n}","import { IDetectionService, DetectionBox, SideAlignment, ClassificationResult } from './interfaces/IDetectionService';\nimport { IDeviceStrategy } from './strategies/IDeviceStrategy';\nimport { DeviceStrategyFactory } from './factories/DeviceStrategyFactory';\n\nexport class DetectionService implements IDetectionService {\n private session?: any;\n private mobileNetSession?: any;\n private mobileNetClassMap?: any;\n private modelLoaded: boolean = false;\n private deviceStrategy: IDeviceStrategy;\n\n private readonly MODEL_PATH = \"https://static.jaak.ai/web/component/stamps/ddmyp-v2.onnx\";\n private readonly MODEL_PATH_FP32 = \"https://static.jaak.ai/web/component/stamps/ddmyp-v2-fp32.onnx\";\n private readonly MOBILENET_MODEL_PATH = \"https://static.jaak.ai/web/component/stamps/squeezenet_new_fp32.onnx\";\n private readonly MOBILENET_CLASSES_PATH = \"https://static.jaak.ai/web/component/stamps/cdmmp-v1.json\";\n private readonly INPUT_SIZE = 320;\n private readonly CONFIDENCE_THRESHOLD = 0.6;\n private useFloat16: boolean = true;\n\n // Canvas pool for optimization\n private preprocessCanvas?: HTMLCanvasElement;\n private preprocessCtx?: CanvasRenderingContext2D;\n private captureCanvas?: HTMLCanvasElement;\n \n // Static canvas pool for reuse across instances\n private static canvasPool = new Map<string, HTMLCanvasElement[]>();\n private static readonly MAX_POOL_SIZE = 5;\n\n constructor(\n private debug: boolean = false,\n private useDocumentClassification: boolean = false,\n private useDocumentDetector: boolean = true\n ) {\n this.deviceStrategy = DeviceStrategyFactory.createStrategy();\n this.initializeCanvasPool();\n }\n\n async loadModel(): Promise<void> {\n if (this.modelLoaded || this.session) {\n return;\n }\n\n if (!this.useDocumentDetector) {\n // Skip loading the detection model but mark as \"loaded\" for compatibility\n this.modelLoaded = true;\n return;\n }\n\n try {\n\n const sessionOptions = this.deviceStrategy.getSessionOptions(this.debug);\n\n try {\n this.session = await (window as any).ort.InferenceSession.create(this.MODEL_PATH, sessionOptions);\n this.detectFloat16Support();\n } catch (error) {\n const errorMsg = error.message || '';\n const isMemoryError = errorMsg.includes('failed to allocate a buffer') ||\n errorMsg.includes('Out of memory') ||\n errorMsg.includes('RangeError: Out of memory') ||\n errorMsg.includes('no available backend found');\n const isFloat16Error = errorMsg.includes('unsupported data type') ||\n errorMsg.includes('FLOAT16') ||\n errorMsg.includes('float16');\n\n if (isFloat16Error) {\n this.useFloat16 = false;\n try {\n this.session = await (window as any).ort.InferenceSession.create(this.MODEL_PATH_FP32, sessionOptions);\n } catch (fp32Error) {\n // Intentar con opciones minimas de WASM\n const wasmOptions = {\n executionProviders: ['wasm'],\n graphOptimizationLevel: 'all',\n logSeverityLevel: this.debug ? 2 : 4,\n };\n this.session = await (window as any).ort.InferenceSession.create(this.MODEL_PATH_FP32, wasmOptions);\n }\n } else if (isMemoryError) {\n const fallbackOptions = {\n executionProviders: ['wasm'],\n graphOptimizationLevel: 'disabled',\n logSeverityLevel: 4,\n enableCpuMemArena: false,\n enableMemPattern: false,\n executionMode: 'sequential',\n interOpNumThreads: 1,\n intraOpNumThreads: 1,\n enableProfiling: false,\n sessionLogSeverityLevel: 4,\n sessionLogVerbosityLevel: 0,\n };\n\n this.useFloat16 = false;\n\n try {\n this.session = await (window as any).ort.InferenceSession.create(this.MODEL_PATH_FP32, fallbackOptions);\n } catch (fallbackError) {\n throw new Error(`no available backend found. ERR: [wasm] RangeError: Out of memory`);\n }\n } else {\n throw error;\n }\n }\n\n this.modelLoaded = true;\n } catch (error) {\n throw error;\n }\n }\n\n async loadClassificationModel(): Promise<void> {\n if (!this.useDocumentClassification) {\n return;\n }\n\n try {\n\n // Try to load class map (optional - SqueezeNet may not need it for basic classification)\n try {\n const classResponse = await fetch(this.MOBILENET_CLASSES_PATH);\n if (classResponse.ok) {\n this.mobileNetClassMap = await classResponse.json();\n }\n } catch (error) {\n // Create a basic class map for document types\n this.mobileNetClassMap = {\n \"0\": \"document\",\n \"1\": \"id_card\",\n \"2\": \"passport\",\n \"3\": \"license\",\n \"4\": \"other\"\n };\n }\n\n // Load model\n const sessionOptions = this.deviceStrategy.getSessionOptions(this.debug);\n try {\n this.mobileNetSession = await (window as any).ort.InferenceSession.create(this.MOBILENET_MODEL_PATH, sessionOptions);\n } catch (error) {\n // Múltiples tipos de errores de memoria que pueden ocurrir\n const isMemoryError = error.message.includes('failed to allocate a buffer') ||\n error.message.includes('Out of memory') ||\n error.message.includes('RangeError: Out of memory') ||\n error.message.includes('no available backend found');\n \n if (isMemoryError) {\n const fallbackOptions = {\n executionProviders: ['wasm'],\n graphOptimizationLevel: 'disabled',\n logSeverityLevel: 4,\n enableCpuMemArena: false,\n enableMemPattern: false,\n executionMode: 'sequential',\n interOpNumThreads: 1,\n intraOpNumThreads: 1,\n // Configuraciones adicionales para dispositivos con poca memoria\n enableProfiling: false,\n sessionLogSeverityLevel: 4,\n sessionLogVerbosityLevel: 0,\n };\n \n try {\n this.mobileNetSession = await (window as any).ort.InferenceSession.create(this.MOBILENET_MODEL_PATH, fallbackOptions);\n } catch (fallbackError) {\n throw new Error(`no available backend found. ERR: [wasm] RangeError: Out of memory`);\n }\n } else {\n throw error;\n }\n }\n\n } catch (error) {\n throw error;\n }\n }\n\n isModelLoaded(): boolean {\n if (!this.useDocumentDetector) {\n // If detector is disabled, consider it \"loaded\" for compatibility\n return this.modelLoaded;\n }\n return this.modelLoaded && !!this.session;\n }\n\n preprocess(video: HTMLVideoElement): any {\n if (!this.preprocessCanvas || !this.preprocessCtx) {\n this.initializeCanvasPool();\n }\n\n this.preprocessCtx!.clearRect(0, 0, this.INPUT_SIZE, this.INPUT_SIZE);\n this.preprocessCtx!.drawImage(video, 0, 0, this.INPUT_SIZE, this.INPUT_SIZE);\n\n const imageData = this.preprocessCtx!.getImageData(0, 0, this.INPUT_SIZE, this.INPUT_SIZE);\n const [R, G, B] = [[], [], []] as number[][];\n const { data } = imageData;\n\n for (let i = 0; i < data.length; i += 4) {\n R.push(data[i] / 255);\n G.push(data[i + 1] / 255);\n B.push(data[i + 2] / 255);\n }\n\n const transposedData = new Float32Array(R.concat(G, B));\n\n if (this.useFloat16) {\n const float16Data = new Uint16Array(transposedData.length);\n for (let i = 0; i < transposedData.length; i++) {\n float16Data[i] = this.float32ToFloat16(transposedData[i]);\n }\n return new (window as any).ort.Tensor(\"float16\", float16Data, [1, 3, this.INPUT_SIZE, this.INPUT_SIZE]);\n }\n\n return new (window as any).ort.Tensor(\"float32\", transposedData, [1, 3, this.INPUT_SIZE, this.INPUT_SIZE]);\n }\n\n async runInference(inputTensor: any): Promise<DetectionBox[]> {\n if (!this.useDocumentDetector) {\n // Return empty array when document detector is disabled\n return [];\n }\n\n if (!this.session) {\n throw new Error('Detection model not loaded');\n }\n\n const feeds = { [this.session.inputNames[0]]: inputTensor };\n const results = await this.session.run(feeds);\n const output = results[this.session.outputNames[0]].data;\n\n const detections: DetectionBox[] = [];\n for (let i = 0; i < output.length; i += 6) {\n const [x1, y1, x2, y2, score, classId] = output.slice(i, i + 6);\n if (score > this.CONFIDENCE_THRESHOLD) {\n detections.push({\n x: x1,\n y: y1,\n w: x2 - x1,\n h: y2 - y1,\n score,\n classId\n });\n }\n }\n\n return detections;\n }\n\n async classifyDocument(canvas: HTMLCanvasElement): Promise<ClassificationResult | null> {\n if (!this.mobileNetSession || !this.mobileNetClassMap) {\n return null;\n }\n\n try {\n\n const inputTensor = this.preprocessMobileNet(canvas);\n const feeds = { [this.mobileNetSession.inputNames[0]]: inputTensor };\n const results = await this.mobileNetSession.run(feeds);\n const output = results[Object.keys(results)[0]].data;\n\n const maxIdx = output.reduce((bestIdx: number, val: number, idx: number, arr: number[]) =>\n val > arr[bestIdx] ? idx : bestIdx, 0);\n const confidence = output[maxIdx];\n\n const className = this.mobileNetClassMap[maxIdx.toString()] || \"unknown\";\n\n\n return {\n class: className,\n confidence: confidence,\n classIndex: maxIdx\n };\n\n } catch (error) {\n return null;\n }\n }\n\n checkSideAlignment(box: DetectionBox, maskConfig: any): SideAlignment {\n const { INPUT_SIZE, ID1_ASPECT_RATIO, shouldMirrorVideo, alignmentTolerance, maskSize, videoRef } = maskConfig;\n\n if (!videoRef) {\n return { top: false, right: false, bottom: false, left: false };\n }\n\n // Get video dimensions to calculate actual mask boundaries in model space\n const videoWidth = videoRef.videoWidth;\n const videoHeight = videoRef.videoHeight;\n\n if (videoWidth === 0 || videoHeight === 0) {\n return { top: false, right: false, bottom: false, left: false };\n }\n\n // Calculate video aspect ratio\n const videoAspectRatio = videoWidth / videoHeight;\n\n // The model sees video stretched to 320x320, but we need to calculate where\n // the mask should be in this distorted space to match the visual mask\n\n // In the visual display, we calculate mask size based on the limiting dimension\n // We need to replicate this logic but account for the distortion in model space\n\n // Calculate the \"display\" dimensions (what the visual mask calculations use)\n const containerAspectRatio = 1; // Assume square container for simplicity\n let displayedVideoWidth, displayedVideoHeight;\n\n if (videoAspectRatio > containerAspectRatio) {\n // Video is wider - letterboxed in display\n displayedVideoWidth = INPUT_SIZE;\n displayedVideoHeight = INPUT_SIZE / videoAspectRatio;\n } else {\n // Video is taller - pillarboxed in display\n displayedVideoHeight = INPUT_SIZE;\n displayedVideoWidth = INPUT_SIZE * videoAspectRatio;\n }\n\n // Calculate mask dimensions using the same logic as updateMaskDimensions\n const maxWidthByHeight = displayedVideoHeight * ID1_ASPECT_RATIO;\n\n let visualMaskWidth, visualMaskHeight;\n const sizeRatio = maskSize / 100;\n\n if (maxWidthByHeight <= displayedVideoWidth) {\n // Video height is the limiting factor\n visualMaskHeight = displayedVideoHeight * sizeRatio;\n visualMaskWidth = visualMaskHeight * ID1_ASPECT_RATIO;\n } else {\n // Video width is the limiting factor\n visualMaskWidth = displayedVideoWidth * sizeRatio;\n visualMaskHeight = visualMaskWidth / ID1_ASPECT_RATIO;\n }\n\n // Now map these visual mask dimensions to the distorted model space\n // The model stretches video to 320x320, so we need to apply the inverse transformation\n const modelMaskWidth = visualMaskWidth * (INPUT_SIZE / displayedVideoWidth);\n const modelMaskHeight = visualMaskHeight * (INPUT_SIZE / displayedVideoHeight);\n\n // Calculate mask boundaries in model coordinate system (always centered in 320x320)\n const maskCenterX = INPUT_SIZE / 2;\n const maskCenterY = INPUT_SIZE / 2;\n const maskLeft = maskCenterX - (modelMaskWidth / 2);\n const maskRight = maskCenterX + (modelMaskWidth / 2);\n const maskTop = maskCenterY - (modelMaskHeight / 2);\n const maskBottom = maskCenterY + (modelMaskHeight / 2);\n\n // Obtener las coordenadas del documento detectado\n let docLeft = box.x;\n let docRight = box.x + box.w;\n const docTop = box.y;\n const docBottom = box.y + box.h;\n\n // Si el video está en modo mirror, invertir las coordenadas horizontales\n if (shouldMirrorVideo) {\n const originalDocLeft = docLeft;\n const originalDocRight = docRight;\n docLeft = INPUT_SIZE - originalDocRight;\n docRight = INPUT_SIZE - originalDocLeft;\n }\n\n // Tolerancia para considerar que un lado está alineado (en píxeles)\n const tolerance = alignmentTolerance;\n\n // Verificar alineación de esquinas más estricta\n // Una esquina está alineada solo si AMBOS bordes que la forman están alineados\n const topAligned = Math.abs(docTop - maskTop) <= tolerance;\n const rightAligned = Math.abs(docRight - maskRight) <= tolerance;\n const bottomAligned = Math.abs(docBottom - maskBottom) <= tolerance;\n const leftAligned = Math.abs(docLeft - maskLeft) <= tolerance;\n\n return {\n top: topAligned && leftAligned, // Esquina superior izquierda: borde top Y left alineados\n right: topAligned && rightAligned, // Esquina superior derecha: borde top Y right alineados\n bottom: bottomAligned && leftAligned, // Esquina inferior izquierda: borde bottom Y left alineados\n left: bottomAligned && rightAligned // Esquina inferior derecha: borde bottom Y right alineados\n };\n }\n\n isCardInFrame(box: DetectionBox): boolean {\n const cardCenterX = box.x + box.w / 2;\n const cardCenterY = box.y + box.h / 2;\n const frameCenterX = this.INPUT_SIZE / 2;\n const frameCenterY = this.INPUT_SIZE / 2;\n const toleranceX = 40;\n const toleranceY = 30;\n\n const isCentered = Math.abs(cardCenterX - frameCenterX) < toleranceX &&\n Math.abs(cardCenterY - frameCenterY) < toleranceY;\n const isGoodSize = box.w > 150 && box.w < 300 && box.h > 90 && box.h < 200;\n\n return isCentered && isGoodSize;\n }\n\n areAllSidesAligned(alignment: SideAlignment): boolean {\n return alignment.top && alignment.right && alignment.bottom && alignment.left;\n }\n\n cleanup(): void {\n this.cleanupCanvasPool();\n\n if (this.session) {\n this.session.release?.();\n this.session = undefined;\n }\n if (this.mobileNetSession) {\n this.mobileNetSession.release?.();\n this.mobileNetSession = undefined;\n }\n this.mobileNetClassMap = undefined;\n this.modelLoaded = false;\n\n }\n\n private initializeCanvasPool(): void {\n this.preprocessCanvas = document.createElement('canvas');\n this.preprocessCanvas.width = this.INPUT_SIZE;\n this.preprocessCanvas.height = this.INPUT_SIZE;\n this.preprocessCtx = this.preprocessCanvas.getContext('2d', {\n alpha: false,\n willReadFrequently: true\n })!;\n\n this.captureCanvas = document.createElement('canvas');\n\n }\n\n private cleanupCanvasPool(): void {\n if (this.preprocessCanvas) {\n this.preprocessCtx = undefined;\n this.preprocessCanvas = undefined;\n }\n if (this.captureCanvas) {\n this.captureCanvas = undefined;\n }\n }\n\n private detectFloat16Support(): void {\n try {\n // Verificar si el backend actual soporta float16 intentando crear un tensor pequeno\n const testData = new Uint16Array([0]);\n new (window as any).ort.Tensor(\"float16\", testData, [1]);\n this.useFloat16 = true;\n } catch {\n this.useFloat16 = false;\n }\n }\n\n private float32ToFloat16(value: number): number {\n const buffer = new ArrayBuffer(4);\n const view = new DataView(buffer);\n view.setFloat32(0, value, true);\n\n const f = view.getUint32(0, true);\n const sign = (f >> 31) & 0x1;\n const exp = (f >> 23) & 0xFF;\n const frac = f & 0x7FFFFF;\n\n let newExp = exp - 127 + 15;\n\n if (exp === 0) {\n newExp = 0;\n } else if (exp === 0xFF) {\n newExp = 0x1F;\n } else if (newExp >= 0x1F) {\n newExp = 0x1F;\n return (sign << 15) | (newExp << 10);\n } else if (newExp <= 0) {\n return (sign << 15);\n }\n\n return (sign << 15) | (newExp << 10) | (frac >> 13);\n }\n\n private preprocessMobileNet(canvas: HTMLCanvasElement): any {\n // Use pooled canvas instead of creating new one\n const tempCanvas = this.getCanvas(224, 224);\n const tempCtx = tempCanvas.getContext('2d')!;\n\n // Clear canvas before use\n tempCtx.clearRect(0, 0, 224, 224);\n \n // Resize image to 224x224 for SqueezeNet (using MobileNet interface)\n tempCtx.drawImage(canvas, 0, 0, 224, 224);\n\n const imageData = tempCtx.getImageData(0, 0, 224, 224);\n const data = imageData.data;\n const hw = 224 * 224;\n const arr = new Float32Array(3 * hw);\n\n // SqueezeNet preprocessing: normalize to [0,1] range and arrange in CHW format\n for (let i = 0; i < hw; i++) {\n // Red channel\n arr[i] = data[i * 4 + 0] / 255.0;\n // Green channel\n arr[hw + i] = data[i * 4 + 1] / 255.0;\n // Blue channel\n arr[2 * hw + i] = data[i * 4 + 2] / 255.0;\n }\n\n // Return canvas to pool after use\n this.returnCanvas(tempCanvas);\n\n return new (window as any).ort.Tensor('float32', arr, [1, 3, 224, 224]);\n }\n\n // Canvas pool management methods for optimization\n private getCanvas(width: number, height: number): HTMLCanvasElement {\n const key = `${width}x${height}`;\n if (!DetectionService.canvasPool.has(key)) {\n DetectionService.canvasPool.set(key, []);\n }\n const pool = DetectionService.canvasPool.get(key)!;\n \n let canvas = pool.pop();\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n } else {\n // Clear the canvas before reuse\n const ctx = canvas.getContext('2d')!;\n ctx.clearRect(0, 0, width, height);\n }\n \n return canvas;\n }\n\n private returnCanvas(canvas: HTMLCanvasElement): void {\n const key = `${canvas.width}x${canvas.height}`;\n if (!DetectionService.canvasPool.has(key)) {\n DetectionService.canvasPool.set(key, []);\n }\n const pool = DetectionService.canvasPool.get(key)!;\n \n // Only return to pool if not at max capacity\n if (pool.length < DetectionService.MAX_POOL_SIZE) {\n pool.push(canvas);\n }\n }\n\n // Static method to clear all canvas pools (useful for memory management)\n public static clearCanvasPools(): void {\n DetectionService.canvasPool.clear();\n }\n\n // Method to get pool statistics for debugging\n public getPoolStats(): { [key: string]: number } {\n const stats: { [key: string]: number } = {};\n DetectionService.canvasPool.forEach((pool, key) => {\n stats[key] = pool.length;\n });\n return stats;\n }\n\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Updates to this file should also be replicated to @opentelemetry/core too.\n/**\n * - globalThis (New standard)\n * - self (Will return the current window instance for supported browsers)\n * - window (fallback for older browser implementations)\n * - global (NodeJS implementation)\n * - <object> (When all else fails)\n */\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins, no-undef\nexport var _globalThis = typeof globalThis === 'object'\n ? globalThis\n : typeof self === 'object'\n ? self\n : typeof window === 'object'\n ? window\n : typeof global === 'object'\n ? global\n : {};\n//# sourceMappingURL=globalThis.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this is autogenerated file, see scripts/version-update.js\nexport var VERSION = '1.9.0';\n//# sourceMappingURL=version.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { VERSION } from '../version';\nvar re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(ownVersion) {\n var acceptedVersions = new Set([ownVersion]);\n var rejectedVersions = new Set();\n var myVersionMatch = ownVersion.match(re);\n if (!myVersionMatch) {\n // we cannot guarantee compatibility so we always return noop\n return function () { return false; };\n }\n var ownVersionParsed = {\n major: +myVersionMatch[1],\n minor: +myVersionMatch[2],\n patch: +myVersionMatch[3],\n prerelease: myVersionMatch[4],\n };\n // if ownVersion has a prerelease tag, versions must match exactly\n if (ownVersionParsed.prerelease != null) {\n return function isExactmatch(globalVersion) {\n return globalVersion === ownVersion;\n };\n }\n function _reject(v) {\n rejectedVersions.add(v);\n return false;\n }\n function _accept(v) {\n acceptedVersions.add(v);\n return true;\n }\n return function isCompatible(globalVersion) {\n if (acceptedVersions.has(globalVersion)) {\n return true;\n }\n if (rejectedVersions.has(globalVersion)) {\n return false;\n }\n var globalVersionMatch = globalVersion.match(re);\n if (!globalVersionMatch) {\n // cannot parse other version\n // we cannot guarantee compatibility so we always noop\n return _reject(globalVersion);\n }\n var globalVersionParsed = {\n major: +globalVersionMatch[1],\n minor: +globalVersionMatch[2],\n patch: +globalVersionMatch[3],\n prerelease: globalVersionMatch[4],\n };\n // if globalVersion has a prerelease tag, versions must match exactly\n if (globalVersionParsed.prerelease != null) {\n return _reject(globalVersion);\n }\n // major versions must match\n if (ownVersionParsed.major !== globalVersionParsed.major) {\n return _reject(globalVersion);\n }\n if (ownVersionParsed.major === 0) {\n if (ownVersionParsed.minor === globalVersionParsed.minor &&\n ownVersionParsed.patch <= globalVersionParsed.patch) {\n return _accept(globalVersion);\n }\n return _reject(globalVersion);\n }\n if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n return _accept(globalVersion);\n }\n return _reject(globalVersion);\n };\n}\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport var isCompatible = _makeCompatibilityCheck(VERSION);\n//# sourceMappingURL=semver.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { _globalThis } from '../platform';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\nvar major = VERSION.split('.')[0];\nvar GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\"opentelemetry.js.api.\" + major);\nvar _global = _globalThis;\nexport function registerGlobal(type, instance, diag, allowOverride) {\n var _a;\n if (allowOverride === void 0) { allowOverride = false; }\n var api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : {\n version: VERSION,\n });\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n var err = new Error(\"@opentelemetry/api: Attempted duplicate registration of API: \" + type);\n diag.error(err.stack || err.message);\n return false;\n }\n if (api.version !== VERSION) {\n // All registered APIs must be of the same version exactly\n var err = new Error(\"@opentelemetry/api: Registration of version v\" + api.version + \" for \" + type + \" does not match previously registered API v\" + VERSION);\n diag.error(err.stack || err.message);\n return false;\n }\n api[type] = instance;\n diag.debug(\"@opentelemetry/api: Registered a global for \" + type + \" v\" + VERSION + \".\");\n return true;\n}\nexport function getGlobal(type) {\n var _a, _b;\n var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version;\n if (!globalVersion || !isCompatible(globalVersion)) {\n return;\n }\n return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type];\n}\nexport function unregisterGlobal(type, diag) {\n diag.debug(\"@opentelemetry/api: Unregistering a global for \" + type + \" v\" + VERSION + \".\");\n var api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n if (api) {\n delete api[type];\n }\n}\n//# sourceMappingURL=global-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { getGlobal } from '../internal/global-utils';\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nvar DiagComponentLogger = /** @class */ (function () {\n function DiagComponentLogger(props) {\n this._namespace = props.namespace || 'DiagComponentLogger';\n }\n DiagComponentLogger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('debug', this._namespace, args);\n };\n DiagComponentLogger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('error', this._namespace, args);\n };\n DiagComponentLogger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('info', this._namespace, args);\n };\n DiagComponentLogger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('warn', this._namespace, args);\n };\n DiagComponentLogger.prototype.verbose = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('verbose', this._namespace, args);\n };\n return DiagComponentLogger;\n}());\nexport { DiagComponentLogger };\nfunction logProxy(funcName, namespace, args) {\n var logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) {\n return;\n }\n args.unshift(namespace);\n return logger[funcName].apply(logger, __spreadArray([], __read(args), false));\n}\n//# sourceMappingURL=ComponentLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport var DiagLogLevel;\n(function (DiagLogLevel) {\n /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n DiagLogLevel[DiagLogLevel[\"NONE\"] = 0] = \"NONE\";\n /** Identifies an error scenario */\n DiagLogLevel[DiagLogLevel[\"ERROR\"] = 30] = \"ERROR\";\n /** Identifies a warning scenario */\n DiagLogLevel[DiagLogLevel[\"WARN\"] = 50] = \"WARN\";\n /** General informational log message */\n DiagLogLevel[DiagLogLevel[\"INFO\"] = 60] = \"INFO\";\n /** General debug log message */\n DiagLogLevel[DiagLogLevel[\"DEBUG\"] = 70] = \"DEBUG\";\n /**\n * Detailed trace level logging should only be used for development, should only be set\n * in a development environment.\n */\n DiagLogLevel[DiagLogLevel[\"VERBOSE\"] = 80] = \"VERBOSE\";\n /** Used to set the logging level to include all logging */\n DiagLogLevel[DiagLogLevel[\"ALL\"] = 9999] = \"ALL\";\n})(DiagLogLevel || (DiagLogLevel = {}));\n//# sourceMappingURL=types.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DiagLogLevel } from '../types';\nexport function createLogLevelDiagLogger(maxLevel, logger) {\n if (maxLevel < DiagLogLevel.NONE) {\n maxLevel = DiagLogLevel.NONE;\n }\n else if (maxLevel > DiagLogLevel.ALL) {\n maxLevel = DiagLogLevel.ALL;\n }\n // In case the logger is null or undefined\n logger = logger || {};\n function _filterFunc(funcName, theLevel) {\n var theFunc = logger[funcName];\n if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n return theFunc.bind(logger);\n }\n return function () { };\n }\n return {\n error: _filterFunc('error', DiagLogLevel.ERROR),\n warn: _filterFunc('warn', DiagLogLevel.WARN),\n info: _filterFunc('info', DiagLogLevel.INFO),\n debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n };\n}\n//# sourceMappingURL=logLevelLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport { DiagLogLevel, } from '../diag/types';\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nvar API_NAME = 'diag';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nvar DiagAPI = /** @class */ (function () {\n /**\n * Private internal constructor\n * @private\n */\n function DiagAPI() {\n function _logProxy(funcName) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger)\n return;\n return logger[funcName].apply(logger, __spreadArray([], __read(args), false));\n };\n }\n // Using self local variable for minification purposes as 'this' cannot be minified\n var self = this;\n // DiagAPI specific functions\n var setLogger = function (logger, optionsOrLogLevel) {\n var _a, _b, _c;\n if (optionsOrLogLevel === void 0) { optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }; }\n if (logger === self) {\n // There isn't much we can do here.\n // Logging to the console might break the user application.\n // Try to log to self. If a logger was previously registered it will receive the log.\n var err = new Error('Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation');\n self.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);\n return false;\n }\n if (typeof optionsOrLogLevel === 'number') {\n optionsOrLogLevel = {\n logLevel: optionsOrLogLevel,\n };\n }\n var oldLogger = getGlobal('diag');\n var newLogger = createLogLevelDiagLogger((_b = optionsOrLogLevel.logLevel) !== null && _b !== void 0 ? _b : DiagLogLevel.INFO, logger);\n // There already is an logger registered. We'll let it know before overwriting it.\n if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n var stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : '<failed to generate stacktrace>';\n oldLogger.warn(\"Current logger will be overwritten from \" + stack);\n newLogger.warn(\"Current logger will overwrite one already registered from \" + stack);\n }\n return registerGlobal('diag', newLogger, self, true);\n };\n self.setLogger = setLogger;\n self.disable = function () {\n unregisterGlobal(API_NAME, self);\n };\n self.createComponentLogger = function (options) {\n return new DiagComponentLogger(options);\n };\n self.verbose = _logProxy('verbose');\n self.debug = _logProxy('debug');\n self.info = _logProxy('info');\n self.warn = _logProxy('warn');\n self.error = _logProxy('error');\n }\n /** Get the singleton instance of the DiagAPI API */\n DiagAPI.instance = function () {\n if (!this._instance) {\n this._instance = new DiagAPI();\n }\n return this._instance;\n };\n return DiagAPI;\n}());\nexport { DiagAPI };\n//# sourceMappingURL=diag.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar BaggageImpl = /** @class */ (function () {\n function BaggageImpl(entries) {\n this._entries = entries ? new Map(entries) : new Map();\n }\n BaggageImpl.prototype.getEntry = function (key) {\n var entry = this._entries.get(key);\n if (!entry) {\n return undefined;\n }\n return Object.assign({}, entry);\n };\n BaggageImpl.prototype.getAllEntries = function () {\n return Array.from(this._entries.entries()).map(function (_a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return [k, v];\n });\n };\n BaggageImpl.prototype.setEntry = function (key, entry) {\n var newBaggage = new BaggageImpl(this._entries);\n newBaggage._entries.set(key, entry);\n return newBaggage;\n };\n BaggageImpl.prototype.removeEntry = function (key) {\n var newBaggage = new BaggageImpl(this._entries);\n newBaggage._entries.delete(key);\n return newBaggage;\n };\n BaggageImpl.prototype.removeEntries = function () {\n var e_1, _a;\n var keys = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n keys[_i] = arguments[_i];\n }\n var newBaggage = new BaggageImpl(this._entries);\n try {\n for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {\n var key = keys_1_1.value;\n newBaggage._entries.delete(key);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return newBaggage;\n };\n BaggageImpl.prototype.clear = function () {\n return new BaggageImpl();\n };\n return BaggageImpl;\n}());\nexport { BaggageImpl };\n//# sourceMappingURL=baggage-impl.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Symbol used to make BaggageEntryMetadata an opaque type\n */\nexport var baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');\n//# sourceMappingURL=symbol.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DiagAPI } from '../api/diag';\nimport { BaggageImpl } from './internal/baggage-impl';\nimport { baggageEntryMetadataSymbol } from './internal/symbol';\nvar diag = DiagAPI.instance();\n/**\n * Create a new Baggage with optional entries\n *\n * @param entries An array of baggage entries the new baggage should contain\n */\nexport function createBaggage(entries) {\n if (entries === void 0) { entries = {}; }\n return new BaggageImpl(new Map(Object.entries(entries)));\n}\n/**\n * Create a serializable BaggageEntryMetadata object from a string.\n *\n * @param str string metadata. Format is currently not defined by the spec and has no special meaning.\n *\n */\nexport function baggageEntryMetadataFromString(str) {\n if (typeof str !== 'string') {\n diag.error(\"Cannot create baggage metadata from unknown type: \" + typeof str);\n str = '';\n }\n return {\n __TYPE__: baggageEntryMetadataSymbol,\n toString: function () {\n return str;\n },\n };\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description) {\n // The specification states that for the same input, multiple calls should\n // return different keys. Due to the nature of the JS dependency management\n // system, this creates problems where multiple versions of some package\n // could hold different keys for the same property.\n //\n // Therefore, we use Symbol.for which returns the same key for the same input.\n return Symbol.for(description);\n}\nvar BaseContext = /** @class */ (function () {\n /**\n * Construct a new context which inherits values from an optional parent context.\n *\n * @param parentContext a context from which to inherit values\n */\n function BaseContext(parentContext) {\n // for minification\n var self = this;\n self._currentContext = parentContext ? new Map(parentContext) : new Map();\n self.getValue = function (key) { return self._currentContext.get(key); };\n self.setValue = function (key, value) {\n var context = new BaseContext(self._currentContext);\n context._currentContext.set(key, value);\n return context;\n };\n self.deleteValue = function (key) {\n var context = new BaseContext(self._currentContext);\n context._currentContext.delete(key);\n return context;\n };\n }\n return BaseContext;\n}());\n/** The root context is used as the default parent context when there is no active context */\nexport var ROOT_CONTEXT = new BaseContext();\n//# sourceMappingURL=context.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses\n * constant NoopMetrics for all of its methods.\n */\nvar NoopMeter = /** @class */ (function () {\n function NoopMeter() {\n }\n /**\n * @see {@link Meter.createGauge}\n */\n NoopMeter.prototype.createGauge = function (_name, _options) {\n return NOOP_GAUGE_METRIC;\n };\n /**\n * @see {@link Meter.createHistogram}\n */\n NoopMeter.prototype.createHistogram = function (_name, _options) {\n return NOOP_HISTOGRAM_METRIC;\n };\n /**\n * @see {@link Meter.createCounter}\n */\n NoopMeter.prototype.createCounter = function (_name, _options) {\n return NOOP_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.createUpDownCounter}\n */\n NoopMeter.prototype.createUpDownCounter = function (_name, _options) {\n return NOOP_UP_DOWN_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.createObservableGauge}\n */\n NoopMeter.prototype.createObservableGauge = function (_name, _options) {\n return NOOP_OBSERVABLE_GAUGE_METRIC;\n };\n /**\n * @see {@link Meter.createObservableCounter}\n */\n NoopMeter.prototype.createObservableCounter = function (_name, _options) {\n return NOOP_OBSERVABLE_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.createObservableUpDownCounter}\n */\n NoopMeter.prototype.createObservableUpDownCounter = function (_name, _options) {\n return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.addBatchObservableCallback}\n */\n NoopMeter.prototype.addBatchObservableCallback = function (_callback, _observables) { };\n /**\n * @see {@link Meter.removeBatchObservableCallback}\n */\n NoopMeter.prototype.removeBatchObservableCallback = function (_callback) { };\n return NoopMeter;\n}());\nexport { NoopMeter };\nvar NoopMetric = /** @class */ (function () {\n function NoopMetric() {\n }\n return NoopMetric;\n}());\nexport { NoopMetric };\nvar NoopCounterMetric = /** @class */ (function (_super) {\n __extends(NoopCounterMetric, _super);\n function NoopCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopCounterMetric.prototype.add = function (_value, _attributes) { };\n return NoopCounterMetric;\n}(NoopMetric));\nexport { NoopCounterMetric };\nvar NoopUpDownCounterMetric = /** @class */ (function (_super) {\n __extends(NoopUpDownCounterMetric, _super);\n function NoopUpDownCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopUpDownCounterMetric.prototype.add = function (_value, _attributes) { };\n return NoopUpDownCounterMetric;\n}(NoopMetric));\nexport { NoopUpDownCounterMetric };\nvar NoopGaugeMetric = /** @class */ (function (_super) {\n __extends(NoopGaugeMetric, _super);\n function NoopGaugeMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopGaugeMetric.prototype.record = function (_value, _attributes) { };\n return NoopGaugeMetric;\n}(NoopMetric));\nexport { NoopGaugeMetric };\nvar NoopHistogramMetric = /** @class */ (function (_super) {\n __extends(NoopHistogramMetric, _super);\n function NoopHistogramMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopHistogramMetric.prototype.record = function (_value, _attributes) { };\n return NoopHistogramMetric;\n}(NoopMetric));\nexport { NoopHistogramMetric };\nvar NoopObservableMetric = /** @class */ (function () {\n function NoopObservableMetric() {\n }\n NoopObservableMetric.prototype.addCallback = function (_callback) { };\n NoopObservableMetric.prototype.removeCallback = function (_callback) { };\n return NoopObservableMetric;\n}());\nexport { NoopObservableMetric };\nvar NoopObservableCounterMetric = /** @class */ (function (_super) {\n __extends(NoopObservableCounterMetric, _super);\n function NoopObservableCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return NoopObservableCounterMetric;\n}(NoopObservableMetric));\nexport { NoopObservableCounterMetric };\nvar NoopObservableGaugeMetric = /** @class */ (function (_super) {\n __extends(NoopObservableGaugeMetric, _super);\n function NoopObservableGaugeMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return NoopObservableGaugeMetric;\n}(NoopObservableMetric));\nexport { NoopObservableGaugeMetric };\nvar NoopObservableUpDownCounterMetric = /** @class */ (function (_super) {\n __extends(NoopObservableUpDownCounterMetric, _super);\n function NoopObservableUpDownCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return NoopObservableUpDownCounterMetric;\n}(NoopObservableMetric));\nexport { NoopObservableUpDownCounterMetric };\nexport var NOOP_METER = new NoopMeter();\n// Synchronous instruments\nexport var NOOP_COUNTER_METRIC = new NoopCounterMetric();\nexport var NOOP_GAUGE_METRIC = new NoopGaugeMetric();\nexport var NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric();\nexport var NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric();\n// Asynchronous instruments\nexport var NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric();\nexport var NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric();\nexport var NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric();\n/**\n * Create a no-op Meter\n */\nexport function createNoopMeter() {\n return NOOP_METER;\n}\n//# sourceMappingURL=NoopMeter.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** The Type of value. It describes how the data is reported. */\nexport var ValueType;\n(function (ValueType) {\n ValueType[ValueType[\"INT\"] = 0] = \"INT\";\n ValueType[ValueType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n})(ValueType || (ValueType = {}));\n//# sourceMappingURL=Metric.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var defaultTextMapGetter = {\n get: function (carrier, key) {\n if (carrier == null) {\n return undefined;\n }\n return carrier[key];\n },\n keys: function (carrier) {\n if (carrier == null) {\n return [];\n }\n return Object.keys(carrier);\n },\n};\nexport var defaultTextMapSetter = {\n set: function (carrier, key, value) {\n if (carrier == null) {\n return;\n }\n carrier[key] = value;\n },\n};\n//# sourceMappingURL=TextMapPropagator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { ROOT_CONTEXT } from './context';\nvar NoopContextManager = /** @class */ (function () {\n function NoopContextManager() {\n }\n NoopContextManager.prototype.active = function () {\n return ROOT_CONTEXT;\n };\n NoopContextManager.prototype.with = function (_context, fn, thisArg) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return fn.call.apply(fn, __spreadArray([thisArg], __read(args), false));\n };\n NoopContextManager.prototype.bind = function (_context, target) {\n return target;\n };\n NoopContextManager.prototype.enable = function () {\n return this;\n };\n NoopContextManager.prototype.disable = function () {\n return this;\n };\n return NoopContextManager;\n}());\nexport { NoopContextManager };\n//# sourceMappingURL=NoopContextManager.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'context';\nvar NOOP_CONTEXT_MANAGER = new NoopContextManager();\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nvar ContextAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function ContextAPI() {\n }\n /** Get the singleton instance of the Context API */\n ContextAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new ContextAPI();\n }\n return this._instance;\n };\n /**\n * Set the current context manager.\n *\n * @returns true if the context manager was successfully registered, else false\n */\n ContextAPI.prototype.setGlobalContextManager = function (contextManager) {\n return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n };\n /**\n * Get the currently active context\n */\n ContextAPI.prototype.active = function () {\n return this._getContextManager().active();\n };\n /**\n * Execute a function with an active context\n *\n * @param context context to be active during function execution\n * @param fn function to execute in a context\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n ContextAPI.prototype.with = function (context, fn, thisArg) {\n var _a;\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return (_a = this._getContextManager()).with.apply(_a, __spreadArray([context, fn, thisArg], __read(args), false));\n };\n /**\n * Bind a context to a target function or event emitter\n *\n * @param context context to bind to the event emitter or function. Defaults to the currently active context\n * @param target function or event emitter to bind\n */\n ContextAPI.prototype.bind = function (context, target) {\n return this._getContextManager().bind(context, target);\n };\n ContextAPI.prototype._getContextManager = function () {\n return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n };\n /** Disable and remove the global context manager */\n ContextAPI.prototype.disable = function () {\n this._getContextManager().disable();\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n return ContextAPI;\n}());\nexport { ContextAPI };\n//# sourceMappingURL=context.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var TraceFlags;\n(function (TraceFlags) {\n /** Represents no flag set. */\n TraceFlags[TraceFlags[\"NONE\"] = 0] = \"NONE\";\n /** Bit to represent whether trace is sampled in trace flags. */\n TraceFlags[TraceFlags[\"SAMPLED\"] = 1] = \"SAMPLED\";\n})(TraceFlags || (TraceFlags = {}));\n//# sourceMappingURL=trace_flags.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TraceFlags } from './trace_flags';\nexport var INVALID_SPANID = '0000000000000000';\nexport var INVALID_TRACEID = '00000000000000000000000000000000';\nexport var INVALID_SPAN_CONTEXT = {\n traceId: INVALID_TRACEID,\n spanId: INVALID_SPANID,\n traceFlags: TraceFlags.NONE,\n};\n//# sourceMappingURL=invalid-span-constants.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nvar NonRecordingSpan = /** @class */ (function () {\n function NonRecordingSpan(_spanContext) {\n if (_spanContext === void 0) { _spanContext = INVALID_SPAN_CONTEXT; }\n this._spanContext = _spanContext;\n }\n // Returns a SpanContext.\n NonRecordingSpan.prototype.spanContext = function () {\n return this._spanContext;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setAttribute = function (_key, _value) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setAttributes = function (_attributes) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.addEvent = function (_name, _attributes) {\n return this;\n };\n NonRecordingSpan.prototype.addLink = function (_link) {\n return this;\n };\n NonRecordingSpan.prototype.addLinks = function (_links) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setStatus = function (_status) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.updateName = function (_name) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.end = function (_endTime) { };\n // isRecording always returns false for NonRecordingSpan.\n NonRecordingSpan.prototype.isRecording = function () {\n return false;\n };\n // By default does nothing\n NonRecordingSpan.prototype.recordException = function (_exception, _time) { };\n return NonRecordingSpan;\n}());\nexport { NonRecordingSpan };\n//# sourceMappingURL=NonRecordingSpan.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createContextKey } from '../context/context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n/**\n * span key\n */\nvar SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context) {\n return context.getValue(SPAN_KEY) || undefined;\n}\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan() {\n return getSpan(ContextAPI.getInstance().active());\n}\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context, span) {\n return context.setValue(SPAN_KEY, span);\n}\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context) {\n return context.deleteValue(SPAN_KEY);\n}\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(context, spanContext) {\n return setSpan(context, new NonRecordingSpan(spanContext));\n}\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context) {\n var _a;\n return (_a = getSpan(context)) === null || _a === void 0 ? void 0 : _a.spanContext();\n}\n//# sourceMappingURL=context-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nvar VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nvar VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\nexport function isValidTraceId(traceId) {\n return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\nexport function isValidSpanId(spanId) {\n return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext) {\n return (isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId));\n}\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext) {\n return new NonRecordingSpan(spanContext);\n}\n//# sourceMappingURL=spancontext-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ContextAPI } from '../api/context';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { isSpanContextValid } from './spancontext-utils';\nvar contextApi = ContextAPI.getInstance();\n/**\n * No-op implementations of {@link Tracer}.\n */\nvar NoopTracer = /** @class */ (function () {\n function NoopTracer() {\n }\n // startSpan starts a noop span.\n NoopTracer.prototype.startSpan = function (name, options, context) {\n if (context === void 0) { context = contextApi.active(); }\n var root = Boolean(options === null || options === void 0 ? void 0 : options.root);\n if (root) {\n return new NonRecordingSpan();\n }\n var parentFromContext = context && getSpanContext(context);\n if (isSpanContext(parentFromContext) &&\n isSpanContextValid(parentFromContext)) {\n return new NonRecordingSpan(parentFromContext);\n }\n else {\n return new NonRecordingSpan();\n }\n };\n NoopTracer.prototype.startActiveSpan = function (name, arg2, arg3, arg4) {\n var opts;\n var ctx;\n var fn;\n if (arguments.length < 2) {\n return;\n }\n else if (arguments.length === 2) {\n fn = arg2;\n }\n else if (arguments.length === 3) {\n opts = arg2;\n fn = arg3;\n }\n else {\n opts = arg2;\n ctx = arg3;\n fn = arg4;\n }\n var parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active();\n var span = this.startSpan(name, opts, parentContext);\n var contextWithSpanSet = setSpan(parentContext, span);\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n };\n return NoopTracer;\n}());\nexport { NoopTracer };\nfunction isSpanContext(spanContext) {\n return (typeof spanContext === 'object' &&\n typeof spanContext['spanId'] === 'string' &&\n typeof spanContext['traceId'] === 'string' &&\n typeof spanContext['traceFlags'] === 'number');\n}\n//# sourceMappingURL=NoopTracer.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopTracer } from './NoopTracer';\nvar NOOP_TRACER = new NoopTracer();\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nvar ProxyTracer = /** @class */ (function () {\n function ProxyTracer(_provider, name, version, options) {\n this._provider = _provider;\n this.name = name;\n this.version = version;\n this.options = options;\n }\n ProxyTracer.prototype.startSpan = function (name, options, context) {\n return this._getTracer().startSpan(name, options, context);\n };\n ProxyTracer.prototype.startActiveSpan = function (_name, _options, _context, _fn) {\n var tracer = this._getTracer();\n return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n };\n /**\n * Try to get a tracer from the proxy tracer provider.\n * If the proxy tracer provider has no delegate, return a noop tracer.\n */\n ProxyTracer.prototype._getTracer = function () {\n if (this._delegate) {\n return this._delegate;\n }\n var tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);\n if (!tracer) {\n return NOOP_TRACER;\n }\n this._delegate = tracer;\n return this._delegate;\n };\n return ProxyTracer;\n}());\nexport { ProxyTracer };\n//# sourceMappingURL=ProxyTracer.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopTracer } from './NoopTracer';\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nvar NoopTracerProvider = /** @class */ (function () {\n function NoopTracerProvider() {\n }\n NoopTracerProvider.prototype.getTracer = function (_name, _version, _options) {\n return new NoopTracer();\n };\n return NoopTracerProvider;\n}());\nexport { NoopTracerProvider };\n//# sourceMappingURL=NoopTracerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nvar NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n * When a delegate is set, traces are provided from the delegate.\n * When a delegate is set after tracers have already been provided,\n * all tracers already provided will use the provided delegate implementation.\n */\nvar ProxyTracerProvider = /** @class */ (function () {\n function ProxyTracerProvider() {\n }\n /**\n * Get a {@link ProxyTracer}\n */\n ProxyTracerProvider.prototype.getTracer = function (name, version, options) {\n var _a;\n return ((_a = this.getDelegateTracer(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyTracer(this, name, version, options));\n };\n ProxyTracerProvider.prototype.getDelegate = function () {\n var _a;\n return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER;\n };\n /**\n * Set the delegate tracer provider\n */\n ProxyTracerProvider.prototype.setDelegate = function (delegate) {\n this._delegate = delegate;\n };\n ProxyTracerProvider.prototype.getDelegateTracer = function (name, version, options) {\n var _a;\n return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version, options);\n };\n return ProxyTracerProvider;\n}());\nexport { ProxyTracerProvider };\n//# sourceMappingURL=ProxyTracerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @deprecated use the one declared in @opentelemetry/sdk-trace-base instead.\n * A sampling decision that determines how a {@link Span} will be recorded\n * and collected.\n */\nexport var SamplingDecision;\n(function (SamplingDecision) {\n /**\n * `Span.isRecording() === false`, span will not be recorded and all events\n * and attributes will be dropped.\n */\n SamplingDecision[SamplingDecision[\"NOT_RECORD\"] = 0] = \"NOT_RECORD\";\n /**\n * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}\n * MUST NOT be set.\n */\n SamplingDecision[SamplingDecision[\"RECORD\"] = 1] = \"RECORD\";\n /**\n * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}\n * MUST be set.\n */\n SamplingDecision[SamplingDecision[\"RECORD_AND_SAMPLED\"] = 2] = \"RECORD_AND_SAMPLED\";\n})(SamplingDecision || (SamplingDecision = {}));\n//# sourceMappingURL=SamplingResult.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var SpanKind;\n(function (SpanKind) {\n /** Default value. Indicates that the span is used internally. */\n SpanKind[SpanKind[\"INTERNAL\"] = 0] = \"INTERNAL\";\n /**\n * Indicates that the span covers server-side handling of an RPC or other\n * remote request.\n */\n SpanKind[SpanKind[\"SERVER\"] = 1] = \"SERVER\";\n /**\n * Indicates that the span covers the client-side wrapper around an RPC or\n * other remote request.\n */\n SpanKind[SpanKind[\"CLIENT\"] = 2] = \"CLIENT\";\n /**\n * Indicates that the span describes producer sending a message to a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n SpanKind[SpanKind[\"PRODUCER\"] = 3] = \"PRODUCER\";\n /**\n * Indicates that the span describes consumer receiving a message from a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n SpanKind[SpanKind[\"CONSUMER\"] = 4] = \"CONSUMER\";\n})(SpanKind || (SpanKind = {}));\n//# sourceMappingURL=span_kind.js.map","/**\n * An enumeration of status codes.\n */\nexport var SpanStatusCode;\n(function (SpanStatusCode) {\n /**\n * The default status.\n */\n SpanStatusCode[SpanStatusCode[\"UNSET\"] = 0] = \"UNSET\";\n /**\n * The operation has been validated by an Application developer or\n * Operator to have completed successfully.\n */\n SpanStatusCode[SpanStatusCode[\"OK\"] = 1] = \"OK\";\n /**\n * The operation contains an error.\n */\n SpanStatusCode[SpanStatusCode[\"ERROR\"] = 2] = \"ERROR\";\n})(SpanStatusCode || (SpanStatusCode = {}));\n//# sourceMappingURL=status.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/** Entrypoint for context API */\nexport var context = ContextAPI.getInstance();\n//# sourceMappingURL=context-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { DiagAPI } from './api/diag';\n/**\n * Entrypoint for Diag API.\n * Defines Diagnostic handler used for internal diagnostic logging operations.\n * The default provides a Noop DiagLogger implementation which may be changed via the\n * diag.setLogger(logger: DiagLogger) function.\n */\nexport var diag = DiagAPI.instance();\n//# sourceMappingURL=diag-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NOOP_METER } from './NoopMeter';\n/**\n * An implementation of the {@link MeterProvider} which returns an impotent Meter\n * for all calls to `getMeter`\n */\nvar NoopMeterProvider = /** @class */ (function () {\n function NoopMeterProvider() {\n }\n NoopMeterProvider.prototype.getMeter = function (_name, _version, _options) {\n return NOOP_METER;\n };\n return NoopMeterProvider;\n}());\nexport { NoopMeterProvider };\nexport var NOOP_METER_PROVIDER = new NoopMeterProvider();\n//# sourceMappingURL=NoopMeterProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'metrics';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Metrics API\n */\nvar MetricsAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function MetricsAPI() {\n }\n /** Get the singleton instance of the Metrics API */\n MetricsAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new MetricsAPI();\n }\n return this._instance;\n };\n /**\n * Set the current global meter provider.\n * Returns true if the meter provider was successfully registered, else false.\n */\n MetricsAPI.prototype.setGlobalMeterProvider = function (provider) {\n return registerGlobal(API_NAME, provider, DiagAPI.instance());\n };\n /**\n * Returns the global meter provider.\n */\n MetricsAPI.prototype.getMeterProvider = function () {\n return getGlobal(API_NAME) || NOOP_METER_PROVIDER;\n };\n /**\n * Returns a meter from the global meter provider.\n */\n MetricsAPI.prototype.getMeter = function (name, version, options) {\n return this.getMeterProvider().getMeter(name, version, options);\n };\n /** Remove the global meter provider */\n MetricsAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n return MetricsAPI;\n}());\nexport { MetricsAPI };\n//# sourceMappingURL=metrics.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/** Entrypoint for metrics API */\nexport var metrics = MetricsAPI.getInstance();\n//# sourceMappingURL=metrics-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * No-op implementations of {@link TextMapPropagator}.\n */\nvar NoopTextMapPropagator = /** @class */ (function () {\n function NoopTextMapPropagator() {\n }\n /** Noop inject function does nothing */\n NoopTextMapPropagator.prototype.inject = function (_context, _carrier) { };\n /** Noop extract function does nothing and returns the input context */\n NoopTextMapPropagator.prototype.extract = function (context, _carrier) {\n return context;\n };\n NoopTextMapPropagator.prototype.fields = function () {\n return [];\n };\n return NoopTextMapPropagator;\n}());\nexport { NoopTextMapPropagator };\n//# sourceMappingURL=NoopTextMapPropagator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ContextAPI } from '../api/context';\nimport { createContextKey } from '../context/context';\n/**\n * Baggage key\n */\nvar BAGGAGE_KEY = createContextKey('OpenTelemetry Baggage Key');\n/**\n * Retrieve the current baggage from the given context\n *\n * @param {Context} Context that manage all context values\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getBaggage(context) {\n return context.getValue(BAGGAGE_KEY) || undefined;\n}\n/**\n * Retrieve the current baggage from the active/current context\n *\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getActiveBaggage() {\n return getBaggage(ContextAPI.getInstance().active());\n}\n/**\n * Store a baggage in the given context\n *\n * @param {Context} Context that manage all context values\n * @param {Baggage} baggage that will be set in the actual context\n */\nexport function setBaggage(context, baggage) {\n return context.setValue(BAGGAGE_KEY, baggage);\n}\n/**\n * Delete the baggage stored in the given context\n *\n * @param {Context} Context that manage all context values\n */\nexport function deleteBaggage(context) {\n return context.deleteValue(BAGGAGE_KEY);\n}\n//# sourceMappingURL=context-helpers.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { NoopTextMapPropagator } from '../propagation/NoopTextMapPropagator';\nimport { defaultTextMapGetter, defaultTextMapSetter, } from '../propagation/TextMapPropagator';\nimport { getBaggage, getActiveBaggage, setBaggage, deleteBaggage, } from '../baggage/context-helpers';\nimport { createBaggage } from '../baggage/utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'propagation';\nvar NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator();\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Propagation API\n */\nvar PropagationAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function PropagationAPI() {\n this.createBaggage = createBaggage;\n this.getBaggage = getBaggage;\n this.getActiveBaggage = getActiveBaggage;\n this.setBaggage = setBaggage;\n this.deleteBaggage = deleteBaggage;\n }\n /** Get the singleton instance of the Propagator API */\n PropagationAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new PropagationAPI();\n }\n return this._instance;\n };\n /**\n * Set the current propagator.\n *\n * @returns true if the propagator was successfully registered, else false\n */\n PropagationAPI.prototype.setGlobalPropagator = function (propagator) {\n return registerGlobal(API_NAME, propagator, DiagAPI.instance());\n };\n /**\n * Inject context into a carrier to be propagated inter-process\n *\n * @param context Context carrying tracing data to inject\n * @param carrier carrier to inject context into\n * @param setter Function used to set values on the carrier\n */\n PropagationAPI.prototype.inject = function (context, carrier, setter) {\n if (setter === void 0) { setter = defaultTextMapSetter; }\n return this._getGlobalPropagator().inject(context, carrier, setter);\n };\n /**\n * Extract context from a carrier\n *\n * @param context Context which the newly created context will inherit from\n * @param carrier Carrier to extract context from\n * @param getter Function used to extract keys from a carrier\n */\n PropagationAPI.prototype.extract = function (context, carrier, getter) {\n if (getter === void 0) { getter = defaultTextMapGetter; }\n return this._getGlobalPropagator().extract(context, carrier, getter);\n };\n /**\n * Return a list of all fields which may be used by the propagator.\n */\n PropagationAPI.prototype.fields = function () {\n return this._getGlobalPropagator().fields();\n };\n /** Remove the global propagator */\n PropagationAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n PropagationAPI.prototype._getGlobalPropagator = function () {\n return getGlobal(API_NAME) || NOOP_TEXT_MAP_PROPAGATOR;\n };\n return PropagationAPI;\n}());\nexport { PropagationAPI };\n//# sourceMappingURL=propagation.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { PropagationAPI } from './api/propagation';\n/** Entrypoint for propagation API */\nexport var propagation = PropagationAPI.getInstance();\n//# sourceMappingURL=propagation-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport { isSpanContextValid, wrapSpanContext, } from '../trace/spancontext-utils';\nimport { deleteSpan, getActiveSpan, getSpan, getSpanContext, setSpan, setSpanContext, } from '../trace/context-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'trace';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nvar TraceAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function TraceAPI() {\n this._proxyTracerProvider = new ProxyTracerProvider();\n this.wrapSpanContext = wrapSpanContext;\n this.isSpanContextValid = isSpanContextValid;\n this.deleteSpan = deleteSpan;\n this.getSpan = getSpan;\n this.getActiveSpan = getActiveSpan;\n this.getSpanContext = getSpanContext;\n this.setSpan = setSpan;\n this.setSpanContext = setSpanContext;\n }\n /** Get the singleton instance of the Trace API */\n TraceAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new TraceAPI();\n }\n return this._instance;\n };\n /**\n * Set the current global tracer.\n *\n * @returns true if the tracer provider was successfully registered, else false\n */\n TraceAPI.prototype.setGlobalTracerProvider = function (provider) {\n var success = registerGlobal(API_NAME, this._proxyTracerProvider, DiagAPI.instance());\n if (success) {\n this._proxyTracerProvider.setDelegate(provider);\n }\n return success;\n };\n /**\n * Returns the global tracer provider.\n */\n TraceAPI.prototype.getTracerProvider = function () {\n return getGlobal(API_NAME) || this._proxyTracerProvider;\n };\n /**\n * Returns a tracer from the global tracer provider.\n */\n TraceAPI.prototype.getTracer = function (name, version) {\n return this.getTracerProvider().getTracer(name, version);\n };\n /** Remove the global tracer provider */\n TraceAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n this._proxyTracerProvider = new ProxyTracerProvider();\n };\n return TraceAPI;\n}());\nexport { TraceAPI };\n//# sourceMappingURL=trace.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport var trace = TraceAPI.getInstance();\n//# sourceMappingURL=trace-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createContextKey } from '@opentelemetry/api';\nconst SUPPRESS_TRACING_KEY = createContextKey('OpenTelemetry SDK Context Key SUPPRESS_TRACING');\nexport function suppressTracing(context) {\n return context.setValue(SUPPRESS_TRACING_KEY, true);\n}\nexport function unsuppressTracing(context) {\n return context.deleteValue(SUPPRESS_TRACING_KEY);\n}\nexport function isTracingSuppressed(context) {\n return context.getValue(SUPPRESS_TRACING_KEY) === true;\n}\n//# sourceMappingURL=suppress-tracing.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const BAGGAGE_KEY_PAIR_SEPARATOR = '=';\nexport const BAGGAGE_PROPERTIES_SEPARATOR = ';';\nexport const BAGGAGE_ITEMS_SEPARATOR = ',';\n// Name of the http header used to propagate the baggage\nexport const BAGGAGE_HEADER = 'baggage';\n// Maximum number of name-value pairs allowed by w3c spec\nexport const BAGGAGE_MAX_NAME_VALUE_PAIRS = 180;\n// Maximum number of bytes per a single name-value pair allowed by w3c spec\nexport const BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096;\n// Maximum total length of all name-value pairs allowed by w3c spec\nexport const BAGGAGE_MAX_TOTAL_LENGTH = 8192;\n//# sourceMappingURL=constants.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { baggageEntryMetadataFromString, } from '@opentelemetry/api';\nimport { BAGGAGE_ITEMS_SEPARATOR, BAGGAGE_PROPERTIES_SEPARATOR, BAGGAGE_KEY_PAIR_SEPARATOR, BAGGAGE_MAX_TOTAL_LENGTH, } from './constants';\nexport function serializeKeyPairs(keyPairs) {\n return keyPairs.reduce((hValue, current) => {\n const value = `${hValue}${hValue !== '' ? BAGGAGE_ITEMS_SEPARATOR : ''}${current}`;\n return value.length > BAGGAGE_MAX_TOTAL_LENGTH ? hValue : value;\n }, '');\n}\nexport function getKeyPairs(baggage) {\n return baggage.getAllEntries().map(([key, value]) => {\n let entry = `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`;\n // include opaque metadata if provided\n // NOTE: we intentionally don't URI-encode the metadata - that responsibility falls on the metadata implementation\n if (value.metadata !== undefined) {\n entry += BAGGAGE_PROPERTIES_SEPARATOR + value.metadata.toString();\n }\n return entry;\n });\n}\nexport function parsePairKeyValue(entry) {\n const valueProps = entry.split(BAGGAGE_PROPERTIES_SEPARATOR);\n if (valueProps.length <= 0)\n return;\n const keyPairPart = valueProps.shift();\n if (!keyPairPart)\n return;\n const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR);\n if (separatorIndex <= 0)\n return;\n const key = decodeURIComponent(keyPairPart.substring(0, separatorIndex).trim());\n const value = decodeURIComponent(keyPairPart.substring(separatorIndex + 1).trim());\n let metadata;\n if (valueProps.length > 0) {\n metadata = baggageEntryMetadataFromString(valueProps.join(BAGGAGE_PROPERTIES_SEPARATOR));\n }\n return { key, value, metadata };\n}\n/**\n * Parse a string serialized in the baggage HTTP Format (without metadata):\n * https://github.com/w3c/baggage/blob/master/baggage/HTTP_HEADER_FORMAT.md\n */\nexport function parseKeyPairsIntoRecord(value) {\n const result = {};\n if (typeof value === 'string' && value.length > 0) {\n value.split(BAGGAGE_ITEMS_SEPARATOR).forEach(entry => {\n const keyPair = parsePairKeyValue(entry);\n if (keyPair !== undefined && keyPair.value.length > 0) {\n result[keyPair.key] = keyPair.value;\n }\n });\n }\n return result;\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { propagation, } from '@opentelemetry/api';\nimport { isTracingSuppressed } from '../../trace/suppress-tracing';\nimport { BAGGAGE_HEADER, BAGGAGE_ITEMS_SEPARATOR, BAGGAGE_MAX_NAME_VALUE_PAIRS, BAGGAGE_MAX_PER_NAME_VALUE_PAIRS, } from '../constants';\nimport { getKeyPairs, parsePairKeyValue, serializeKeyPairs } from '../utils';\n/**\n * Propagates {@link Baggage} through Context format propagation.\n *\n * Based on the Baggage specification:\n * https://w3c.github.io/baggage/\n */\nexport class W3CBaggagePropagator {\n inject(context, carrier, setter) {\n const baggage = propagation.getBaggage(context);\n if (!baggage || isTracingSuppressed(context))\n return;\n const keyPairs = getKeyPairs(baggage)\n .filter((pair) => {\n return pair.length <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS;\n })\n .slice(0, BAGGAGE_MAX_NAME_VALUE_PAIRS);\n const headerValue = serializeKeyPairs(keyPairs);\n if (headerValue.length > 0) {\n setter.set(carrier, BAGGAGE_HEADER, headerValue);\n }\n }\n extract(context, carrier, getter) {\n const headerValue = getter.get(carrier, BAGGAGE_HEADER);\n const baggageString = Array.isArray(headerValue)\n ? headerValue.join(BAGGAGE_ITEMS_SEPARATOR)\n : headerValue;\n if (!baggageString)\n return context;\n const baggage = {};\n if (baggageString.length === 0) {\n return context;\n }\n const pairs = baggageString.split(BAGGAGE_ITEMS_SEPARATOR);\n pairs.forEach(entry => {\n const keyPair = parsePairKeyValue(entry);\n if (keyPair) {\n const baggageEntry = { value: keyPair.value };\n if (keyPair.metadata) {\n baggageEntry.metadata = keyPair.metadata;\n }\n baggage[keyPair.key] = baggageEntry;\n }\n });\n if (Object.entries(baggage).length === 0) {\n return context;\n }\n return propagation.setBaggage(context, propagation.createBaggage(baggage));\n }\n fields() {\n return [BAGGAGE_HEADER];\n }\n}\n//# sourceMappingURL=W3CBaggagePropagator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nexport function sanitizeAttributes(attributes) {\n const out = {};\n if (typeof attributes !== 'object' || attributes == null) {\n return out;\n }\n for (const key in attributes) {\n if (!Object.prototype.hasOwnProperty.call(attributes, key)) {\n continue;\n }\n if (!isAttributeKey(key)) {\n diag.warn(`Invalid attribute key: ${key}`);\n continue;\n }\n const val = attributes[key];\n if (!isAttributeValue(val)) {\n diag.warn(`Invalid attribute value set for key: ${key}`);\n continue;\n }\n if (Array.isArray(val)) {\n out[key] = val.slice();\n }\n else {\n out[key] = val;\n }\n }\n return out;\n}\nexport function isAttributeKey(key) {\n return typeof key === 'string' && key !== '';\n}\nexport function isAttributeValue(val) {\n if (val == null) {\n return true;\n }\n if (Array.isArray(val)) {\n return isHomogeneousAttributeValueArray(val);\n }\n return isValidPrimitiveAttributeValueType(typeof val);\n}\nfunction isHomogeneousAttributeValueArray(arr) {\n let type;\n for (const element of arr) {\n // null/undefined elements are allowed\n if (element == null)\n continue;\n const elementType = typeof element;\n if (elementType === type) {\n continue;\n }\n if (!type) {\n if (isValidPrimitiveAttributeValueType(elementType)) {\n type = elementType;\n continue;\n }\n // encountered an invalid primitive\n return false;\n }\n return false;\n }\n return true;\n}\nfunction isValidPrimitiveAttributeValueType(valType) {\n switch (valType) {\n case 'number':\n case 'boolean':\n case 'string':\n return true;\n }\n return false;\n}\n//# sourceMappingURL=attributes.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\n/**\n * Returns a function that logs an error using the provided logger, or a\n * console logger if one was not provided.\n */\nexport function loggingErrorHandler() {\n return (ex) => {\n diag.error(stringifyException(ex));\n };\n}\n/**\n * Converts an exception into a string representation\n * @param {Exception} ex\n */\nfunction stringifyException(ex) {\n if (typeof ex === 'string') {\n return ex;\n }\n else {\n return JSON.stringify(flattenException(ex));\n }\n}\n/**\n * Flattens an exception into key-value pairs by traversing the prototype chain\n * and coercing values to strings. Duplicate properties will not be overwritten;\n * the first insert wins.\n */\nfunction flattenException(ex) {\n const result = {};\n let current = ex;\n while (current !== null) {\n Object.getOwnPropertyNames(current).forEach(propertyName => {\n if (result[propertyName])\n return;\n const value = current[propertyName];\n if (value) {\n result[propertyName] = String(value);\n }\n });\n current = Object.getPrototypeOf(current);\n }\n return result;\n}\n//# sourceMappingURL=logging-error-handler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { loggingErrorHandler } from './logging-error-handler';\n/** The global error handler delegate */\nlet delegateHandler = loggingErrorHandler();\n/**\n * Set the global error handler\n * @param {ErrorHandler} handler\n */\nexport function setGlobalErrorHandler(handler) {\n delegateHandler = handler;\n}\n/**\n * Return the global error handler\n * @param {Exception} ex\n */\nexport function globalErrorHandler(ex) {\n try {\n delegateHandler(ex);\n }\n catch { } // eslint-disable-line no-empty\n}\n//# sourceMappingURL=global-error-handler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function getStringFromEnv(_) {\n return undefined;\n}\nexport function getBooleanFromEnv(_) {\n return undefined;\n}\nexport function getNumberFromEnv(_) {\n return undefined;\n}\nexport function getStringListFromEnv(_) {\n return undefined;\n}\n//# sourceMappingURL=environment.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const otperformance = performance;\n//# sourceMappingURL=performance.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '2.2.0';\n//# sourceMappingURL=version.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates/registry/stable/attributes.ts.j2\n//----------------------------------------------------------------------------------------------------------\n/**\n * ASP.NET Core exception middleware handling result.\n *\n * @example handled\n * @example unhandled\n */\nexport const ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT = 'aspnetcore.diagnostics.exception.result';\n/**\n * Enum value \"aborted\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception handling didn't run because the request was aborted.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_ABORTED = \"aborted\";\n/**\n * Enum value \"handled\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception was handled by the exception handling middleware.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_HANDLED = \"handled\";\n/**\n * Enum value \"skipped\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception handling was skipped because the response had started.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_SKIPPED = \"skipped\";\n/**\n * Enum value \"unhandled\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception was not handled by the exception handling middleware.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_UNHANDLED = \"unhandled\";\n/**\n * Full type name of the [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) implementation that handled the exception.\n *\n * @example Contoso.MyHandler\n */\nexport const ATTR_ASPNETCORE_DIAGNOSTICS_HANDLER_TYPE = 'aspnetcore.diagnostics.handler.type';\n/**\n * Rate limiting policy name.\n *\n * @example fixed\n * @example sliding\n * @example token\n */\nexport const ATTR_ASPNETCORE_RATE_LIMITING_POLICY = 'aspnetcore.rate_limiting.policy';\n/**\n * Rate-limiting result, shows whether the lease was acquired or contains a rejection reason\n *\n * @example acquired\n * @example request_canceled\n */\nexport const ATTR_ASPNETCORE_RATE_LIMITING_RESULT = 'aspnetcore.rate_limiting.result';\n/**\n * Enum value \"acquired\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease was acquired\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ACQUIRED = \"acquired\";\n/**\n * Enum value \"endpoint_limiter\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease request was rejected by the endpoint limiter\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ENDPOINT_LIMITER = \"endpoint_limiter\";\n/**\n * Enum value \"global_limiter\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease request was rejected by the global limiter\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_GLOBAL_LIMITER = \"global_limiter\";\n/**\n * Enum value \"request_canceled\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease request was canceled\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_REQUEST_CANCELED = \"request_canceled\";\n/**\n * Flag indicating if request was handled by the application pipeline.\n *\n * @example true\n */\nexport const ATTR_ASPNETCORE_REQUEST_IS_UNHANDLED = 'aspnetcore.request.is_unhandled';\n/**\n * A value that indicates whether the matched route is a fallback route.\n *\n * @example true\n */\nexport const ATTR_ASPNETCORE_ROUTING_IS_FALLBACK = 'aspnetcore.routing.is_fallback';\n/**\n * Match result - success or failure\n *\n * @example success\n * @example failure\n */\nexport const ATTR_ASPNETCORE_ROUTING_MATCH_STATUS = 'aspnetcore.routing.match_status';\n/**\n * Enum value \"failure\" for attribute {@link ATTR_ASPNETCORE_ROUTING_MATCH_STATUS}.\n *\n * Match failed\n */\nexport const ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_FAILURE = \"failure\";\n/**\n * Enum value \"success\" for attribute {@link ATTR_ASPNETCORE_ROUTING_MATCH_STATUS}.\n *\n * Match succeeded\n */\nexport const ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_SUCCESS = \"success\";\n/**\n * A value that indicates whether the user is authenticated.\n *\n * @example true\n */\nexport const ATTR_ASPNETCORE_USER_IS_AUTHENTICATED = 'aspnetcore.user.is_authenticated';\n/**\n * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n *\n * @example client.example.com\n * @example 10.1.2.80\n * @example /tmp/my.sock\n *\n * @note When observed from the server side, and when communicating through an intermediary, `client.address` **SHOULD** represent the client address behind any intermediaries, for example proxies, if it's available.\n */\nexport const ATTR_CLIENT_ADDRESS = 'client.address';\n/**\n * Client port number.\n *\n * @example 65123\n *\n * @note When observed from the server side, and when communicating through an intermediary, `client.port` **SHOULD** represent the client port behind any intermediaries, for example proxies, if it's available.\n */\nexport const ATTR_CLIENT_PORT = 'client.port';\n/**\n * The column number in `code.file.path` best representing the operation. It **SHOULD** point within the code unit named in `code.function.name`. This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Line'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example 16\n */\nexport const ATTR_CODE_COLUMN_NUMBER = 'code.column.number';\n/**\n * The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Function'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example \"/usr/local/MyApplication/content_root/app/index.php\"\n */\nexport const ATTR_CODE_FILE_PATH = 'code.file.path';\n/**\n * The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely the same used within `code.stacktrace` attribute value. This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Function'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example com.example.MyHttpService.serveRequest\n * @example GuzzleHttp\\\\Client::transfer\n * @example fopen\n *\n * @note Values and format depends on each language runtime, thus it is impossible to provide an exhaustive list of examples.\n * The values are usually the same (or prefixes of) the ones found in native stack trace representation stored in\n * `code.stacktrace` without information on arguments.\n *\n * Examples:\n *\n * - Java method: `com.example.MyHttpService.serveRequest`\n * - Java anonymous class method: `com.mycompany.Main$1.myMethod`\n * - Java lambda method: `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`\n * - PHP function: `GuzzleHttp\\Client::transfer`\n * - Go function: `github.com/my/repo/pkg.foo.func5`\n * - Elixir: `OpenTelemetry.Ctx.new`\n * - Erlang: `opentelemetry_ctx:new`\n * - Rust: `playground::my_module::my_cool_func`\n * - C function: `fopen`\n */\nexport const ATTR_CODE_FUNCTION_NAME = 'code.function.name';\n/**\n * The line number in `code.file.path` best representing the operation. It **SHOULD** point within the code unit named in `code.function.name`. This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Line'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example 42\n */\nexport const ATTR_CODE_LINE_NUMBER = 'code.line.number';\n/**\n * A stacktrace as a string in the natural representation for the language runtime. The representation is identical to [`exception.stacktrace`](/docs/exceptions/exceptions-spans.md#stacktrace-representation). This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Location'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example \"at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)\\\\n\"\n */\nexport const ATTR_CODE_STACKTRACE = 'code.stacktrace';\n/**\n * The name of a collection (table, container) within the database.\n *\n * @example public.users\n * @example customers\n *\n * @note It is **RECOMMENDED** to capture the value as provided by the application\n * without attempting to do any case normalization.\n *\n * The collection name **SHOULD NOT** be extracted from `db.query.text`,\n * when the database system supports query text with multiple collections\n * in non-batch operations.\n *\n * For batch operations, if the individual operations are known to have the same\n * collection name then that collection name **SHOULD** be used.\n */\nexport const ATTR_DB_COLLECTION_NAME = 'db.collection.name';\n/**\n * The name of the database, fully qualified within the server address and port.\n *\n * @example customers\n * @example test.users\n *\n * @note If a database system has multiple namespace components, they **SHOULD** be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) **SHOULD** be omitted.\n * Semantic conventions for individual database systems **SHOULD** document what `db.namespace` means in the context of that system.\n * It is **RECOMMENDED** to capture the value as provided by the application without attempting to do any case normalization.\n */\nexport const ATTR_DB_NAMESPACE = 'db.namespace';\n/**\n * The number of queries included in a batch operation.\n *\n * @example 2\n * @example 3\n * @example 4\n *\n * @note Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` **SHOULD** never be `1`.\n */\nexport const ATTR_DB_OPERATION_BATCH_SIZE = 'db.operation.batch.size';\n/**\n * The name of the operation or command being executed.\n *\n * @example findAndModify\n * @example HMSET\n * @example SELECT\n *\n * @note It is **RECOMMENDED** to capture the value as provided by the application\n * without attempting to do any case normalization.\n *\n * The operation name **SHOULD NOT** be extracted from `db.query.text`,\n * when the database system supports query text with multiple operations\n * in non-batch operations.\n *\n * If spaces can occur in the operation name, multiple consecutive spaces\n * **SHOULD** be normalized to a single space.\n *\n * For batch operations, if the individual operations are known to have the same operation name\n * then that operation name **SHOULD** be used prepended by `BATCH `,\n * otherwise `db.operation.name` **SHOULD** be `BATCH` or some other database\n * system specific term if more applicable.\n */\nexport const ATTR_DB_OPERATION_NAME = 'db.operation.name';\n/**\n * Low cardinality summary of a database query.\n *\n * @example SELECT wuser_table\n * @example INSERT shipping_details SELECT orders\n * @example get user by id\n *\n * @note The query summary describes a class of database queries and is useful\n * as a grouping key, especially when analyzing telemetry for database\n * calls involving complex queries.\n *\n * Summary may be available to the instrumentation through\n * instrumentation hooks or other means. If it is not available, instrumentations\n * that support query parsing **SHOULD** generate a summary following\n * [Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\n * section.\n */\nexport const ATTR_DB_QUERY_SUMMARY = 'db.query.summary';\n/**\n * The database query being executed.\n *\n * @example SELECT * FROM wuser_table where username = ?\n * @example SET mykey ?\n *\n * @note For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\n * For batch operations, if the individual operations are known to have the same query text then that query text **SHOULD** be used, otherwise all of the individual query texts **SHOULD** be concatenated with separator `; ` or some other database system specific separator if more applicable.\n * Parameterized query text **SHOULD NOT** be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n */\nexport const ATTR_DB_QUERY_TEXT = 'db.query.text';\n/**\n * Database response status code.\n *\n * @example 102\n * @example ORA-17002\n * @example 08P01\n * @example 404\n *\n * @note The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\n * Semantic conventions for individual database systems **SHOULD** document what `db.response.status_code` means in the context of that system.\n */\nexport const ATTR_DB_RESPONSE_STATUS_CODE = 'db.response.status_code';\n/**\n * The name of a stored procedure within the database.\n *\n * @example GetCustomer\n *\n * @note It is **RECOMMENDED** to capture the value as provided by the application\n * without attempting to do any case normalization.\n *\n * For batch operations, if the individual operations are known to have the same\n * stored procedure name then that stored procedure name **SHOULD** be used.\n */\nexport const ATTR_DB_STORED_PROCEDURE_NAME = 'db.stored_procedure.name';\n/**\n * The database management system (DBMS) product as identified by the client instrumentation.\n *\n * @note The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation's best knowledge.\n */\nexport const ATTR_DB_SYSTEM_NAME = 'db.system.name';\n/**\n * Enum value \"mariadb\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [MariaDB](https://mariadb.org/)\n */\nexport const DB_SYSTEM_NAME_VALUE_MARIADB = \"mariadb\";\n/**\n * Enum value \"microsoft.sql_server\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [Microsoft SQL Server](https://www.microsoft.com/sql-server)\n */\nexport const DB_SYSTEM_NAME_VALUE_MICROSOFT_SQL_SERVER = \"microsoft.sql_server\";\n/**\n * Enum value \"mysql\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [MySQL](https://www.mysql.com/)\n */\nexport const DB_SYSTEM_NAME_VALUE_MYSQL = \"mysql\";\n/**\n * Enum value \"postgresql\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [PostgreSQL](https://www.postgresql.org/)\n */\nexport const DB_SYSTEM_NAME_VALUE_POSTGRESQL = \"postgresql\";\n/**\n * Name of the garbage collector managed heap generation.\n *\n * @example gen0\n * @example gen1\n * @example gen2\n */\nexport const ATTR_DOTNET_GC_HEAP_GENERATION = 'dotnet.gc.heap.generation';\n/**\n * Enum value \"gen0\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Generation 0\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_GEN0 = \"gen0\";\n/**\n * Enum value \"gen1\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Generation 1\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_GEN1 = \"gen1\";\n/**\n * Enum value \"gen2\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Generation 2\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_GEN2 = \"gen2\";\n/**\n * Enum value \"loh\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Large Object Heap\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_LOH = \"loh\";\n/**\n * Enum value \"poh\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Pinned Object Heap\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_POH = \"poh\";\n/**\n * Describes a class of error the operation ended with.\n *\n * @example timeout\n * @example java.net.UnknownHostException\n * @example server_certificate_invalid\n * @example 500\n *\n * @note The `error.type` **SHOULD** be predictable, and **SHOULD** have low cardinality.\n *\n * When `error.type` is set to a type (e.g., an exception type), its\n * canonical class name identifying the type within the artifact **SHOULD** be used.\n *\n * Instrumentations **SHOULD** document the list of errors they report.\n *\n * The cardinality of `error.type` within one instrumentation library **SHOULD** be low.\n * Telemetry consumers that aggregate data from multiple instrumentation libraries and applications\n * should be prepared for `error.type` to have high cardinality at query time when no\n * additional filters are applied.\n *\n * If the operation has completed successfully, instrumentations **SHOULD NOT** set `error.type`.\n *\n * If a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\n * it's **RECOMMENDED** to:\n *\n * - Use a domain-specific attribute\n * - Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n */\nexport const ATTR_ERROR_TYPE = 'error.type';\n/**\n * Enum value \"_OTHER\" for attribute {@link ATTR_ERROR_TYPE}.\n *\n * A fallback error value to be used when the instrumentation doesn't define a custom value.\n */\nexport const ERROR_TYPE_VALUE_OTHER = \"_OTHER\";\n/**\n * Indicates that the exception is escaping the scope of the span.\n *\n * @deprecated It's no longer recommended to record exceptions that are handled and do not escape the scope of a span.\n */\nexport const ATTR_EXCEPTION_ESCAPED = 'exception.escaped';\n/**\n * The exception message.\n *\n * @example Division by zero\n * @example Can't convert 'int' object to str implicitly\n */\nexport const ATTR_EXCEPTION_MESSAGE = 'exception.message';\n/**\n * A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n *\n * @example \"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)\\\\n\"\n */\nexport const ATTR_EXCEPTION_STACKTRACE = 'exception.stacktrace';\n/**\n * The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n *\n * @example java.net.ConnectException\n * @example OSError\n */\nexport const ATTR_EXCEPTION_TYPE = 'exception.type';\n/**\n * HTTP request headers, `<key>` being the normalized HTTP Header name (lowercase), the value being the header values.\n *\n * @example [\"application/json\"]\n * @example [\"1.2.3.4\", \"1.2.3.5\"]\n *\n * @note Instrumentations **SHOULD** require an explicit configuration of which headers are to be captured.\n * Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n *\n * The `User-Agent` header is already captured in the `user_agent.original` attribute.\n * Users **MAY** explicitly configure instrumentations to capture them even though it is not recommended.\n *\n * The attribute value **MUST** consist of either multiple header values as an array of strings\n * or a single-item array containing a possibly comma-concatenated string, depending on the way\n * the HTTP library provides access to headers.\n *\n * Examples:\n *\n * - A header `Content-Type: application/json` **SHOULD** be recorded as the `http.request.header.content-type`\n * attribute with value `[\"application/json\"]`.\n * - A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` **SHOULD** be recorded as the `http.request.header.x-forwarded-for`\n * attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n */\nexport const ATTR_HTTP_REQUEST_HEADER = (key) => `http.request.header.${key}`;\n/**\n * HTTP request method.\n *\n * @example GET\n * @example POST\n * @example HEAD\n *\n * @note HTTP request method value **SHOULD** be \"known\" to the instrumentation.\n * By default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods),\n * the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\n * and the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\n *\n * If the HTTP request method is not known to instrumentation, it **MUST** set the `http.request.method` attribute to `_OTHER`.\n *\n * If the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it **MUST** provide a way to override\n * the list of known HTTP methods. If this override is done via environment variable, then the environment variable **MUST** be named\n * OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n * (this list **MUST** be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n *\n * HTTP method names are case-sensitive and `http.request.method` attribute value **MUST** match a known HTTP method name exactly.\n * Instrumentations for specific web frameworks that consider HTTP methods to be case insensitive, **SHOULD** populate a canonical equivalent.\n * Tracing instrumentations that do so, **MUST** also set `http.request.method_original` to the original value.\n */\nexport const ATTR_HTTP_REQUEST_METHOD = 'http.request.method';\n/**\n * Enum value \"_OTHER\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * Any HTTP method that the instrumentation has no prior knowledge of.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_OTHER = \"_OTHER\";\n/**\n * Enum value \"CONNECT\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * CONNECT method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_CONNECT = \"CONNECT\";\n/**\n * Enum value \"DELETE\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * DELETE method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_DELETE = \"DELETE\";\n/**\n * Enum value \"GET\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * GET method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_GET = \"GET\";\n/**\n * Enum value \"HEAD\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * HEAD method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_HEAD = \"HEAD\";\n/**\n * Enum value \"OPTIONS\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * OPTIONS method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_OPTIONS = \"OPTIONS\";\n/**\n * Enum value \"PATCH\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * PATCH method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_PATCH = \"PATCH\";\n/**\n * Enum value \"POST\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * POST method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_POST = \"POST\";\n/**\n * Enum value \"PUT\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * PUT method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_PUT = \"PUT\";\n/**\n * Enum value \"TRACE\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * TRACE method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_TRACE = \"TRACE\";\n/**\n * Original HTTP method sent by the client in the request line.\n *\n * @example GeT\n * @example ACL\n * @example foo\n */\nexport const ATTR_HTTP_REQUEST_METHOD_ORIGINAL = 'http.request.method_original';\n/**\n * The ordinal number of request resending attempt (for any reason, including redirects).\n *\n * @example 3\n *\n * @note The resend count **SHOULD** be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n */\nexport const ATTR_HTTP_REQUEST_RESEND_COUNT = 'http.request.resend_count';\n/**\n * HTTP response headers, `<key>` being the normalized HTTP Header name (lowercase), the value being the header values.\n *\n * @example [\"application/json\"]\n * @example [\"abc\", \"def\"]\n *\n * @note Instrumentations **SHOULD** require an explicit configuration of which headers are to be captured.\n * Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n *\n * Users **MAY** explicitly configure instrumentations to capture them even though it is not recommended.\n *\n * The attribute value **MUST** consist of either multiple header values as an array of strings\n * or a single-item array containing a possibly comma-concatenated string, depending on the way\n * the HTTP library provides access to headers.\n *\n * Examples:\n *\n * - A header `Content-Type: application/json` header **SHOULD** be recorded as the `http.request.response.content-type`\n * attribute with value `[\"application/json\"]`.\n * - A header `My-custom-header: abc, def` header **SHOULD** be recorded as the `http.response.header.my-custom-header`\n * attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n */\nexport const ATTR_HTTP_RESPONSE_HEADER = (key) => `http.response.header.${key}`;\n/**\n * [HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).\n *\n * @example 200\n */\nexport const ATTR_HTTP_RESPONSE_STATUS_CODE = 'http.response.status_code';\n/**\n * The matched route template for the request. This **MUST** be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n *\n * @example /users/:userID?\n * @example my-controller/my-action/{id?}\n *\n * @note **MUST NOT** be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\n * **SHOULD** include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.\n *\n * A static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\n * are constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n *\n * A dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n *\n * Instrumentations **SHOULD** use routing information provided by the corresponding web framework. They **SHOULD** pick the most precise source of routing information and **MAY**\n * support custom route formatting. Instrumentations **SHOULD** document the format and the API used to obtain the route string.\n */\nexport const ATTR_HTTP_ROUTE = 'http.route';\n/**\n * Name of the garbage collector action.\n *\n * @example end of minor GC\n * @example end of major GC\n *\n * @note Garbage collector action is generally obtained via [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).\n */\nexport const ATTR_JVM_GC_ACTION = 'jvm.gc.action';\n/**\n * Name of the garbage collector.\n *\n * @example G1 Young Generation\n * @example G1 Old Generation\n *\n * @note Garbage collector name is generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).\n */\nexport const ATTR_JVM_GC_NAME = 'jvm.gc.name';\n/**\n * Name of the memory pool.\n *\n * @example G1 Old Gen\n * @example G1 Eden space\n * @example G1 Survivor Space\n *\n * @note Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n */\nexport const ATTR_JVM_MEMORY_POOL_NAME = 'jvm.memory.pool.name';\n/**\n * The type of memory.\n *\n * @example heap\n * @example non_heap\n */\nexport const ATTR_JVM_MEMORY_TYPE = 'jvm.memory.type';\n/**\n * Enum value \"heap\" for attribute {@link ATTR_JVM_MEMORY_TYPE}.\n *\n * Heap memory.\n */\nexport const JVM_MEMORY_TYPE_VALUE_HEAP = \"heap\";\n/**\n * Enum value \"non_heap\" for attribute {@link ATTR_JVM_MEMORY_TYPE}.\n *\n * Non-heap memory\n */\nexport const JVM_MEMORY_TYPE_VALUE_NON_HEAP = \"non_heap\";\n/**\n * Whether the thread is daemon or not.\n */\nexport const ATTR_JVM_THREAD_DAEMON = 'jvm.thread.daemon';\n/**\n * State of the thread.\n *\n * @example runnable\n * @example blocked\n */\nexport const ATTR_JVM_THREAD_STATE = 'jvm.thread.state';\n/**\n * Enum value \"blocked\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that is blocked waiting for a monitor lock is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_BLOCKED = \"blocked\";\n/**\n * Enum value \"new\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that has not yet started is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_NEW = \"new\";\n/**\n * Enum value \"runnable\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread executing in the Java virtual machine is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_RUNNABLE = \"runnable\";\n/**\n * Enum value \"terminated\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that has exited is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_TERMINATED = \"terminated\";\n/**\n * Enum value \"timed_waiting\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_TIMED_WAITING = \"timed_waiting\";\n/**\n * Enum value \"waiting\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that is waiting indefinitely for another thread to perform a particular action is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_WAITING = \"waiting\";\n/**\n * Local address of the network connection - IP address or Unix domain socket name.\n *\n * @example 10.1.2.80\n * @example /tmp/my.sock\n */\nexport const ATTR_NETWORK_LOCAL_ADDRESS = 'network.local.address';\n/**\n * Local port number of the network connection.\n *\n * @example 65123\n */\nexport const ATTR_NETWORK_LOCAL_PORT = 'network.local.port';\n/**\n * Peer address of the network connection - IP address or Unix domain socket name.\n *\n * @example 10.1.2.80\n * @example /tmp/my.sock\n */\nexport const ATTR_NETWORK_PEER_ADDRESS = 'network.peer.address';\n/**\n * Peer port number of the network connection.\n *\n * @example 65123\n */\nexport const ATTR_NETWORK_PEER_PORT = 'network.peer.port';\n/**\n * [OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.\n *\n * @example amqp\n * @example http\n * @example mqtt\n *\n * @note The value **SHOULD** be normalized to lowercase.\n */\nexport const ATTR_NETWORK_PROTOCOL_NAME = 'network.protocol.name';\n/**\n * The actual version of the protocol used for network communication.\n *\n * @example 1.1\n * @example 2\n *\n * @note If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute **SHOULD** be set to the negotiated version. If the actual protocol version is not known, this attribute **SHOULD NOT** be set.\n */\nexport const ATTR_NETWORK_PROTOCOL_VERSION = 'network.protocol.version';\n/**\n * [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n *\n * @example tcp\n * @example udp\n *\n * @note The value **SHOULD** be normalized to lowercase.\n *\n * Consider always setting the transport when setting a port number, since\n * a port number is ambiguous without knowing the transport. For example\n * different processes could be listening on TCP port 12345 and UDP port 12345.\n */\nexport const ATTR_NETWORK_TRANSPORT = 'network.transport';\n/**\n * Enum value \"pipe\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * Named or anonymous pipe.\n */\nexport const NETWORK_TRANSPORT_VALUE_PIPE = \"pipe\";\n/**\n * Enum value \"quic\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * QUIC\n */\nexport const NETWORK_TRANSPORT_VALUE_QUIC = \"quic\";\n/**\n * Enum value \"tcp\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * TCP\n */\nexport const NETWORK_TRANSPORT_VALUE_TCP = \"tcp\";\n/**\n * Enum value \"udp\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * UDP\n */\nexport const NETWORK_TRANSPORT_VALUE_UDP = \"udp\";\n/**\n * Enum value \"unix\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * Unix domain socket\n */\nexport const NETWORK_TRANSPORT_VALUE_UNIX = \"unix\";\n/**\n * [OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.\n *\n * @example ipv4\n * @example ipv6\n *\n * @note The value **SHOULD** be normalized to lowercase.\n */\nexport const ATTR_NETWORK_TYPE = 'network.type';\n/**\n * Enum value \"ipv4\" for attribute {@link ATTR_NETWORK_TYPE}.\n *\n * IPv4\n */\nexport const NETWORK_TYPE_VALUE_IPV4 = \"ipv4\";\n/**\n * Enum value \"ipv6\" for attribute {@link ATTR_NETWORK_TYPE}.\n *\n * IPv6\n */\nexport const NETWORK_TYPE_VALUE_IPV6 = \"ipv6\";\n/**\n * The name of the instrumentation scope - (`InstrumentationScope.Name` in OTLP).\n *\n * @example io.opentelemetry.contrib.mongodb\n */\nexport const ATTR_OTEL_SCOPE_NAME = 'otel.scope.name';\n/**\n * The version of the instrumentation scope - (`InstrumentationScope.Version` in OTLP).\n *\n * @example 1.0.0\n */\nexport const ATTR_OTEL_SCOPE_VERSION = 'otel.scope.version';\n/**\n * Name of the code, either \"OK\" or \"ERROR\". **MUST NOT** be set if the status code is UNSET.\n */\nexport const ATTR_OTEL_STATUS_CODE = 'otel.status_code';\n/**\n * Enum value \"ERROR\" for attribute {@link ATTR_OTEL_STATUS_CODE}.\n *\n * The operation contains an error.\n */\nexport const OTEL_STATUS_CODE_VALUE_ERROR = \"ERROR\";\n/**\n * Enum value \"OK\" for attribute {@link ATTR_OTEL_STATUS_CODE}.\n *\n * The operation has been validated by an Application developer or Operator to have completed successfully.\n */\nexport const OTEL_STATUS_CODE_VALUE_OK = \"OK\";\n/**\n * Description of the Status if it has a value, otherwise not set.\n *\n * @example resource not found\n */\nexport const ATTR_OTEL_STATUS_DESCRIPTION = 'otel.status_description';\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n *\n * @example example.com\n * @example 10.1.2.80\n * @example /tmp/my.sock\n *\n * @note When observed from the client side, and when communicating through an intermediary, `server.address` **SHOULD** represent the server address behind any intermediaries, for example proxies, if it's available.\n */\nexport const ATTR_SERVER_ADDRESS = 'server.address';\n/**\n * Server port number.\n *\n * @example 80\n * @example 8080\n * @example 443\n *\n * @note When observed from the client side, and when communicating through an intermediary, `server.port` **SHOULD** represent the server port behind any intermediaries, for example proxies, if it's available.\n */\nexport const ATTR_SERVER_PORT = 'server.port';\n/**\n * Logical name of the service.\n *\n * @example shoppingcart\n *\n * @note **MUST** be the same for all instances of horizontally scaled services. If the value was not specified, SDKs **MUST** fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value **MUST** be set to `unknown_service`.\n */\nexport const ATTR_SERVICE_NAME = 'service.name';\n/**\n * The version string of the service API or implementation. The format is not defined by these conventions.\n *\n * @example 2.0.0\n * @example a01dbef8a\n */\nexport const ATTR_SERVICE_VERSION = 'service.version';\n/**\n * SignalR HTTP connection closure status.\n *\n * @example app_shutdown\n * @example timeout\n */\nexport const ATTR_SIGNALR_CONNECTION_STATUS = 'signalr.connection.status';\n/**\n * Enum value \"app_shutdown\" for attribute {@link ATTR_SIGNALR_CONNECTION_STATUS}.\n *\n * The connection was closed because the app is shutting down.\n */\nexport const SIGNALR_CONNECTION_STATUS_VALUE_APP_SHUTDOWN = \"app_shutdown\";\n/**\n * Enum value \"normal_closure\" for attribute {@link ATTR_SIGNALR_CONNECTION_STATUS}.\n *\n * The connection was closed normally.\n */\nexport const SIGNALR_CONNECTION_STATUS_VALUE_NORMAL_CLOSURE = \"normal_closure\";\n/**\n * Enum value \"timeout\" for attribute {@link ATTR_SIGNALR_CONNECTION_STATUS}.\n *\n * The connection was closed due to a timeout.\n */\nexport const SIGNALR_CONNECTION_STATUS_VALUE_TIMEOUT = \"timeout\";\n/**\n * [SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)\n *\n * @example web_sockets\n * @example long_polling\n */\nexport const ATTR_SIGNALR_TRANSPORT = 'signalr.transport';\n/**\n * Enum value \"long_polling\" for attribute {@link ATTR_SIGNALR_TRANSPORT}.\n *\n * LongPolling protocol\n */\nexport const SIGNALR_TRANSPORT_VALUE_LONG_POLLING = \"long_polling\";\n/**\n * Enum value \"server_sent_events\" for attribute {@link ATTR_SIGNALR_TRANSPORT}.\n *\n * ServerSentEvents protocol\n */\nexport const SIGNALR_TRANSPORT_VALUE_SERVER_SENT_EVENTS = \"server_sent_events\";\n/**\n * Enum value \"web_sockets\" for attribute {@link ATTR_SIGNALR_TRANSPORT}.\n *\n * WebSockets protocol\n */\nexport const SIGNALR_TRANSPORT_VALUE_WEB_SOCKETS = \"web_sockets\";\n/**\n * The language of the telemetry SDK.\n */\nexport const ATTR_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language';\n/**\n * Enum value \"cpp\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_CPP = \"cpp\";\n/**\n * Enum value \"dotnet\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET = \"dotnet\";\n/**\n * Enum value \"erlang\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG = \"erlang\";\n/**\n * Enum value \"go\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_GO = \"go\";\n/**\n * Enum value \"java\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_JAVA = \"java\";\n/**\n * Enum value \"nodejs\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS = \"nodejs\";\n/**\n * Enum value \"php\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_PHP = \"php\";\n/**\n * Enum value \"python\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON = \"python\";\n/**\n * Enum value \"ruby\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_RUBY = \"ruby\";\n/**\n * Enum value \"rust\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_RUST = \"rust\";\n/**\n * Enum value \"swift\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_SWIFT = \"swift\";\n/**\n * Enum value \"webjs\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS = \"webjs\";\n/**\n * The name of the telemetry SDK as defined above.\n *\n * @example opentelemetry\n *\n * @note The OpenTelemetry SDK **MUST** set the `telemetry.sdk.name` attribute to `opentelemetry`.\n * If another SDK, like a fork or a vendor-provided implementation, is used, this SDK **MUST** set the\n * `telemetry.sdk.name` attribute to the fully-qualified class or module name of this SDK's main entry point\n * or another suitable identifier depending on the language.\n * The identifier `opentelemetry` is reserved and **MUST NOT** be used in this case.\n * All custom identifiers **SHOULD** be stable across different versions of an implementation.\n */\nexport const ATTR_TELEMETRY_SDK_NAME = 'telemetry.sdk.name';\n/**\n * The version string of the telemetry SDK.\n *\n * @example 1.2.3\n */\nexport const ATTR_TELEMETRY_SDK_VERSION = 'telemetry.sdk.version';\n/**\n * The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n *\n * @example SemConv\n */\nexport const ATTR_URL_FRAGMENT = 'url.fragment';\n/**\n * Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)\n *\n * @example https://www.foo.bar/search?q=OpenTelemetry#SemConv\n * @example //localhost\n *\n * @note For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment\n * is not transmitted over HTTP, but if it is known, it **SHOULD** be included nevertheless.\n *\n * `url.full` **MUST NOT** contain credentials passed via URL in form of `https://username:password@www.example.com/`.\n * In such case username and password **SHOULD** be redacted and attribute's value **SHOULD** be `https://REDACTED:REDACTED@www.example.com/`.\n *\n * `url.full` **SHOULD** capture the absolute URL when it is available (or can be reconstructed).\n *\n * Sensitive content provided in `url.full` **SHOULD** be scrubbed when instrumentations can identify it.\n *\n *\n * Query string values for the following keys **SHOULD** be redacted by default and replaced by the\n * value `REDACTED`:\n *\n * - [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n * - [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n * - [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n * - [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n *\n * This list is subject to change over time.\n *\n * When a query string value is redacted, the query string key **SHOULD** still be preserved, e.g.\n * `https://www.example.com/path?color=blue&sig=REDACTED`.\n */\nexport const ATTR_URL_FULL = 'url.full';\n/**\n * The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n *\n * @example /search\n *\n * @note Sensitive content provided in `url.path` **SHOULD** be scrubbed when instrumentations can identify it.\n */\nexport const ATTR_URL_PATH = 'url.path';\n/**\n * The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n *\n * @example q=OpenTelemetry\n *\n * @note Sensitive content provided in `url.query` **SHOULD** be scrubbed when instrumentations can identify it.\n *\n *\n * Query string values for the following keys **SHOULD** be redacted by default and replaced by the value `REDACTED`:\n *\n * - [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n * - [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n * - [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n * - [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n *\n * This list is subject to change over time.\n *\n * When a query string value is redacted, the query string key **SHOULD** still be preserved, e.g.\n * `q=OpenTelemetry&sig=REDACTED`.\n */\nexport const ATTR_URL_QUERY = 'url.query';\n/**\n * The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n *\n * @example https\n * @example ftp\n * @example telnet\n */\nexport const ATTR_URL_SCHEME = 'url.scheme';\n/**\n * Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n *\n * @example CERN-LineMode/2.15 libwww/2.17b3\n * @example Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1\n * @example YourApp/1.0.0 grpc-java-okhttp/1.27.2\n */\nexport const ATTR_USER_AGENT_ORIGINAL = 'user_agent.original';\n//# sourceMappingURL=stable_attributes.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n/**\n * The name of the runtime of this process.\n *\n * @example OpenJDK Runtime Environment\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_RUNTIME_NAME = 'process.runtime.name';\n//# sourceMappingURL=semconv.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { VERSION } from '../../version';\nimport { ATTR_TELEMETRY_SDK_NAME, ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS, ATTR_TELEMETRY_SDK_VERSION, } from '@opentelemetry/semantic-conventions';\nimport { ATTR_PROCESS_RUNTIME_NAME } from '../../semconv';\n/** Constants describing the SDK in use */\nexport const SDK_INFO = {\n [ATTR_TELEMETRY_SDK_NAME]: 'opentelemetry',\n [ATTR_PROCESS_RUNTIME_NAME]: 'browser',\n [ATTR_TELEMETRY_SDK_LANGUAGE]: TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS,\n [ATTR_TELEMETRY_SDK_VERSION]: VERSION,\n};\n//# sourceMappingURL=sdk-info.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { otperformance as performance } from '../platform';\nconst NANOSECOND_DIGITS = 9;\nconst NANOSECOND_DIGITS_IN_MILLIS = 6;\nconst MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS);\nconst SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS);\n/**\n * Converts a number of milliseconds from epoch to HrTime([seconds, remainder in nanoseconds]).\n * @param epochMillis\n */\nexport function millisToHrTime(epochMillis) {\n const epochSeconds = epochMillis / 1000;\n // Decimals only.\n const seconds = Math.trunc(epochSeconds);\n // Round sub-nanosecond accuracy to nanosecond.\n const nanos = Math.round((epochMillis % 1000) * MILLISECONDS_TO_NANOSECONDS);\n return [seconds, nanos];\n}\nexport function getTimeOrigin() {\n let timeOrigin = performance.timeOrigin;\n if (typeof timeOrigin !== 'number') {\n const perf = performance;\n timeOrigin = perf.timing && perf.timing.fetchStart;\n }\n return timeOrigin;\n}\n/**\n * Returns an hrtime calculated via performance component.\n * @param performanceNow\n */\nexport function hrTime(performanceNow) {\n const timeOrigin = millisToHrTime(getTimeOrigin());\n const now = millisToHrTime(typeof performanceNow === 'number' ? performanceNow : performance.now());\n return addHrTimes(timeOrigin, now);\n}\n/**\n *\n * Converts a TimeInput to an HrTime, defaults to _hrtime().\n * @param time\n */\nexport function timeInputToHrTime(time) {\n // process.hrtime\n if (isTimeInputHrTime(time)) {\n return time;\n }\n else if (typeof time === 'number') {\n // Must be a performance.now() if it's smaller than process start time.\n if (time < getTimeOrigin()) {\n return hrTime(time);\n }\n else {\n // epoch milliseconds or performance.timeOrigin\n return millisToHrTime(time);\n }\n }\n else if (time instanceof Date) {\n return millisToHrTime(time.getTime());\n }\n else {\n throw TypeError('Invalid input type');\n }\n}\n/**\n * Returns a duration of two hrTime.\n * @param startTime\n * @param endTime\n */\nexport function hrTimeDuration(startTime, endTime) {\n let seconds = endTime[0] - startTime[0];\n let nanos = endTime[1] - startTime[1];\n // overflow\n if (nanos < 0) {\n seconds -= 1;\n // negate\n nanos += SECOND_TO_NANOSECONDS;\n }\n return [seconds, nanos];\n}\n/**\n * Convert hrTime to timestamp, for example \"2019-05-14T17:00:00.000123456Z\"\n * @param time\n */\nexport function hrTimeToTimeStamp(time) {\n const precision = NANOSECOND_DIGITS;\n const tmp = `${'0'.repeat(precision)}${time[1]}Z`;\n const nanoString = tmp.substring(tmp.length - precision - 1);\n const date = new Date(time[0] * 1000).toISOString();\n return date.replace('000Z', nanoString);\n}\n/**\n * Convert hrTime to nanoseconds.\n * @param time\n */\nexport function hrTimeToNanoseconds(time) {\n return time[0] * SECOND_TO_NANOSECONDS + time[1];\n}\n/**\n * Convert hrTime to milliseconds.\n * @param time\n */\nexport function hrTimeToMilliseconds(time) {\n return time[0] * 1e3 + time[1] / 1e6;\n}\n/**\n * Convert hrTime to microseconds.\n * @param time\n */\nexport function hrTimeToMicroseconds(time) {\n return time[0] * 1e6 + time[1] / 1e3;\n}\n/**\n * check if time is HrTime\n * @param value\n */\nexport function isTimeInputHrTime(value) {\n return (Array.isArray(value) &&\n value.length === 2 &&\n typeof value[0] === 'number' &&\n typeof value[1] === 'number');\n}\n/**\n * check if input value is a correct types.TimeInput\n * @param value\n */\nexport function isTimeInput(value) {\n return (isTimeInputHrTime(value) ||\n typeof value === 'number' ||\n value instanceof Date);\n}\n/**\n * Given 2 HrTime formatted times, return their sum as an HrTime.\n */\nexport function addHrTimes(time1, time2) {\n const out = [time1[0] + time2[0], time1[1] + time2[1]];\n // Nanoseconds\n if (out[1] >= SECOND_TO_NANOSECONDS) {\n out[1] -= SECOND_TO_NANOSECONDS;\n out[0] += 1;\n }\n return out;\n}\n//# sourceMappingURL=time.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var ExportResultCode;\n(function (ExportResultCode) {\n ExportResultCode[ExportResultCode[\"SUCCESS\"] = 0] = \"SUCCESS\";\n ExportResultCode[ExportResultCode[\"FAILED\"] = 1] = \"FAILED\";\n})(ExportResultCode || (ExportResultCode = {}));\n//# sourceMappingURL=ExportResult.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag, } from '@opentelemetry/api';\n/** Combines multiple propagators into a single propagator. */\nexport class CompositePropagator {\n _propagators;\n _fields;\n /**\n * Construct a composite propagator from a list of propagators.\n *\n * @param [config] Configuration object for composite propagator\n */\n constructor(config = {}) {\n this._propagators = config.propagators ?? [];\n this._fields = Array.from(new Set(this._propagators\n // older propagators may not have fields function, null check to be sure\n .map(p => (typeof p.fields === 'function' ? p.fields() : []))\n .reduce((x, y) => x.concat(y), [])));\n }\n /**\n * Run each of the configured propagators with the given context and carrier.\n * Propagators are run in the order they are configured, so if multiple\n * propagators write the same carrier key, the propagator later in the list\n * will \"win\".\n *\n * @param context Context to inject\n * @param carrier Carrier into which context will be injected\n */\n inject(context, carrier, setter) {\n for (const propagator of this._propagators) {\n try {\n propagator.inject(context, carrier, setter);\n }\n catch (err) {\n diag.warn(`Failed to inject with ${propagator.constructor.name}. Err: ${err.message}`);\n }\n }\n }\n /**\n * Run each of the configured propagators with the given context and carrier.\n * Propagators are run in the order they are configured, so if multiple\n * propagators write the same context key, the propagator later in the list\n * will \"win\".\n *\n * @param context Context to add values to\n * @param carrier Carrier from which to extract context\n */\n extract(context, carrier, getter) {\n return this._propagators.reduce((ctx, propagator) => {\n try {\n return propagator.extract(ctx, carrier, getter);\n }\n catch (err) {\n diag.warn(`Failed to extract with ${propagator.constructor.name}. Err: ${err.message}`);\n }\n return ctx;\n }, context);\n }\n fields() {\n // return a new array so our fields cannot be modified\n return this._fields.slice();\n }\n}\n//# sourceMappingURL=composite.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst VALID_KEY_CHAR_RANGE = '[_0-9a-z-*/]';\nconst VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`;\nconst VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`;\nconst VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`);\nconst VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/;\nconst INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/;\n/**\n * Key is opaque string up to 256 characters printable. It MUST begin with a\n * lowercase letter, and can only contain lowercase letters a-z, digits 0-9,\n * underscores _, dashes -, asterisks *, and forward slashes /.\n * For multi-tenant vendor scenarios, an at sign (@) can be used to prefix the\n * vendor name. Vendors SHOULD set the tenant ID at the beginning of the key.\n * see https://www.w3.org/TR/trace-context/#key\n */\nexport function validateKey(key) {\n return VALID_KEY_REGEX.test(key);\n}\n/**\n * Value is opaque string up to 256 characters printable ASCII RFC0020\n * characters (i.e., the range 0x20 to 0x7E) except comma , and =.\n */\nexport function validateValue(value) {\n return (VALID_VALUE_BASE_REGEX.test(value) &&\n !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value));\n}\n//# sourceMappingURL=validators.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { validateKey, validateValue } from '../internal/validators';\nconst MAX_TRACE_STATE_ITEMS = 32;\nconst MAX_TRACE_STATE_LEN = 512;\nconst LIST_MEMBERS_SEPARATOR = ',';\nconst LIST_MEMBER_KEY_VALUE_SPLITTER = '=';\n/**\n * TraceState must be a class and not a simple object type because of the spec\n * requirement (https://www.w3.org/TR/trace-context/#tracestate-field).\n *\n * Here is the list of allowed mutations:\n * - New key-value pair should be added into the beginning of the list\n * - The value of any key can be updated. Modified keys MUST be moved to the\n * beginning of the list.\n */\nexport class TraceState {\n _internalState = new Map();\n constructor(rawTraceState) {\n if (rawTraceState)\n this._parse(rawTraceState);\n }\n set(key, value) {\n // TODO: Benchmark the different approaches(map vs list) and\n // use the faster one.\n const traceState = this._clone();\n if (traceState._internalState.has(key)) {\n traceState._internalState.delete(key);\n }\n traceState._internalState.set(key, value);\n return traceState;\n }\n unset(key) {\n const traceState = this._clone();\n traceState._internalState.delete(key);\n return traceState;\n }\n get(key) {\n return this._internalState.get(key);\n }\n serialize() {\n return this._keys()\n .reduce((agg, key) => {\n agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + this.get(key));\n return agg;\n }, [])\n .join(LIST_MEMBERS_SEPARATOR);\n }\n _parse(rawTraceState) {\n if (rawTraceState.length > MAX_TRACE_STATE_LEN)\n return;\n this._internalState = rawTraceState\n .split(LIST_MEMBERS_SEPARATOR)\n .reverse() // Store in reverse so new keys (.set(...)) will be placed at the beginning\n .reduce((agg, part) => {\n const listMember = part.trim(); // Optional Whitespace (OWS) handling\n const i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER);\n if (i !== -1) {\n const key = listMember.slice(0, i);\n const value = listMember.slice(i + 1, part.length);\n if (validateKey(key) && validateValue(value)) {\n agg.set(key, value);\n }\n else {\n // TODO: Consider to add warning log\n }\n }\n return agg;\n }, new Map());\n // Because of the reverse() requirement, trunc must be done after map is created\n if (this._internalState.size > MAX_TRACE_STATE_ITEMS) {\n this._internalState = new Map(Array.from(this._internalState.entries())\n .reverse() // Use reverse same as original tracestate parse chain\n .slice(0, MAX_TRACE_STATE_ITEMS));\n }\n }\n _keys() {\n return Array.from(this._internalState.keys()).reverse();\n }\n _clone() {\n const traceState = new TraceState();\n traceState._internalState = new Map(this._internalState);\n return traceState;\n }\n}\n//# sourceMappingURL=TraceState.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { isSpanContextValid, trace, TraceFlags, } from '@opentelemetry/api';\nimport { isTracingSuppressed } from './suppress-tracing';\nimport { TraceState } from './TraceState';\nexport const TRACE_PARENT_HEADER = 'traceparent';\nexport const TRACE_STATE_HEADER = 'tracestate';\nconst VERSION = '00';\nconst VERSION_PART = '(?!ff)[\\\\da-f]{2}';\nconst TRACE_ID_PART = '(?![0]{32})[\\\\da-f]{32}';\nconst PARENT_ID_PART = '(?![0]{16})[\\\\da-f]{16}';\nconst FLAGS_PART = '[\\\\da-f]{2}';\nconst TRACE_PARENT_REGEX = new RegExp(`^\\\\s?(${VERSION_PART})-(${TRACE_ID_PART})-(${PARENT_ID_PART})-(${FLAGS_PART})(-.*)?\\\\s?$`);\n/**\n * Parses information from the [traceparent] span tag and converts it into {@link SpanContext}\n * @param traceParent - A meta property that comes from server.\n * It should be dynamically generated server side to have the server's request trace Id,\n * a parent span Id that was set on the server's request span,\n * and the trace flags to indicate the server's sampling decision\n * (01 = sampled, 00 = not sampled).\n * for example: '{version}-{traceId}-{spanId}-{sampleDecision}'\n * For more information see {@link https://www.w3.org/TR/trace-context/}\n */\nexport function parseTraceParent(traceParent) {\n const match = TRACE_PARENT_REGEX.exec(traceParent);\n if (!match)\n return null;\n // According to the specification the implementation should be compatible\n // with future versions. If there are more parts, we only reject it if it's using version 00\n // See https://www.w3.org/TR/trace-context/#versioning-of-traceparent\n if (match[1] === '00' && match[5])\n return null;\n return {\n traceId: match[2],\n spanId: match[3],\n traceFlags: parseInt(match[4], 16),\n };\n}\n/**\n * Propagates {@link SpanContext} through Trace Context format propagation.\n *\n * Based on the Trace Context specification:\n * https://www.w3.org/TR/trace-context/\n */\nexport class W3CTraceContextPropagator {\n inject(context, carrier, setter) {\n const spanContext = trace.getSpanContext(context);\n if (!spanContext ||\n isTracingSuppressed(context) ||\n !isSpanContextValid(spanContext))\n return;\n const traceParent = `${VERSION}-${spanContext.traceId}-${spanContext.spanId}-0${Number(spanContext.traceFlags || TraceFlags.NONE).toString(16)}`;\n setter.set(carrier, TRACE_PARENT_HEADER, traceParent);\n if (spanContext.traceState) {\n setter.set(carrier, TRACE_STATE_HEADER, spanContext.traceState.serialize());\n }\n }\n extract(context, carrier, getter) {\n const traceParentHeader = getter.get(carrier, TRACE_PARENT_HEADER);\n if (!traceParentHeader)\n return context;\n const traceParent = Array.isArray(traceParentHeader)\n ? traceParentHeader[0]\n : traceParentHeader;\n if (typeof traceParent !== 'string')\n return context;\n const spanContext = parseTraceParent(traceParent);\n if (!spanContext)\n return context;\n spanContext.isRemote = true;\n const traceStateHeader = getter.get(carrier, TRACE_STATE_HEADER);\n if (traceStateHeader) {\n // If more than one `tracestate` header is found, we merge them into a\n // single header.\n const state = Array.isArray(traceStateHeader)\n ? traceStateHeader.join(',')\n : traceStateHeader;\n spanContext.traceState = new TraceState(typeof state === 'string' ? state : undefined);\n }\n return trace.setSpanContext(context, spanContext);\n }\n fields() {\n return [TRACE_PARENT_HEADER, TRACE_STATE_HEADER];\n }\n}\n//# sourceMappingURL=W3CTraceContextPropagator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * based on lodash in order to support esm builds without esModuleInterop.\n * lodash is using MIT License.\n **/\nconst objectTag = '[object Object]';\nconst nullTag = '[object Null]';\nconst undefinedTag = '[object Undefined]';\nconst funcProto = Function.prototype;\nconst funcToString = funcProto.toString;\nconst objectCtorString = funcToString.call(Object);\nconst getPrototypeOf = Object.getPrototypeOf;\nconst objectProto = Object.prototype;\nconst hasOwnProperty = objectProto.hasOwnProperty;\nconst symToStringTag = Symbol ? Symbol.toStringTag : undefined;\nconst nativeObjectToString = objectProto.toString;\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nexport function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) !== objectTag) {\n return false;\n }\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor &&\n funcToString.call(Ctor) === objectCtorString);\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value)\n ? getRawTag(value)\n : objectToString(value);\n}\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n const isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];\n let unmasked = false;\n try {\n value[symToStringTag] = undefined;\n unmasked = true;\n }\n catch {\n // silence\n }\n const result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n }\n else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n//# sourceMappingURL=lodash.merge.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isPlainObject } from './lodash.merge';\nconst MAX_LEVEL = 20;\n/**\n * Merges objects together\n * @param args - objects / values to be merged\n */\nexport function merge(...args) {\n let result = args.shift();\n const objects = new WeakMap();\n while (args.length > 0) {\n result = mergeTwoObjects(result, args.shift(), 0, objects);\n }\n return result;\n}\nfunction takeValue(value) {\n if (isArray(value)) {\n return value.slice();\n }\n return value;\n}\n/**\n * Merges two objects\n * @param one - first object\n * @param two - second object\n * @param level - current deep level\n * @param objects - objects holder that has been already referenced - to prevent\n * cyclic dependency\n */\nfunction mergeTwoObjects(one, two, level = 0, objects) {\n let result;\n if (level > MAX_LEVEL) {\n return undefined;\n }\n level++;\n if (isPrimitive(one) || isPrimitive(two) || isFunction(two)) {\n result = takeValue(two);\n }\n else if (isArray(one)) {\n result = one.slice();\n if (isArray(two)) {\n for (let i = 0, j = two.length; i < j; i++) {\n result.push(takeValue(two[i]));\n }\n }\n else if (isObject(two)) {\n const keys = Object.keys(two);\n for (let i = 0, j = keys.length; i < j; i++) {\n const key = keys[i];\n result[key] = takeValue(two[key]);\n }\n }\n }\n else if (isObject(one)) {\n if (isObject(two)) {\n if (!shouldMerge(one, two)) {\n return two;\n }\n result = Object.assign({}, one);\n const keys = Object.keys(two);\n for (let i = 0, j = keys.length; i < j; i++) {\n const key = keys[i];\n const twoValue = two[key];\n if (isPrimitive(twoValue)) {\n if (typeof twoValue === 'undefined') {\n delete result[key];\n }\n else {\n // result[key] = takeValue(twoValue);\n result[key] = twoValue;\n }\n }\n else {\n const obj1 = result[key];\n const obj2 = twoValue;\n if (wasObjectReferenced(one, key, objects) ||\n wasObjectReferenced(two, key, objects)) {\n delete result[key];\n }\n else {\n if (isObject(obj1) && isObject(obj2)) {\n const arr1 = objects.get(obj1) || [];\n const arr2 = objects.get(obj2) || [];\n arr1.push({ obj: one, key });\n arr2.push({ obj: two, key });\n objects.set(obj1, arr1);\n objects.set(obj2, arr2);\n }\n result[key] = mergeTwoObjects(result[key], twoValue, level, objects);\n }\n }\n }\n }\n else {\n result = two;\n }\n }\n return result;\n}\n/**\n * Function to check if object has been already reference\n * @param obj\n * @param key\n * @param objects\n */\nfunction wasObjectReferenced(obj, key, objects) {\n const arr = objects.get(obj[key]) || [];\n for (let i = 0, j = arr.length; i < j; i++) {\n const info = arr[i];\n if (info.key === key && info.obj === obj) {\n return true;\n }\n }\n return false;\n}\nfunction isArray(value) {\n return Array.isArray(value);\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isObject(value) {\n return (!isPrimitive(value) &&\n !isArray(value) &&\n !isFunction(value) &&\n typeof value === 'object');\n}\nfunction isPrimitive(value) {\n return (typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined' ||\n value instanceof Date ||\n value instanceof RegExp ||\n value === null);\n}\nfunction shouldMerge(one, two) {\n if (!isPlainObject(one) || !isPlainObject(two)) {\n return false;\n }\n return true;\n}\n//# sourceMappingURL=merge.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class Deferred {\n _promise;\n _resolve;\n _reject;\n constructor() {\n this._promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n get promise() {\n return this._promise;\n }\n resolve(val) {\n this._resolve(val);\n }\n reject(err) {\n this._reject(err);\n }\n}\n//# sourceMappingURL=promise.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Deferred } from './promise';\n/**\n * Bind the callback and only invoke the callback once regardless how many times `BindOnceFuture.call` is invoked.\n */\nexport class BindOnceFuture {\n _callback;\n _that;\n _isCalled = false;\n _deferred = new Deferred();\n constructor(_callback, _that) {\n this._callback = _callback;\n this._that = _that;\n }\n get isCalled() {\n return this._isCalled;\n }\n get promise() {\n return this._deferred.promise;\n }\n call(...args) {\n if (!this._isCalled) {\n this._isCalled = true;\n try {\n Promise.resolve(this._callback.call(this._that, ...args)).then(val => this._deferred.resolve(val), err => this._deferred.reject(err));\n }\n catch (err) {\n this._deferred.reject(err);\n }\n }\n return this._deferred.promise;\n }\n}\n//# sourceMappingURL=callback.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function defaultServiceName() {\n return 'unknown_service';\n}\n//# sourceMappingURL=default-service-name.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const isPromiseLike = (val) => {\n return (val !== null &&\n typeof val === 'object' &&\n typeof val.then === 'function');\n};\nexport function identity(_) {\n return _;\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nimport { SDK_INFO } from '@opentelemetry/core';\nimport { ATTR_SERVICE_NAME, ATTR_TELEMETRY_SDK_LANGUAGE, ATTR_TELEMETRY_SDK_NAME, ATTR_TELEMETRY_SDK_VERSION, } from '@opentelemetry/semantic-conventions';\nimport { defaultServiceName } from './platform';\nimport { isPromiseLike } from './utils';\nclass ResourceImpl {\n _rawAttributes;\n _asyncAttributesPending = false;\n _schemaUrl;\n _memoizedAttributes;\n static FromAttributeList(attributes, options) {\n const res = new ResourceImpl({}, options);\n res._rawAttributes = guardedRawAttributes(attributes);\n res._asyncAttributesPending =\n attributes.filter(([_, val]) => isPromiseLike(val)).length > 0;\n return res;\n }\n constructor(\n /**\n * A dictionary of attributes with string keys and values that provide\n * information about the entity as numbers, strings or booleans\n * TODO: Consider to add check/validation on attributes.\n */\n resource, options) {\n const attributes = resource.attributes ?? {};\n this._rawAttributes = Object.entries(attributes).map(([k, v]) => {\n if (isPromiseLike(v)) {\n // side-effect\n this._asyncAttributesPending = true;\n }\n return [k, v];\n });\n this._rawAttributes = guardedRawAttributes(this._rawAttributes);\n this._schemaUrl = validateSchemaUrl(options?.schemaUrl);\n }\n get asyncAttributesPending() {\n return this._asyncAttributesPending;\n }\n async waitForAsyncAttributes() {\n if (!this.asyncAttributesPending) {\n return;\n }\n for (let i = 0; i < this._rawAttributes.length; i++) {\n const [k, v] = this._rawAttributes[i];\n this._rawAttributes[i] = [k, isPromiseLike(v) ? await v : v];\n }\n this._asyncAttributesPending = false;\n }\n get attributes() {\n if (this.asyncAttributesPending) {\n diag.error('Accessing resource attributes before async attributes settled');\n }\n if (this._memoizedAttributes) {\n return this._memoizedAttributes;\n }\n const attrs = {};\n for (const [k, v] of this._rawAttributes) {\n if (isPromiseLike(v)) {\n diag.debug(`Unsettled resource attribute ${k} skipped`);\n continue;\n }\n if (v != null) {\n attrs[k] ??= v;\n }\n }\n // only memoize output if all attributes are settled\n if (!this._asyncAttributesPending) {\n this._memoizedAttributes = attrs;\n }\n return attrs;\n }\n getRawAttributes() {\n return this._rawAttributes;\n }\n get schemaUrl() {\n return this._schemaUrl;\n }\n merge(resource) {\n if (resource == null)\n return this;\n // Order is important\n // Spec states incoming attributes override existing attributes\n const mergedSchemaUrl = mergeSchemaUrl(this, resource);\n const mergedOptions = mergedSchemaUrl\n ? { schemaUrl: mergedSchemaUrl }\n : undefined;\n return ResourceImpl.FromAttributeList([...resource.getRawAttributes(), ...this.getRawAttributes()], mergedOptions);\n }\n}\nexport function resourceFromAttributes(attributes, options) {\n return ResourceImpl.FromAttributeList(Object.entries(attributes), options);\n}\nexport function resourceFromDetectedResource(detectedResource, options) {\n return new ResourceImpl(detectedResource, options);\n}\nexport function emptyResource() {\n return resourceFromAttributes({});\n}\nexport function defaultResource() {\n return resourceFromAttributes({\n [ATTR_SERVICE_NAME]: defaultServiceName(),\n [ATTR_TELEMETRY_SDK_LANGUAGE]: SDK_INFO[ATTR_TELEMETRY_SDK_LANGUAGE],\n [ATTR_TELEMETRY_SDK_NAME]: SDK_INFO[ATTR_TELEMETRY_SDK_NAME],\n [ATTR_TELEMETRY_SDK_VERSION]: SDK_INFO[ATTR_TELEMETRY_SDK_VERSION],\n });\n}\nfunction guardedRawAttributes(attributes) {\n return attributes.map(([k, v]) => {\n if (isPromiseLike(v)) {\n return [\n k,\n v.catch(err => {\n diag.debug('promise rejection for resource attribute: %s - %s', k, err);\n return undefined;\n }),\n ];\n }\n return [k, v];\n });\n}\nfunction validateSchemaUrl(schemaUrl) {\n if (typeof schemaUrl === 'string' || schemaUrl === undefined) {\n return schemaUrl;\n }\n diag.warn('Schema URL must be string or undefined, got %s. Schema URL will be ignored.', schemaUrl);\n return undefined;\n}\nfunction mergeSchemaUrl(old, updating) {\n const oldSchemaUrl = old?.schemaUrl;\n const updatingSchemaUrl = updating?.schemaUrl;\n const isOldEmpty = oldSchemaUrl === undefined || oldSchemaUrl === '';\n const isUpdatingEmpty = updatingSchemaUrl === undefined || updatingSchemaUrl === '';\n if (isOldEmpty) {\n return updatingSchemaUrl;\n }\n if (isUpdatingEmpty) {\n return oldSchemaUrl;\n }\n if (oldSchemaUrl === updatingSchemaUrl) {\n return oldSchemaUrl;\n }\n diag.warn('Schema URL merge conflict: old resource has \"%s\", updating resource has \"%s\". Resulting resource will have undefined Schema URL.', oldSchemaUrl, updatingSchemaUrl);\n return undefined;\n}\n//# sourceMappingURL=ResourceImpl.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Event name definitions\nexport const ExceptionEventName = 'exception';\n//# sourceMappingURL=enums.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag, SpanStatusCode, } from '@opentelemetry/api';\nimport { addHrTimes, millisToHrTime, getTimeOrigin, hrTime, hrTimeDuration, isAttributeValue, isTimeInput, isTimeInputHrTime, otperformance, sanitizeAttributes, } from '@opentelemetry/core';\nimport { ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE, } from '@opentelemetry/semantic-conventions';\nimport { ExceptionEventName } from './enums';\n/**\n * This class represents a span.\n */\nexport class SpanImpl {\n // Below properties are included to implement ReadableSpan for export\n // purposes but are not intended to be written-to directly.\n _spanContext;\n kind;\n parentSpanContext;\n attributes = {};\n links = [];\n events = [];\n startTime;\n resource;\n instrumentationScope;\n _droppedAttributesCount = 0;\n _droppedEventsCount = 0;\n _droppedLinksCount = 0;\n name;\n status = {\n code: SpanStatusCode.UNSET,\n };\n endTime = [0, 0];\n _ended = false;\n _duration = [-1, -1];\n _spanProcessor;\n _spanLimits;\n _attributeValueLengthLimit;\n _performanceStartTime;\n _performanceOffset;\n _startTimeProvided;\n /**\n * Constructs a new SpanImpl instance.\n */\n constructor(opts) {\n const now = Date.now();\n this._spanContext = opts.spanContext;\n this._performanceStartTime = otperformance.now();\n this._performanceOffset =\n now - (this._performanceStartTime + getTimeOrigin());\n this._startTimeProvided = opts.startTime != null;\n this._spanLimits = opts.spanLimits;\n this._attributeValueLengthLimit =\n this._spanLimits.attributeValueLengthLimit || 0;\n this._spanProcessor = opts.spanProcessor;\n this.name = opts.name;\n this.parentSpanContext = opts.parentSpanContext;\n this.kind = opts.kind;\n this.links = opts.links || [];\n this.startTime = this._getTime(opts.startTime ?? now);\n this.resource = opts.resource;\n this.instrumentationScope = opts.scope;\n if (opts.attributes != null) {\n this.setAttributes(opts.attributes);\n }\n this._spanProcessor.onStart(this, opts.context);\n }\n spanContext() {\n return this._spanContext;\n }\n setAttribute(key, value) {\n if (value == null || this._isSpanEnded())\n return this;\n if (key.length === 0) {\n diag.warn(`Invalid attribute key: ${key}`);\n return this;\n }\n if (!isAttributeValue(value)) {\n diag.warn(`Invalid attribute value set for key: ${key}`);\n return this;\n }\n const { attributeCountLimit } = this._spanLimits;\n if (attributeCountLimit !== undefined &&\n Object.keys(this.attributes).length >= attributeCountLimit &&\n !Object.prototype.hasOwnProperty.call(this.attributes, key)) {\n this._droppedAttributesCount++;\n return this;\n }\n this.attributes[key] = this._truncateToSize(value);\n return this;\n }\n setAttributes(attributes) {\n for (const [k, v] of Object.entries(attributes)) {\n this.setAttribute(k, v);\n }\n return this;\n }\n /**\n *\n * @param name Span Name\n * @param [attributesOrStartTime] Span attributes or start time\n * if type is {@type TimeInput} and 3rd param is undefined\n * @param [timeStamp] Specified time stamp for the event\n */\n addEvent(name, attributesOrStartTime, timeStamp) {\n if (this._isSpanEnded())\n return this;\n const { eventCountLimit } = this._spanLimits;\n if (eventCountLimit === 0) {\n diag.warn('No events allowed.');\n this._droppedEventsCount++;\n return this;\n }\n if (eventCountLimit !== undefined &&\n this.events.length >= eventCountLimit) {\n if (this._droppedEventsCount === 0) {\n diag.debug('Dropping extra events.');\n }\n this.events.shift();\n this._droppedEventsCount++;\n }\n if (isTimeInput(attributesOrStartTime)) {\n if (!isTimeInput(timeStamp)) {\n timeStamp = attributesOrStartTime;\n }\n attributesOrStartTime = undefined;\n }\n const attributes = sanitizeAttributes(attributesOrStartTime);\n this.events.push({\n name,\n attributes,\n time: this._getTime(timeStamp),\n droppedAttributesCount: 0,\n });\n return this;\n }\n addLink(link) {\n this.links.push(link);\n return this;\n }\n addLinks(links) {\n this.links.push(...links);\n return this;\n }\n setStatus(status) {\n if (this._isSpanEnded())\n return this;\n this.status = { ...status };\n // When using try-catch, the caught \"error\" is of type `any`. When then assigning `any` to `status.message`,\n // TypeScript will not error. While this can happen during use of any API, it is more common on Span#setStatus()\n // as it's likely used in a catch-block. Therefore, we validate if `status.message` is actually a string, null, or\n // undefined to avoid an incorrect type causing issues downstream.\n if (this.status.message != null && typeof status.message !== 'string') {\n diag.warn(`Dropping invalid status.message of type '${typeof status.message}', expected 'string'`);\n delete this.status.message;\n }\n return this;\n }\n updateName(name) {\n if (this._isSpanEnded())\n return this;\n this.name = name;\n return this;\n }\n end(endTime) {\n if (this._isSpanEnded()) {\n diag.error(`${this.name} ${this._spanContext.traceId}-${this._spanContext.spanId} - You can only call end() on a span once.`);\n return;\n }\n this._ended = true;\n this.endTime = this._getTime(endTime);\n this._duration = hrTimeDuration(this.startTime, this.endTime);\n if (this._duration[0] < 0) {\n diag.warn('Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.', this.startTime, this.endTime);\n this.endTime = this.startTime.slice();\n this._duration = [0, 0];\n }\n if (this._droppedEventsCount > 0) {\n diag.warn(`Dropped ${this._droppedEventsCount} events because eventCountLimit reached`);\n }\n this._spanProcessor.onEnd(this);\n }\n _getTime(inp) {\n if (typeof inp === 'number' && inp <= otperformance.now()) {\n // must be a performance timestamp\n // apply correction and convert to hrtime\n return hrTime(inp + this._performanceOffset);\n }\n if (typeof inp === 'number') {\n return millisToHrTime(inp);\n }\n if (inp instanceof Date) {\n return millisToHrTime(inp.getTime());\n }\n if (isTimeInputHrTime(inp)) {\n return inp;\n }\n if (this._startTimeProvided) {\n // if user provided a time for the start manually\n // we can't use duration to calculate event/end times\n return millisToHrTime(Date.now());\n }\n const msDuration = otperformance.now() - this._performanceStartTime;\n return addHrTimes(this.startTime, millisToHrTime(msDuration));\n }\n isRecording() {\n return this._ended === false;\n }\n recordException(exception, time) {\n const attributes = {};\n if (typeof exception === 'string') {\n attributes[ATTR_EXCEPTION_MESSAGE] = exception;\n }\n else if (exception) {\n if (exception.code) {\n attributes[ATTR_EXCEPTION_TYPE] = exception.code.toString();\n }\n else if (exception.name) {\n attributes[ATTR_EXCEPTION_TYPE] = exception.name;\n }\n if (exception.message) {\n attributes[ATTR_EXCEPTION_MESSAGE] = exception.message;\n }\n if (exception.stack) {\n attributes[ATTR_EXCEPTION_STACKTRACE] = exception.stack;\n }\n }\n // these are minimum requirements from spec\n if (attributes[ATTR_EXCEPTION_TYPE] || attributes[ATTR_EXCEPTION_MESSAGE]) {\n this.addEvent(ExceptionEventName, attributes, time);\n }\n else {\n diag.warn(`Failed to record an exception ${exception}`);\n }\n }\n get duration() {\n return this._duration;\n }\n get ended() {\n return this._ended;\n }\n get droppedAttributesCount() {\n return this._droppedAttributesCount;\n }\n get droppedEventsCount() {\n return this._droppedEventsCount;\n }\n get droppedLinksCount() {\n return this._droppedLinksCount;\n }\n _isSpanEnded() {\n if (this._ended) {\n const error = new Error(`Operation attempted on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`);\n diag.warn(`Cannot execute the operation on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`, error);\n }\n return this._ended;\n }\n // Utility function to truncate given value within size\n // for value type of string, will truncate to given limit\n // for type of non-string, will return same value\n _truncateToLimitUtil(value, limit) {\n if (value.length <= limit) {\n return value;\n }\n return value.substring(0, limit);\n }\n /**\n * If the given attribute value is of type string and has more characters than given {@code attributeValueLengthLimit} then\n * return string with truncated to {@code attributeValueLengthLimit} characters\n *\n * If the given attribute value is array of strings then\n * return new array of strings with each element truncated to {@code attributeValueLengthLimit} characters\n *\n * Otherwise return same Attribute {@code value}\n *\n * @param value Attribute value\n * @returns truncated attribute value if required, otherwise same value\n */\n _truncateToSize(value) {\n const limit = this._attributeValueLengthLimit;\n // Check limit\n if (limit <= 0) {\n // Negative values are invalid, so do not truncate\n diag.warn(`Attribute value limit must be positive, got ${limit}`);\n return value;\n }\n // String\n if (typeof value === 'string') {\n return this._truncateToLimitUtil(value, limit);\n }\n // Array of strings\n if (Array.isArray(value)) {\n return value.map(val => typeof val === 'string' ? this._truncateToLimitUtil(val, limit) : val);\n }\n // Other types, no need to apply value length limit\n return value;\n }\n}\n//# sourceMappingURL=Span.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A sampling decision that determines how a {@link Span} will be recorded\n * and collected.\n */\nexport var SamplingDecision;\n(function (SamplingDecision) {\n /**\n * `Span.isRecording() === false`, span will not be recorded and all events\n * and attributes will be dropped.\n */\n SamplingDecision[SamplingDecision[\"NOT_RECORD\"] = 0] = \"NOT_RECORD\";\n /**\n * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}\n * MUST NOT be set.\n */\n SamplingDecision[SamplingDecision[\"RECORD\"] = 1] = \"RECORD\";\n /**\n * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}\n * MUST be set.\n */\n SamplingDecision[SamplingDecision[\"RECORD_AND_SAMPLED\"] = 2] = \"RECORD_AND_SAMPLED\";\n})(SamplingDecision || (SamplingDecision = {}));\n//# sourceMappingURL=Sampler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SamplingDecision } from '../Sampler';\n/** Sampler that samples no traces. */\nexport class AlwaysOffSampler {\n shouldSample() {\n return {\n decision: SamplingDecision.NOT_RECORD,\n };\n }\n toString() {\n return 'AlwaysOffSampler';\n }\n}\n//# sourceMappingURL=AlwaysOffSampler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SamplingDecision } from '../Sampler';\n/** Sampler that samples all traces. */\nexport class AlwaysOnSampler {\n shouldSample() {\n return {\n decision: SamplingDecision.RECORD_AND_SAMPLED,\n };\n }\n toString() {\n return 'AlwaysOnSampler';\n }\n}\n//# sourceMappingURL=AlwaysOnSampler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { isSpanContextValid, TraceFlags, trace, } from '@opentelemetry/api';\nimport { globalErrorHandler } from '@opentelemetry/core';\nimport { AlwaysOffSampler } from './AlwaysOffSampler';\nimport { AlwaysOnSampler } from './AlwaysOnSampler';\n/**\n * A composite sampler that either respects the parent span's sampling decision\n * or delegates to `delegateSampler` for root spans.\n */\nexport class ParentBasedSampler {\n _root;\n _remoteParentSampled;\n _remoteParentNotSampled;\n _localParentSampled;\n _localParentNotSampled;\n constructor(config) {\n this._root = config.root;\n if (!this._root) {\n globalErrorHandler(new Error('ParentBasedSampler must have a root sampler configured'));\n this._root = new AlwaysOnSampler();\n }\n this._remoteParentSampled =\n config.remoteParentSampled ?? new AlwaysOnSampler();\n this._remoteParentNotSampled =\n config.remoteParentNotSampled ?? new AlwaysOffSampler();\n this._localParentSampled =\n config.localParentSampled ?? new AlwaysOnSampler();\n this._localParentNotSampled =\n config.localParentNotSampled ?? new AlwaysOffSampler();\n }\n shouldSample(context, traceId, spanName, spanKind, attributes, links) {\n const parentContext = trace.getSpanContext(context);\n if (!parentContext || !isSpanContextValid(parentContext)) {\n return this._root.shouldSample(context, traceId, spanName, spanKind, attributes, links);\n }\n if (parentContext.isRemote) {\n if (parentContext.traceFlags & TraceFlags.SAMPLED) {\n return this._remoteParentSampled.shouldSample(context, traceId, spanName, spanKind, attributes, links);\n }\n return this._remoteParentNotSampled.shouldSample(context, traceId, spanName, spanKind, attributes, links);\n }\n if (parentContext.traceFlags & TraceFlags.SAMPLED) {\n return this._localParentSampled.shouldSample(context, traceId, spanName, spanKind, attributes, links);\n }\n return this._localParentNotSampled.shouldSample(context, traceId, spanName, spanKind, attributes, links);\n }\n toString() {\n return `ParentBased{root=${this._root.toString()}, remoteParentSampled=${this._remoteParentSampled.toString()}, remoteParentNotSampled=${this._remoteParentNotSampled.toString()}, localParentSampled=${this._localParentSampled.toString()}, localParentNotSampled=${this._localParentNotSampled.toString()}}`;\n }\n}\n//# sourceMappingURL=ParentBasedSampler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { isValidTraceId } from '@opentelemetry/api';\nimport { SamplingDecision } from '../Sampler';\n/** Sampler that samples a given fraction of traces based of trace id deterministically. */\nexport class TraceIdRatioBasedSampler {\n _ratio;\n _upperBound;\n constructor(_ratio = 0) {\n this._ratio = _ratio;\n this._ratio = this._normalize(_ratio);\n this._upperBound = Math.floor(this._ratio * 0xffffffff);\n }\n shouldSample(context, traceId) {\n return {\n decision: isValidTraceId(traceId) && this._accumulate(traceId) < this._upperBound\n ? SamplingDecision.RECORD_AND_SAMPLED\n : SamplingDecision.NOT_RECORD,\n };\n }\n toString() {\n return `TraceIdRatioBased{${this._ratio}}`;\n }\n _normalize(ratio) {\n if (typeof ratio !== 'number' || isNaN(ratio))\n return 0;\n return ratio >= 1 ? 1 : ratio <= 0 ? 0 : ratio;\n }\n _accumulate(traceId) {\n let accumulation = 0;\n for (let i = 0; i < traceId.length / 8; i++) {\n const pos = i * 8;\n const part = parseInt(traceId.slice(pos, pos + 8), 16);\n accumulation = (accumulation ^ part) >>> 0;\n }\n return accumulation;\n }\n}\n//# sourceMappingURL=TraceIdRatioBasedSampler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nimport { getNumberFromEnv, getStringFromEnv } from '@opentelemetry/core';\nimport { AlwaysOffSampler } from './sampler/AlwaysOffSampler';\nimport { AlwaysOnSampler } from './sampler/AlwaysOnSampler';\nimport { ParentBasedSampler } from './sampler/ParentBasedSampler';\nimport { TraceIdRatioBasedSampler } from './sampler/TraceIdRatioBasedSampler';\nvar TracesSamplerValues;\n(function (TracesSamplerValues) {\n TracesSamplerValues[\"AlwaysOff\"] = \"always_off\";\n TracesSamplerValues[\"AlwaysOn\"] = \"always_on\";\n TracesSamplerValues[\"ParentBasedAlwaysOff\"] = \"parentbased_always_off\";\n TracesSamplerValues[\"ParentBasedAlwaysOn\"] = \"parentbased_always_on\";\n TracesSamplerValues[\"ParentBasedTraceIdRatio\"] = \"parentbased_traceidratio\";\n TracesSamplerValues[\"TraceIdRatio\"] = \"traceidratio\";\n})(TracesSamplerValues || (TracesSamplerValues = {}));\nconst DEFAULT_RATIO = 1;\n/**\n * Load default configuration. For fields with primitive values, any user-provided\n * value will override the corresponding default value. For fields with\n * non-primitive values (like `spanLimits`), the user-provided value will be\n * used to extend the default value.\n */\n// object needs to be wrapped in this function and called when needed otherwise\n// envs are parsed before tests are ran - causes tests using these envs to fail\nexport function loadDefaultConfig() {\n return {\n sampler: buildSamplerFromEnv(),\n forceFlushTimeoutMillis: 30000,\n generalLimits: {\n attributeValueLengthLimit: getNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT') ?? Infinity,\n attributeCountLimit: getNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT') ?? 128,\n },\n spanLimits: {\n attributeValueLengthLimit: getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT') ?? Infinity,\n attributeCountLimit: getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT') ?? 128,\n linkCountLimit: getNumberFromEnv('OTEL_SPAN_LINK_COUNT_LIMIT') ?? 128,\n eventCountLimit: getNumberFromEnv('OTEL_SPAN_EVENT_COUNT_LIMIT') ?? 128,\n attributePerEventCountLimit: getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT') ?? 128,\n attributePerLinkCountLimit: getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT') ?? 128,\n },\n };\n}\n/**\n * Based on environment, builds a sampler, complies with specification.\n */\nexport function buildSamplerFromEnv() {\n const sampler = getStringFromEnv('OTEL_TRACES_SAMPLER') ??\n TracesSamplerValues.ParentBasedAlwaysOn;\n switch (sampler) {\n case TracesSamplerValues.AlwaysOn:\n return new AlwaysOnSampler();\n case TracesSamplerValues.AlwaysOff:\n return new AlwaysOffSampler();\n case TracesSamplerValues.ParentBasedAlwaysOn:\n return new ParentBasedSampler({\n root: new AlwaysOnSampler(),\n });\n case TracesSamplerValues.ParentBasedAlwaysOff:\n return new ParentBasedSampler({\n root: new AlwaysOffSampler(),\n });\n case TracesSamplerValues.TraceIdRatio:\n return new TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv());\n case TracesSamplerValues.ParentBasedTraceIdRatio:\n return new ParentBasedSampler({\n root: new TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv()),\n });\n default:\n diag.error(`OTEL_TRACES_SAMPLER value \"${sampler}\" invalid, defaulting to \"${TracesSamplerValues.ParentBasedAlwaysOn}\".`);\n return new ParentBasedSampler({\n root: new AlwaysOnSampler(),\n });\n }\n}\nfunction getSamplerProbabilityFromEnv() {\n const probability = getNumberFromEnv('OTEL_TRACES_SAMPLER_ARG');\n if (probability == null) {\n diag.error(`OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${DEFAULT_RATIO}.`);\n return DEFAULT_RATIO;\n }\n if (probability < 0 || probability > 1) {\n diag.error(`OTEL_TRACES_SAMPLER_ARG=${probability} was given, but it is out of range ([0..1]), defaulting to ${DEFAULT_RATIO}.`);\n return DEFAULT_RATIO;\n }\n return probability;\n}\n//# sourceMappingURL=config.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { buildSamplerFromEnv, loadDefaultConfig } from './config';\nimport { getNumberFromEnv } from '@opentelemetry/core';\nexport const DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128;\nexport const DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity;\n/**\n * Function to merge Default configuration (as specified in './config') with\n * user provided configurations.\n */\nexport function mergeConfig(userConfig) {\n const perInstanceDefaults = {\n sampler: buildSamplerFromEnv(),\n };\n const DEFAULT_CONFIG = loadDefaultConfig();\n const target = Object.assign({}, DEFAULT_CONFIG, perInstanceDefaults, userConfig);\n target.generalLimits = Object.assign({}, DEFAULT_CONFIG.generalLimits, userConfig.generalLimits || {});\n target.spanLimits = Object.assign({}, DEFAULT_CONFIG.spanLimits, userConfig.spanLimits || {});\n return target;\n}\n/**\n * When general limits are provided and model specific limits are not,\n * configures the model specific limits by using the values from the general ones.\n * @param userConfig User provided tracer configuration\n */\nexport function reconfigureLimits(userConfig) {\n const spanLimits = Object.assign({}, userConfig.spanLimits);\n /**\n * Reassign span attribute count limit to use first non null value defined by user or use default value\n */\n spanLimits.attributeCountLimit =\n userConfig.spanLimits?.attributeCountLimit ??\n userConfig.generalLimits?.attributeCountLimit ??\n getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT') ??\n getNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT') ??\n DEFAULT_ATTRIBUTE_COUNT_LIMIT;\n /**\n * Reassign span attribute value length limit to use first non null value defined by user or use default value\n */\n spanLimits.attributeValueLengthLimit =\n userConfig.spanLimits?.attributeValueLengthLimit ??\n userConfig.generalLimits?.attributeValueLengthLimit ??\n getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT') ??\n getNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT') ??\n DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT;\n return Object.assign({}, userConfig, { spanLimits });\n}\n//# sourceMappingURL=utility.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { context, diag, TraceFlags } from '@opentelemetry/api';\nimport { BindOnceFuture, ExportResultCode, getNumberFromEnv, globalErrorHandler, suppressTracing, } from '@opentelemetry/core';\n/**\n * Implementation of the {@link SpanProcessor} that batches spans exported by\n * the SDK then pushes them to the exporter pipeline.\n */\nexport class BatchSpanProcessorBase {\n _exporter;\n _maxExportBatchSize;\n _maxQueueSize;\n _scheduledDelayMillis;\n _exportTimeoutMillis;\n _isExporting = false;\n _finishedSpans = [];\n _timer;\n _shutdownOnce;\n _droppedSpansCount = 0;\n constructor(_exporter, config) {\n this._exporter = _exporter;\n this._maxExportBatchSize =\n typeof config?.maxExportBatchSize === 'number'\n ? config.maxExportBatchSize\n : (getNumberFromEnv('OTEL_BSP_MAX_EXPORT_BATCH_SIZE') ?? 512);\n this._maxQueueSize =\n typeof config?.maxQueueSize === 'number'\n ? config.maxQueueSize\n : (getNumberFromEnv('OTEL_BSP_MAX_QUEUE_SIZE') ?? 2048);\n this._scheduledDelayMillis =\n typeof config?.scheduledDelayMillis === 'number'\n ? config.scheduledDelayMillis\n : (getNumberFromEnv('OTEL_BSP_SCHEDULE_DELAY') ?? 5000);\n this._exportTimeoutMillis =\n typeof config?.exportTimeoutMillis === 'number'\n ? config.exportTimeoutMillis\n : (getNumberFromEnv('OTEL_BSP_EXPORT_TIMEOUT') ?? 30000);\n this._shutdownOnce = new BindOnceFuture(this._shutdown, this);\n if (this._maxExportBatchSize > this._maxQueueSize) {\n diag.warn('BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize');\n this._maxExportBatchSize = this._maxQueueSize;\n }\n }\n forceFlush() {\n if (this._shutdownOnce.isCalled) {\n return this._shutdownOnce.promise;\n }\n return this._flushAll();\n }\n // does nothing.\n onStart(_span, _parentContext) { }\n onEnd(span) {\n if (this._shutdownOnce.isCalled) {\n return;\n }\n if ((span.spanContext().traceFlags & TraceFlags.SAMPLED) === 0) {\n return;\n }\n this._addToBuffer(span);\n }\n shutdown() {\n return this._shutdownOnce.call();\n }\n _shutdown() {\n return Promise.resolve()\n .then(() => {\n return this.onShutdown();\n })\n .then(() => {\n return this._flushAll();\n })\n .then(() => {\n return this._exporter.shutdown();\n });\n }\n /** Add a span in the buffer. */\n _addToBuffer(span) {\n if (this._finishedSpans.length >= this._maxQueueSize) {\n // limit reached, drop span\n if (this._droppedSpansCount === 0) {\n diag.debug('maxQueueSize reached, dropping spans');\n }\n this._droppedSpansCount++;\n return;\n }\n if (this._droppedSpansCount > 0) {\n // some spans were dropped, log once with count of spans dropped\n diag.warn(`Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`);\n this._droppedSpansCount = 0;\n }\n this._finishedSpans.push(span);\n this._maybeStartTimer();\n }\n /**\n * Send all spans to the exporter respecting the batch size limit\n * This function is used only on forceFlush or shutdown,\n * for all other cases _flush should be used\n * */\n _flushAll() {\n return new Promise((resolve, reject) => {\n const promises = [];\n // calculate number of batches\n const count = Math.ceil(this._finishedSpans.length / this._maxExportBatchSize);\n for (let i = 0, j = count; i < j; i++) {\n promises.push(this._flushOneBatch());\n }\n Promise.all(promises)\n .then(() => {\n resolve();\n })\n .catch(reject);\n });\n }\n _flushOneBatch() {\n this._clearTimer();\n if (this._finishedSpans.length === 0) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n // don't wait anymore for export, this way the next batch can start\n reject(new Error('Timeout'));\n }, this._exportTimeoutMillis);\n // prevent downstream exporter calls from generating spans\n context.with(suppressTracing(context.active()), () => {\n // Reset the finished spans buffer here because the next invocations of the _flush method\n // could pass the same finished spans to the exporter if the buffer is cleared\n // outside the execution of this callback.\n let spans;\n if (this._finishedSpans.length <= this._maxExportBatchSize) {\n spans = this._finishedSpans;\n this._finishedSpans = [];\n }\n else {\n spans = this._finishedSpans.splice(0, this._maxExportBatchSize);\n }\n const doExport = () => this._exporter.export(spans, result => {\n clearTimeout(timer);\n if (result.code === ExportResultCode.SUCCESS) {\n resolve();\n }\n else {\n reject(result.error ??\n new Error('BatchSpanProcessor: span export failed'));\n }\n });\n let pendingResources = null;\n for (let i = 0, len = spans.length; i < len; i++) {\n const span = spans[i];\n if (span.resource.asyncAttributesPending &&\n span.resource.waitForAsyncAttributes) {\n pendingResources ??= [];\n pendingResources.push(span.resource.waitForAsyncAttributes());\n }\n }\n // Avoid scheduling a promise to make the behavior more predictable and easier to test\n if (pendingResources === null) {\n doExport();\n }\n else {\n Promise.all(pendingResources).then(doExport, err => {\n globalErrorHandler(err);\n reject(err);\n });\n }\n });\n });\n }\n _maybeStartTimer() {\n if (this._isExporting)\n return;\n const flush = () => {\n this._isExporting = true;\n this._flushOneBatch()\n .finally(() => {\n this._isExporting = false;\n if (this._finishedSpans.length > 0) {\n this._clearTimer();\n this._maybeStartTimer();\n }\n })\n .catch(e => {\n this._isExporting = false;\n globalErrorHandler(e);\n });\n };\n // we only wait if the queue doesn't have enough elements yet\n if (this._finishedSpans.length >= this._maxExportBatchSize) {\n return flush();\n }\n if (this._timer !== undefined)\n return;\n this._timer = setTimeout(() => flush(), this._scheduledDelayMillis);\n // depending on runtime, this may be a 'number' or NodeJS.Timeout\n if (typeof this._timer !== 'number') {\n this._timer.unref();\n }\n }\n _clearTimer() {\n if (this._timer !== undefined) {\n clearTimeout(this._timer);\n this._timer = undefined;\n }\n }\n}\n//# sourceMappingURL=BatchSpanProcessorBase.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { BatchSpanProcessorBase } from '../../../export/BatchSpanProcessorBase';\nimport { globalErrorHandler } from '@opentelemetry/core';\nexport class BatchSpanProcessor extends BatchSpanProcessorBase {\n _visibilityChangeListener;\n _pageHideListener;\n constructor(_exporter, config) {\n super(_exporter, config);\n this.onInit(config);\n }\n onInit(config) {\n if (config?.disableAutoFlushOnDocumentHide !== true &&\n typeof document !== 'undefined') {\n this._visibilityChangeListener = () => {\n if (document.visibilityState === 'hidden') {\n this.forceFlush().catch(error => {\n globalErrorHandler(error);\n });\n }\n };\n this._pageHideListener = () => {\n this.forceFlush().catch(error => {\n globalErrorHandler(error);\n });\n };\n document.addEventListener('visibilitychange', this._visibilityChangeListener);\n // use 'pagehide' event as a fallback for Safari; see https://bugs.webkit.org/show_bug.cgi?id=116769\n document.addEventListener('pagehide', this._pageHideListener);\n }\n }\n onShutdown() {\n if (typeof document !== 'undefined') {\n if (this._visibilityChangeListener) {\n document.removeEventListener('visibilitychange', this._visibilityChangeListener);\n }\n if (this._pageHideListener) {\n document.removeEventListener('pagehide', this._pageHideListener);\n }\n }\n }\n}\n//# sourceMappingURL=BatchSpanProcessor.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst SPAN_ID_BYTES = 8;\nconst TRACE_ID_BYTES = 16;\nexport class RandomIdGenerator {\n /**\n * Returns a random 16-byte trace ID formatted/encoded as a 32 lowercase hex\n * characters corresponding to 128 bits.\n */\n generateTraceId = getIdGenerator(TRACE_ID_BYTES);\n /**\n * Returns a random 8-byte span ID formatted/encoded as a 16 lowercase hex\n * characters corresponding to 64 bits.\n */\n generateSpanId = getIdGenerator(SPAN_ID_BYTES);\n}\nconst SHARED_CHAR_CODES_ARRAY = Array(32);\nfunction getIdGenerator(bytes) {\n return function generateId() {\n for (let i = 0; i < bytes * 2; i++) {\n SHARED_CHAR_CODES_ARRAY[i] = Math.floor(Math.random() * 16) + 48;\n // valid hex characters in the range 48-57 and 97-102\n if (SHARED_CHAR_CODES_ARRAY[i] >= 58) {\n SHARED_CHAR_CODES_ARRAY[i] += 39;\n }\n }\n return String.fromCharCode.apply(null, SHARED_CHAR_CODES_ARRAY.slice(0, bytes * 2));\n };\n}\n//# sourceMappingURL=RandomIdGenerator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as api from '@opentelemetry/api';\nimport { sanitizeAttributes, isTracingSuppressed, } from '@opentelemetry/core';\nimport { SpanImpl } from './Span';\nimport { mergeConfig } from './utility';\nimport { RandomIdGenerator } from './platform';\n/**\n * This class represents a basic tracer.\n */\nexport class Tracer {\n _sampler;\n _generalLimits;\n _spanLimits;\n _idGenerator;\n instrumentationScope;\n _resource;\n _spanProcessor;\n /**\n * Constructs a new Tracer instance.\n */\n constructor(instrumentationScope, config, resource, spanProcessor) {\n const localConfig = mergeConfig(config);\n this._sampler = localConfig.sampler;\n this._generalLimits = localConfig.generalLimits;\n this._spanLimits = localConfig.spanLimits;\n this._idGenerator = config.idGenerator || new RandomIdGenerator();\n this._resource = resource;\n this._spanProcessor = spanProcessor;\n this.instrumentationScope = instrumentationScope;\n }\n /**\n * Starts a new Span or returns the default NoopSpan based on the sampling\n * decision.\n */\n startSpan(name, options = {}, context = api.context.active()) {\n // remove span from context in case a root span is requested via options\n if (options.root) {\n context = api.trace.deleteSpan(context);\n }\n const parentSpan = api.trace.getSpan(context);\n if (isTracingSuppressed(context)) {\n api.diag.debug('Instrumentation suppressed, returning Noop Span');\n const nonRecordingSpan = api.trace.wrapSpanContext(api.INVALID_SPAN_CONTEXT);\n return nonRecordingSpan;\n }\n const parentSpanContext = parentSpan?.spanContext();\n const spanId = this._idGenerator.generateSpanId();\n let validParentSpanContext;\n let traceId;\n let traceState;\n if (!parentSpanContext ||\n !api.trace.isSpanContextValid(parentSpanContext)) {\n // New root span.\n traceId = this._idGenerator.generateTraceId();\n }\n else {\n // New child span.\n traceId = parentSpanContext.traceId;\n traceState = parentSpanContext.traceState;\n validParentSpanContext = parentSpanContext;\n }\n const spanKind = options.kind ?? api.SpanKind.INTERNAL;\n const links = (options.links ?? []).map(link => {\n return {\n context: link.context,\n attributes: sanitizeAttributes(link.attributes),\n };\n });\n const attributes = sanitizeAttributes(options.attributes);\n // make sampling decision\n const samplingResult = this._sampler.shouldSample(context, traceId, name, spanKind, attributes, links);\n traceState = samplingResult.traceState ?? traceState;\n const traceFlags = samplingResult.decision === api.SamplingDecision.RECORD_AND_SAMPLED\n ? api.TraceFlags.SAMPLED\n : api.TraceFlags.NONE;\n const spanContext = { traceId, spanId, traceFlags, traceState };\n if (samplingResult.decision === api.SamplingDecision.NOT_RECORD) {\n api.diag.debug('Recording is off, propagating context in a non-recording span');\n const nonRecordingSpan = api.trace.wrapSpanContext(spanContext);\n return nonRecordingSpan;\n }\n // Set initial span attributes. The attributes object may have been mutated\n // by the sampler, so we sanitize the merged attributes before setting them.\n const initAttributes = sanitizeAttributes(Object.assign(attributes, samplingResult.attributes));\n const span = new SpanImpl({\n resource: this._resource,\n scope: this.instrumentationScope,\n context,\n spanContext,\n name,\n kind: spanKind,\n links,\n parentSpanContext: validParentSpanContext,\n attributes: initAttributes,\n startTime: options.startTime,\n spanProcessor: this._spanProcessor,\n spanLimits: this._spanLimits,\n });\n return span;\n }\n startActiveSpan(name, arg2, arg3, arg4) {\n let opts;\n let ctx;\n let fn;\n if (arguments.length < 2) {\n return;\n }\n else if (arguments.length === 2) {\n fn = arg2;\n }\n else if (arguments.length === 3) {\n opts = arg2;\n fn = arg3;\n }\n else {\n opts = arg2;\n ctx = arg3;\n fn = arg4;\n }\n const parentContext = ctx ?? api.context.active();\n const span = this.startSpan(name, opts, parentContext);\n const contextWithSpanSet = api.trace.setSpan(parentContext, span);\n return api.context.with(contextWithSpanSet, fn, undefined, span);\n }\n /** Returns the active {@link GeneralLimits}. */\n getGeneralLimits() {\n return this._generalLimits;\n }\n /** Returns the active {@link SpanLimits}. */\n getSpanLimits() {\n return this._spanLimits;\n }\n}\n//# sourceMappingURL=Tracer.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { globalErrorHandler } from '@opentelemetry/core';\n/**\n * Implementation of the {@link SpanProcessor} that simply forwards all\n * received events to a list of {@link SpanProcessor}s.\n */\nexport class MultiSpanProcessor {\n _spanProcessors;\n constructor(_spanProcessors) {\n this._spanProcessors = _spanProcessors;\n }\n forceFlush() {\n const promises = [];\n for (const spanProcessor of this._spanProcessors) {\n promises.push(spanProcessor.forceFlush());\n }\n return new Promise(resolve => {\n Promise.all(promises)\n .then(() => {\n resolve();\n })\n .catch(error => {\n globalErrorHandler(error || new Error('MultiSpanProcessor: forceFlush failed'));\n resolve();\n });\n });\n }\n onStart(span, context) {\n for (const spanProcessor of this._spanProcessors) {\n spanProcessor.onStart(span, context);\n }\n }\n onEnd(span) {\n for (const spanProcessor of this._spanProcessors) {\n spanProcessor.onEnd(span);\n }\n }\n shutdown() {\n const promises = [];\n for (const spanProcessor of this._spanProcessors) {\n promises.push(spanProcessor.shutdown());\n }\n return new Promise((resolve, reject) => {\n Promise.all(promises).then(() => {\n resolve();\n }, reject);\n });\n }\n}\n//# sourceMappingURL=MultiSpanProcessor.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { merge } from '@opentelemetry/core';\nimport { defaultResource } from '@opentelemetry/resources';\nimport { Tracer } from './Tracer';\nimport { loadDefaultConfig } from './config';\nimport { MultiSpanProcessor } from './MultiSpanProcessor';\nimport { reconfigureLimits } from './utility';\nexport var ForceFlushState;\n(function (ForceFlushState) {\n ForceFlushState[ForceFlushState[\"resolved\"] = 0] = \"resolved\";\n ForceFlushState[ForceFlushState[\"timeout\"] = 1] = \"timeout\";\n ForceFlushState[ForceFlushState[\"error\"] = 2] = \"error\";\n ForceFlushState[ForceFlushState[\"unresolved\"] = 3] = \"unresolved\";\n})(ForceFlushState || (ForceFlushState = {}));\n/**\n * This class represents a basic tracer provider which platform libraries can extend\n */\nexport class BasicTracerProvider {\n _config;\n _tracers = new Map();\n _resource;\n _activeSpanProcessor;\n constructor(config = {}) {\n const mergedConfig = merge({}, loadDefaultConfig(), reconfigureLimits(config));\n this._resource = mergedConfig.resource ?? defaultResource();\n this._config = Object.assign({}, mergedConfig, {\n resource: this._resource,\n });\n const spanProcessors = [];\n if (config.spanProcessors?.length) {\n spanProcessors.push(...config.spanProcessors);\n }\n this._activeSpanProcessor = new MultiSpanProcessor(spanProcessors);\n }\n getTracer(name, version, options) {\n const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n if (!this._tracers.has(key)) {\n this._tracers.set(key, new Tracer({ name, version, schemaUrl: options?.schemaUrl }, this._config, this._resource, this._activeSpanProcessor));\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this._tracers.get(key);\n }\n forceFlush() {\n const timeout = this._config.forceFlushTimeoutMillis;\n const promises = this._activeSpanProcessor['_spanProcessors'].map((spanProcessor) => {\n return new Promise(resolve => {\n let state;\n const timeoutInterval = setTimeout(() => {\n resolve(new Error(`Span processor did not completed within timeout period of ${timeout} ms`));\n state = ForceFlushState.timeout;\n }, timeout);\n spanProcessor\n .forceFlush()\n .then(() => {\n clearTimeout(timeoutInterval);\n if (state !== ForceFlushState.timeout) {\n state = ForceFlushState.resolved;\n resolve(state);\n }\n })\n .catch(error => {\n clearTimeout(timeoutInterval);\n state = ForceFlushState.error;\n resolve(error);\n });\n });\n });\n return new Promise((resolve, reject) => {\n Promise.all(promises)\n .then(results => {\n const errors = results.filter(result => result !== ForceFlushState.resolved);\n if (errors.length > 0) {\n reject(errors);\n }\n else {\n resolve();\n }\n })\n .catch(error => reject([error]));\n });\n }\n shutdown() {\n return this._activeSpanProcessor.shutdown();\n }\n}\n//# sourceMappingURL=BasicTracerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ROOT_CONTEXT } from '@opentelemetry/api';\n/**\n * Stack Context Manager for managing the state in web\n * it doesn't fully support the async calls though\n */\nexport class StackContextManager {\n /**\n * whether the context manager is enabled or not\n */\n _enabled = false;\n /**\n * Keeps the reference to current context\n */\n _currentContext = ROOT_CONTEXT;\n /**\n *\n * @param context\n * @param target Function to be executed within the context\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n _bindFunction(context = ROOT_CONTEXT, target) {\n const manager = this;\n const contextWrapper = function (...args) {\n return manager.with(context, () => target.apply(this, args));\n };\n Object.defineProperty(contextWrapper, 'length', {\n enumerable: false,\n configurable: true,\n writable: false,\n value: target.length,\n });\n return contextWrapper;\n }\n /**\n * Returns the active context\n */\n active() {\n return this._currentContext;\n }\n /**\n * Binds a the certain context or the active one to the target function and then returns the target\n * @param context A context (span) to be bind to target\n * @param target a function or event emitter. When target or one of its callbacks is called,\n * the provided context will be used as the active context for the duration of the call.\n */\n bind(context, target) {\n // if no specific context to propagate is given, we use the current one\n if (context === undefined) {\n context = this.active();\n }\n if (typeof target === 'function') {\n return this._bindFunction(context, target);\n }\n return target;\n }\n /**\n * Disable the context manager (clears the current context)\n */\n disable() {\n this._currentContext = ROOT_CONTEXT;\n this._enabled = false;\n return this;\n }\n /**\n * Enables the context manager and creates a default(root) context\n */\n enable() {\n if (this._enabled) {\n return this;\n }\n this._enabled = true;\n this._currentContext = ROOT_CONTEXT;\n return this;\n }\n /**\n * Calls the callback function [fn] with the provided [context]. If [context] is undefined then it will use the window.\n * The context will be set as active\n * @param context\n * @param fn Callback function\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n with(context, fn, thisArg, ...args) {\n const previousContext = this._currentContext;\n this._currentContext = context || ROOT_CONTEXT;\n try {\n return fn.call(thisArg, ...args);\n }\n finally {\n this._currentContext = previousContext;\n }\n }\n}\n//# sourceMappingURL=StackContextManager.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { BasicTracerProvider, } from '@opentelemetry/sdk-trace-base';\nimport { StackContextManager } from './StackContextManager';\nimport { trace, context, propagation, } from '@opentelemetry/api';\nimport { CompositePropagator, W3CBaggagePropagator, W3CTraceContextPropagator, } from '@opentelemetry/core';\nfunction setupContextManager(contextManager) {\n // null means 'do not register'\n if (contextManager === null) {\n return;\n }\n // undefined means 'register default'\n if (contextManager === undefined) {\n const defaultContextManager = new StackContextManager();\n defaultContextManager.enable();\n context.setGlobalContextManager(defaultContextManager);\n return;\n }\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n}\nfunction setupPropagator(propagator) {\n // null means 'do not register'\n if (propagator === null) {\n return;\n }\n // undefined means 'register default'\n if (propagator === undefined) {\n propagation.setGlobalPropagator(new CompositePropagator({\n propagators: [\n new W3CTraceContextPropagator(),\n new W3CBaggagePropagator(),\n ],\n }));\n return;\n }\n propagation.setGlobalPropagator(propagator);\n}\n/**\n * This class represents a web tracer with {@link StackContextManager}\n */\nexport class WebTracerProvider extends BasicTracerProvider {\n /**\n * Constructs a new Tracer instance.\n * @param config Web Tracer config\n */\n constructor(config = {}) {\n super(config);\n }\n /**\n * Register this TracerProvider for use with the OpenTelemetry API.\n * Undefined values may be replaced with defaults, and\n * null values will be skipped.\n *\n * @param config Configuration object for SDK registration\n */\n register(config = {}) {\n trace.setGlobalTracerProvider(this);\n setupPropagator(config.propagator);\n setupContextManager(config.contextManager);\n }\n}\n//# sourceMappingURL=WebTracerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { PerformanceTimingNames as PTN } from './enums/PerformanceTimingNames';\nimport { hrTimeToNanoseconds, timeInputToHrTime, urlMatches, } from '@opentelemetry/core';\nimport { ATTR_HTTP_RESPONSE_CONTENT_LENGTH, ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED, } from './semconv';\n// Used to normalize relative URLs\nlet urlNormalizingAnchor;\nfunction getUrlNormalizingAnchor() {\n if (!urlNormalizingAnchor) {\n urlNormalizingAnchor = document.createElement('a');\n }\n return urlNormalizingAnchor;\n}\n/**\n * Helper function to be able to use enum as typed key in type and in interface when using forEach\n * @param obj\n * @param key\n */\nexport function hasKey(obj, key) {\n return key in obj;\n}\n/**\n * Helper function for starting an event on span based on {@link PerformanceEntries}\n * @param span\n * @param performanceName name of performance entry for time start\n * @param entries\n * @param ignoreZeros\n */\nexport function addSpanNetworkEvent(span, performanceName, entries, ignoreZeros = true) {\n if (hasKey(entries, performanceName) &&\n typeof entries[performanceName] === 'number' &&\n !(ignoreZeros && entries[performanceName] === 0)) {\n return span.addEvent(performanceName, entries[performanceName]);\n }\n return undefined;\n}\n/**\n * Helper function for adding network events and content length attributes.\n */\nexport function addSpanNetworkEvents(span, resource, ignoreNetworkEvents = false, ignoreZeros, skipOldSemconvContentLengthAttrs) {\n if (ignoreZeros === undefined) {\n ignoreZeros = resource[PTN.START_TIME] !== 0;\n }\n if (!ignoreNetworkEvents) {\n addSpanNetworkEvent(span, PTN.FETCH_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.CONNECT_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.CONNECT_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.REQUEST_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.RESPONSE_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PTN.RESPONSE_END, resource, ignoreZeros);\n }\n if (!skipOldSemconvContentLengthAttrs) {\n // This block adds content-length-related span attributes using the\n // *old* HTTP semconv (v1.7.0).\n const encodedLength = resource[PTN.ENCODED_BODY_SIZE];\n if (encodedLength !== undefined) {\n span.setAttribute(ATTR_HTTP_RESPONSE_CONTENT_LENGTH, encodedLength);\n }\n const decodedLength = resource[PTN.DECODED_BODY_SIZE];\n // Spec: Not set if transport encoding not used (in which case encoded and decoded sizes match)\n if (decodedLength !== undefined && encodedLength !== decodedLength) {\n span.setAttribute(ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED, decodedLength);\n }\n }\n}\n/**\n * sort resources by startTime\n * @param filteredResources\n */\nexport function sortResources(filteredResources) {\n return filteredResources.slice().sort((a, b) => {\n const valueA = a[PTN.FETCH_START];\n const valueB = b[PTN.FETCH_START];\n if (valueA > valueB) {\n return 1;\n }\n else if (valueA < valueB) {\n return -1;\n }\n return 0;\n });\n}\n/** Returns the origin if present (if in browser context). */\nfunction getOrigin() {\n return typeof location !== 'undefined' ? location.origin : undefined;\n}\n/**\n * Get closest performance resource ignoring the resources that have been\n * already used.\n * @param spanUrl\n * @param startTimeHR\n * @param endTimeHR\n * @param resources\n * @param ignoredResources\n * @param initiatorType\n */\nexport function getResource(spanUrl, startTimeHR, endTimeHR, resources, ignoredResources = new WeakSet(), initiatorType) {\n // de-relativize the URL before usage (does no harm to absolute URLs)\n const parsedSpanUrl = parseUrl(spanUrl);\n spanUrl = parsedSpanUrl.toString();\n const filteredResources = filterResourcesForSpan(spanUrl, startTimeHR, endTimeHR, resources, ignoredResources, initiatorType);\n if (filteredResources.length === 0) {\n return {\n mainRequest: undefined,\n };\n }\n if (filteredResources.length === 1) {\n return {\n mainRequest: filteredResources[0],\n };\n }\n const sorted = sortResources(filteredResources);\n if (parsedSpanUrl.origin !== getOrigin() && sorted.length > 1) {\n let corsPreFlightRequest = sorted[0];\n let mainRequest = findMainRequest(sorted, corsPreFlightRequest[PTN.RESPONSE_END], endTimeHR);\n const responseEnd = corsPreFlightRequest[PTN.RESPONSE_END];\n const fetchStart = mainRequest[PTN.FETCH_START];\n // no corsPreFlightRequest\n if (fetchStart < responseEnd) {\n mainRequest = corsPreFlightRequest;\n corsPreFlightRequest = undefined;\n }\n return {\n corsPreFlightRequest,\n mainRequest,\n };\n }\n else {\n return {\n mainRequest: filteredResources[0],\n };\n }\n}\n/**\n * Will find the main request skipping the cors pre flight requests\n * @param resources\n * @param corsPreFlightRequestEndTime\n * @param spanEndTimeHR\n */\nfunction findMainRequest(resources, corsPreFlightRequestEndTime, spanEndTimeHR) {\n const spanEndTime = hrTimeToNanoseconds(spanEndTimeHR);\n const minTime = hrTimeToNanoseconds(timeInputToHrTime(corsPreFlightRequestEndTime));\n let mainRequest = resources[1];\n let bestGap;\n const length = resources.length;\n for (let i = 1; i < length; i++) {\n const resource = resources[i];\n const resourceStartTime = hrTimeToNanoseconds(timeInputToHrTime(resource[PTN.FETCH_START]));\n const resourceEndTime = hrTimeToNanoseconds(timeInputToHrTime(resource[PTN.RESPONSE_END]));\n const currentGap = spanEndTime - resourceEndTime;\n if (resourceStartTime >= minTime && (!bestGap || currentGap < bestGap)) {\n bestGap = currentGap;\n mainRequest = resource;\n }\n }\n return mainRequest;\n}\n/**\n * Filter all resources that has started and finished according to span start time and end time.\n * It will return the closest resource to a start time\n * @param spanUrl\n * @param startTimeHR\n * @param endTimeHR\n * @param resources\n * @param ignoredResources\n */\nfunction filterResourcesForSpan(spanUrl, startTimeHR, endTimeHR, resources, ignoredResources, initiatorType) {\n const startTime = hrTimeToNanoseconds(startTimeHR);\n const endTime = hrTimeToNanoseconds(endTimeHR);\n let filteredResources = resources.filter(resource => {\n const resourceStartTime = hrTimeToNanoseconds(timeInputToHrTime(resource[PTN.FETCH_START]));\n const resourceEndTime = hrTimeToNanoseconds(timeInputToHrTime(resource[PTN.RESPONSE_END]));\n return (resource.initiatorType.toLowerCase() ===\n (initiatorType || 'xmlhttprequest') &&\n resource.name === spanUrl &&\n resourceStartTime >= startTime &&\n resourceEndTime <= endTime);\n });\n if (filteredResources.length > 0) {\n filteredResources = filteredResources.filter(resource => {\n return !ignoredResources.has(resource);\n });\n }\n return filteredResources;\n}\n/**\n * Parses url using URL constructor or fallback to anchor element.\n * @param url\n */\nexport function parseUrl(url) {\n if (typeof URL === 'function') {\n return new URL(url, typeof document !== 'undefined'\n ? document.baseURI\n : typeof location !== 'undefined' // Some JS runtimes (e.g. Deno) don't define this\n ? location.href\n : undefined);\n }\n const element = getUrlNormalizingAnchor();\n element.href = url;\n return element;\n}\n/**\n * Parses url using URL constructor or fallback to anchor element and serialize\n * it to a string.\n *\n * Performs the steps described in https://html.spec.whatwg.org/multipage/urls-and-fetching.html#parse-a-url\n *\n * @param url\n */\nexport function normalizeUrl(url) {\n const urlLike = parseUrl(url);\n return urlLike.href;\n}\n/**\n * Get element XPath\n * @param target - target element\n * @param optimised - when id attribute of element is present the xpath can be\n * simplified to contain id\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function getElementXPath(target, optimised) {\n if (target.nodeType === Node.DOCUMENT_NODE) {\n return '/';\n }\n const targetValue = getNodeValue(target, optimised);\n if (optimised && targetValue.indexOf('@id') > 0) {\n return targetValue;\n }\n let xpath = '';\n if (target.parentNode) {\n xpath += getElementXPath(target.parentNode, false);\n }\n xpath += targetValue;\n return xpath;\n}\n/**\n * get node index within the siblings\n * @param target\n */\nfunction getNodeIndex(target) {\n if (!target.parentNode) {\n return 0;\n }\n const allowedTypes = [target.nodeType];\n if (target.nodeType === Node.CDATA_SECTION_NODE) {\n allowedTypes.push(Node.TEXT_NODE);\n }\n let elements = Array.from(target.parentNode.childNodes);\n elements = elements.filter((element) => {\n const localName = element.localName;\n return (allowedTypes.indexOf(element.nodeType) >= 0 &&\n localName === target.localName);\n });\n if (elements.length >= 1) {\n return elements.indexOf(target) + 1; // xpath starts from 1\n }\n // if there are no other similar child xpath doesn't need index\n return 0;\n}\n/**\n * get node value for xpath\n * @param target\n * @param optimised\n */\nfunction getNodeValue(target, optimised) {\n const nodeType = target.nodeType;\n const index = getNodeIndex(target);\n let nodeValue = '';\n if (nodeType === Node.ELEMENT_NODE) {\n const id = target.getAttribute('id');\n if (optimised && id) {\n return `//*[@id=\"${id}\"]`;\n }\n nodeValue = target.localName;\n }\n else if (nodeType === Node.TEXT_NODE ||\n nodeType === Node.CDATA_SECTION_NODE) {\n nodeValue = 'text()';\n }\n else if (nodeType === Node.COMMENT_NODE) {\n nodeValue = 'comment()';\n }\n else {\n return '';\n }\n // if index is 1 it can be omitted in xpath\n if (nodeValue && index > 1) {\n return `/${nodeValue}[${index}]`;\n }\n return `/${nodeValue}`;\n}\n/**\n * Checks if trace headers should be propagated\n * @param spanUrl\n * @private\n */\nexport function shouldPropagateTraceHeaders(spanUrl, propagateTraceHeaderCorsUrls) {\n let propagateTraceHeaderUrls = propagateTraceHeaderCorsUrls || [];\n if (typeof propagateTraceHeaderUrls === 'string' ||\n propagateTraceHeaderUrls instanceof RegExp) {\n propagateTraceHeaderUrls = [propagateTraceHeaderUrls];\n }\n const parsedSpanUrl = parseUrl(spanUrl);\n if (parsedSpanUrl.origin === getOrigin()) {\n return true;\n }\n else {\n return propagateTraceHeaderUrls.some(propagateTraceHeaderUrl => urlMatches(spanUrl, propagateTraceHeaderUrl));\n }\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class OTLPExporterBase {\n _delegate;\n constructor(_delegate) {\n this._delegate = _delegate;\n }\n /**\n * Export items.\n * @param items\n * @param resultCallback\n */\n export(items, resultCallback) {\n this._delegate.export(items, resultCallback);\n }\n forceFlush() {\n return this._delegate.forceFlush();\n }\n shutdown() {\n return this._delegate.shutdown();\n }\n}\n//# sourceMappingURL=OTLPExporterBase.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Interface for handling error\n */\nexport class OTLPExporterError extends Error {\n code;\n name = 'OTLPExporterError';\n data;\n constructor(message, code, data) {\n super(message);\n this.data = data;\n this.code = code;\n }\n}\n//# sourceMappingURL=types.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function validateTimeoutMillis(timeoutMillis) {\n if (Number.isFinite(timeoutMillis) && timeoutMillis > 0) {\n return timeoutMillis;\n }\n throw new Error(`Configuration: timeoutMillis is invalid, expected number greater than 0 (actual: '${timeoutMillis}')`);\n}\nexport function wrapStaticHeadersInFunction(headers) {\n if (headers == null) {\n return undefined;\n }\n return async () => headers;\n}\n/**\n * @param userProvidedConfiguration Configuration options provided by the user in code.\n * @param fallbackConfiguration Fallback to use when the {@link userProvidedConfiguration} does not specify an option.\n * @param defaultConfiguration The defaults as defined by the exporter specification\n */\nexport function mergeOtlpSharedConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) {\n return {\n timeoutMillis: validateTimeoutMillis(userProvidedConfiguration.timeoutMillis ??\n fallbackConfiguration.timeoutMillis ??\n defaultConfiguration.timeoutMillis),\n concurrencyLimit: userProvidedConfiguration.concurrencyLimit ??\n fallbackConfiguration.concurrencyLimit ??\n defaultConfiguration.concurrencyLimit,\n compression: userProvidedConfiguration.compression ??\n fallbackConfiguration.compression ??\n defaultConfiguration.compression,\n };\n}\nexport function getSharedConfigurationDefaults() {\n return {\n timeoutMillis: 10000,\n concurrencyLimit: 30,\n compression: 'none',\n };\n}\n//# sourceMappingURL=shared-configuration.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass BoundedQueueExportPromiseHandler {\n _concurrencyLimit;\n _sendingPromises = [];\n /**\n * @param concurrencyLimit maximum promises allowed in a queue at the same time.\n */\n constructor(concurrencyLimit) {\n this._concurrencyLimit = concurrencyLimit;\n }\n pushPromise(promise) {\n if (this.hasReachedLimit()) {\n throw new Error('Concurrency Limit reached');\n }\n this._sendingPromises.push(promise);\n const popPromise = () => {\n const index = this._sendingPromises.indexOf(promise);\n void this._sendingPromises.splice(index, 1);\n };\n promise.then(popPromise, popPromise);\n }\n hasReachedLimit() {\n return this._sendingPromises.length >= this._concurrencyLimit;\n }\n async awaitAll() {\n await Promise.all(this._sendingPromises);\n }\n}\n/**\n * Promise queue for keeping track of export promises. Finished promises will be auto-dequeued.\n * Allows for awaiting all promises in the queue.\n */\nexport function createBoundedQueueExportPromiseHandler(options) {\n return new BoundedQueueExportPromiseHandler(options.concurrencyLimit);\n}\n//# sourceMappingURL=bounded-queue-export-promise-handler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nfunction isPartialSuccessResponse(response) {\n return Object.prototype.hasOwnProperty.call(response, 'partialSuccess');\n}\n/**\n * Default response handler that logs a partial success to the console.\n */\nexport function createLoggingPartialSuccessResponseHandler() {\n return {\n handleResponse(response) {\n // Partial success MUST never be an empty object according the specification\n // see https://opentelemetry.io/docs/specs/otlp/#partial-success\n if (response == null ||\n !isPartialSuccessResponse(response) ||\n response.partialSuccess == null ||\n Object.keys(response.partialSuccess).length === 0) {\n return;\n }\n diag.warn('Received Partial Success response:', JSON.stringify(response.partialSuccess));\n },\n };\n}\n//# sourceMappingURL=logging-response-handler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ExportResultCode } from '@opentelemetry/core';\nimport { OTLPExporterError } from './types';\nimport { createLoggingPartialSuccessResponseHandler } from './logging-response-handler';\nimport { diag } from '@opentelemetry/api';\nclass OTLPExportDelegate {\n _transport;\n _serializer;\n _responseHandler;\n _promiseQueue;\n _timeout;\n _diagLogger;\n constructor(_transport, _serializer, _responseHandler, _promiseQueue, _timeout) {\n this._transport = _transport;\n this._serializer = _serializer;\n this._responseHandler = _responseHandler;\n this._promiseQueue = _promiseQueue;\n this._timeout = _timeout;\n this._diagLogger = diag.createComponentLogger({\n namespace: 'OTLPExportDelegate',\n });\n }\n export(internalRepresentation, resultCallback) {\n this._diagLogger.debug('items to be sent', internalRepresentation);\n // don't do any work if too many exports are in progress.\n if (this._promiseQueue.hasReachedLimit()) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('Concurrent export limit reached'),\n });\n return;\n }\n const serializedRequest = this._serializer.serializeRequest(internalRepresentation);\n if (serializedRequest == null) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error('Nothing to send'),\n });\n return;\n }\n this._promiseQueue.pushPromise(this._transport.send(serializedRequest, this._timeout).then(response => {\n if (response.status === 'success') {\n if (response.data != null) {\n try {\n this._responseHandler.handleResponse(this._serializer.deserializeResponse(response.data));\n }\n catch (e) {\n this._diagLogger.warn('Export succeeded but could not deserialize response - is the response specification compliant?', e, response.data);\n }\n }\n // No matter the response, we can consider the export still successful.\n resultCallback({\n code: ExportResultCode.SUCCESS,\n });\n return;\n }\n else if (response.status === 'failure' && response.error) {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: response.error,\n });\n return;\n }\n else if (response.status === 'retryable') {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new OTLPExporterError('Export failed with retryable status'),\n });\n }\n else {\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new OTLPExporterError('Export failed with unknown error'),\n });\n }\n }, reason => resultCallback({\n code: ExportResultCode.FAILED,\n error: reason,\n })));\n }\n forceFlush() {\n return this._promiseQueue.awaitAll();\n }\n async shutdown() {\n this._diagLogger.debug('shutdown started');\n await this.forceFlush();\n this._transport.shutdown();\n }\n}\n/**\n * Creates a generic delegate for OTLP exports which only contains parts of the OTLP export that are shared across all\n * signals.\n */\nexport function createOtlpExportDelegate(components, settings) {\n return new OTLPExportDelegate(components.transport, components.serializer, createLoggingPartialSuccessResponseHandler(), components.promiseHandler, settings.timeout);\n}\n//# sourceMappingURL=otlp-export-delegate.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createBoundedQueueExportPromiseHandler } from './bounded-queue-export-promise-handler';\nimport { createOtlpExportDelegate, } from './otlp-export-delegate';\nexport function createOtlpNetworkExportDelegate(options, serializer, transport) {\n return createOtlpExportDelegate({\n transport: transport,\n serializer,\n promiseHandler: createBoundedQueueExportPromiseHandler(options),\n }, { timeout: options.timeoutMillis });\n}\n//# sourceMappingURL=otlp-network-export-delegate.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction intValue(charCode) {\n // 0-9\n if (charCode >= 48 && charCode <= 57) {\n return charCode - 48;\n }\n // a-f\n if (charCode >= 97 && charCode <= 102) {\n return charCode - 87;\n }\n // A-F\n return charCode - 55;\n}\nexport function hexToBinary(hexStr) {\n const buf = new Uint8Array(hexStr.length / 2);\n let offset = 0;\n for (let i = 0; i < hexStr.length; i += 2) {\n const hi = intValue(hexStr.charCodeAt(i));\n const lo = intValue(hexStr.charCodeAt(i + 1));\n buf[offset++] = (hi << 4) | lo;\n }\n return buf;\n}\n//# sourceMappingURL=hex-to-binary.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { hrTimeToNanoseconds } from '@opentelemetry/core';\nimport { hexToBinary } from './hex-to-binary';\nexport function hrTimeToNanos(hrTime) {\n const NANOSECONDS = BigInt(1000000000);\n return (BigInt(Math.trunc(hrTime[0])) * NANOSECONDS + BigInt(Math.trunc(hrTime[1])));\n}\nexport function toLongBits(value) {\n const low = Number(BigInt.asUintN(32, value));\n const high = Number(BigInt.asUintN(32, value >> BigInt(32)));\n return { low, high };\n}\nexport function encodeAsLongBits(hrTime) {\n const nanos = hrTimeToNanos(hrTime);\n return toLongBits(nanos);\n}\nexport function encodeAsString(hrTime) {\n const nanos = hrTimeToNanos(hrTime);\n return nanos.toString();\n}\nconst encodeTimestamp = typeof BigInt !== 'undefined' ? encodeAsString : hrTimeToNanoseconds;\nfunction identity(value) {\n return value;\n}\nfunction optionalHexToBinary(str) {\n if (str === undefined)\n return undefined;\n return hexToBinary(str);\n}\nconst DEFAULT_ENCODER = {\n encodeHrTime: encodeAsLongBits,\n encodeSpanContext: hexToBinary,\n encodeOptionalSpanContext: optionalHexToBinary,\n};\nexport function getOtlpEncoder(options) {\n if (options === undefined) {\n return DEFAULT_ENCODER;\n }\n const useLongBits = options.useLongBits ?? true;\n const useHex = options.useHex ?? false;\n return {\n encodeHrTime: useLongBits ? encodeAsLongBits : encodeTimestamp,\n encodeSpanContext: useHex ? identity : hexToBinary,\n encodeOptionalSpanContext: useHex ? identity : optionalHexToBinary,\n };\n}\n//# sourceMappingURL=utils.js.map","export function createResource(resource) {\n const result = {\n attributes: toAttributes(resource.attributes),\n droppedAttributesCount: 0,\n };\n const schemaUrl = resource.schemaUrl;\n if (schemaUrl && schemaUrl !== '')\n result.schemaUrl = schemaUrl;\n return result;\n}\nexport function createInstrumentationScope(scope) {\n return {\n name: scope.name,\n version: scope.version,\n };\n}\nexport function toAttributes(attributes) {\n return Object.keys(attributes).map(key => toKeyValue(key, attributes[key]));\n}\nexport function toKeyValue(key, value) {\n return {\n key: key,\n value: toAnyValue(value),\n };\n}\nexport function toAnyValue(value) {\n const t = typeof value;\n if (t === 'string')\n return { stringValue: value };\n if (t === 'number') {\n if (!Number.isInteger(value))\n return { doubleValue: value };\n return { intValue: value };\n }\n if (t === 'boolean')\n return { boolValue: value };\n if (value instanceof Uint8Array)\n return { bytesValue: value };\n if (Array.isArray(value))\n return { arrayValue: { values: value.map(toAnyValue) } };\n if (t === 'object' && value != null)\n return {\n kvlistValue: {\n values: Object.entries(value).map(([k, v]) => toKeyValue(k, v)),\n },\n };\n return {};\n}\n//# sourceMappingURL=internal.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * AggregationTemporality indicates the way additive quantities are expressed.\n */\nexport var AggregationTemporality;\n(function (AggregationTemporality) {\n AggregationTemporality[AggregationTemporality[\"DELTA\"] = 0] = \"DELTA\";\n AggregationTemporality[AggregationTemporality[\"CUMULATIVE\"] = 1] = \"CUMULATIVE\";\n})(AggregationTemporality || (AggregationTemporality = {}));\n//# sourceMappingURL=AggregationTemporality.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Supported types of metric instruments.\n */\nexport var InstrumentType;\n(function (InstrumentType) {\n InstrumentType[\"COUNTER\"] = \"COUNTER\";\n InstrumentType[\"GAUGE\"] = \"GAUGE\";\n InstrumentType[\"HISTOGRAM\"] = \"HISTOGRAM\";\n InstrumentType[\"UP_DOWN_COUNTER\"] = \"UP_DOWN_COUNTER\";\n InstrumentType[\"OBSERVABLE_COUNTER\"] = \"OBSERVABLE_COUNTER\";\n InstrumentType[\"OBSERVABLE_GAUGE\"] = \"OBSERVABLE_GAUGE\";\n InstrumentType[\"OBSERVABLE_UP_DOWN_COUNTER\"] = \"OBSERVABLE_UP_DOWN_COUNTER\";\n})(InstrumentType || (InstrumentType = {}));\n/**\n * The aggregated point data type.\n */\nexport var DataPointType;\n(function (DataPointType) {\n /**\n * A histogram data point contains a histogram statistics of collected\n * values with a list of explicit bucket boundaries and statistics such\n * as min, max, count, and sum of all collected values.\n */\n DataPointType[DataPointType[\"HISTOGRAM\"] = 0] = \"HISTOGRAM\";\n /**\n * An exponential histogram data point contains a histogram statistics of\n * collected values where bucket boundaries are automatically calculated\n * using an exponential function, and statistics such as min, max, count,\n * and sum of all collected values.\n */\n DataPointType[DataPointType[\"EXPONENTIAL_HISTOGRAM\"] = 1] = \"EXPONENTIAL_HISTOGRAM\";\n /**\n * A gauge metric data point has only a single numeric value.\n */\n DataPointType[DataPointType[\"GAUGE\"] = 2] = \"GAUGE\";\n /**\n * A sum metric data point has a single numeric value and a\n * monotonicity-indicator.\n */\n DataPointType[DataPointType[\"SUM\"] = 3] = \"SUM\";\n})(DataPointType || (DataPointType = {}));\n//# sourceMappingURL=MetricData.js.map","/**\n * AggregationTemporality defines how a metric aggregator reports aggregated\n * values. It describes how those values relate to the time interval over\n * which they are aggregated.\n */\nexport var EAggregationTemporality;\n(function (EAggregationTemporality) {\n /* UNSPECIFIED is the default AggregationTemporality, it MUST not be used. */\n EAggregationTemporality[EAggregationTemporality[\"AGGREGATION_TEMPORALITY_UNSPECIFIED\"] = 0] = \"AGGREGATION_TEMPORALITY_UNSPECIFIED\";\n /** DELTA is an AggregationTemporality for a metric aggregator which reports\n changes since last report time. Successive metrics contain aggregation of\n values from continuous and non-overlapping intervals.\n \n The values for a DELTA metric are based only on the time interval\n associated with one measurement cycle. There is no dependency on\n previous measurements like is the case for CUMULATIVE metrics.\n \n For example, consider a system measuring the number of requests that\n it receives and reports the sum of these requests every second as a\n DELTA metric:\n \n 1. The system starts receiving at time=t_0.\n 2. A request is received, the system measures 1 request.\n 3. A request is received, the system measures 1 request.\n 4. A request is received, the system measures 1 request.\n 5. The 1 second collection cycle ends. A metric is exported for the\n number of requests received over the interval of time t_0 to\n t_0+1 with a value of 3.\n 6. A request is received, the system measures 1 request.\n 7. A request is received, the system measures 1 request.\n 8. The 1 second collection cycle ends. A metric is exported for the\n number of requests received over the interval of time t_0+1 to\n t_0+2 with a value of 2. */\n EAggregationTemporality[EAggregationTemporality[\"AGGREGATION_TEMPORALITY_DELTA\"] = 1] = \"AGGREGATION_TEMPORALITY_DELTA\";\n /** CUMULATIVE is an AggregationTemporality for a metric aggregator which\n reports changes since a fixed start time. This means that current values\n of a CUMULATIVE metric depend on all previous measurements since the\n start time. Because of this, the sender is required to retain this state\n in some form. If this state is lost or invalidated, the CUMULATIVE metric\n values MUST be reset and a new fixed start time following the last\n reported measurement time sent MUST be used.\n \n For example, consider a system measuring the number of requests that\n it receives and reports the sum of these requests every second as a\n CUMULATIVE metric:\n \n 1. The system starts receiving at time=t_0.\n 2. A request is received, the system measures 1 request.\n 3. A request is received, the system measures 1 request.\n 4. A request is received, the system measures 1 request.\n 5. The 1 second collection cycle ends. A metric is exported for the\n number of requests received over the interval of time t_0 to\n t_0+1 with a value of 3.\n 6. A request is received, the system measures 1 request.\n 7. A request is received, the system measures 1 request.\n 8. The 1 second collection cycle ends. A metric is exported for the\n number of requests received over the interval of time t_0 to\n t_0+2 with a value of 5.\n 9. The system experiences a fault and loses state.\n 10. The system recovers and resumes receiving at time=t_1.\n 11. A request is received, the system measures 1 request.\n 12. The 1 second collection cycle ends. A metric is exported for the\n number of requests received over the interval of time t_1 to\n t_0+1 with a value of 1.\n \n Note: Even though, when reporting changes since last report time, using\n CUMULATIVE is valid, it is not recommended. This may cause problems for\n systems that do not use start_time to determine when the aggregation\n value was reset (e.g. Prometheus). */\n EAggregationTemporality[EAggregationTemporality[\"AGGREGATION_TEMPORALITY_CUMULATIVE\"] = 2] = \"AGGREGATION_TEMPORALITY_CUMULATIVE\";\n})(EAggregationTemporality || (EAggregationTemporality = {}));\n//# sourceMappingURL=internal-types.js.map","import { ValueType } from '@opentelemetry/api';\nimport { AggregationTemporality, DataPointType, } from '@opentelemetry/sdk-metrics';\nimport { EAggregationTemporality, } from './internal-types';\nimport { getOtlpEncoder } from '../common/utils';\nimport { createInstrumentationScope, createResource, toAttributes, } from '../common/internal';\nexport function toResourceMetrics(resourceMetrics, options) {\n const encoder = getOtlpEncoder(options);\n const processedResource = createResource(resourceMetrics.resource);\n return {\n resource: processedResource,\n schemaUrl: processedResource.schemaUrl,\n scopeMetrics: toScopeMetrics(resourceMetrics.scopeMetrics, encoder),\n };\n}\nexport function toScopeMetrics(scopeMetrics, encoder) {\n return Array.from(scopeMetrics.map(metrics => ({\n scope: createInstrumentationScope(metrics.scope),\n metrics: metrics.metrics.map(metricData => toMetric(metricData, encoder)),\n schemaUrl: metrics.scope.schemaUrl,\n })));\n}\nexport function toMetric(metricData, encoder) {\n const out = {\n name: metricData.descriptor.name,\n description: metricData.descriptor.description,\n unit: metricData.descriptor.unit,\n };\n const aggregationTemporality = toAggregationTemporality(metricData.aggregationTemporality);\n switch (metricData.dataPointType) {\n case DataPointType.SUM:\n out.sum = {\n aggregationTemporality,\n isMonotonic: metricData.isMonotonic,\n dataPoints: toSingularDataPoints(metricData, encoder),\n };\n break;\n case DataPointType.GAUGE:\n out.gauge = {\n dataPoints: toSingularDataPoints(metricData, encoder),\n };\n break;\n case DataPointType.HISTOGRAM:\n out.histogram = {\n aggregationTemporality,\n dataPoints: toHistogramDataPoints(metricData, encoder),\n };\n break;\n case DataPointType.EXPONENTIAL_HISTOGRAM:\n out.exponentialHistogram = {\n aggregationTemporality,\n dataPoints: toExponentialHistogramDataPoints(metricData, encoder),\n };\n break;\n }\n return out;\n}\nfunction toSingularDataPoint(dataPoint, valueType, encoder) {\n const out = {\n attributes: toAttributes(dataPoint.attributes),\n startTimeUnixNano: encoder.encodeHrTime(dataPoint.startTime),\n timeUnixNano: encoder.encodeHrTime(dataPoint.endTime),\n };\n switch (valueType) {\n case ValueType.INT:\n out.asInt = dataPoint.value;\n break;\n case ValueType.DOUBLE:\n out.asDouble = dataPoint.value;\n break;\n }\n return out;\n}\nfunction toSingularDataPoints(metricData, encoder) {\n return metricData.dataPoints.map(dataPoint => {\n return toSingularDataPoint(dataPoint, metricData.descriptor.valueType, encoder);\n });\n}\nfunction toHistogramDataPoints(metricData, encoder) {\n return metricData.dataPoints.map(dataPoint => {\n const histogram = dataPoint.value;\n return {\n attributes: toAttributes(dataPoint.attributes),\n bucketCounts: histogram.buckets.counts,\n explicitBounds: histogram.buckets.boundaries,\n count: histogram.count,\n sum: histogram.sum,\n min: histogram.min,\n max: histogram.max,\n startTimeUnixNano: encoder.encodeHrTime(dataPoint.startTime),\n timeUnixNano: encoder.encodeHrTime(dataPoint.endTime),\n };\n });\n}\nfunction toExponentialHistogramDataPoints(metricData, encoder) {\n return metricData.dataPoints.map(dataPoint => {\n const histogram = dataPoint.value;\n return {\n attributes: toAttributes(dataPoint.attributes),\n count: histogram.count,\n min: histogram.min,\n max: histogram.max,\n sum: histogram.sum,\n positive: {\n offset: histogram.positive.offset,\n bucketCounts: histogram.positive.bucketCounts,\n },\n negative: {\n offset: histogram.negative.offset,\n bucketCounts: histogram.negative.bucketCounts,\n },\n scale: histogram.scale,\n zeroCount: histogram.zeroCount,\n startTimeUnixNano: encoder.encodeHrTime(dataPoint.startTime),\n timeUnixNano: encoder.encodeHrTime(dataPoint.endTime),\n };\n });\n}\nfunction toAggregationTemporality(temporality) {\n switch (temporality) {\n case AggregationTemporality.DELTA:\n return EAggregationTemporality.AGGREGATION_TEMPORALITY_DELTA;\n case AggregationTemporality.CUMULATIVE:\n return EAggregationTemporality.AGGREGATION_TEMPORALITY_CUMULATIVE;\n }\n}\nexport function createExportMetricsServiceRequest(resourceMetrics, options) {\n return {\n resourceMetrics: resourceMetrics.map(metrics => toResourceMetrics(metrics, options)),\n };\n}\n//# sourceMappingURL=internal.js.map","import { createInstrumentationScope, createResource, toAttributes, } from '../common/internal';\nimport { getOtlpEncoder } from '../common/utils';\n// Span flags constants matching the OTLP specification\nconst SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK = 0x100;\nconst SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK = 0x200;\n/**\n * Builds the 32-bit span flags value combining the low 8-bit W3C TraceFlags\n * with the HAS_IS_REMOTE and IS_REMOTE bits according to the OTLP spec.\n */\nfunction buildSpanFlagsFrom(traceFlags, isRemote) {\n // low 8 bits are W3C TraceFlags (e.g., sampled)\n let flags = (traceFlags & 0xff) | SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK;\n if (isRemote) {\n flags |= SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK;\n }\n return flags;\n}\nexport function sdkSpanToOtlpSpan(span, encoder) {\n const ctx = span.spanContext();\n const status = span.status;\n const parentSpanId = span.parentSpanContext?.spanId\n ? encoder.encodeSpanContext(span.parentSpanContext?.spanId)\n : undefined;\n return {\n traceId: encoder.encodeSpanContext(ctx.traceId),\n spanId: encoder.encodeSpanContext(ctx.spanId),\n parentSpanId: parentSpanId,\n traceState: ctx.traceState?.serialize(),\n name: span.name,\n // Span kind is offset by 1 because the API does not define a value for unset\n kind: span.kind == null ? 0 : span.kind + 1,\n startTimeUnixNano: encoder.encodeHrTime(span.startTime),\n endTimeUnixNano: encoder.encodeHrTime(span.endTime),\n attributes: toAttributes(span.attributes),\n droppedAttributesCount: span.droppedAttributesCount,\n events: span.events.map(event => toOtlpSpanEvent(event, encoder)),\n droppedEventsCount: span.droppedEventsCount,\n status: {\n // API and proto enums share the same values\n code: status.code,\n message: status.message,\n },\n links: span.links.map(link => toOtlpLink(link, encoder)),\n droppedLinksCount: span.droppedLinksCount,\n flags: buildSpanFlagsFrom(ctx.traceFlags, span.parentSpanContext?.isRemote),\n };\n}\nexport function toOtlpLink(link, encoder) {\n return {\n attributes: link.attributes ? toAttributes(link.attributes) : [],\n spanId: encoder.encodeSpanContext(link.context.spanId),\n traceId: encoder.encodeSpanContext(link.context.traceId),\n traceState: link.context.traceState?.serialize(),\n droppedAttributesCount: link.droppedAttributesCount || 0,\n flags: buildSpanFlagsFrom(link.context.traceFlags, link.context.isRemote),\n };\n}\nexport function toOtlpSpanEvent(timedEvent, encoder) {\n return {\n attributes: timedEvent.attributes\n ? toAttributes(timedEvent.attributes)\n : [],\n name: timedEvent.name,\n timeUnixNano: encoder.encodeHrTime(timedEvent.time),\n droppedAttributesCount: timedEvent.droppedAttributesCount || 0,\n };\n}\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function createExportTraceServiceRequest(spans, options) {\n const encoder = getOtlpEncoder(options);\n return {\n resourceSpans: spanRecordsToResourceSpans(spans, encoder),\n };\n}\nfunction createResourceMap(readableSpans) {\n const resourceMap = new Map();\n for (const record of readableSpans) {\n let ilsMap = resourceMap.get(record.resource);\n if (!ilsMap) {\n ilsMap = new Map();\n resourceMap.set(record.resource, ilsMap);\n }\n // TODO this is duplicated in basic tracer. Consolidate on a common helper in core\n const instrumentationScopeKey = `${record.instrumentationScope.name}@${record.instrumentationScope.version || ''}:${record.instrumentationScope.schemaUrl || ''}`;\n let records = ilsMap.get(instrumentationScopeKey);\n if (!records) {\n records = [];\n ilsMap.set(instrumentationScopeKey, records);\n }\n records.push(record);\n }\n return resourceMap;\n}\nfunction spanRecordsToResourceSpans(readableSpans, encoder) {\n const resourceMap = createResourceMap(readableSpans);\n const out = [];\n const entryIterator = resourceMap.entries();\n let entry = entryIterator.next();\n while (!entry.done) {\n const [resource, ilmMap] = entry.value;\n const scopeResourceSpans = [];\n const ilmIterator = ilmMap.values();\n let ilmEntry = ilmIterator.next();\n while (!ilmEntry.done) {\n const scopeSpans = ilmEntry.value;\n if (scopeSpans.length > 0) {\n const spans = scopeSpans.map(readableSpan => sdkSpanToOtlpSpan(readableSpan, encoder));\n scopeResourceSpans.push({\n scope: createInstrumentationScope(scopeSpans[0].instrumentationScope),\n spans: spans,\n schemaUrl: scopeSpans[0].instrumentationScope.schemaUrl,\n });\n }\n ilmEntry = ilmIterator.next();\n }\n const processedResource = createResource(resource);\n const transformedSpans = {\n resource: processedResource,\n scopeSpans: scopeResourceSpans,\n schemaUrl: processedResource.schemaUrl,\n };\n out.push(transformedSpans);\n entry = entryIterator.next();\n }\n return out;\n}\n//# sourceMappingURL=internal.js.map","import { createExportMetricsServiceRequest } from '../internal';\nexport const JsonMetricsSerializer = {\n serializeRequest: (arg) => {\n const request = createExportMetricsServiceRequest([arg], {\n useLongBits: false,\n });\n const encoder = new TextEncoder();\n return encoder.encode(JSON.stringify(request));\n },\n deserializeResponse: (arg) => {\n if (arg.length === 0) {\n return {};\n }\n const decoder = new TextDecoder();\n return JSON.parse(decoder.decode(arg));\n },\n};\n//# sourceMappingURL=metrics.js.map","import { createExportTraceServiceRequest } from '../internal';\nexport const JsonTraceSerializer = {\n serializeRequest: (arg) => {\n const request = createExportTraceServiceRequest(arg, {\n useHex: true,\n useLongBits: false,\n });\n const encoder = new TextEncoder();\n return encoder.encode(JSON.stringify(request));\n },\n deserializeResponse: (arg) => {\n if (arg.length === 0) {\n return {};\n }\n const decoder = new TextDecoder();\n return JSON.parse(decoder.decode(arg));\n },\n};\n//# sourceMappingURL=trace.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst MAX_ATTEMPTS = 5;\nconst INITIAL_BACKOFF = 1000;\nconst MAX_BACKOFF = 5000;\nconst BACKOFF_MULTIPLIER = 1.5;\nconst JITTER = 0.2;\n/**\n * Get a pseudo-random jitter that falls in the range of [-JITTER, +JITTER]\n */\nfunction getJitter() {\n return Math.random() * (2 * JITTER) - JITTER;\n}\nclass RetryingTransport {\n _transport;\n constructor(_transport) {\n this._transport = _transport;\n }\n retry(data, timeoutMillis, inMillis) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this._transport.send(data, timeoutMillis).then(resolve, reject);\n }, inMillis);\n });\n }\n async send(data, timeoutMillis) {\n const deadline = Date.now() + timeoutMillis;\n let result = await this._transport.send(data, timeoutMillis);\n let attempts = MAX_ATTEMPTS;\n let nextBackoff = INITIAL_BACKOFF;\n while (result.status === 'retryable' && attempts > 0) {\n attempts--;\n // use maximum of computed backoff and 0 to avoid negative timeouts\n const backoff = Math.max(Math.min(nextBackoff, MAX_BACKOFF) + getJitter(), 0);\n nextBackoff = nextBackoff * BACKOFF_MULTIPLIER;\n const retryInMillis = result.retryInMillis ?? backoff;\n // return when expected retry time is after the export deadline.\n const remainingTimeoutMillis = deadline - Date.now();\n if (retryInMillis > remainingTimeoutMillis) {\n return result;\n }\n result = await this.retry(data, remainingTimeoutMillis, retryInMillis);\n }\n return result;\n }\n shutdown() {\n return this._transport.shutdown();\n }\n}\n/**\n * Creates an Exporter Transport that retries on 'retryable' response.\n */\nexport function createRetryingTransport(options) {\n return new RetryingTransport(options.transport);\n}\n//# sourceMappingURL=retrying-transport.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function isExportRetryable(statusCode) {\n const retryCodes = [429, 502, 503, 504];\n return retryCodes.includes(statusCode);\n}\nexport function parseRetryAfterToMills(retryAfter) {\n if (retryAfter == null) {\n return undefined;\n }\n const seconds = Number.parseInt(retryAfter, 10);\n if (Number.isInteger(seconds)) {\n return seconds > 0 ? seconds * 1000 : -1;\n }\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After#directives\n const delay = new Date(retryAfter).getTime() - Date.now();\n if (delay >= 0) {\n return delay;\n }\n return 0;\n}\n//# sourceMappingURL=is-export-retryable.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nimport { isExportRetryable, parseRetryAfterToMills, } from '../is-export-retryable';\nclass XhrTransport {\n _parameters;\n constructor(_parameters) {\n this._parameters = _parameters;\n }\n async send(data, timeoutMillis) {\n const headers = await this._parameters.headers();\n const response = await new Promise(resolve => {\n const xhr = new XMLHttpRequest();\n xhr.timeout = timeoutMillis;\n xhr.open('POST', this._parameters.url);\n Object.entries(headers).forEach(([k, v]) => {\n xhr.setRequestHeader(k, v);\n });\n xhr.ontimeout = _ => {\n resolve({\n status: 'failure',\n error: new Error('XHR request timed out'),\n });\n };\n xhr.onreadystatechange = () => {\n if (xhr.status >= 200 && xhr.status <= 299) {\n diag.debug('XHR success');\n resolve({\n status: 'success',\n });\n }\n else if (xhr.status && isExportRetryable(xhr.status)) {\n resolve({\n status: 'retryable',\n retryInMillis: parseRetryAfterToMills(xhr.getResponseHeader('Retry-After')),\n });\n }\n else if (xhr.status !== 0) {\n resolve({\n status: 'failure',\n error: new Error('XHR request failed with non-retryable status'),\n });\n }\n };\n xhr.onabort = () => {\n resolve({\n status: 'failure',\n error: new Error('XHR request aborted'),\n });\n };\n xhr.onerror = () => {\n resolve({\n status: 'failure',\n error: new Error('XHR request errored'),\n });\n };\n xhr.send(data);\n });\n return response;\n }\n shutdown() {\n // Intentionally left empty, nothing to do.\n }\n}\n/**\n * @deprecated use {@link createFetchTransport} instead\n *\n * Creates an exporter transport that uses XHR to send the data\n * @param parameters applied to each request made by transport\n */\nexport function createXhrTransport(parameters) {\n return new XhrTransport(parameters);\n}\n//# sourceMappingURL=xhr-transport.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nclass SendBeaconTransport {\n _params;\n constructor(_params) {\n this._params = _params;\n }\n async send(data) {\n const blobType = (await this._params.headers())['Content-Type'];\n return new Promise(resolve => {\n if (navigator.sendBeacon(this._params.url, new Blob([data], { type: blobType }))) {\n // no way to signal retry, treat everything as success\n diag.debug('SendBeacon success');\n resolve({\n status: 'success',\n });\n }\n else {\n resolve({\n status: 'failure',\n error: new Error('SendBeacon failed'),\n });\n }\n });\n }\n shutdown() {\n // Intentionally left empty, nothing to do.\n }\n}\nexport function createSendBeaconTransport(parameters) {\n return new SendBeaconTransport(parameters);\n}\n//# sourceMappingURL=send-beacon-transport.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\nimport { isExportRetryable, parseRetryAfterToMills, } from '../is-export-retryable';\nclass FetchTransport {\n _parameters;\n constructor(_parameters) {\n this._parameters = _parameters;\n }\n async send(data, timeoutMillis) {\n const abortController = new AbortController();\n const timeout = setTimeout(() => abortController.abort(), timeoutMillis);\n try {\n const isBrowserEnvironment = !!globalThis.location;\n const url = new URL(this._parameters.url);\n const response = await fetch(url.href, {\n method: 'POST',\n headers: await this._parameters.headers(),\n body: data,\n signal: abortController.signal,\n keepalive: isBrowserEnvironment,\n mode: isBrowserEnvironment\n ? globalThis.location?.origin === url.origin\n ? 'same-origin'\n : 'cors'\n : 'no-cors',\n });\n if (response.status >= 200 && response.status <= 299) {\n diag.debug('response success');\n return { status: 'success' };\n }\n else if (isExportRetryable(response.status)) {\n const retryAfter = response.headers.get('Retry-After');\n const retryInMillis = parseRetryAfterToMills(retryAfter);\n return { status: 'retryable', retryInMillis };\n }\n return {\n status: 'failure',\n error: new Error('Fetch request failed with non-retryable status'),\n };\n }\n catch (error) {\n if (error?.name === 'AbortError') {\n return {\n status: 'failure',\n error: new Error('Fetch request timed out', { cause: error }),\n };\n }\n return {\n status: 'failure',\n error: new Error('Fetch request errored', { cause: error }),\n };\n }\n finally {\n clearTimeout(timeout);\n }\n }\n shutdown() {\n // Intentionally left empty, nothing to do.\n }\n}\n/**\n * Creates an exporter transport that uses `fetch` to send the data\n * @param parameters applied to each request made by transport\n */\nexport function createFetchTransport(parameters) {\n return new FetchTransport(parameters);\n}\n//# sourceMappingURL=fetch-transport.js.map","import { createRetryingTransport } from './retrying-transport';\nimport { createXhrTransport } from './transport/xhr-transport';\nimport { createSendBeaconTransport } from './transport/send-beacon-transport';\nimport { createOtlpNetworkExportDelegate } from './otlp-network-export-delegate';\nimport { createFetchTransport } from './transport/fetch-transport';\n/**\n * @deprecated use {@link createOtlpFetchExportDelegate}\n */\nexport function createOtlpXhrExportDelegate(options, serializer) {\n return createOtlpNetworkExportDelegate(options, serializer, createRetryingTransport({\n transport: createXhrTransport(options),\n }));\n}\nexport function createOtlpFetchExportDelegate(options, serializer) {\n return createOtlpNetworkExportDelegate(options, serializer, createRetryingTransport({\n transport: createFetchTransport(options),\n }));\n}\nexport function createOtlpSendBeaconExportDelegate(options, serializer) {\n return createOtlpNetworkExportDelegate(options, serializer, createRetryingTransport({\n transport: createSendBeaconTransport({\n url: options.url,\n headers: options.headers,\n }),\n }));\n}\n//# sourceMappingURL=otlp-browser-http-export-delegate.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag } from '@opentelemetry/api';\n/**\n * Parses headers from config leaving only those that have defined values\n * @param partialHeaders\n */\nexport function validateAndNormalizeHeaders(partialHeaders) {\n const headers = {};\n Object.entries(partialHeaders ?? {}).forEach(([key, value]) => {\n if (typeof value !== 'undefined') {\n headers[key] = String(value);\n }\n else {\n diag.warn(`Header \"${key}\" has invalid value (${value}) and will be ignored`);\n }\n });\n return headers;\n}\n//# sourceMappingURL=util.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getSharedConfigurationDefaults, mergeOtlpSharedConfigurationWithDefaults, } from './shared-configuration';\nimport { validateAndNormalizeHeaders } from '../util';\nfunction mergeHeaders(userProvidedHeaders, fallbackHeaders, defaultHeaders) {\n return async () => {\n const requiredHeaders = {\n ...(await defaultHeaders()),\n };\n const headers = {};\n // add fallback ones first\n if (fallbackHeaders != null) {\n Object.assign(headers, await fallbackHeaders());\n }\n // override with user-provided ones\n if (userProvidedHeaders != null) {\n Object.assign(headers, validateAndNormalizeHeaders(await userProvidedHeaders()));\n }\n // override required ones.\n return Object.assign(headers, requiredHeaders);\n };\n}\nfunction validateUserProvidedUrl(url) {\n if (url == null) {\n return undefined;\n }\n try {\n // NOTE: In non-browser environments, `globalThis.location` will be `undefined`.\n const base = globalThis.location?.href;\n return new URL(url, base).href;\n }\n catch {\n throw new Error(`Configuration: Could not parse user-provided export URL: '${url}'`);\n }\n}\n/**\n * @param userProvidedConfiguration Configuration options provided by the user in code.\n * @param fallbackConfiguration Fallback to use when the {@link userProvidedConfiguration} does not specify an option.\n * @param defaultConfiguration The defaults as defined by the exporter specification\n */\nexport function mergeOtlpHttpConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) {\n return {\n ...mergeOtlpSharedConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration),\n headers: mergeHeaders(userProvidedConfiguration.headers, fallbackConfiguration.headers, defaultConfiguration.headers),\n url: validateUserProvidedUrl(userProvidedConfiguration.url) ??\n fallbackConfiguration.url ??\n defaultConfiguration.url,\n };\n}\nexport function getHttpConfigurationDefaults(requiredHeaders, signalResourcePath) {\n return {\n ...getSharedConfigurationDefaults(),\n headers: async () => requiredHeaders,\n url: 'http://localhost:4318/' + signalResourcePath,\n };\n}\n//# sourceMappingURL=otlp-http-configuration.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { wrapStaticHeadersInFunction } from './shared-configuration';\nexport function convertLegacyHeaders(config) {\n if (typeof config.headers === 'function') {\n return config.headers;\n }\n return wrapStaticHeadersInFunction(config.headers);\n}\n//# sourceMappingURL=convert-legacy-http-options.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getHttpConfigurationDefaults, mergeOtlpHttpConfigurationWithDefaults, } from './otlp-http-configuration';\nimport { convertLegacyHeaders } from './convert-legacy-http-options';\n/**\n * @deprecated this will be removed in 2.0\n *\n * @param config\n * @param signalResourcePath\n * @param requiredHeaders\n */\nexport function convertLegacyBrowserHttpOptions(config, signalResourcePath, requiredHeaders) {\n return mergeOtlpHttpConfigurationWithDefaults({\n url: config.url,\n timeoutMillis: config.timeoutMillis,\n headers: convertLegacyHeaders(config),\n concurrencyLimit: config.concurrencyLimit,\n }, {}, // no fallback for browser case\n getHttpConfigurationDefaults(requiredHeaders, signalResourcePath));\n}\n//# sourceMappingURL=convert-legacy-browser-http-options.js.map","import { createOtlpFetchExportDelegate, createOtlpSendBeaconExportDelegate, createOtlpXhrExportDelegate, } from '../otlp-browser-http-export-delegate';\nimport { convertLegacyBrowserHttpOptions } from './convert-legacy-browser-http-options';\n/**\n * @deprecated\n * @param config\n * @param serializer\n * @param signalResourcePath\n * @param requiredHeaders\n */\nexport function createLegacyOtlpBrowserExportDelegate(config, serializer, signalResourcePath, requiredHeaders) {\n const createOtlpExportDelegate = inferExportDelegateToUse(config.headers);\n const options = convertLegacyBrowserHttpOptions(config, signalResourcePath, requiredHeaders);\n return createOtlpExportDelegate(options, serializer);\n}\nexport function inferExportDelegateToUse(configHeaders) {\n if (!configHeaders && typeof navigator.sendBeacon === 'function') {\n return createOtlpSendBeaconExportDelegate;\n }\n else if (typeof globalThis.fetch !== 'undefined') {\n return createOtlpFetchExportDelegate;\n }\n else {\n return createOtlpXhrExportDelegate;\n }\n}\n//# sourceMappingURL=create-legacy-browser-delegate.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { OTLPExporterBase, } from '@opentelemetry/otlp-exporter-base';\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer';\nimport { createLegacyOtlpBrowserExportDelegate } from '@opentelemetry/otlp-exporter-base/browser-http';\n/**\n * Collector Trace Exporter for Web\n */\nexport class OTLPTraceExporter extends OTLPExporterBase {\n constructor(config = {}) {\n super(createLegacyOtlpBrowserExportDelegate(config, JsonTraceSerializer, 'v1/traces', { 'Content-Type': 'application/json' }));\n }\n}\n//# sourceMappingURL=OTLPTraceExporter.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * check if an object has `addEventListener` and `removeEventListener` functions.\n * Generally only called with a `TargetWithEvents` but may be called with an `unknown` value.\n * @param obj - The object to check.\n */\nexport function isListenerObject(obj) {\n return (typeof obj === 'object' &&\n obj !== null &&\n 'addEventListener' in obj &&\n typeof obj.addEventListener === 'function' &&\n 'removeEventListener' in obj &&\n typeof obj.removeEventListener === 'function');\n}\n//# sourceMappingURL=util.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/// <reference types=\"zone.js\" />\nimport { ROOT_CONTEXT } from '@opentelemetry/api';\nimport { isListenerObject } from './util';\n/* Key name to be used to save a context reference in Zone */\nconst ZONE_CONTEXT_KEY = 'OT_ZONE_CONTEXT';\n/**\n * ZoneContextManager\n * This module provides an easy functionality for tracing action between asynchronous operations in web.\n * It was not possible with standard [StackContextManager]{@link https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-sdk-trace-web/src/StackContextManager.ts}.\n * It heavily depends on [zone.js]{@link https://www.npmjs.com/package/zone.js}.\n * It stores the information about context in zone. Each Context will have always new Zone;\n * It also supports binding a certain Span to a target that has \"addEventListener\" and \"removeEventListener\".\n * When this happens a new zone is being created and the provided Span is being assigned to this zone.\n */\nexport class ZoneContextManager {\n /**\n * whether the context manager is enabled or not\n */\n _enabled = false;\n /**\n * Helps to create a unique name for the zones - part of zone name\n */\n _zoneCounter = 0;\n /**\n * Returns the active context from certain zone name\n * @param activeZone\n */\n _activeContextFromZone(activeZone) {\n return (activeZone && activeZone.get(ZONE_CONTEXT_KEY)) || ROOT_CONTEXT;\n }\n /**\n * @param context A context (span) to be executed within target function\n * @param target Function to be executed within the context\n */\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n _bindFunction(context, target) {\n const manager = this;\n const contextWrapper = function (...args) {\n return manager.with(context, () => target.apply(this, args));\n };\n Object.defineProperty(contextWrapper, 'length', {\n enumerable: false,\n configurable: true,\n writable: false,\n value: target.length,\n });\n return contextWrapper;\n }\n /**\n * @param context A context (span) to be bind to target\n * @param obj target object on which the listeners will be patched\n */\n _bindListener(context, obj) {\n const target = obj;\n if (target.__ot_listeners !== undefined) {\n return obj;\n }\n target.__ot_listeners = {};\n if (typeof target.addEventListener === 'function') {\n target.addEventListener = this._patchAddEventListener(target, target.addEventListener, context);\n }\n if (typeof target.removeEventListener === 'function') {\n target.removeEventListener = this._patchRemoveEventListener(target, target.removeEventListener);\n }\n return obj;\n }\n /**\n * Creates a new unique zone name\n */\n _createZoneName() {\n this._zoneCounter++;\n const random = Math.random();\n return `${this._zoneCounter}-${random}`;\n }\n /**\n * Creates a new zone\n * @param zoneName zone name\n * @param context A context (span) to be bind with Zone\n */\n _createZone(zoneName, context) {\n return Zone.current.fork({\n name: zoneName,\n properties: {\n [ZONE_CONTEXT_KEY]: context,\n },\n });\n }\n /**\n * Returns the active zone\n */\n _getActiveZone() {\n return Zone.current;\n }\n /**\n * Patches addEventListener method\n * @param target any target that has \"addEventListener\" method\n * @param original reference to the patched method\n * @param [context] context to be bind to the listener\n */\n _patchAddEventListener(target, original, context) {\n const contextManager = this;\n return function (event, listener, opts) {\n if (target.__ot_listeners === undefined) {\n target.__ot_listeners = {};\n }\n let listeners = target.__ot_listeners[event];\n if (listeners === undefined) {\n listeners = new WeakMap();\n target.__ot_listeners[event] = listeners;\n }\n const patchedListener = contextManager.bind(context, listener);\n // store a weak reference of the user listener to ours\n listeners.set(listener, patchedListener);\n return original.call(this, event, patchedListener, opts);\n };\n }\n /**\n * Patches removeEventListener method\n * @param target any target that has \"removeEventListener\" method\n * @param original reference to the patched method\n */\n _patchRemoveEventListener(target, original) {\n return function (event, listener) {\n if (target.__ot_listeners === undefined ||\n target.__ot_listeners[event] === undefined) {\n return original.call(this, event, listener);\n }\n const events = target.__ot_listeners[event];\n const patchedListener = events.get(listener);\n events.delete(listener);\n return original.call(this, event, patchedListener || listener);\n };\n }\n /**\n * Returns the active context\n */\n active() {\n if (!this._enabled) {\n return ROOT_CONTEXT;\n }\n const activeZone = this._getActiveZone();\n const active = this._activeContextFromZone(activeZone);\n if (active) {\n return active;\n }\n return ROOT_CONTEXT;\n }\n /**\n * Binds a the certain context or the active one to the target function and then returns the target\n * @param context A context (span) to be bind to target\n * @param target a function or event emitter. When target or one of its callbacks is called,\n * the provided context will be used as the active context for the duration of the call.\n */\n bind(context, target) {\n // if no specific context to propagate is given, we use the current one\n if (context === undefined) {\n context = this.active();\n }\n if (typeof target === 'function') {\n return this._bindFunction(context, target);\n }\n else if (isListenerObject(target)) {\n this._bindListener(context, target);\n }\n return target;\n }\n /**\n * Disable the context manager (clears all the contexts)\n */\n disable() {\n this._enabled = false;\n return this;\n }\n /**\n * Enables the context manager and creates a default(root) context\n */\n enable() {\n this._enabled = true;\n return this;\n }\n /**\n * Calls the callback function [fn] with the provided [context].\n * If [context] is undefined then it will use the active context.\n * The context will be set as active\n * @param context A context (span) to be called with provided callback\n * @param fn Callback function\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n with(context, fn, thisArg, ...args) {\n const zoneName = this._createZoneName();\n const newZone = this._createZone(zoneName, context);\n return newZone.run(fn, thisArg, args);\n }\n}\n//# sourceMappingURL=ZoneContextManager.js.map","'use strict';\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/**\n * @license Angular v<unknown>\n * (c) 2010-2025 Google LLC. https://angular.io/\n * License: MIT\n */\n(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n})((function () {\n 'use strict';\n var global = globalThis;\n // __Zone_symbol_prefix global can be used to override the default zone\n // symbol prefix with a custom one if needed.\n function __symbol__(name) {\n var symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__';\n return symbolPrefix + name;\n }\n function initZone() {\n var performance = global['performance'];\n function mark(name) {\n performance && performance['mark'] && performance['mark'](name);\n }\n function performanceMeasure(name, label) {\n performance && performance['measure'] && performance['measure'](name, label);\n }\n mark('Zone');\n var ZoneImpl = /** @class */ (function () {\n function ZoneImpl(parent, zoneSpec) {\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '<root>';\n this._properties = (zoneSpec && zoneSpec.properties) || {};\n this._zoneDelegate = new _ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n ZoneImpl.assertZonePatched = function () {\n if (global['Promise'] !== patches['ZoneAwarePromise']) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n };\n Object.defineProperty(ZoneImpl, \"root\", {\n get: function () {\n var zone = ZoneImpl.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ZoneImpl, \"current\", {\n get: function () {\n return _currentZoneFrame.zone;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ZoneImpl, \"currentTask\", {\n get: function () {\n return _currentTask;\n },\n enumerable: false,\n configurable: true\n });\n ZoneImpl.__load_patch = function (name, fn, ignoreDuplicate) {\n if (ignoreDuplicate === void 0) { ignoreDuplicate = false; }\n if (patches.hasOwnProperty(name)) {\n // `checkDuplicate` option is defined from global variable\n // so it works for all modules.\n // `ignoreDuplicate` can work for the specified module\n var checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;\n if (!ignoreDuplicate && checkDuplicate) {\n throw Error('Already loaded patch: ' + name);\n }\n }\n else if (!global['__Zone_disable_' + name]) {\n var perfName = 'Zone:' + name;\n mark(perfName);\n patches[name] = fn(global, ZoneImpl, _api);\n performanceMeasure(perfName, perfName);\n }\n };\n Object.defineProperty(ZoneImpl.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ZoneImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: false,\n configurable: true\n });\n ZoneImpl.prototype.get = function (key) {\n var zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n };\n ZoneImpl.prototype.getZoneWith = function (key) {\n var current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n };\n ZoneImpl.prototype.fork = function (zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n };\n ZoneImpl.prototype.wrap = function (callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n var _callback = this._zoneDelegate.intercept(this, callback, source);\n var zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n };\n ZoneImpl.prototype.run = function (callback, applyThis, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n ZoneImpl.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {\n if (applyThis === void 0) { applyThis = null; }\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n ZoneImpl.prototype.runTask = function (task, applyThis, applyArgs) {\n if (task.zone != this) {\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name +\n '; Execution: ' +\n this.name +\n ')');\n }\n var zoneTask = task;\n // https://github.com/angular/zone.js/issues/778, sometimes eventTask\n // will run in notScheduled(canceled) state, we should not try to\n // run such kind of task but just return\n var type = task.type, _a = task.data, _b = _a === void 0 ? {} : _a, _c = _b.isPeriodic, isPeriodic = _c === void 0 ? false : _c, _d = _b.isRefreshable, isRefreshable = _d === void 0 ? false : _d;\n if (task.state === notScheduled && (type === eventTask || type === macroTask)) {\n return;\n }\n var reEntryGuard = task.state != running;\n reEntryGuard && zoneTask._transitionTo(running, scheduled);\n var previousTask = _currentTask;\n _currentTask = zoneTask;\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n if (type == macroTask && task.data && !isPeriodic && !isRefreshable) {\n task.cancelFn = undefined;\n }\n try {\n return this._zoneDelegate.invokeTask(this, zoneTask, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n // if the task's state is notScheduled or unknown, then it has already been cancelled\n // we should not reset the state to scheduled\n var state = task.state;\n if (state !== notScheduled && state !== unknown) {\n if (type == eventTask || isPeriodic || (isRefreshable && state === scheduling)) {\n reEntryGuard && zoneTask._transitionTo(scheduled, running, scheduling);\n }\n else {\n var zoneDelegates = zoneTask._zoneDelegates;\n this._updateTaskCount(zoneTask, -1);\n reEntryGuard && zoneTask._transitionTo(notScheduled, running, notScheduled);\n if (isRefreshable) {\n zoneTask._zoneDelegates = zoneDelegates;\n }\n }\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n };\n ZoneImpl.prototype.scheduleTask = function (task) {\n if (task.zone && task.zone !== this) {\n // check if the task was rescheduled, the newZone\n // should not be the children of the original zone\n var newZone = this;\n while (newZone) {\n if (newZone === task.zone) {\n throw Error(\"can not reschedule task to \".concat(this.name, \" which is descendants of the original zone \").concat(task.zone.name));\n }\n newZone = newZone.parent;\n }\n }\n task._transitionTo(scheduling, notScheduled);\n var zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task._zone = this;\n try {\n task = this._zoneDelegate.scheduleTask(this, task);\n }\n catch (err) {\n // should set task's state to unknown when scheduleTask throw error\n // because the err may from reschedule, so the fromState maybe notScheduled\n task._transitionTo(unknown, scheduling, notScheduled);\n // TODO: @JiaLiPassion, should we check the result from handleError?\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n };\n ZoneImpl.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));\n };\n ZoneImpl.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n };\n ZoneImpl.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n };\n ZoneImpl.prototype.cancelTask = function (task) {\n if (task.zone != this)\n throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name +\n '; Execution: ' +\n this.name +\n ')');\n if (task.state !== scheduled && task.state !== running) {\n return;\n }\n task._transitionTo(canceling, scheduled, running);\n try {\n this._zoneDelegate.cancelTask(this, task);\n }\n catch (err) {\n // if error occurs when cancelTask, transit the state to unknown\n task._transitionTo(unknown, canceling);\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = -1;\n return task;\n };\n ZoneImpl.prototype._updateTaskCount = function (task, count) {\n var zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (var i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n };\n ZoneImpl.__symbol__ = __symbol__;\n return ZoneImpl;\n }());\n var DELEGATE_ZS = {\n name: '',\n onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); },\n onScheduleTask: function (delegate, _, target, task) { return delegate.scheduleTask(target, task); },\n onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) { return delegate.invokeTask(target, task, applyThis, applyArgs); },\n onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); },\n };\n var _ZoneDelegate = /** @class */ (function () {\n function _ZoneDelegate(zone, parentDelegate, zoneSpec) {\n this._taskCounts = {\n 'microTask': 0,\n 'macroTask': 0,\n 'eventTask': 0,\n };\n this._zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone =\n zoneSpec && (zoneSpec.onFork ? this._zone : parentDelegate._forkCurrZone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this._zone : parentDelegate._interceptCurrZone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone =\n zoneSpec && (zoneSpec.onInvoke ? this._zone : parentDelegate._invokeCurrZone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt =\n zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this._zone : parentDelegate._handleErrorCurrZone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt =\n zoneSpec && (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone =\n zoneSpec && (zoneSpec.onScheduleTask ? this._zone : parentDelegate._scheduleTaskCurrZone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this._zone : parentDelegate._invokeTaskCurrZone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this._zone : parentDelegate._cancelTaskCurrZone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n var parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = this._zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this._zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this._zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this._zone;\n }\n }\n }\n Object.defineProperty(_ZoneDelegate.prototype, \"zone\", {\n get: function () {\n return this._zone;\n },\n enumerable: false,\n configurable: true\n });\n _ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {\n return this._forkZS\n ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec)\n : new ZoneImpl(targetZone, zoneSpec);\n };\n _ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {\n return this._interceptZS\n ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source)\n : callback;\n };\n _ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS\n ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source)\n : callback.apply(applyThis, applyArgs);\n };\n _ZoneDelegate.prototype.handleError = function (targetZone, error) {\n return this._handleErrorZS\n ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error)\n : true;\n };\n _ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {\n var returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n };\n _ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS\n ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs)\n : task.callback.apply(applyThis, applyArgs);\n };\n _ZoneDelegate.prototype.cancelTask = function (targetZone, task) {\n var value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n if (!task.cancelFn) {\n throw Error('Task is not cancelable');\n }\n value = task.cancelFn(task);\n }\n return value;\n };\n _ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {\n // hasTask should not throw error so other ZoneDelegate\n // can still trigger hasTask callback\n try {\n this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n }\n catch (err) {\n this.handleError(targetZone, err);\n }\n };\n _ZoneDelegate.prototype._updateTaskCount = function (type, count) {\n var counts = this._taskCounts;\n var prev = counts[type];\n var next = (counts[type] = prev + count);\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n var isEmpty = {\n microTask: counts['microTask'] > 0,\n macroTask: counts['macroTask'] > 0,\n eventTask: counts['eventTask'] > 0,\n change: type,\n };\n this.hasTask(this._zone, isEmpty);\n }\n };\n return _ZoneDelegate;\n }());\n var ZoneTask = /** @class */ (function () {\n function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) {\n this._zone = null;\n this.runCount = 0;\n this._zoneDelegates = null;\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n if (!callback) {\n throw new Error('callback is not defined');\n }\n this.callback = callback;\n var self = this;\n // TODO: @JiaLiPassion options should have interface\n if (type === eventTask && options && options.useG) {\n this.invoke = ZoneTask.invokeTask;\n }\n else {\n this.invoke = function () {\n return ZoneTask.invokeTask.call(global, self, this, arguments);\n };\n }\n }\n ZoneTask.invokeTask = function (task, target, args) {\n if (!task) {\n task = this;\n }\n _numberOfNestedTaskFrames++;\n try {\n task.runCount++;\n return task.zone.runTask(task, target, args);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n };\n Object.defineProperty(ZoneTask.prototype, \"zone\", {\n get: function () {\n return this._zone;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ZoneTask.prototype, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: false,\n configurable: true\n });\n ZoneTask.prototype.cancelScheduleRequest = function () {\n this._transitionTo(notScheduled, scheduling);\n };\n ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n throw new Error(\"\".concat(this.type, \" '\").concat(this.source, \"': can not transition to '\").concat(toState, \"', expecting state '\").concat(fromState1, \"'\").concat(fromState2 ? \" or '\" + fromState2 + \"'\" : '', \", was '\").concat(this._state, \"'.\"));\n }\n };\n ZoneTask.prototype.toString = function () {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId.toString();\n }\n else {\n return Object.prototype.toString.call(this);\n }\n };\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n ZoneTask.prototype.toJSON = function () {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n zone: this.zone.name,\n runCount: this.runCount,\n };\n };\n return ZoneTask;\n }());\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// MICROTASK QUEUE\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var symbolSetTimeout = __symbol__('setTimeout');\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var _microTaskQueue = [];\n var _isDrainingMicrotaskQueue = false;\n var nativeMicroTaskQueuePromise;\n function nativeScheduleMicroTask(func) {\n if (!nativeMicroTaskQueuePromise) {\n if (global[symbolPromise]) {\n nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);\n }\n }\n if (nativeMicroTaskQueuePromise) {\n var nativeThen = nativeMicroTaskQueuePromise[symbolThen];\n if (!nativeThen) {\n // native Promise is not patchable, we need to use `then` directly\n // issue 1078\n nativeThen = nativeMicroTaskQueuePromise['then'];\n }\n nativeThen.call(nativeMicroTaskQueuePromise, func);\n }\n else {\n global[symbolSetTimeout](func, 0);\n }\n }\n function scheduleMicroTask(task) {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n nativeScheduleMicroTask(drainMicroTaskQueue);\n }\n task && _microTaskQueue.push(task);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n var queue = _microTaskQueue;\n _microTaskQueue = [];\n for (var i = 0; i < queue.length; i++) {\n var task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n _api.onUnhandledError(error);\n }\n }\n }\n _api.microtaskDrainDone();\n _isDrainingMicrotaskQueue = false;\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// BOOTSTRAP\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var NO_ZONE = { name: 'NO ZONE' };\n var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';\n var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n var patches = {};\n var _api = {\n symbol: __symbol__,\n currentZoneFrame: function () { return _currentZoneFrame; },\n onUnhandledError: noop,\n microtaskDrainDone: noop,\n scheduleMicroTask: scheduleMicroTask,\n showUncaughtError: function () { return !ZoneImpl[__symbol__('ignoreConsoleErrorUncaughtError')]; },\n patchEventTarget: function () { return []; },\n patchOnProperties: noop,\n patchMethod: function () { return noop; },\n bindArguments: function () { return []; },\n patchThen: function () { return noop; },\n patchMacroTask: function () { return noop; },\n patchEventPrototype: function () { return noop; },\n isIEOrEdge: function () { return false; },\n getGlobalObjects: function () { return undefined; },\n ObjectDefineProperty: function () { return noop; },\n ObjectGetOwnPropertyDescriptor: function () { return undefined; },\n ObjectCreate: function () { return undefined; },\n ArraySlice: function () { return []; },\n patchClass: function () { return noop; },\n wrapWithCurrentZone: function () { return noop; },\n filterProperties: function () { return []; },\n attachOriginToPatched: function () { return noop; },\n _redefineProperty: function () { return noop; },\n patchCallbacks: function () { return noop; },\n nativeScheduleMicroTask: nativeScheduleMicroTask,\n };\n var _currentZoneFrame = { parent: null, zone: new ZoneImpl(null, null) };\n var _currentTask = null;\n var _numberOfNestedTaskFrames = 0;\n function noop() { }\n performanceMeasure('Zone', 'Zone');\n return ZoneImpl;\n }\n function loadZone() {\n var _a;\n // if global['Zone'] already exists (maybe zone.js was already loaded or\n // some other lib also registered a global object named Zone), we may need\n // to throw an error, but sometimes user may not want this error.\n // For example,\n // we have two web pages, page1 includes zone.js, page2 doesn't.\n // and the 1st time user load page1 and page2, everything work fine,\n // but when user load page2 again, error occurs because global['Zone'] already exists.\n // so we add a flag to let user choose whether to throw this error or not.\n // By default, if existing Zone is from zone.js, we will not throw the error.\n var global = globalThis;\n var checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;\n if (global['Zone'] && (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function')) {\n throw new Error('Zone already loaded.');\n }\n // Initialize global `Zone` constant.\n (_a = global['Zone']) !== null && _a !== void 0 ? _a : (global['Zone'] = initZone());\n return global['Zone'];\n }\n /**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars,globalThis,missingRequire}\n */\n /// <reference types=\"node\"/>\n // issue #989, to reduce bundle size, use short name\n /** Object.getOwnPropertyDescriptor */\n var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n /** Object.defineProperty */\n var ObjectDefineProperty = Object.defineProperty;\n /** Object.getPrototypeOf */\n var ObjectGetPrototypeOf = Object.getPrototypeOf;\n /** Object.create */\n var ObjectCreate = Object.create;\n /** Array.prototype.slice */\n var ArraySlice = Array.prototype.slice;\n /** addEventListener string const */\n var ADD_EVENT_LISTENER_STR = 'addEventListener';\n /** removeEventListener string const */\n var REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\n /** zoneSymbol addEventListener */\n var ZONE_SYMBOL_ADD_EVENT_LISTENER = __symbol__(ADD_EVENT_LISTENER_STR);\n /** zoneSymbol removeEventListener */\n var ZONE_SYMBOL_REMOVE_EVENT_LISTENER = __symbol__(REMOVE_EVENT_LISTENER_STR);\n /** true string const */\n var TRUE_STR = 'true';\n /** false string const */\n var FALSE_STR = 'false';\n /** Zone symbol prefix string const. */\n var ZONE_SYMBOL_PREFIX = __symbol__('');\n function wrapWithCurrentZone(callback, source) {\n return Zone.current.wrap(callback, source);\n }\n function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {\n return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);\n }\n var zoneSymbol = __symbol__;\n var isWindowExists = typeof window !== 'undefined';\n var internalWindow = isWindowExists ? window : undefined;\n var _global = (isWindowExists && internalWindow) || globalThis;\n var REMOVE_ATTRIBUTE = 'removeAttribute';\n function bindArguments(args, source) {\n for (var i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = wrapWithCurrentZone(args[i], source + '_' + i);\n }\n }\n return args;\n }\n function patchPrototype(prototype, fnNames) {\n var source = prototype.constructor['name'];\n var _loop_1 = function (i) {\n var name_1 = fnNames[i];\n var delegate = prototype[name_1];\n if (delegate) {\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1);\n if (!isPropertyWritable(prototypeDesc)) {\n return \"continue\";\n }\n prototype[name_1] = (function (delegate) {\n var patched = function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));\n };\n attachOriginToPatched(patched, delegate);\n return patched;\n })(delegate);\n }\n };\n for (var i = 0; i < fnNames.length; i++) {\n _loop_1(i);\n }\n }\n function isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n if (propertyDesc.writable === false) {\n return false;\n }\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n }\n var isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n // this code.\n var isNode = !('nw' in _global) &&\n typeof _global.process !== 'undefined' &&\n _global.process.toString() === '[object process]';\n var isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);\n // we are in electron of nw, so we are both browser and nodejs\n // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n // this code.\n var isMix = typeof _global.process !== 'undefined' &&\n _global.process.toString() === '[object process]' &&\n !isWebWorker &&\n !!(isWindowExists && internalWindow['HTMLElement']);\n var zoneSymbolEventNames$1 = {};\n var enableBeforeunloadSymbol = zoneSymbol('enable_beforeunload');\n var wrapFn = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n var eventNameSymbol = zoneSymbolEventNames$1[event.type];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames$1[event.type] = zoneSymbol('ON_PROPERTY' + event.type);\n }\n var target = this || event.target || _global;\n var listener = target[eventNameSymbol];\n var result;\n if (isBrowser && target === internalWindow && event.type === 'error') {\n // window.onerror have different signature\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror\n // and onerror callback will prevent default when callback return true\n var errorEvent = event;\n result =\n listener &&\n listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);\n if (result === true) {\n event.preventDefault();\n }\n }\n else {\n result = listener && listener.apply(this, arguments);\n if (\n // https://github.com/angular/angular/issues/47579\n // https://www.w3.org/TR/2011/WD-html5-20110525/history.html#beforeunloadevent\n // This is the only specific case we should check for. The spec defines that the\n // `returnValue` attribute represents the message to show the user. When the event\n // is created, this attribute must be set to the empty string.\n event.type === 'beforeunload' &&\n // To prevent any breaking changes resulting from this change, given that\n // it was already causing a significant number of failures in G3, we have hidden\n // that behavior behind a global configuration flag. Consumers can enable this\n // flag explicitly if they want the `beforeunload` event to be handled as defined\n // in the specification.\n _global[enableBeforeunloadSymbol] &&\n // The IDL event definition is `attribute DOMString returnValue`, so we check whether\n // `typeof result` is a string.\n typeof result === 'string') {\n event.returnValue = result;\n }\n else if (result != undefined && !result) {\n event.preventDefault();\n }\n }\n return result;\n };\n function patchProperty(obj, prop, prototype) {\n var desc = ObjectGetOwnPropertyDescriptor(obj, prop);\n if (!desc && prototype) {\n // when patch window object, use prototype to check prop exist or not\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);\n if (prototypeDesc) {\n desc = { enumerable: true, configurable: true };\n }\n }\n // if the descriptor not exists or is not configurable\n // just return\n if (!desc || !desc.configurable) {\n return;\n }\n var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');\n if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {\n return;\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n var originalDescGet = desc.get;\n var originalDescSet = desc.set;\n // slice(2) cuz 'onclick' -> 'click', etc\n var eventName = prop.slice(2);\n var eventNameSymbol = zoneSymbolEventNames$1[eventName];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames$1[eventName] = zoneSymbol('ON_PROPERTY' + eventName);\n }\n desc.set = function (newValue) {\n // In some versions of Windows, the `this` context may be undefined\n // in on-property callbacks.\n // To handle this edge case, we check if `this` is falsy and\n // fallback to `_global` if needed.\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return;\n }\n var previousValue = target[eventNameSymbol];\n if (typeof previousValue === 'function') {\n target.removeEventListener(eventName, wrapFn);\n }\n // https://github.com/angular/zone.js/issues/978\n // If an inline handler (like `onload`) was defined before zone.js was loaded,\n // call the original descriptor's setter to clean it up.\n originalDescSet === null || originalDescSet === void 0 ? void 0 : originalDescSet.call(target, null);\n target[eventNameSymbol] = newValue;\n if (typeof newValue === 'function') {\n target.addEventListener(eventName, wrapFn, false);\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return null;\n }\n var listener = target[eventNameSymbol];\n if (listener) {\n return listener;\n }\n else if (originalDescGet) {\n // result will be null when use inline event attribute,\n // such as <button onclick=\"func();\">OK</button>\n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n var value = originalDescGet.call(this);\n if (value) {\n desc.set.call(this, value);\n if (typeof target[REMOVE_ATTRIBUTE] === 'function') {\n target.removeAttribute(prop);\n }\n return value;\n }\n }\n return null;\n };\n ObjectDefineProperty(obj, prop, desc);\n obj[onPropPatchedSymbol] = true;\n }\n function patchOnProperties(obj, properties, prototype) {\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i], prototype);\n }\n }\n else {\n var onProperties = [];\n for (var prop in obj) {\n if (prop.slice(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (var j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j], prototype);\n }\n }\n }\n var originalInstanceKey = zoneSymbol('originalInstance');\n // wrap some native API on `window`\n function patchClass(className) {\n var OriginalClass = _global[className];\n if (!OriginalClass)\n return;\n // keep original class in global\n _global[zoneSymbol(className)] = OriginalClass;\n _global[className] = function () {\n var a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n // attach original delegate to patched function\n attachOriginToPatched(_global[className], OriginalClass);\n var instance = new OriginalClass(function () { });\n var prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n ObjectDefineProperty(_global[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);\n // keep callback in wrapped function so we can\n // use it in Function.prototype.toString to return\n // the native one.\n attachOriginToPatched(this[originalInstanceKey][prop], fn);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () {\n return this[originalInstanceKey][prop];\n },\n });\n }\n })(prop);\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global[className][prop] = OriginalClass[prop];\n }\n }\n }\n function patchMethod(target, name, patchFn) {\n var proto = target;\n while (proto && !proto.hasOwnProperty(name)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n var delegateName = zoneSymbol(name);\n var delegate = null;\n if (proto && (!(delegate = proto[delegateName]) || !proto.hasOwnProperty(delegateName))) {\n delegate = proto[delegateName] = proto[name];\n // check whether proto[name] is writable\n // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob\n var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);\n if (isPropertyWritable(desc)) {\n var patchDelegate_1 = patchFn(delegate, delegateName, name);\n proto[name] = function () {\n return patchDelegate_1(this, arguments);\n };\n attachOriginToPatched(proto[name], delegate);\n }\n }\n return delegate;\n }\n // TODO: @JiaLiPassion, support cancel task later if necessary\n function patchMacroTask(obj, funcName, metaCreator) {\n var setNative = null;\n function scheduleTask(task) {\n var data = task.data;\n data.args[data.cbIdx] = function () {\n task.invoke.apply(this, arguments);\n };\n setNative.apply(data.target, data.args);\n return task;\n }\n setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) {\n var meta = metaCreator(self, args);\n if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {\n return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(self, args);\n }\n }; });\n }\n function attachOriginToPatched(patched, original) {\n patched[zoneSymbol('OriginalDelegate')] = original;\n }\n var isDetectedIEOrEdge = false;\n var ieOrEdge = false;\n function isIEOrEdge() {\n if (isDetectedIEOrEdge) {\n return ieOrEdge;\n }\n isDetectedIEOrEdge = true;\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {\n ieOrEdge = true;\n }\n }\n catch (error) { }\n return ieOrEdge;\n }\n function isFunction(value) {\n return typeof value === 'function';\n }\n function isNumber(value) {\n return typeof value === 'number';\n }\n /**\n * @fileoverview\n * @suppress {missingRequire}\n */\n // an identifier to tell ZoneTask do not create a new invoke closure\n var OPTIMIZED_ZONE_EVENT_TASK_DATA = {\n useG: true,\n };\n var zoneSymbolEventNames = {};\n var globalSources = {};\n var EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\\\w+)(true|false)$');\n var IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped');\n function prepareEventNames(eventName, eventNameToString) {\n var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;\n var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n }\n function patchEventTarget(_global, api, apis, patchOptions) {\n var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;\n var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;\n var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';\n var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';\n var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);\n var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';\n var PREPEND_EVENT_LISTENER = 'prependListener';\n var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';\n var invokeTask = function (task, target, event) {\n // for better performance, check isRemoved which is set\n // by removeEventListener\n if (task.isRemoved) {\n return;\n }\n var delegate = task.callback;\n if (typeof delegate === 'object' && delegate.handleEvent) {\n // create the bind version of handleEvent when invoke\n task.callback = function (event) { return delegate.handleEvent(event); };\n task.originalDelegate = delegate;\n }\n // invoke static task.invoke\n // need to try/catch error here, otherwise, the error in one event listener\n // will break the executions of the other event listeners. Also error will\n // not remove the event listener when `once` options is true.\n var error;\n try {\n task.invoke(task, target, [event]);\n }\n catch (err) {\n error = err;\n }\n var options = task.options;\n if (options && typeof options === 'object' && options.once) {\n // if options.once is true, after invoke once remove listener here\n // only browser need to do this, nodejs eventEmitter will cal removeListener\n // inside EventEmitter.once\n var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback;\n target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options);\n }\n return error;\n };\n function globalCallback(context, event, isCapture) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = context || event.target || _global;\n var tasks = target[zoneSymbolEventNames[event.type][isCapture ? TRUE_STR : FALSE_STR]];\n if (tasks) {\n var errors = [];\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n var err = invokeTask(tasks[0], target, event);\n err && errors.push(err);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n var err = invokeTask(copyTasks[i], target, event);\n err && errors.push(err);\n }\n }\n // Since there is only one error, we don't need to schedule microTask\n // to throw the error.\n if (errors.length === 1) {\n throw errors[0];\n }\n else {\n var _loop_2 = function (i) {\n var err = errors[i];\n api.nativeScheduleMicroTask(function () {\n throw err;\n });\n };\n for (var i = 0; i < errors.length; i++) {\n _loop_2(i);\n }\n }\n }\n }\n // global shared zoneAwareCallback to handle all event callback with capture = false\n var globalZoneAwareCallback = function (event) {\n return globalCallback(this, event, false);\n };\n // global shared zoneAwareCallback to handle all event callback with capture = true\n var globalZoneAwareCaptureCallback = function (event) {\n return globalCallback(this, event, true);\n };\n function patchEventTargetMethods(obj, patchOptions) {\n if (!obj) {\n return false;\n }\n var useGlobalCallback = true;\n if (patchOptions && patchOptions.useG !== undefined) {\n useGlobalCallback = patchOptions.useG;\n }\n var validateHandler = patchOptions && patchOptions.vh;\n var checkDuplicate = true;\n if (patchOptions && patchOptions.chkDup !== undefined) {\n checkDuplicate = patchOptions.chkDup;\n }\n var returnTarget = false;\n if (patchOptions && patchOptions.rt !== undefined) {\n returnTarget = patchOptions.rt;\n }\n var proto = obj;\n while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && obj[ADD_EVENT_LISTENER]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = obj;\n }\n if (!proto) {\n return false;\n }\n if (proto[zoneSymbolAddEventListener]) {\n return false;\n }\n var eventNameToString = patchOptions && patchOptions.eventNameToString;\n // We use a shared global `taskData` to pass data for `scheduleEventTask`,\n // eliminating the need to create a new object solely for passing data.\n // WARNING: This object has a static lifetime, meaning it is not created\n // each time `addEventListener` is called. It is instantiated only once\n // and captured by reference inside the `addEventListener` and\n // `removeEventListener` functions. Do not add any new properties to this\n // object, as doing so would necessitate maintaining the information\n // between `addEventListener` calls.\n var taskData = {};\n var nativeAddEventListener = (proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]);\n var nativeRemoveEventListener = (proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =\n proto[REMOVE_EVENT_LISTENER]);\n var nativeListeners = (proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =\n proto[LISTENERS_EVENT_LISTENER]);\n var nativeRemoveAllListeners = (proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]);\n var nativePrependEventListener;\n if (patchOptions && patchOptions.prepend) {\n nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =\n proto[patchOptions.prepend];\n }\n /**\n * This util function will build an option object with passive option\n * to handle all possible input from the user.\n */\n function buildEventListenerOptions(options, passive) {\n if (!passive) {\n return options;\n }\n if (typeof options === 'boolean') {\n return { capture: options, passive: true };\n }\n if (!options) {\n return { passive: true };\n }\n if (typeof options === 'object' && options.passive !== false) {\n return __assign(__assign({}, options), { passive: true });\n }\n return options;\n }\n var customScheduleGlobal = function (task) {\n // if there is already a task for the eventName + capture,\n // just return, because we use the shared globalZoneAwareCallback here.\n if (taskData.isExisting) {\n return;\n }\n return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);\n };\n /**\n * In the context of events and listeners, this function will be\n * called at the end by `cancelTask`, which, in turn, calls `task.cancelFn`.\n * Cancelling a task is primarily used to remove event listeners from\n * the task target.\n */\n var customCancelGlobal = function (task) {\n // if task is not marked as isRemoved, this call is directly\n // from Zone.prototype.cancelTask, we should remove the task\n // from tasksList of target first\n if (!task.isRemoved) {\n var symbolEventNames = zoneSymbolEventNames[task.eventName];\n var symbolEventName = void 0;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && task.target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (existingTask === task) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n task.isRemoved = true;\n if (task.removeAbortListener) {\n task.removeAbortListener();\n task.removeAbortListener = null;\n }\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n task.allRemoved = true;\n task.target[symbolEventName] = null;\n }\n break;\n }\n }\n }\n }\n // if all tasks for the eventName + capture have gone,\n // we will really remove the global event callback,\n // if not, return\n if (!task.allRemoved) {\n return;\n }\n return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);\n };\n var customScheduleNonGlobal = function (task) {\n return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customSchedulePrepend = function (task) {\n return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customCancelNonGlobal = function (task) {\n return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);\n };\n var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;\n var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;\n var compareTaskCallbackVsDelegate = function (task, delegate) {\n var typeOfDelegate = typeof delegate;\n return ((typeOfDelegate === 'function' && task.callback === delegate) ||\n (typeOfDelegate === 'object' && task.originalDelegate === delegate));\n };\n var compare = (patchOptions === null || patchOptions === void 0 ? void 0 : patchOptions.diff) || compareTaskCallbackVsDelegate;\n var unpatchedEvents = Zone[zoneSymbol('UNPATCHED_EVENTS')];\n var passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')];\n function copyEventListenerOptions(options) {\n if (typeof options === 'object' && options !== null) {\n // We need to destructure the target `options` object since it may\n // be frozen or sealed (possibly provided implicitly by a third-party\n // library), or its properties may be readonly.\n var newOptions = __assign({}, options);\n // The `signal` option was recently introduced, which caused regressions in\n // third-party scenarios where `AbortController` was directly provided to\n // `addEventListener` as options. For instance, in cases like\n // `document.addEventListener('keydown', callback, abortControllerInstance)`,\n // which is valid because `AbortController` includes a `signal` getter, spreading\n // `{...options}` wouldn't copy the `signal`. Additionally, using `Object.create`\n // isn't feasible since `AbortController` is a built-in object type, and attempting\n // to create a new object directly with it as the prototype might result in\n // unexpected behavior.\n if (options.signal) {\n newOptions.signal = options.signal;\n }\n return newOptions;\n }\n return options;\n }\n var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) {\n if (returnTarget === void 0) { returnTarget = false; }\n if (prepend === void 0) { prepend = false; }\n return function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var delegate = arguments[1];\n if (!delegate) {\n return nativeListener.apply(this, arguments);\n }\n if (isNode && eventName === 'uncaughtException') {\n // don't patch uncaughtException of nodejs to prevent endless loop\n return nativeListener.apply(this, arguments);\n }\n // To improve `addEventListener` performance, we will create the callback\n // for the task later when the task is invoked.\n var isEventListenerObject = false;\n if (typeof delegate !== 'function') {\n // This checks whether the provided listener argument is an object with\n // a `handleEvent` method (since we can call `addEventListener` with a\n // function `event => ...` or with an object `{ handleEvent: event => ... }`).\n if (!delegate.handleEvent) {\n return nativeListener.apply(this, arguments);\n }\n isEventListenerObject = true;\n }\n if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {\n return;\n }\n var passive = !!passiveEvents && passiveEvents.indexOf(eventName) !== -1;\n var options = copyEventListenerOptions(buildEventListenerOptions(arguments[2], passive));\n var signal = options === null || options === void 0 ? void 0 : options.signal;\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n // the signal is an aborted one, just return without attaching the event listener.\n return;\n }\n if (unpatchedEvents) {\n // check unpatched list\n for (var i = 0; i < unpatchedEvents.length; i++) {\n if (eventName === unpatchedEvents[i]) {\n if (passive) {\n return nativeListener.call(target, eventName, delegate, options);\n }\n else {\n return nativeListener.apply(this, arguments);\n }\n }\n }\n }\n var capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n var once = options && typeof options === 'object' ? options.once : false;\n var zone = Zone.current;\n var symbolEventNames = zoneSymbolEventNames[eventName];\n if (!symbolEventNames) {\n prepareEventNames(eventName, eventNameToString);\n symbolEventNames = zoneSymbolEventNames[eventName];\n }\n var symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n var existingTasks = target[symbolEventName];\n var isExisting = false;\n if (existingTasks) {\n // already have task registered\n isExisting = true;\n if (checkDuplicate) {\n for (var i = 0; i < existingTasks.length; i++) {\n if (compare(existingTasks[i], delegate)) {\n // same callback, same capture, same event name, just return\n return;\n }\n }\n }\n }\n else {\n existingTasks = target[symbolEventName] = [];\n }\n var source;\n var constructorName = target.constructor['name'];\n var targetSource = globalSources[constructorName];\n if (targetSource) {\n source = targetSource[eventName];\n }\n if (!source) {\n source =\n constructorName +\n addSource +\n (eventNameToString ? eventNameToString(eventName) : eventName);\n }\n // In the code below, `options` should no longer be reassigned; instead, it\n // should only be mutated. This is because we pass that object to the native\n // `addEventListener`.\n // It's generally recommended to use the same object reference for options.\n // This ensures consistency and avoids potential issues.\n taskData.options = options;\n if (once) {\n // When using `addEventListener` with the `once` option, we don't pass\n // the `once` option directly to the native `addEventListener` method.\n // Instead, we keep the `once` setting and handle it ourselves.\n taskData.options.once = false;\n }\n taskData.target = target;\n taskData.capture = capture;\n taskData.eventName = eventName;\n taskData.isExisting = isExisting;\n var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;\n // keep taskData into data to allow onScheduleEventTask to access the task information\n if (data) {\n data.taskData = taskData;\n }\n if (signal) {\n // When using `addEventListener` with the `signal` option, we don't pass\n // the `signal` option directly to the native `addEventListener` method.\n // Instead, we keep the `signal` setting and handle it ourselves.\n taskData.options.signal = undefined;\n }\n // The `scheduleEventTask` function will ultimately call `customScheduleGlobal`,\n // which in turn calls the native `addEventListener`. This is why `taskData.options`\n // is updated before scheduling the task, as `customScheduleGlobal` uses\n // `taskData.options` to pass it to the native `addEventListener`.\n var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);\n if (signal) {\n // after task is scheduled, we need to store the signal back to task.options\n taskData.options.signal = signal;\n // Wrapping `task` in a weak reference would not prevent memory leaks. Weak references are\n // primarily used for preventing strong references cycles. `onAbort` is always reachable\n // as it's an event listener, so its closure retains a strong reference to the `task`.\n var onAbort_1 = function () { return task.zone.cancelTask(task); };\n nativeListener.call(signal, 'abort', onAbort_1, { once: true });\n // We need to remove the `abort` listener when the event listener is going to be removed,\n // as it creates a closure that captures `task`. This closure retains a reference to the\n // `task` object even after it goes out of scope, preventing `task` from being garbage\n // collected.\n task.removeAbortListener = function () { return signal.removeEventListener('abort', onAbort_1); };\n }\n // should clear taskData.target to avoid memory leak\n // issue, https://github.com/angular/angular/issues/20442\n taskData.target = null;\n // need to clear up taskData because it is a global object\n if (data) {\n data.taskData = null;\n }\n // have to save those information to task in case\n // application may call task.zone.cancelTask() directly\n if (once) {\n taskData.options.once = true;\n }\n if (typeof task.options !== 'boolean') {\n // We should save the options on the task (if it's an object) because\n // we'll be using `task.options` later when removing the event listener\n // and passing it back to `removeEventListener`.\n task.options = options;\n }\n task.target = target;\n task.capture = capture;\n task.eventName = eventName;\n if (isEventListenerObject) {\n // save original delegate for compare to check duplicate\n task.originalDelegate = delegate;\n }\n if (!prepend) {\n existingTasks.push(task);\n }\n else {\n existingTasks.unshift(task);\n }\n if (returnTarget) {\n return target;\n }\n };\n };\n proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);\n if (nativePrependEventListener) {\n proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);\n }\n proto[REMOVE_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var options = arguments[2];\n var capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n var delegate = arguments[1];\n if (!delegate) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (validateHandler &&\n !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {\n return;\n }\n var symbolEventNames = zoneSymbolEventNames[eventName];\n var symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && target[symbolEventName];\n // `existingTasks` may not exist if the `addEventListener` was called before\n // it was patched by zone.js. Please refer to the attached issue for\n // clarification, particularly after the `if` condition, before calling\n // the native `removeEventListener`.\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (compare(existingTask, delegate)) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n existingTask.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n existingTask.allRemoved = true;\n target[symbolEventName] = null;\n // in the target, we have an event listener which is added by on_property\n // such as target.onclick = function() {}, so we need to clear this internal\n // property too if all delegates with capture=false were removed\n // https:// github.com/angular/angular/issues/31643\n // https://github.com/angular/angular/issues/54581\n if (!capture && typeof eventName === 'string') {\n var onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName;\n target[onPropertySymbol] = null;\n }\n }\n // In all other conditions, when `addEventListener` is called after being\n // patched by zone.js, we would always find an event task on the `EventTarget`.\n // This will trigger `cancelFn` on the `existingTask`, leading to `customCancelGlobal`,\n // which ultimately removes an event listener and cleans up the abort listener\n // (if an `AbortSignal` was provided when scheduling a task).\n existingTask.zone.cancelTask(existingTask);\n if (returnTarget) {\n return target;\n }\n return;\n }\n }\n }\n // https://github.com/angular/zone.js/issues/930\n // We may encounter a situation where the `addEventListener` was\n // called on the event target before zone.js is loaded, resulting\n // in no task being stored on the event target due to its invocation\n // of the native implementation. In this scenario, we simply need to\n // invoke the native `removeEventListener`.\n return nativeRemoveEventListener.apply(this, arguments);\n };\n proto[LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var listeners = [];\n var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n listeners.push(delegate);\n }\n return listeners;\n };\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (!eventName) {\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n var prop = keys[i];\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n // in nodejs EventEmitter, removeListener event is\n // used for monitoring the removeListener call,\n // so just keep removeListener eventListener until\n // all other eventListeners are removed\n if (evtName && evtName !== 'removeListener') {\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);\n }\n }\n // remove removeListener listener finally\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');\n }\n else {\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n var symbolEventNames = zoneSymbolEventNames[eventName];\n if (symbolEventNames) {\n var symbolEventName = symbolEventNames[FALSE_STR];\n var symbolCaptureEventName = symbolEventNames[TRUE_STR];\n var tasks = target[symbolEventName];\n var captureTasks = target[symbolCaptureEventName];\n if (tasks) {\n var removeTasks = tasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n if (captureTasks) {\n var removeTasks = captureTasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n }\n }\n if (returnTarget) {\n return this;\n }\n };\n // for native toString patch\n attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);\n attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);\n if (nativeRemoveAllListeners) {\n attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);\n }\n if (nativeListeners) {\n attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);\n }\n return true;\n }\n var results = [];\n for (var i = 0; i < apis.length; i++) {\n results[i] = patchEventTargetMethods(apis[i], patchOptions);\n }\n return results;\n }\n function findEventTasks(target, eventName) {\n if (!eventName) {\n var foundTasks = [];\n for (var prop in target) {\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n if (evtName && (!eventName || evtName === eventName)) {\n var tasks = target[prop];\n if (tasks) {\n for (var i = 0; i < tasks.length; i++) {\n foundTasks.push(tasks[i]);\n }\n }\n }\n }\n return foundTasks;\n }\n var symbolEventName = zoneSymbolEventNames[eventName];\n if (!symbolEventName) {\n prepareEventNames(eventName);\n symbolEventName = zoneSymbolEventNames[eventName];\n }\n var captureFalseTasks = target[symbolEventName[FALSE_STR]];\n var captureTrueTasks = target[symbolEventName[TRUE_STR]];\n if (!captureFalseTasks) {\n return captureTrueTasks ? captureTrueTasks.slice() : [];\n }\n else {\n return captureTrueTasks\n ? captureFalseTasks.concat(captureTrueTasks)\n : captureFalseTasks.slice();\n }\n }\n function patchEventPrototype(global, api) {\n var Event = global['Event'];\n if (Event && Event.prototype) {\n api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) {\n self[IMMEDIATE_PROPAGATION_SYMBOL] = true;\n // we need to call the native stopImmediatePropagation\n // in case in some hybrid application, some part of\n // application will be controlled by zone, some are not\n delegate && delegate.apply(self, args);\n }; });\n }\n }\n /**\n * @fileoverview\n * @suppress {missingRequire}\n */\n function patchQueueMicrotask(global, api) {\n api.patchMethod(global, 'queueMicrotask', function (delegate) {\n return function (self, args) {\n Zone.current.scheduleMicroTask('queueMicrotask', args[0]);\n };\n });\n }\n /**\n * @fileoverview\n * @suppress {missingRequire}\n */\n var taskSymbol = zoneSymbol('zoneTask');\n function patchTimer(window, setName, cancelName, nameSuffix) {\n var setNative = null;\n var clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n var tasksByHandleId = {};\n function scheduleTask(task) {\n var data = task.data;\n data.args[0] = function () {\n return task.invoke.apply(this, arguments);\n };\n var handleOrId = setNative.apply(window, data.args);\n // Whlist on Node.js when get can the ID by using `[Symbol.toPrimitive]()` we do\n // to this so that we do not cause potentally leaks when using `setTimeout`\n // since this can be periodic when using `.refresh`.\n if (isNumber(handleOrId)) {\n data.handleId = handleOrId;\n }\n else {\n data.handle = handleOrId;\n // On Node.js a timeout and interval can be restarted over and over again by using the `.refresh` method.\n data.isRefreshable = isFunction(handleOrId.refresh);\n }\n return task;\n }\n function clearTask(task) {\n var _a = task.data, handle = _a.handle, handleId = _a.handleId;\n return clearNative.call(window, handle !== null && handle !== void 0 ? handle : handleId);\n }\n setNative = patchMethod(window, setName, function (delegate) { return function (self, args) {\n var _a;\n if (isFunction(args[0])) {\n var options_1 = {\n isRefreshable: false,\n isPeriodic: nameSuffix === 'Interval',\n delay: nameSuffix === 'Timeout' || nameSuffix === 'Interval' ? args[1] || 0 : undefined,\n args: args,\n };\n var callback_1 = args[0];\n args[0] = function timer() {\n try {\n return callback_1.apply(this, arguments);\n }\n finally {\n // issue-934, task will be cancelled\n // even it is a periodic task such as\n // setInterval\n // https://github.com/angular/angular/issues/40387\n // Cleanup tasksByHandleId should be handled before scheduleTask\n // Since some zoneSpec may intercept and doesn't trigger\n // scheduleFn(scheduleTask) provided here.\n var handle_1 = options_1.handle, handleId_1 = options_1.handleId, isPeriodic_1 = options_1.isPeriodic, isRefreshable_1 = options_1.isRefreshable;\n if (!isPeriodic_1 && !isRefreshable_1) {\n if (handleId_1) {\n // in non-nodejs env, we remove timerId\n // from local cache\n delete tasksByHandleId[handleId_1];\n }\n else if (handle_1) {\n // Node returns complex objects as handleIds\n // we remove task reference from timer object\n handle_1[taskSymbol] = null;\n }\n }\n }\n };\n var task_1 = scheduleMacroTaskWithCurrentZone(setName, args[0], options_1, scheduleTask, clearTask);\n if (!task_1) {\n return task_1;\n }\n // Node.js must additionally support the ref and unref functions.\n var _b = task_1.data, handleId = _b.handleId, handle = _b.handle, isRefreshable = _b.isRefreshable, isPeriodic = _b.isPeriodic;\n if (handleId) {\n // for non nodejs env, we save handleId: task\n // mapping in local cache for clearTimeout\n tasksByHandleId[handleId] = task_1;\n }\n else if (handle) {\n // for nodejs env, we save task\n // reference in timerId Object for clearTimeout\n handle[taskSymbol] = task_1;\n if (isRefreshable && !isPeriodic) {\n var originalRefresh_1 = handle.refresh;\n handle.refresh = function () {\n var zone = task_1.zone, state = task_1.state;\n if (state === 'notScheduled') {\n task_1._state = 'scheduled';\n zone._updateTaskCount(task_1, 1);\n }\n else if (state === 'running') {\n task_1._state = 'scheduling';\n }\n return originalRefresh_1.call(this);\n };\n }\n }\n return (_a = handle !== null && handle !== void 0 ? handle : handleId) !== null && _a !== void 0 ? _a : task_1;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n }; });\n clearNative = patchMethod(window, cancelName, function (delegate) { return function (self, args) {\n var id = args[0];\n var task;\n if (isNumber(id)) {\n // non nodejs env.\n task = tasksByHandleId[id];\n delete tasksByHandleId[id];\n }\n else {\n // nodejs env ?? other environments.\n task = id === null || id === void 0 ? void 0 : id[taskSymbol];\n if (task) {\n id[taskSymbol] = null;\n }\n else {\n task = id;\n }\n }\n if (task === null || task === void 0 ? void 0 : task.type) {\n if (task.cancelFn) {\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n }; });\n }\n function patchCustomElements(_global, api) {\n var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;\n if ((!isBrowser && !isMix) || !_global['customElements'] || !('customElements' in _global)) {\n return;\n }\n // https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-lifecycle-callbacks\n var callbacks = [\n 'connectedCallback',\n 'disconnectedCallback',\n 'adoptedCallback',\n 'attributeChangedCallback',\n 'formAssociatedCallback',\n 'formDisabledCallback',\n 'formResetCallback',\n 'formStateRestoreCallback',\n ];\n api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks);\n }\n function eventTargetPatch(_global, api) {\n if (Zone[api.symbol('patchEventTarget')]) {\n // EventTarget is already patched.\n return;\n }\n var _a = api.getGlobalObjects(), eventNames = _a.eventNames, zoneSymbolEventNames = _a.zoneSymbolEventNames, TRUE_STR = _a.TRUE_STR, FALSE_STR = _a.FALSE_STR, ZONE_SYMBOL_PREFIX = _a.ZONE_SYMBOL_PREFIX;\n // predefine all __zone_symbol__ + eventName + true/false string\n for (var i = 0; i < eventNames.length; i++) {\n var eventName = eventNames[i];\n var falseEventName = eventName + FALSE_STR;\n var trueEventName = eventName + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n }\n var EVENT_TARGET = _global['EventTarget'];\n if (!EVENT_TARGET || !EVENT_TARGET.prototype) {\n return;\n }\n api.patchEventTarget(_global, api, [EVENT_TARGET && EVENT_TARGET.prototype]);\n return true;\n }\n function patchEvent(global, api) {\n api.patchEventPrototype(global, api);\n }\n /**\n * @fileoverview\n * @suppress {globalThis}\n */\n function filterProperties(target, onProperties, ignoreProperties) {\n if (!ignoreProperties || ignoreProperties.length === 0) {\n return onProperties;\n }\n var tip = ignoreProperties.filter(function (ip) { return ip.target === target; });\n if (tip.length === 0) {\n return onProperties;\n }\n var targetIgnoreProperties = tip[0].ignoreProperties;\n return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; });\n }\n function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {\n // check whether target is available, sometimes target will be undefined\n // because different browser or some 3rd party plugin.\n if (!target) {\n return;\n }\n var filteredProperties = filterProperties(target, onProperties, ignoreProperties);\n patchOnProperties(target, filteredProperties, prototype);\n }\n /**\n * Get all event name properties which the event name startsWith `on`\n * from the target object itself, inherited properties are not considered.\n */\n function getOnEventNames(target) {\n return Object.getOwnPropertyNames(target)\n .filter(function (name) { return name.startsWith('on') && name.length > 2; })\n .map(function (name) { return name.substring(2); });\n }\n function propertyDescriptorPatch(api, _global) {\n if (isNode && !isMix) {\n return;\n }\n if (Zone[api.symbol('patchEvents')]) {\n // events are already been patched by legacy patch.\n return;\n }\n var ignoreProperties = _global['__Zone_ignore_on_properties'];\n // for browsers that we can patch the descriptor: Chrome & Firefox\n var patchTargets = [];\n if (isBrowser) {\n var internalWindow_1 = window;\n patchTargets = patchTargets.concat([\n 'Document',\n 'SVGElement',\n 'Element',\n 'HTMLElement',\n 'HTMLBodyElement',\n 'HTMLMediaElement',\n 'HTMLFrameSetElement',\n 'HTMLFrameElement',\n 'HTMLIFrameElement',\n 'HTMLMarqueeElement',\n 'Worker',\n ]);\n var ignoreErrorProperties = [];\n // In older browsers like IE or Edge, event handler properties (e.g., `onclick`)\n // may not be defined directly on the `window` object but on its prototype (`WindowPrototype`).\n // To ensure complete coverage, we use the prototype when checking\n // for and patching these properties.\n patchFilteredProperties(internalWindow_1, getOnEventNames(internalWindow_1), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow_1));\n }\n patchTargets = patchTargets.concat([\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'IDBIndex',\n 'IDBRequest',\n 'IDBOpenDBRequest',\n 'IDBDatabase',\n 'IDBTransaction',\n 'IDBCursor',\n 'WebSocket',\n ]);\n for (var i = 0; i < patchTargets.length; i++) {\n var target = _global[patchTargets[i]];\n (target === null || target === void 0 ? void 0 : target.prototype) &&\n patchFilteredProperties(target.prototype, getOnEventNames(target.prototype), ignoreProperties);\n }\n }\n /**\n * @fileoverview\n * @suppress {missingRequire}\n */\n function patchBrowser(Zone) {\n Zone.__load_patch('legacy', function (global) {\n var legacyPatch = global[Zone.__symbol__('legacyPatch')];\n if (legacyPatch) {\n legacyPatch();\n }\n });\n Zone.__load_patch('timers', function (global) {\n var set = 'set';\n var clear = 'clear';\n patchTimer(global, set, clear, 'Timeout');\n patchTimer(global, set, clear, 'Interval');\n patchTimer(global, set, clear, 'Immediate');\n });\n Zone.__load_patch('requestAnimationFrame', function (global) {\n patchTimer(global, 'request', 'cancel', 'AnimationFrame');\n patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');\n patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\n });\n Zone.__load_patch('blocking', function (global, Zone) {\n var blockingMethods = ['alert', 'prompt', 'confirm'];\n for (var i = 0; i < blockingMethods.length; i++) {\n var name_2 = blockingMethods[i];\n patchMethod(global, name_2, function (delegate, symbol, name) {\n return function (s, args) {\n return Zone.current.run(delegate, global, args, name);\n };\n });\n }\n });\n Zone.__load_patch('EventTarget', function (global, Zone, api) {\n patchEvent(global, api);\n eventTargetPatch(global, api);\n // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener\n var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {\n api.patchEventTarget(global, api, [XMLHttpRequestEventTarget.prototype]);\n }\n });\n Zone.__load_patch('MutationObserver', function (global, Zone, api) {\n patchClass('MutationObserver');\n patchClass('WebKitMutationObserver');\n });\n Zone.__load_patch('IntersectionObserver', function (global, Zone, api) {\n patchClass('IntersectionObserver');\n });\n Zone.__load_patch('FileReader', function (global, Zone, api) {\n patchClass('FileReader');\n });\n Zone.__load_patch('on_property', function (global, Zone, api) {\n propertyDescriptorPatch(api, global);\n });\n Zone.__load_patch('customElements', function (global, Zone, api) {\n patchCustomElements(global, api);\n });\n Zone.__load_patch('XHR', function (global, Zone) {\n // Treat XMLHttpRequest as a macrotask.\n patchXHR(global);\n var XHR_TASK = zoneSymbol('xhrTask');\n var XHR_SYNC = zoneSymbol('xhrSync');\n var XHR_LISTENER = zoneSymbol('xhrListener');\n var XHR_SCHEDULED = zoneSymbol('xhrScheduled');\n var XHR_URL = zoneSymbol('xhrURL');\n var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');\n function patchXHR(window) {\n var XMLHttpRequest = window['XMLHttpRequest'];\n if (!XMLHttpRequest) {\n // XMLHttpRequest is not available in service worker\n return;\n }\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n function findPendingTask(target) {\n return target[XHR_TASK];\n }\n var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n if (!oriAddListener) {\n var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget_1) {\n var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype;\n oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n }\n var READY_STATE_CHANGE = 'readystatechange';\n var SCHEDULED = 'scheduled';\n function scheduleTask(task) {\n var data = task.data;\n var target = data.target;\n target[XHR_SCHEDULED] = false;\n target[XHR_ERROR_BEFORE_SCHEDULED] = false;\n // remove existing event listener\n var listener = target[XHR_LISTENER];\n if (!oriAddListener) {\n oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n if (listener) {\n oriRemoveListener.call(target, READY_STATE_CHANGE, listener);\n }\n var newListener = (target[XHR_LISTENER] = function () {\n if (target.readyState === target.DONE) {\n // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with\n // readyState=4 multiple times, so we need to check task state here\n if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {\n // check whether the xhr has registered onload listener\n // if that is the case, the task should invoke after all\n // onload listeners finish.\n // Also if the request failed without response (status = 0), the load event handler\n // will not be triggered, in that case, we should also invoke the placeholder callback\n // to close the XMLHttpRequest::send macroTask.\n // https://github.com/angular/angular/issues/38795\n var loadTasks = target[Zone.__symbol__('loadfalse')];\n if (target.status !== 0 && loadTasks && loadTasks.length > 0) {\n var oriInvoke_1 = task.invoke;\n task.invoke = function () {\n // need to load the tasks again, because in other\n // load listener, they may remove themselves\n var loadTasks = target[Zone.__symbol__('loadfalse')];\n for (var i = 0; i < loadTasks.length; i++) {\n if (loadTasks[i] === task) {\n loadTasks.splice(i, 1);\n }\n }\n if (!data.aborted && task.state === SCHEDULED) {\n oriInvoke_1.call(task);\n }\n };\n loadTasks.push(task);\n }\n else {\n task.invoke();\n }\n }\n else if (!data.aborted && target[XHR_SCHEDULED] === false) {\n // error occurs when xhr.send()\n target[XHR_ERROR_BEFORE_SCHEDULED] = true;\n }\n }\n });\n oriAddListener.call(target, READY_STATE_CHANGE, newListener);\n var storedTask = target[XHR_TASK];\n if (!storedTask) {\n target[XHR_TASK] = task;\n }\n sendNative.apply(target, data.args);\n target[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n var data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n self[XHR_URL] = args[1];\n return openNative.apply(self, args);\n }; });\n var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';\n var fetchTaskAborting = zoneSymbol('fetchTaskAborting');\n var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');\n var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) {\n if (Zone.current[fetchTaskScheduling] === true) {\n // a fetch is scheduling, so we are using xhr to polyfill fetch\n // and because we already schedule macroTask for fetch, we should\n // not schedule a macroTask for xhr again\n return sendNative.apply(self, args);\n }\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n var options = {\n target: self,\n url: self[XHR_URL],\n isPeriodic: false,\n args: args,\n aborted: false,\n };\n var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);\n if (self &&\n self[XHR_ERROR_BEFORE_SCHEDULED] === true &&\n !options.aborted &&\n task.state === SCHEDULED) {\n // xhr request throw error when send\n // we should invoke task instead of leaving a scheduled\n // pending macroTask\n task.invoke();\n }\n }\n }; });\n var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) {\n var task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n else if (Zone.current[fetchTaskAborting] === true) {\n // the abort is called from fetch polyfill, we need to call native abort of XHR.\n return abortNative.apply(self, args);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no\n // task\n // to cancel. Do nothing.\n }; });\n }\n });\n Zone.__load_patch('geolocation', function (global) {\n /// GEO_LOCATION\n if (global['navigator'] && global['navigator'].geolocation) {\n patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n }\n });\n Zone.__load_patch('PromiseRejectionEvent', function (global, Zone) {\n // handle unhandled promise rejection\n function findPromiseRejectionHandler(evtName) {\n return function (e) {\n var eventTasks = findEventTasks(global, evtName);\n eventTasks.forEach(function (eventTask) {\n // windows has added unhandledrejection event listener\n // trigger the event listener\n var PromiseRejectionEvent = global['PromiseRejectionEvent'];\n if (PromiseRejectionEvent) {\n var evt = new PromiseRejectionEvent(evtName, {\n promise: e.promise,\n reason: e.rejection,\n });\n eventTask.invoke(evt);\n }\n });\n };\n }\n if (global['PromiseRejectionEvent']) {\n Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =\n findPromiseRejectionHandler('unhandledrejection');\n Zone[zoneSymbol('rejectionHandledHandler')] =\n findPromiseRejectionHandler('rejectionhandled');\n }\n });\n Zone.__load_patch('queueMicrotask', function (global, Zone, api) {\n patchQueueMicrotask(global, api);\n });\n }\n function patchPromise(Zone) {\n Zone.__load_patch('ZoneAwarePromise', function (global, Zone, api) {\n var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var ObjectDefineProperty = Object.defineProperty;\n function readableObjectToString(obj) {\n if (obj && obj.toString === Object.prototype.toString) {\n var className = obj.constructor && obj.constructor.name;\n return (className ? className : '') + ': ' + JSON.stringify(obj);\n }\n return obj ? obj.toString() : Object.prototype.toString.call(obj);\n }\n var __symbol__ = api.symbol;\n var _uncaughtPromiseErrors = [];\n var isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] !== false;\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var creationTrace = '__creationTrace__';\n api.onUnhandledError = function (e) {\n if (api.showUncaughtError()) {\n var rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n else {\n console.error(e);\n }\n }\n };\n api.microtaskDrainDone = function () {\n var _loop_3 = function () {\n var uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(function () {\n if (uncaughtPromiseError.throwOriginal) {\n throw uncaughtPromiseError.rejection;\n }\n throw uncaughtPromiseError;\n });\n }\n catch (error) {\n handleUnhandledRejection(error);\n }\n };\n while (_uncaughtPromiseErrors.length) {\n _loop_3();\n }\n };\n var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');\n function handleUnhandledRejection(e) {\n api.onUnhandledError(e);\n try {\n var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];\n if (typeof handler === 'function') {\n handler.call(this, e);\n }\n }\n catch (err) { }\n }\n function isThenable(value) {\n return value && typeof value.then === 'function';\n }\n function forwardResolution(value) {\n return value;\n }\n function forwardRejection(rejection) {\n return ZoneAwarePromise.reject(rejection);\n }\n var symbolState = __symbol__('state');\n var symbolValue = __symbol__('value');\n var symbolFinally = __symbol__('finally');\n var symbolParentPromiseValue = __symbol__('parentPromiseValue');\n var symbolParentPromiseState = __symbol__('parentPromiseState');\n var source = 'Promise.then';\n var UNRESOLVED = null;\n var RESOLVED = true;\n var REJECTED = false;\n var REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return function (v) {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n var once = function () {\n var wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n var TYPE_ERROR = 'Promise resolved with itself';\n var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n var onceWrapper = once();\n if (promise === value) {\n throw new TypeError(TYPE_ERROR);\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n var then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED &&\n value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) &&\n value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n }\n }\n else {\n promise[symbolState] = state;\n var queue = promise[symbolValue];\n promise[symbolValue] = value;\n if (promise[symbolFinally] === symbolFinally) {\n // the promise is generated by Promise.prototype.finally\n if (state === RESOLVED) {\n // the state is resolved, should ignore the value\n // and use parent promise value\n promise[symbolState] = promise[symbolParentPromiseState];\n promise[symbolValue] = promise[symbolParentPromiseValue];\n }\n }\n // record task information in value when error occurs, so we can\n // do some additional work such as render longStackTrace\n if (state === REJECTED && value instanceof Error) {\n // check if longStackTraceZone is here\n var trace = Zone.currentTask &&\n Zone.currentTask.data &&\n Zone.currentTask.data[creationTrace];\n if (trace) {\n // only keep the long stack trace into error when in longStackTraceZone\n ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: trace,\n });\n }\n }\n for (var i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n var uncaughtPromiseError = value;\n try {\n // Here we throws a new Error to print more readable error log\n // and if the value is not an error, zone.js builds an `Error`\n // Object here to attach the stack information.\n throw new Error('Uncaught (in promise): ' +\n readableObjectToString(value) +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n uncaughtPromiseError = err;\n }\n if (isDisableWrappingUncaughtPromiseRejection) {\n // If disable wrapping uncaught promise reject\n // use the value instead of wrapping it.\n uncaughtPromiseError.throwOriginal = true;\n }\n uncaughtPromiseError.rejection = value;\n uncaughtPromiseError.promise = promise;\n uncaughtPromiseError.zone = Zone.current;\n uncaughtPromiseError.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(uncaughtPromiseError);\n api.scheduleMicroTask(); // to make sure that it is running\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n // if the promise is rejected no catch status\n // and queue.length > 0, means there is a error handler\n // here to handle the rejected promise, we should trigger\n // windows.rejectionhandled eventHandler or nodejs rejectionHandled\n // eventHandler\n try {\n var handler = Zone[REJECTION_HANDLED_HANDLER];\n if (handler && typeof handler === 'function') {\n handler.call(this, { rejection: promise[symbolValue], promise: promise });\n }\n }\n catch (err) { }\n promise[symbolState] = REJECTED;\n for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n var promiseState = promise[symbolState];\n var delegate = promiseState\n ? typeof onFulfilled === 'function'\n ? onFulfilled\n : forwardResolution\n : typeof onRejected === 'function'\n ? onRejected\n : forwardRejection;\n zone.scheduleMicroTask(source, function () {\n try {\n var parentPromiseValue = promise[symbolValue];\n var isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally];\n if (isFinallyPromise) {\n // if the promise is generated from finally call, keep parent promise's state and value\n chainPromise[symbolParentPromiseValue] = parentPromiseValue;\n chainPromise[symbolParentPromiseState] = promiseState;\n }\n // should not pass value to finally callback\n var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution\n ? []\n : [parentPromiseValue]);\n resolvePromise(chainPromise, true, value);\n }\n catch (error) {\n // if error occurs, should always return this error\n resolvePromise(chainPromise, false, error);\n }\n }, chainPromise);\n }\n var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';\n var noop = function () { };\n var AggregateError = global.AggregateError;\n var ZoneAwarePromise = /** @class */ (function () {\n function ZoneAwarePromise(executor) {\n var promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n var onceWrapper = once();\n executor &&\n executor(onceWrapper(makeResolver(promise, RESOLVED)), onceWrapper(makeResolver(promise, REJECTED)));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n ZoneAwarePromise.toString = function () {\n return ZONE_AWARE_PROMISE_TO_STRING;\n };\n ZoneAwarePromise.resolve = function (value) {\n if (value instanceof ZoneAwarePromise) {\n return value;\n }\n return resolvePromise(new this(null), RESOLVED, value);\n };\n ZoneAwarePromise.reject = function (error) {\n return resolvePromise(new this(null), REJECTED, error);\n };\n ZoneAwarePromise.withResolvers = function () {\n var result = {};\n result.promise = new ZoneAwarePromise(function (res, rej) {\n result.resolve = res;\n result.reject = rej;\n });\n return result;\n };\n ZoneAwarePromise.any = function (values) {\n if (!values || typeof values[Symbol.iterator] !== 'function') {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n var promises = [];\n var count = 0;\n try {\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var v = values_1[_i];\n count++;\n promises.push(ZoneAwarePromise.resolve(v));\n }\n }\n catch (err) {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n if (count === 0) {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n var finished = false;\n var errors = [];\n return new ZoneAwarePromise(function (resolve, reject) {\n for (var i = 0; i < promises.length; i++) {\n promises[i].then(function (v) {\n if (finished) {\n return;\n }\n finished = true;\n resolve(v);\n }, function (err) {\n errors.push(err);\n count--;\n if (count === 0) {\n finished = true;\n reject(new AggregateError(errors, 'All promises were rejected'));\n }\n });\n }\n });\n };\n ZoneAwarePromise.race = function (values) {\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n function onResolve(value) {\n resolve(value);\n }\n function onReject(error) {\n reject(error);\n }\n for (var _i = 0, values_2 = values; _i < values_2.length; _i++) {\n var value = values_2[_i];\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n return promise;\n };\n ZoneAwarePromise.all = function (values) {\n return ZoneAwarePromise.allWithCallback(values);\n };\n ZoneAwarePromise.allSettled = function (values) {\n var P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise;\n return P.allWithCallback(values, {\n thenCallback: function (value) { return ({ status: 'fulfilled', value: value }); },\n errorCallback: function (err) { return ({ status: 'rejected', reason: err }); },\n });\n };\n ZoneAwarePromise.allWithCallback = function (values, callback) {\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n // Start at 2 to prevent prematurely resolving if .then is called immediately.\n var unresolvedCount = 2;\n var valueIndex = 0;\n var resolvedValues = [];\n var _loop_4 = function (value) {\n if (!isThenable(value)) {\n value = this_1.resolve(value);\n }\n var curValueIndex = valueIndex;\n try {\n value.then(function (value) {\n resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value;\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }, function (err) {\n if (!callback) {\n reject(err);\n }\n else {\n resolvedValues[curValueIndex] = callback.errorCallback(err);\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }\n });\n }\n catch (thenErr) {\n reject(thenErr);\n }\n unresolvedCount++;\n valueIndex++;\n };\n var this_1 = this;\n for (var _i = 0, values_3 = values; _i < values_3.length; _i++) {\n var value = values_3[_i];\n _loop_4(value);\n }\n // Make the unresolvedCount zero-based again.\n unresolvedCount -= 2;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n return promise;\n };\n Object.defineProperty(ZoneAwarePromise.prototype, Symbol.toStringTag, {\n get: function () {\n return 'Promise';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ZoneAwarePromise.prototype, Symbol.species, {\n get: function () {\n return ZoneAwarePromise;\n },\n enumerable: false,\n configurable: true\n });\n ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {\n var _a;\n // We must read `Symbol.species` safely because `this` may be anything. For instance, `this`\n // may be an object without a prototype (created through `Object.create(null)`); thus\n // `this.constructor` will be undefined. One of the use cases is SystemJS creating\n // prototype-less objects (modules) via `Object.create(null)`. The SystemJS creates an empty\n // object and copies promise properties into that object (within the `getOrCreateLoad`\n // function). The zone.js then checks if the resolved value has the `then` method and\n // invokes it with the `value` context. Otherwise, this will throw an error: `TypeError:\n // Cannot read properties of undefined (reading 'Symbol(Symbol.species)')`.\n var C = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = this.constructor || ZoneAwarePromise;\n }\n var chainPromise = new C(noop);\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n };\n ZoneAwarePromise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n ZoneAwarePromise.prototype.finally = function (onFinally) {\n var _a;\n // See comment on the call to `then` about why thee `Symbol.species` is safely accessed.\n var C = (_a = this.constructor) === null || _a === void 0 ? void 0 : _a[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = ZoneAwarePromise;\n }\n var chainPromise = new C(noop);\n chainPromise[symbolFinally] = symbolFinally;\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFinally, onFinally);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);\n }\n return chainPromise;\n };\n return ZoneAwarePromise;\n }());\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n var NativePromise = (global[symbolPromise] = global['Promise']);\n global['Promise'] = ZoneAwarePromise;\n var symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n var proto = Ctor.prototype;\n var prop = ObjectGetOwnPropertyDescriptor(proto, 'then');\n if (prop && (prop.writable === false || !prop.configurable)) {\n // check Ctor.prototype.then propertyDescriptor is writable or not\n // in meteor env, writable is false, we should ignore such case\n return;\n }\n var originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n var _this = this;\n var wrapped = new ZoneAwarePromise(function (resolve, reject) {\n originalThen.call(_this, resolve, reject);\n });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n api.patchThen = patchThen;\n function zoneify(fn) {\n return function (self, args) {\n var resultPromise = fn.apply(self, args);\n if (resultPromise instanceof ZoneAwarePromise) {\n return resultPromise;\n }\n var ctor = resultPromise.constructor;\n if (!ctor[symbolThenPatched]) {\n patchThen(ctor);\n }\n return resultPromise;\n };\n }\n if (NativePromise) {\n patchThen(NativePromise);\n patchMethod(global, 'fetch', function (delegate) { return zoneify(delegate); });\n }\n // This is not part of public API, but it is useful for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n return ZoneAwarePromise;\n });\n }\n function patchToString(Zone) {\n // override Function.prototype.toString to make zone.js patched function\n // look like native function\n Zone.__load_patch('toString', function (global) {\n // patch Func.prototype.toString to let them look like native\n var originalFunctionToString = Function.prototype.toString;\n var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');\n var PROMISE_SYMBOL = zoneSymbol('Promise');\n var ERROR_SYMBOL = zoneSymbol('Error');\n var newFunctionToString = function toString() {\n if (typeof this === 'function') {\n var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];\n if (originalDelegate) {\n if (typeof originalDelegate === 'function') {\n return originalFunctionToString.call(originalDelegate);\n }\n else {\n return Object.prototype.toString.call(originalDelegate);\n }\n }\n if (this === Promise) {\n var nativePromise = global[PROMISE_SYMBOL];\n if (nativePromise) {\n return originalFunctionToString.call(nativePromise);\n }\n }\n if (this === Error) {\n var nativeError = global[ERROR_SYMBOL];\n if (nativeError) {\n return originalFunctionToString.call(nativeError);\n }\n }\n }\n return originalFunctionToString.call(this);\n };\n newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;\n Function.prototype.toString = newFunctionToString;\n // patch Object.prototype.toString to let them look like native\n var originalObjectToString = Object.prototype.toString;\n var PROMISE_OBJECT_TO_STRING = '[object Promise]';\n Object.prototype.toString = function () {\n if (typeof Promise === 'function' && this instanceof Promise) {\n return PROMISE_OBJECT_TO_STRING;\n }\n return originalObjectToString.call(this);\n };\n });\n }\n function patchCallbacks(api, target, targetName, method, callbacks) {\n var symbol = Zone.__symbol__(method);\n if (target[symbol]) {\n return;\n }\n var nativeDelegate = (target[symbol] = target[method]);\n target[method] = function (name, opts, options) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n var source = \"\".concat(targetName, \".\").concat(method, \"::\") + callback;\n var prototype = opts.prototype;\n // Note: the `patchCallbacks` is used for patching the `document.registerElement` and\n // `customElements.define`. We explicitly wrap the patching code into try-catch since\n // callbacks may be already patched by other web components frameworks (e.g. LWC), and they\n // make those properties non-writable. This means that patching callback will throw an error\n // `cannot assign to read-only property`. See this code as an example:\n // https://github.com/salesforce/lwc/blob/master/packages/@lwc/engine-core/src/framework/base-bridge-element.ts#L180-L186\n // We don't want to stop the application rendering if we couldn't patch some\n // callback, e.g. `attributeChangedCallback`.\n try {\n if (prototype.hasOwnProperty(callback)) {\n var descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = api.wrapWithCurrentZone(descriptor.value, source);\n api._redefineProperty(opts.prototype, callback, descriptor);\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n catch (_a) {\n // Note: we leave the catch block empty since there's no way to handle the error related\n // to non-writable property.\n }\n });\n }\n return nativeDelegate.call(target, name, opts, options);\n };\n api.attachOriginToPatched(target[method], nativeDelegate);\n }\n function patchUtil(Zone) {\n Zone.__load_patch('util', function (global, Zone, api) {\n // Collect native event names by looking at properties\n // on the global namespace, e.g. 'onclick'.\n var eventNames = getOnEventNames(global);\n api.patchOnProperties = patchOnProperties;\n api.patchMethod = patchMethod;\n api.bindArguments = bindArguments;\n api.patchMacroTask = patchMacroTask;\n // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS`\n // to define which events will not be patched by `Zone.js`. In newer version (>=0.9.0), we\n // change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep the name consistent with\n // angular repo. The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be\n // supported for backwards compatibility.\n var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');\n var SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS');\n if (global[SYMBOL_UNPATCHED_EVENTS]) {\n global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS];\n }\n if (global[SYMBOL_BLACK_LISTED_EVENTS]) {\n Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] =\n global[SYMBOL_BLACK_LISTED_EVENTS];\n }\n api.patchEventPrototype = patchEventPrototype;\n api.patchEventTarget = patchEventTarget;\n api.isIEOrEdge = isIEOrEdge;\n api.ObjectDefineProperty = ObjectDefineProperty;\n api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;\n api.ObjectCreate = ObjectCreate;\n api.ArraySlice = ArraySlice;\n api.patchClass = patchClass;\n api.wrapWithCurrentZone = wrapWithCurrentZone;\n api.filterProperties = filterProperties;\n api.attachOriginToPatched = attachOriginToPatched;\n api._redefineProperty = Object.defineProperty;\n api.patchCallbacks = patchCallbacks;\n api.getGlobalObjects = function () { return ({\n globalSources: globalSources,\n zoneSymbolEventNames: zoneSymbolEventNames,\n eventNames: eventNames,\n isBrowser: isBrowser,\n isMix: isMix,\n isNode: isNode,\n TRUE_STR: TRUE_STR,\n FALSE_STR: FALSE_STR,\n ZONE_SYMBOL_PREFIX: ZONE_SYMBOL_PREFIX,\n ADD_EVENT_LISTENER_STR: ADD_EVENT_LISTENER_STR,\n REMOVE_EVENT_LISTENER_STR: REMOVE_EVENT_LISTENER_STR,\n }); };\n });\n }\n function patchCommon(Zone) {\n patchPromise(Zone);\n patchToString(Zone);\n patchUtil(Zone);\n }\n var Zone$1 = loadZone();\n patchCommon(Zone$1);\n patchBrowser(Zone$1);\n}));\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class NoopLogger {\n emit(_logRecord) { }\n}\nexport const NOOP_LOGGER = new NoopLogger();\n//# sourceMappingURL=NoopLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopLogger } from './NoopLogger';\nexport class NoopLoggerProvider {\n getLogger(_name, _version, _options) {\n return new NoopLogger();\n }\n}\nexport const NOOP_LOGGER_PROVIDER = new NoopLoggerProvider();\n//# sourceMappingURL=NoopLoggerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NOOP_LOGGER } from './NoopLogger';\nexport class ProxyLogger {\n constructor(_provider, name, version, options) {\n this._provider = _provider;\n this.name = name;\n this.version = version;\n this.options = options;\n }\n /**\n * Emit a log record. This method should only be used by log appenders.\n *\n * @param logRecord\n */\n emit(logRecord) {\n this._getLogger().emit(logRecord);\n }\n /**\n * Try to get a logger from the proxy logger provider.\n * If the proxy logger provider has no delegate, return a noop logger.\n */\n _getLogger() {\n if (this._delegate) {\n return this._delegate;\n }\n const logger = this._provider._getDelegateLogger(this.name, this.version, this.options);\n if (!logger) {\n return NOOP_LOGGER;\n }\n this._delegate = logger;\n return this._delegate;\n }\n}\n//# sourceMappingURL=ProxyLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NOOP_LOGGER_PROVIDER } from './NoopLoggerProvider';\nimport { ProxyLogger } from './ProxyLogger';\nexport class ProxyLoggerProvider {\n getLogger(name, version, options) {\n var _a;\n return ((_a = this._getDelegateLogger(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyLogger(this, name, version, options));\n }\n /**\n * Get the delegate logger provider.\n * Used by tests only.\n * @internal\n */\n _getDelegate() {\n var _a;\n return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_LOGGER_PROVIDER;\n }\n /**\n * Set the delegate logger provider\n * @internal\n */\n _setDelegate(delegate) {\n this._delegate = delegate;\n }\n /**\n * @internal\n */\n _getDelegateLogger(name, version, options) {\n var _a;\n return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getLogger(name, version, options);\n }\n}\n//# sourceMappingURL=ProxyLoggerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Updates to this file should also be replicated to @opentelemetry/api and\n// @opentelemetry/core too.\n/**\n * - globalThis (New standard)\n * - self (Will return the current window instance for supported browsers)\n * - window (fallback for older browser implementations)\n * - global (NodeJS implementation)\n * - <object> (When all else fails)\n */\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line n/no-unsupported-features/es-builtins, no-undef\nexport const _globalThis = typeof globalThis === 'object'\n ? globalThis\n : typeof self === 'object'\n ? self\n : typeof window === 'object'\n ? window\n : typeof global === 'object'\n ? global\n : {};\n//# sourceMappingURL=globalThis.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { _globalThis } from '../platform';\nexport const GLOBAL_LOGS_API_KEY = Symbol.for('io.opentelemetry.js.api.logs');\nexport const _global = _globalThis;\n/**\n * Make a function which accepts a version integer and returns the instance of an API if the version\n * is compatible, or a fallback version (usually NOOP) if it is not.\n *\n * @param requiredVersion Backwards compatibility version which is required to return the instance\n * @param instance Instance which should be returned if the required version is compatible\n * @param fallback Fallback instance, usually NOOP, which will be returned if the required version is not compatible\n */\nexport function makeGetter(requiredVersion, instance, fallback) {\n return (version) => version === requiredVersion ? instance : fallback;\n}\n/**\n * A number which should be incremented each time a backwards incompatible\n * change is made to the API. This number is used when an API package\n * attempts to access the global API to ensure it is getting a compatible\n * version. If the global API is not compatible with the API package\n * attempting to get it, a NOOP API implementation will be returned.\n */\nexport const API_BACKWARDS_COMPATIBILITY_VERSION = 1;\n//# sourceMappingURL=global-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { API_BACKWARDS_COMPATIBILITY_VERSION, GLOBAL_LOGS_API_KEY, _global, makeGetter, } from '../internal/global-utils';\nimport { NOOP_LOGGER_PROVIDER } from '../NoopLoggerProvider';\nimport { ProxyLoggerProvider } from '../ProxyLoggerProvider';\nexport class LogsAPI {\n constructor() {\n this._proxyLoggerProvider = new ProxyLoggerProvider();\n }\n static getInstance() {\n if (!this._instance) {\n this._instance = new LogsAPI();\n }\n return this._instance;\n }\n setGlobalLoggerProvider(provider) {\n if (_global[GLOBAL_LOGS_API_KEY]) {\n return this.getLoggerProvider();\n }\n _global[GLOBAL_LOGS_API_KEY] = makeGetter(API_BACKWARDS_COMPATIBILITY_VERSION, provider, NOOP_LOGGER_PROVIDER);\n this._proxyLoggerProvider._setDelegate(provider);\n return provider;\n }\n /**\n * Returns the global logger provider.\n *\n * @returns LoggerProvider\n */\n getLoggerProvider() {\n var _a, _b;\n return ((_b = (_a = _global[GLOBAL_LOGS_API_KEY]) === null || _a === void 0 ? void 0 : _a.call(_global, API_BACKWARDS_COMPATIBILITY_VERSION)) !== null && _b !== void 0 ? _b : this._proxyLoggerProvider);\n }\n /**\n * Returns a logger from the global logger provider.\n *\n * @returns Logger\n */\n getLogger(name, version, options) {\n return this.getLoggerProvider().getLogger(name, version, options);\n }\n /** Remove the global logger provider */\n disable() {\n delete _global[GLOBAL_LOGS_API_KEY];\n this._proxyLoggerProvider = new ProxyLoggerProvider();\n }\n}\n//# sourceMappingURL=logs.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport { SeverityNumber } from './types/LogRecord';\nexport { NOOP_LOGGER, NoopLogger } from './NoopLogger';\nexport { ProxyLoggerProvider } from './ProxyLoggerProvider';\nimport { LogsAPI } from './api/logs';\nexport const logs = LogsAPI.getInstance();\n//# sourceMappingURL=index.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Enable instrumentations\n * @param instrumentations\n * @param tracerProvider\n * @param meterProvider\n */\nexport function enableInstrumentations(instrumentations, tracerProvider, meterProvider, loggerProvider) {\n for (let i = 0, j = instrumentations.length; i < j; i++) {\n const instrumentation = instrumentations[i];\n if (tracerProvider) {\n instrumentation.setTracerProvider(tracerProvider);\n }\n if (meterProvider) {\n instrumentation.setMeterProvider(meterProvider);\n }\n if (loggerProvider && instrumentation.setLoggerProvider) {\n instrumentation.setLoggerProvider(loggerProvider);\n }\n // instrumentations have been already enabled during creation\n // so enable only if user prevented that by setting enabled to false\n // this is to prevent double enabling but when calling register all\n // instrumentations should be now enabled\n if (!instrumentation.getConfig().enabled) {\n instrumentation.enable();\n }\n }\n}\n/**\n * Disable instrumentations\n * @param instrumentations\n */\nexport function disableInstrumentations(instrumentations) {\n instrumentations.forEach(instrumentation => instrumentation.disable());\n}\n//# sourceMappingURL=autoLoaderUtils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { trace, metrics } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport { disableInstrumentations, enableInstrumentations, } from './autoLoaderUtils';\n/**\n * It will register instrumentations and plugins\n * @param options\n * @return returns function to unload instrumentation and plugins that were\n * registered\n */\nexport function registerInstrumentations(options) {\n const tracerProvider = options.tracerProvider || trace.getTracerProvider();\n const meterProvider = options.meterProvider || metrics.getMeterProvider();\n const loggerProvider = options.loggerProvider || logs.getLoggerProvider();\n const instrumentations = options.instrumentations?.flat() ?? [];\n enableInstrumentations(instrumentations, tracerProvider, meterProvider, loggerProvider);\n return () => {\n disableInstrumentations(instrumentations);\n };\n}\n//# sourceMappingURL=autoLoader.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Default to complaining loudly when things don't go according to plan.\n// eslint-disable-next-line no-console\nlet logger = console.error.bind(console);\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty(obj, name, value) {\n const enumerable = !!obj[name] &&\n Object.prototype.propertyIsEnumerable.call(obj, name);\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable,\n writable: true,\n value,\n });\n}\nexport const wrap = (nodule, name, wrapper) => {\n if (!nodule || !nodule[name]) {\n logger('no original function ' + String(name) + ' to wrap');\n return;\n }\n if (!wrapper) {\n logger('no wrapper function');\n logger(new Error().stack);\n return;\n }\n const original = nodule[name];\n if (typeof original !== 'function' || typeof wrapper !== 'function') {\n logger('original object and wrapper must be functions');\n return;\n }\n const wrapped = wrapper(original, name);\n defineProperty(wrapped, '__original', original);\n defineProperty(wrapped, '__unwrap', () => {\n if (nodule[name] === wrapped) {\n defineProperty(nodule, name, original);\n }\n });\n defineProperty(wrapped, '__wrapped', true);\n defineProperty(nodule, name, wrapped);\n return wrapped;\n};\nexport const massWrap = (nodules, names, wrapper) => {\n if (!nodules) {\n logger('must provide one or more modules to patch');\n logger(new Error().stack);\n return;\n }\n else if (!Array.isArray(nodules)) {\n nodules = [nodules];\n }\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to wrap on modules');\n return;\n }\n nodules.forEach(nodule => {\n names.forEach(name => {\n wrap(nodule, name, wrapper);\n });\n });\n};\nexport const unwrap = (nodule, name) => {\n if (!nodule || !nodule[name]) {\n logger('no function to unwrap.');\n logger(new Error().stack);\n return;\n }\n const wrapped = nodule[name];\n if (!wrapped.__unwrap) {\n logger('no original to unwrap to -- has ' +\n String(name) +\n ' already been unwrapped?');\n }\n else {\n wrapped.__unwrap();\n return;\n }\n};\nexport const massUnwrap = (nodules, names) => {\n if (!nodules) {\n logger('must provide one or more modules to patch');\n logger(new Error().stack);\n return;\n }\n else if (!Array.isArray(nodules)) {\n nodules = [nodules];\n }\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to unwrap on modules');\n return;\n }\n nodules.forEach(nodule => {\n names.forEach(name => {\n unwrap(nodule, name);\n });\n });\n};\nexport default function shimmer(options) {\n if (options && options.logger) {\n if (typeof options.logger !== 'function') {\n logger(\"new logger isn't a function, not replacing\");\n }\n else {\n logger = options.logger;\n }\n }\n}\nshimmer.wrap = wrap;\nshimmer.massWrap = massWrap;\nshimmer.unwrap = unwrap;\nshimmer.massUnwrap = massUnwrap;\n//# sourceMappingURL=shimmer.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { diag, metrics, trace, } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport * as shimmer from './shimmer';\n/**\n * Base abstract internal class for instrumenting node and web plugins\n */\nexport class InstrumentationAbstract {\n instrumentationName;\n instrumentationVersion;\n _config = {};\n _tracer;\n _meter;\n _logger;\n _diag;\n constructor(instrumentationName, instrumentationVersion, config) {\n this.instrumentationName = instrumentationName;\n this.instrumentationVersion = instrumentationVersion;\n this.setConfig(config);\n this._diag = diag.createComponentLogger({\n namespace: instrumentationName,\n });\n this._tracer = trace.getTracer(instrumentationName, instrumentationVersion);\n this._meter = metrics.getMeter(instrumentationName, instrumentationVersion);\n this._logger = logs.getLogger(instrumentationName, instrumentationVersion);\n this._updateMetricInstruments();\n }\n /* Api to wrap instrumented method */\n _wrap = shimmer.wrap;\n /* Api to unwrap instrumented methods */\n _unwrap = shimmer.unwrap;\n /* Api to mass wrap instrumented method */\n _massWrap = shimmer.massWrap;\n /* Api to mass unwrap instrumented methods */\n _massUnwrap = shimmer.massUnwrap;\n /* Returns meter */\n get meter() {\n return this._meter;\n }\n /**\n * Sets MeterProvider to this plugin\n * @param meterProvider\n */\n setMeterProvider(meterProvider) {\n this._meter = meterProvider.getMeter(this.instrumentationName, this.instrumentationVersion);\n this._updateMetricInstruments();\n }\n /* Returns logger */\n get logger() {\n return this._logger;\n }\n /**\n * Sets LoggerProvider to this plugin\n * @param loggerProvider\n */\n setLoggerProvider(loggerProvider) {\n this._logger = loggerProvider.getLogger(this.instrumentationName, this.instrumentationVersion);\n }\n /**\n * @experimental\n *\n * Get module definitions defined by {@link init}.\n * This can be used for experimental compile-time instrumentation.\n *\n * @returns an array of {@link InstrumentationModuleDefinition}\n */\n getModuleDefinitions() {\n const initResult = this.init() ?? [];\n if (!Array.isArray(initResult)) {\n return [initResult];\n }\n return initResult;\n }\n /**\n * Sets the new metric instruments with the current Meter.\n */\n _updateMetricInstruments() {\n return;\n }\n /* Returns InstrumentationConfig */\n getConfig() {\n return this._config;\n }\n /**\n * Sets InstrumentationConfig to this plugin\n * @param config\n */\n setConfig(config) {\n // copy config first level properties to ensure they are immutable.\n // nested properties are not copied, thus are mutable from the outside.\n this._config = {\n enabled: true,\n ...config,\n };\n }\n /**\n * Sets TraceProvider to this plugin\n * @param tracerProvider\n */\n setTracerProvider(tracerProvider) {\n this._tracer = tracerProvider.getTracer(this.instrumentationName, this.instrumentationVersion);\n }\n /* Returns tracer */\n get tracer() {\n return this._tracer;\n }\n /**\n * Execute span customization hook, if configured, and log any errors.\n * Any semantics of the trigger and info are defined by the specific instrumentation.\n * @param hookHandler The optional hook handler which the user has configured via instrumentation config\n * @param triggerName The name of the trigger for executing the hook for logging purposes\n * @param span The span to which the hook should be applied\n * @param info The info object to be passed to the hook, with useful data the hook may use\n */\n _runSpanCustomizationHook(hookHandler, triggerName, span, info) {\n if (!hookHandler) {\n return;\n }\n try {\n hookHandler(span, info);\n }\n catch (e) {\n this._diag.error(`Error running span customization hook due to exception in handler`, { triggerName }, e);\n }\n }\n}\n//# sourceMappingURL=instrumentation.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { InstrumentationAbstract } from '../../instrumentation';\n/**\n * Base abstract class for instrumenting web plugins\n */\nexport class InstrumentationBase extends InstrumentationAbstract {\n constructor(instrumentationName, instrumentationVersion, config) {\n super(instrumentationName, instrumentationVersion, config);\n if (this._config.enabled) {\n this.enable();\n }\n }\n}\n//# sourceMappingURL=instrumentation.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * function to execute patched function and being able to catch errors\n * @param execute - function to be executed\n * @param onFinish - callback to run when execute finishes\n */\nexport function safeExecuteInTheMiddle(execute, onFinish, preventThrowingError) {\n let error;\n let result;\n try {\n result = execute();\n }\n catch (e) {\n error = e;\n }\n finally {\n onFinish(error, result);\n if (error && !preventThrowingError) {\n // eslint-disable-next-line no-unsafe-finally\n throw error;\n }\n // eslint-disable-next-line no-unsafe-finally\n return result;\n }\n}\n/**\n * Async function to execute patched function and being able to catch errors\n * @param execute - function to be executed\n * @param onFinish - callback to run when execute finishes\n */\nexport async function safeExecuteInTheMiddleAsync(execute, onFinish, preventThrowingError) {\n let error;\n let result;\n try {\n result = await execute();\n }\n catch (e) {\n error = e;\n }\n finally {\n await onFinish(error, result);\n if (error && !preventThrowingError) {\n // eslint-disable-next-line no-unsafe-finally\n throw error;\n }\n // eslint-disable-next-line no-unsafe-finally\n return result;\n }\n}\n/**\n * Checks if certain function has been already wrapped\n * @param func\n */\nexport function isWrapped(func) {\n return (typeof func === 'function' &&\n typeof func.__original === 'function' &&\n typeof func.__unwrap === 'function' &&\n func.__wrapped === true);\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var AttributeNames;\n(function (AttributeNames) {\n AttributeNames[\"EVENT_TYPE\"] = \"event_type\";\n AttributeNames[\"TARGET_ELEMENT\"] = \"target_element\";\n AttributeNames[\"TARGET_XPATH\"] = \"target_xpath\";\n AttributeNames[\"HTTP_URL\"] = \"http.url\";\n})(AttributeNames || (AttributeNames = {}));\n//# sourceMappingURL=AttributeNames.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this is autogenerated file, see scripts/version-update.js\nexport const PACKAGE_VERSION = '0.53.0';\nexport const PACKAGE_NAME = '@opentelemetry/instrumentation-user-interaction';\n//# sourceMappingURL=version.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/// <reference types=\"zone.js\" />\nimport { isWrapped, InstrumentationBase } from '@opentelemetry/instrumentation';\nimport * as api from '@opentelemetry/api';\nimport { hrTime } from '@opentelemetry/core';\nimport { getElementXPath } from '@opentelemetry/sdk-trace-web';\nimport { AttributeNames } from './enums/AttributeNames';\n/** @knipignore */\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\nconst ZONE_CONTEXT_KEY = 'OT_ZONE_CONTEXT';\nconst EVENT_NAVIGATION_NAME = 'Navigation:';\nconst DEFAULT_EVENT_NAMES = ['click'];\nfunction defaultShouldPreventSpanCreation() {\n return false;\n}\n/**\n * This class represents a UserInteraction plugin for auto instrumentation.\n * If zone.js is available then it patches the zone otherwise it patches\n * addEventListener of HTMLElement\n */\nexport class UserInteractionInstrumentation extends InstrumentationBase {\n version = PACKAGE_VERSION;\n moduleName = 'user-interaction';\n _spansData = new WeakMap();\n // for addEventListener/removeEventListener state\n _wrappedListeners = new WeakMap();\n // for event bubbling\n _eventsSpanMap = new WeakMap();\n _eventNames;\n _shouldPreventSpanCreation;\n constructor(config = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._eventNames = new Set(config?.eventNames ?? DEFAULT_EVENT_NAMES);\n this._shouldPreventSpanCreation =\n typeof config?.shouldPreventSpanCreation === 'function'\n ? config.shouldPreventSpanCreation\n : defaultShouldPreventSpanCreation;\n }\n init() { }\n /**\n * This will check if last task was timeout and will save the time to\n * fix the user interaction when nothing happens\n * This timeout comes from xhr plugin which is needed to collect information\n * about last xhr main request from observer\n * @param task\n * @param span\n */\n _checkForTimeout(task, span) {\n const spanData = this._spansData.get(span);\n if (spanData) {\n if (task.source === 'setTimeout') {\n spanData.hrTimeLastTimeout = hrTime();\n }\n else if (task.source !== 'Promise.then' &&\n task.source !== 'setTimeout') {\n spanData.hrTimeLastTimeout = undefined;\n }\n }\n }\n /**\n * Controls whether or not to create a span, based on the event type.\n */\n _allowEventName(eventName) {\n return this._eventNames.has(eventName);\n }\n /**\n * Creates a new span\n * @param element\n * @param eventName\n * @param parentSpan\n */\n _createSpan(element, eventName, parentSpan) {\n if (!(element instanceof HTMLElement)) {\n return undefined;\n }\n if (!element.getAttribute) {\n return undefined;\n }\n if (element.hasAttribute('disabled')) {\n return undefined;\n }\n if (!this._allowEventName(eventName)) {\n return undefined;\n }\n const xpath = getElementXPath(element, true);\n try {\n const span = this.tracer.startSpan(eventName, {\n attributes: {\n [AttributeNames.EVENT_TYPE]: eventName,\n [AttributeNames.TARGET_ELEMENT]: element.tagName,\n [AttributeNames.TARGET_XPATH]: xpath,\n [AttributeNames.HTTP_URL]: window.location.href,\n },\n }, parentSpan\n ? api.trace.setSpan(api.context.active(), parentSpan)\n : undefined);\n if (this._shouldPreventSpanCreation(eventName, element, span) === true) {\n return undefined;\n }\n this._spansData.set(span, {\n taskCount: 0,\n });\n return span;\n }\n catch (e) {\n this._diag.error('failed to start create new user interaction span', e);\n }\n return undefined;\n }\n /**\n * Decrement number of tasks that left in zone,\n * This is needed to be able to end span when no more tasks left\n * @param span\n */\n _decrementTask(span) {\n const spanData = this._spansData.get(span);\n if (spanData) {\n spanData.taskCount--;\n if (spanData.taskCount === 0) {\n this._tryToEndSpan(span, spanData.hrTimeLastTimeout);\n }\n }\n }\n /**\n * Return the current span\n * @param zone\n * @private\n */\n _getCurrentSpan(zone) {\n const context = zone.get(ZONE_CONTEXT_KEY);\n if (context) {\n return api.trace.getSpan(context);\n }\n return context;\n }\n /**\n * Increment number of tasks that are run within the same zone.\n * This is needed to be able to end span when no more tasks left\n * @param span\n */\n _incrementTask(span) {\n const spanData = this._spansData.get(span);\n if (spanData) {\n spanData.taskCount++;\n }\n }\n /**\n * Returns true iff we should use the patched callback; false if it's already been patched\n */\n addPatchedListener(on, type, listener, wrappedListener) {\n let listener2Type = this._wrappedListeners.get(listener);\n if (!listener2Type) {\n listener2Type = new Map();\n this._wrappedListeners.set(listener, listener2Type);\n }\n let element2patched = listener2Type.get(type);\n if (!element2patched) {\n element2patched = new Map();\n listener2Type.set(type, element2patched);\n }\n if (element2patched.has(on)) {\n return false;\n }\n element2patched.set(on, wrappedListener);\n return true;\n }\n /**\n * Returns the patched version of the callback (or undefined)\n */\n removePatchedListener(on, type, listener) {\n const listener2Type = this._wrappedListeners.get(listener);\n if (!listener2Type) {\n return undefined;\n }\n const element2patched = listener2Type.get(type);\n if (!element2patched) {\n return undefined;\n }\n const patched = element2patched.get(on);\n if (patched) {\n element2patched.delete(on);\n if (element2patched.size === 0) {\n listener2Type.delete(type);\n if (listener2Type.size === 0) {\n this._wrappedListeners.delete(listener);\n }\n }\n }\n return patched;\n }\n // utility method to deal with the Function|EventListener nature of addEventListener\n _invokeListener(listener, target, args) {\n if (typeof listener === 'function') {\n return listener.apply(target, args);\n }\n else {\n return listener.handleEvent(args[0]);\n }\n }\n /**\n * This patches the addEventListener of HTMLElement to be able to\n * auto instrument the click events\n * This is done when zone is not available\n */\n _patchAddEventListener() {\n const plugin = this;\n return (original) => {\n return function addEventListenerPatched(type, listener, useCapture) {\n // Forward calls with listener = null\n if (!listener) {\n return original.call(this, type, listener, useCapture);\n }\n // filter out null (typeof null === 'object')\n const once = useCapture && typeof useCapture === 'object' && useCapture.once;\n const patchedListener = function (...args) {\n let parentSpan;\n const event = args[0];\n const target = event?.target;\n if (event) {\n parentSpan = plugin._eventsSpanMap.get(event);\n }\n if (once) {\n plugin.removePatchedListener(this, type, listener);\n }\n const span = plugin._createSpan(target, type, parentSpan);\n if (span) {\n if (event) {\n plugin._eventsSpanMap.set(event, span);\n }\n return api.context.with(api.trace.setSpan(api.context.active(), span), () => {\n const result = plugin._invokeListener(listener, this, args);\n // no zone so end span immediately\n span.end();\n return result;\n });\n }\n else {\n return plugin._invokeListener(listener, this, args);\n }\n };\n if (plugin.addPatchedListener(this, type, listener, patchedListener)) {\n return original.call(this, type, patchedListener, useCapture);\n }\n };\n };\n }\n /**\n * This patches the removeEventListener of HTMLElement to handle the fact that\n * we patched the original callbacks\n * This is done when zone is not available\n */\n _patchRemoveEventListener() {\n const plugin = this;\n return (original) => {\n return function removeEventListenerPatched(type, listener, useCapture) {\n const wrappedListener = plugin.removePatchedListener(this, type, listener);\n if (wrappedListener) {\n return original.call(this, type, wrappedListener, useCapture);\n }\n else {\n return original.call(this, type, listener, useCapture);\n }\n };\n };\n }\n /**\n * Most browser provide event listener api via EventTarget in prototype chain.\n * Exception to this is IE 11 which has it on the prototypes closest to EventTarget:\n *\n * * - has addEventListener in IE\n * ** - has addEventListener in all other browsers\n * ! - missing in IE\n *\n * HTMLElement -> Element -> Node * -> EventTarget **! -> Object\n * Document -> Node * -> EventTarget **! -> Object\n * Window * -> WindowProperties ! -> EventTarget **! -> Object\n */\n _getPatchableEventTargets() {\n return window.EventTarget\n ? [EventTarget.prototype]\n : [Node.prototype, Window.prototype];\n }\n /**\n * Patches the history api\n */\n _patchHistoryApi() {\n this._unpatchHistoryApi();\n this._wrap(history, 'replaceState', this._patchHistoryMethod());\n this._wrap(history, 'pushState', this._patchHistoryMethod());\n this._wrap(history, 'back', this._patchHistoryMethod());\n this._wrap(history, 'forward', this._patchHistoryMethod());\n this._wrap(history, 'go', this._patchHistoryMethod());\n }\n /**\n * Patches the certain history api method\n */\n _patchHistoryMethod() {\n const plugin = this;\n return (original) => {\n return function patchHistoryMethod(...args) {\n const url = `${location.pathname}${location.hash}${location.search}`;\n const result = original.apply(this, args);\n const urlAfter = `${location.pathname}${location.hash}${location.search}`;\n if (url !== urlAfter) {\n plugin._updateInteractionName(urlAfter);\n }\n return result;\n };\n };\n }\n /**\n * unpatch the history api methods\n */\n _unpatchHistoryApi() {\n if (isWrapped(history.replaceState))\n this._unwrap(history, 'replaceState');\n if (isWrapped(history.pushState))\n this._unwrap(history, 'pushState');\n if (isWrapped(history.back))\n this._unwrap(history, 'back');\n if (isWrapped(history.forward))\n this._unwrap(history, 'forward');\n if (isWrapped(history.go))\n this._unwrap(history, 'go');\n }\n /**\n * Updates interaction span name\n * @param url\n */\n _updateInteractionName(url) {\n const span = api.trace.getSpan(api.context.active());\n if (span && typeof span.updateName === 'function') {\n span.updateName(`${EVENT_NAVIGATION_NAME} ${url}`);\n }\n }\n /**\n * Patches zone cancel task - this is done to be able to correctly\n * decrement the number of remaining tasks\n */\n _patchZoneCancelTask() {\n const plugin = this;\n return (original) => {\n return function patchCancelTask(task) {\n const currentZone = Zone.current;\n const currentSpan = plugin._getCurrentSpan(currentZone);\n if (currentSpan && plugin._shouldCountTask(task, currentZone)) {\n plugin._decrementTask(currentSpan);\n }\n return original.call(this, task);\n };\n };\n }\n /**\n * Patches zone schedule task - this is done to be able to correctly\n * increment the number of tasks running within current zone but also to\n * save time in case of timeout running from xhr plugin when waiting for\n * main request from PerformanceResourceTiming\n */\n _patchZoneScheduleTask() {\n const plugin = this;\n return (original) => {\n return function patchScheduleTask(task) {\n const currentZone = Zone.current;\n const currentSpan = plugin._getCurrentSpan(currentZone);\n if (currentSpan && plugin._shouldCountTask(task, currentZone)) {\n plugin._incrementTask(currentSpan);\n plugin._checkForTimeout(task, currentSpan);\n }\n return original.call(this, task);\n };\n };\n }\n /**\n * Patches zone run task - this is done to be able to create a span when\n * user interaction starts\n * @private\n */\n _patchZoneRunTask() {\n const plugin = this;\n return (original) => {\n return function patchRunTask(task, applyThis, applyArgs) {\n const event = Array.isArray(applyArgs) && applyArgs[0] instanceof Event\n ? applyArgs[0]\n : undefined;\n const target = event?.target;\n let span;\n const activeZone = this;\n if (target) {\n span = plugin._createSpan(target, task.eventName);\n if (span) {\n plugin._incrementTask(span);\n return activeZone.run(() => {\n try {\n return api.context.with(api.trace.setSpan(api.context.active(), span), () => {\n const currentZone = Zone.current;\n task._zone = currentZone;\n return original.call(currentZone, task, applyThis, applyArgs);\n });\n }\n finally {\n plugin._decrementTask(span);\n }\n });\n }\n }\n else {\n span = plugin._getCurrentSpan(activeZone);\n }\n try {\n return original.call(activeZone, task, applyThis, applyArgs);\n }\n finally {\n if (span && plugin._shouldCountTask(task, activeZone)) {\n plugin._decrementTask(span);\n }\n }\n };\n };\n }\n /**\n * Decides if task should be counted.\n * @param task\n * @param currentZone\n * @private\n */\n _shouldCountTask(task, currentZone) {\n if (task._zone) {\n currentZone = task._zone;\n }\n if (!currentZone || !task.data || task.data.isPeriodic) {\n return false;\n }\n const currentSpan = this._getCurrentSpan(currentZone);\n if (!currentSpan) {\n return false;\n }\n if (!this._spansData.get(currentSpan)) {\n return false;\n }\n return task.type === 'macroTask' || task.type === 'microTask';\n }\n /**\n * Will try to end span when such span still exists.\n * @param span\n * @param endTime\n * @private\n */\n _tryToEndSpan(span, endTime) {\n if (span) {\n const spanData = this._spansData.get(span);\n if (spanData) {\n span.end(endTime);\n this._spansData.delete(span);\n }\n }\n }\n /**\n * implements enable function\n */\n enable() {\n const ZoneWithPrototype = this._getZoneWithPrototype();\n this._diag.debug('applying patch to', this.moduleName, this.version, 'zone:', !!ZoneWithPrototype);\n if (ZoneWithPrototype) {\n if (isWrapped(ZoneWithPrototype.prototype.runTask)) {\n this._unwrap(ZoneWithPrototype.prototype, 'runTask');\n this._diag.debug('removing previous patch from method runTask');\n }\n if (isWrapped(ZoneWithPrototype.prototype.scheduleTask)) {\n this._unwrap(ZoneWithPrototype.prototype, 'scheduleTask');\n this._diag.debug('removing previous patch from method scheduleTask');\n }\n if (isWrapped(ZoneWithPrototype.prototype.cancelTask)) {\n this._unwrap(ZoneWithPrototype.prototype, 'cancelTask');\n this._diag.debug('removing previous patch from method cancelTask');\n }\n this._zonePatched = true;\n this._wrap(ZoneWithPrototype.prototype, 'runTask', this._patchZoneRunTask());\n this._wrap(ZoneWithPrototype.prototype, 'scheduleTask', this._patchZoneScheduleTask());\n this._wrap(ZoneWithPrototype.prototype, 'cancelTask', this._patchZoneCancelTask());\n }\n else {\n this._zonePatched = false;\n const targets = this._getPatchableEventTargets();\n targets.forEach(target => {\n if (isWrapped(target.addEventListener)) {\n this._unwrap(target, 'addEventListener');\n this._diag.debug('removing previous patch from method addEventListener');\n }\n if (isWrapped(target.removeEventListener)) {\n this._unwrap(target, 'removeEventListener');\n this._diag.debug('removing previous patch from method removeEventListener');\n }\n this._wrap(target, 'addEventListener', this._patchAddEventListener());\n this._wrap(target, 'removeEventListener', this._patchRemoveEventListener());\n });\n }\n this._patchHistoryApi();\n }\n /**\n * implements unpatch function\n */\n disable() {\n const ZoneWithPrototype = this._getZoneWithPrototype();\n this._diag.debug('removing patch from', this.moduleName, this.version, 'zone:', !!ZoneWithPrototype);\n if (ZoneWithPrototype && this._zonePatched) {\n if (isWrapped(ZoneWithPrototype.prototype.runTask)) {\n this._unwrap(ZoneWithPrototype.prototype, 'runTask');\n }\n if (isWrapped(ZoneWithPrototype.prototype.scheduleTask)) {\n this._unwrap(ZoneWithPrototype.prototype, 'scheduleTask');\n }\n if (isWrapped(ZoneWithPrototype.prototype.cancelTask)) {\n this._unwrap(ZoneWithPrototype.prototype, 'cancelTask');\n }\n }\n else {\n const targets = this._getPatchableEventTargets();\n targets.forEach(target => {\n if (isWrapped(target.addEventListener)) {\n this._unwrap(target, 'addEventListener');\n }\n if (isWrapped(target.removeEventListener)) {\n this._unwrap(target, 'removeEventListener');\n }\n });\n }\n this._unpatchHistoryApi();\n }\n /**\n * returns Zone\n */\n _getZoneWithPrototype() {\n const _window = window;\n return _window.Zone;\n }\n}\n//# sourceMappingURL=instrumentation.js.map","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.41\n Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.41',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 500;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HONOR = 'Honor',\n HUAWEI = 'Huawei',\n LENOVO = 'Lenovo',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n NVIDIA = 'Nvidia',\n ONEPLUS = 'OnePlus',\n OPERA = 'Opera',\n OPPO = 'OPPO',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS',\n SUFFIX_BROWSER = ' Browser';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof(str) === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY);\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return map.hasOwnProperty('*') ? map['*'] : str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bop(?:rg)?x\\/([\\w\\.]+)/i // Opera GX\n ], [VERSION, [NAME, OPERA+' GX']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i // Maxthon\n ], [VERSION, [NAME, 'Maxthon']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i, \n // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir\n // Trident based\n /(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon\n /(heytap|ovi|115)browser\\/([\\d\\.]+)/i, // HeyTap/Ovi/115\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /quark(?:pc)?\\/([-\\w\\.]+)/i // Quark\n ], [VERSION, [NAME, 'Quark']], [\n /\\bddg\\/([\\w\\.]+)/i // DuckDuckGo\n ], [VERSION, [NAME, 'DuckDuckGo']], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihoobrowser\\/?([\\w\\.]*)/i // 360\n ], [VERSION, [NAME, '360']], [\n /\\b(qq)\\/([\\w\\.]+)/i // QQ\n ], [[NAME, /(.+)/, '$1Browser'], VERSION], [\n /(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, 'Sogou Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, 'Sogou Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i // QQ/2345\n ], [NAME, VERSION], [\n /(lbbrowser|rekonq)/i, // LieBao Browser/Rekonq\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n /ome\\/([\\w\\.]+) \\w* ?(iron) saf/i, // Iron\n /ome\\/([\\w\\.]+).+qihu (360)[es]e/i // 360\n ], [VERSION, NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(Klarna)\\/([\\w\\.]+)/i, // Klarna Shopping Browser for iOS & Android\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /(daum)apps[\\/ ]([\\w\\.]+)/i, // Daum App\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i, // Twitter\n /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram/Snapchat\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(wolvic|librewolf)\\/([\\w\\.]+)/i // Wolvic/LibreWolf\n ], [NAME, VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird\n /\\b(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, [VERSION, /_/g, '.']], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /\\b((amd|x|x86[-_]?|wow|win)64)\\b/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i, // IA32 (quicktime)\n /\\b((i[346]|x)86)(pc)?\\b/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((ppc|powerpc)(64)?)( mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n / sun4\\w[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]((?!sm-[lr])[-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Honor\n /\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [\n /honor([-\\w ]+)[;\\)]/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\\w\\. ]*(?= bui|\\)))\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,\n /\\b((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\\))/i, // Xiaomi Mi\n / ([\\w ]+) miui\\/v?\\d/i\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [\n /\\b(opd2(\\d{3}a?))(?: bui|\\))/i\n ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto(?! 360)[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv|watch)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\\d{3,4}(?:f[cu]|xu|[av])|yt\\d?-[jx]?\\d+[lfmx])( bui|;|\\)|\\/)/i,\n /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [\n\n // Nokia\n /(nokia) (t[12][01])/i\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,\n /nokia[-_ ]?(([-\\w\\. ]*))/i\n ], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [\n\n // Google\n /(pixel (c|tablet))\\b/i // Google Pixel C/Tablet\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+; (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // TCL\n /droid [\\w\\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])\\w*(\\)| bui)/i\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [\n\n // itel\n /(itel) ((\\w+))/i\n ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // Energizer\n /; (energy ?\\w+)(?: bui|\\))/i,\n /; energizer ([\\w ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [\n\n // Cat\n /; cat (b35);/i,\n /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [\n\n // Smartfren\n /((?:new )?andromax[\\w- ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [\n\n // Nothing\n /droid.+; (a(?:015|06[35]|142p?))/i\n ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [\n\n // Archos\n /; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,\n /archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i\n ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [\n /archos ([\\w ]+)( b|\\))/i,\n /; (ac[3-6]\\d\\w{2,8})( b|\\))/i \n ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [\n\n // MIXED\n /(imo) (tab \\w+)/i, // IMO\n /(infinix) (x1101b?)/i // Infinix XPad\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan\n /; (hmd|imo) ([\\w ]+?)(?: bui|\\))/i, // HMD/IMO\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i, // Lenovo\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i // Nvidia Tablets\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /(shield \\w+ tv)/i // Nvidia Shield TV\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mi(tv|box)-?\\w+) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n // SmartTV from Unidentified Vendors\n /droid.+; ([\\w- ]+) (?:android tv|smart[- ]?tv)/i\n ], [MODEL, [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield)( bui|\\))/i // Nvidia Portable\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [\n /(playstation \\w+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i // Samsung Galaxy Watch\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [\n /((pebble))app/i, // Pebble\n /(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i // Asus ZenWatch / LG Watch / Pixel Watch\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch\n ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /(opwwe\\d{3})/i // OnePlus Watch\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [\n /(moto 360)/i // Motorola 360\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [\n /(smartwatch 3)/i // Sony SmartWatch\n ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [\n /(g watch r)/i // LG G Watch R\n ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n\n ///////////////////\n // XR\n ///////////////////\n\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /(pico) (4|neo3(?: link|pro)?)/i // Pico\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /; (quest( \\d| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n /(homepod).+mac os/i // Apple HomePod\n ], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [\n /windows iot/i\n ], [[TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /droid .+?; ([\\w\\. -]+)( bui|\\))/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /(arkweb)\\/([\\w\\.]+)/i // ArkWeb\n ], [NAME, VERSION], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n\n /\\b(libweb)/i // LibWeb\n ], [NAME, VERSION], [\n /ladybird\\//i\n ], [[NAME, 'LibWeb']], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows (?:phone(?: os)?|mobile|iot))[\\/ ]?([\\d\\.\\w ]*)/i // Windows Phone\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /windows nt 6\\.2; (arm)/i, // Windows RT\n /windows[\\/ ]([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n // iOS/macOS\n /[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ \n /(ubuntu) ([\\w\\.]+) like android/i // Ubuntu Touch\n ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [\n // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen\n /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\\w*[-\\/; ]?([\\d\\.]*)/i\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux)(?: arm\\w*| x86\\w*| ?)([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","import { ITracingService } from './interfaces/ITracingService';\nimport { trace, Span, SpanStatusCode, context, TraceFlags } from '@opentelemetry/api';\nimport { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport { BatchSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/sdk-trace-base';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { ZoneContextManager } from '@opentelemetry/context-zone';\nimport { W3CTraceContextPropagator } from '@opentelemetry/core';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { UserInteractionInstrumentation } from '@opentelemetry/instrumentation-user-interaction';\nimport UAParser from 'ua-parser-js';\n\n// Semantic convention attribute names\nconst ATTR_SERVICE_NAME = 'service.name';\nconst ATTR_SERVICE_VERSION = 'service.version';\n\n// Token de autenticación para OpenTelemetry Collector\nconst AUTH_TOKEN = 'eAzROSTiqNd3i+M9Jw6q5Tld0jarZc617sJB//pvb5c=';\n\n// Instalar interceptores globalmente UNA SOLA VEZ antes de cualquier inicialización\nlet interceptorsInstalled = false;\n\nfunction installAuthInterceptors(): void {\n if (interceptorsInstalled) {\n return;\n }\n\n interceptorsInstalled = true;\n\n // Guardar referencia al XHR original ANTES de que OpenTelemetry lo toque\n const RealXHR = (window as any).XMLHttpRequest;\n\n if (!RealXHR) {\n console.error('[TracingService] XMLHttpRequest not available');\n return;\n }\n\n // Crear wrapper que agrega el header\n (window as any).XMLHttpRequest = function() {\n const xhr = new RealXHR();\n const originalOpen = xhr.open;\n const originalSend = xhr.send;\n let isCollectorRequest = false;\n\n xhr.open = function(method: string, url: string | URL, ...args: any[]) {\n const urlString = typeof url === 'string' ? url : url.toString();\n isCollectorRequest = urlString.includes('collector.jaak.ai');\n return originalOpen.apply(this, [method, url, ...args]);\n };\n\n xhr.send = function(...args: any[]) {\n if (isCollectorRequest) {\n this.setRequestHeader('Authorization', `Bearer ${AUTH_TOKEN}`);\n }\n return originalSend.apply(this, args);\n };\n\n return xhr;\n };\n\n // Copiar propiedades del constructor original\n for (const prop in RealXHR) {\n if (RealXHR.hasOwnProperty(prop)) {\n (window as any).XMLHttpRequest[prop] = RealXHR[prop];\n }\n }\n\n // También interceptar fetch por si el SDK lo usa en lugar de XHR\n const originalFetch = window.fetch;\n window.fetch = function(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : (input as Request).url;\n\n if (url.includes('collector.jaak.ai')) {\n const headers = new Headers(init?.headers || {});\n headers.set('Authorization', `Bearer ${AUTH_TOKEN}`);\n\n init = {\n ...init,\n headers: headers,\n };\n }\n\n return originalFetch.call(this, input, init);\n };\n\n // Deshabilitar sendBeacon globalmente porque no soporta headers personalizados\n (navigator as any).sendBeacon = function() {\n return false; // Retornar false fuerza al SDK a usar XHR/Fetch como fallback\n };\n}\n\ninterface GeoLocation {\n country?: string;\n region?: string;\n city?: string;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface TracingConfig {\n collectorUrl?: string;\n serviceName?: string;\n serviceVersion?: string;\n debug?: boolean;\n customerId?: string;\n tenantId?: string;\n environment?: string;\n propagateTraceHeaderCorsUrls?: (string | RegExp)[];\n enableAutoInstrumentation?: boolean;\n}\n\nexport class TracingService implements ITracingService {\n private provider: WebTracerProvider | null = null;\n private tracer: any = null;\n private sessionTraceId: string | null = null;\n private readonly collectorUrl: string;\n private readonly serviceName: string;\n private readonly serviceVersion: string;\n private readonly debug: boolean;\n private readonly customerId?: string;\n private readonly tenantId?: string;\n private readonly environment?: string;\n private readonly enableAutoInstrumentation: boolean;\n private spanProcessor: BatchSpanProcessor | null = null;\n private parser: UAParser;\n private geoCache: GeoLocation | null = null;\n private geoCacheTimestamp: number = 0;\n private readonly GEO_CACHE_DURATION_MS = 60 * 60 * 1000; // 1 hour\n\n constructor(config: TracingConfig = {}) {\n this.collectorUrl = config.collectorUrl || 'https://collector.jaak.ai/v1/traces';\n this.serviceName = config.serviceName || 'jaak-stamps-webcomponent';\n this.serviceVersion = config.serviceVersion || '2.1.0';\n this.debug = config.debug || false;\n this.customerId = config.customerId;\n this.tenantId = config.tenantId;\n this.environment = config.environment || 'production';\n this.enableAutoInstrumentation = config.enableAutoInstrumentation ?? false; // Default to false\n this.parser = new UAParser();\n }\n\n initialize(): void {\n try {\n // Instalar interceptores de autenticación ANTES de crear el exporter\n installAuthInterceptors();\n\n // Create OTLP exporter\n const baseExporter = new OTLPTraceExporter({\n url: this.collectorUrl,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${AUTH_TOKEN}`,\n },\n // @ts-ignore - useSendBeacon no está en los tipos pero es soportada\n useSendBeacon: false,\n });\n\n // Wrap exporter to log export attempts\n const exporter = {\n export: (spans: any, resultCallback: any) => {\n if (this.debug) {\n console.log('[TracingService] 📤 Exporting', spans.length, 'spans to collector');\n }\n\n baseExporter.export(spans, (result: any) => {\n if (result.code !== 0) {\n console.error('[TracingService] ❌ Export failed:', result);\n }\n resultCallback(result);\n });\n },\n shutdown: async () => {\n return baseExporter.shutdown();\n },\n forceFlush: async () => {\n return baseExporter.forceFlush();\n },\n } as any;\n\n // Create console exporter for debug mode\n const exporters: any[] = [exporter];\n if (this.debug) {\n exporters.push(new ConsoleSpanExporter());\n }\n\n // Create batch span processor for each exporter\n this.spanProcessor = new BatchSpanProcessor(exporter, {\n maxQueueSize: 100,\n maxExportBatchSize: 10,\n scheduledDelayMillis: 5000,\n exportTimeoutMillis: 30000,\n });\n\n // Create resource attributes\n const resourceAttributes: Record<string, string> = {\n [ATTR_SERVICE_NAME]: this.serviceName,\n [ATTR_SERVICE_VERSION]: this.serviceVersion,\n 'deployment.environment': this.environment,\n };\n\n if (this.customerId) {\n resourceAttributes['customer.id'] = this.customerId;\n }\n\n if (this.tenantId) {\n resourceAttributes['tenant.id'] = this.tenantId;\n }\n\n // Create tracer provider with span processor in constructor\n this.provider = new WebTracerProvider({\n spanProcessors: [this.spanProcessor],\n });\n\n // Configure context manager (Zone.js for async context propagation)\n const contextManager = new ZoneContextManager();\n\n // Configure propagators (W3C Trace Context + B3 for compatibility)\n const propagator = new W3CTraceContextPropagator();\n\n // Register the provider globally with context manager and propagator\n this.provider.register({\n contextManager: contextManager,\n propagator: propagator,\n });\n\n // Get tracer with service metadata\n this.tracer = trace.getTracer(this.serviceName, this.serviceVersion);\n\n // Initialize auto-instrumentation if enabled\n if (this.enableAutoInstrumentation) {\n this.initializeAutoInstrumentation();\n }\n } catch (error) {\n console.error('[TracingService] Failed to initialize:', error);\n // Don't throw - telemetry should fail silently in production\n }\n }\n\n private initializeAutoInstrumentation(): void {\n try {\n // NOTE: XHR and Fetch instrumentation are disabled because we manually intercept\n // them to add authentication headers. Enabling them causes conflicts.\n\n // NOTE: DocumentLoadInstrumentation is disabled because it captures events that\n // occurred before the component initialized, and cannot use custom trace IDs.\n\n // Only enable user interaction instrumentation\n registerInstrumentations({\n instrumentations: [\n // User interaction instrumentation (clicks, etc.)\n new UserInteractionInstrumentation({\n eventNames: ['click', 'submit'],\n shouldPreventSpanCreation: (_eventType: string, element: HTMLElement) => {\n // Don't create spans for every click, only important ones\n return element.tagName === 'BUTTON' || element.tagName === 'A' || element.tagName === 'FORM';\n },\n }),\n ],\n });\n } catch (error) {\n console.error('[TracingService] Failed to initialize auto-instrumentation:', error);\n }\n }\n\n private getDeviceInfo() {\n const result = this.parser.getResult();\n return {\n type: result.device.type || 'desktop',\n vendor: result.device.vendor || 'unknown',\n model: result.device.model || 'unknown',\n };\n }\n\n private getBrowserInfo() {\n const result = this.parser.getResult();\n return {\n name: result.browser.name || 'unknown',\n version: result.browser.version || 'unknown',\n major: result.browser.major || 'unknown',\n };\n }\n\n private getOSInfo() {\n const result = this.parser.getResult();\n return {\n name: result.os.name || 'unknown',\n version: result.os.version || 'unknown',\n };\n }\n\n /**\n * Set the session trace ID from external source (license or component prop)\n * @param traceId - The trace ID to use for all spans (32 hex characters)\n */\n setSessionTraceId(traceId: string | null): void {\n if (traceId && traceId.length === 32 && /^[a-f0-9]{32}$/i.test(traceId)) {\n this.sessionTraceId = traceId.toLowerCase();\n if (this.debug) {\n console.log('[TracingService] Session trace ID set:', this.sessionTraceId);\n }\n } else if (traceId) {\n console.warn('[TracingService] Invalid trace ID format. Must be 32 hex characters:', traceId);\n }\n }\n\n /**\n * Get the current session trace ID\n */\n getSessionTraceId(): string | null {\n return this.sessionTraceId;\n }\n\n /**\n * Generate a random span ID (16 hex characters)\n */\n private generateSpanId(): string {\n const bytes = new Uint8Array(8);\n crypto.getRandomValues(bytes);\n return Array.from(bytes)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n }\n\n private async getGeoLocation(): Promise<GeoLocation> {\n const now = Date.now();\n\n // Return cached value if still valid\n if (this.geoCache && (now - this.geoCacheTimestamp) < this.GEO_CACHE_DURATION_MS) {\n return this.geoCache;\n }\n\n try {\n const response = await fetch('https://ipapi.co/json/', {\n signal: AbortSignal.timeout(5000), // 5 second timeout\n });\n\n if (!response.ok) {\n return {};\n }\n\n const data = await response.json();\n this.geoCache = {\n country: data.country_name,\n region: data.region,\n city: data.city,\n latitude: data.latitude,\n longitude: data.longitude,\n };\n this.geoCacheTimestamp = now;\n\n return this.geoCache;\n } catch (error) {\n console.warn('[TracingService] Failed to fetch geo location:', error);\n return this.geoCache || {};\n }\n }\n\n startSpan(name: string, attributes?: Record<string, any>): Span {\n if (!this.tracer) {\n console.warn('[TracingService] Tracer not initialized, returning no-op span');\n return trace.getTracer('noop').startSpan('noop');\n }\n\n try {\n let currentContext = context.active();\n\n // If we have a session trace ID and there's no active span, create a root span context\n if (this.sessionTraceId && !trace.getSpan(currentContext)) {\n // Create a valid span context for the custom trace ID\n const remoteSpanContext = {\n traceId: this.sessionTraceId,\n spanId: this.generateSpanId(),\n traceFlags: TraceFlags.SAMPLED,\n isRemote: true,\n };\n\n // Create a non-recording span with the custom trace context\n const remoteSpan = trace.wrapSpanContext(remoteSpanContext);\n\n // Set this span in the context so child spans inherit the trace ID\n currentContext = trace.setSpan(currentContext, remoteSpan);\n }\n\n // Get device info\n const deviceInfo = this.getDeviceInfo();\n const browserInfo = this.getBrowserInfo();\n const osInfo = this.getOSInfo();\n\n const span = this.tracer.startSpan(name, {\n attributes: {\n ...attributes,\n 'component': this.serviceName.includes('stamps') ? 'jaak-stamps' : 'jaak-visage',\n [ATTR_SERVICE_NAME]: this.serviceName,\n [ATTR_SERVICE_VERSION]: this.serviceVersion,\n 'deployment.environment': this.environment,\n\n // Add trace.id attribute for easy filtering\n 'trace.id': this.sessionTraceId || 'auto-generated',\n\n // Device info\n 'device.type': deviceInfo.type,\n 'device.vendor': deviceInfo.vendor,\n 'device.model': deviceInfo.model,\n\n // Browser info\n 'browser.name': browserInfo.name,\n 'browser.version': browserInfo.version,\n 'browser.major': browserInfo.major,\n\n // OS info\n 'os.name': osInfo.name,\n 'os.version': osInfo.version,\n\n // User agent\n 'user_agent': navigator.userAgent,\n\n ...(this.customerId && { 'customer.id': this.customerId }),\n ...(this.tenantId && { 'tenant.id': this.tenantId }),\n },\n }, currentContext);\n\n // Async add geo location (non-blocking)\n this.getGeoLocation().then(geo => {\n if (geo.country) span.setAttribute('geo.country', geo.country);\n if (geo.region) span.setAttribute('geo.region', geo.region);\n if (geo.city) span.setAttribute('geo.city', geo.city);\n }).catch(err => console.warn('Failed to add geo attributes:', err));\n\n if (this.debug) {\n console.log(`[TracingService] Started span: ${name}`, {\n traceId: span.spanContext().traceId,\n spanId: span.spanContext().spanId,\n sessionTraceId: this.sessionTraceId,\n attributes,\n });\n }\n\n return span;\n } catch (error) {\n console.error('[TracingService] Failed to start span:', error);\n return trace.getTracer('noop').startSpan('noop');\n }\n }\n\n endSpan(span: Span): void {\n if (!span) {\n console.warn('[TracingService] endSpan called with null/undefined span');\n return;\n }\n\n try {\n span.end();\n } catch (error) {\n console.error('[TracingService] ❌ Failed to end span:', error);\n }\n }\n\n addSpanEvent(span: Span, name: string, attributes?: Record<string, any>): void {\n if (!span) return;\n\n try {\n span.addEvent(name, attributes);\n\n if (this.debug) {\n console.log(`[TracingService] Added event to span: ${name}`, attributes);\n }\n } catch (error) {\n console.error('[TracingService] Failed to add span event:', error);\n }\n }\n\n recordException(span: Span, error: Error): void {\n if (!span) return;\n\n try {\n span.recordException(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n } catch (err) {\n console.error('[TracingService] Failed to record exception:', err);\n }\n }\n\n setSpanAttribute(span: Span, key: string, value: any): void {\n if (!span) return;\n\n try {\n span.setAttribute(key, value);\n\n if (this.debug) {\n console.log(`[TracingService] Set attribute: ${key} = ${value}`);\n }\n } catch (error) {\n console.error('[TracingService] Failed to set span attribute:', error);\n }\n }\n\n async trace<T>(name: string, fn: () => T | Promise<T>, attributes?: Record<string, any>): Promise<T> {\n const span = this.startSpan(name, attributes);\n\n try {\n // Run the function within the span context\n const result = await context.with(trace.setSpan(context.active(), span), async () => {\n return await fn();\n });\n\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n this.recordException(span, error as Error);\n throw error;\n } finally {\n this.endSpan(span);\n }\n }\n\n async traceAsync<T>(name: string, fn: () => Promise<T>, attributes?: Record<string, any>): Promise<T> {\n return this.trace(name, fn, attributes);\n }\n\n /**\n * Flush all pending spans to the collector\n * Call this when capture/process is complete to send all traces\n */\n async flush(): Promise<void> {\n try {\n if (!this.spanProcessor) {\n console.warn('[TracingService] No span processor available to flush');\n return;\n }\n\n await this.spanProcessor.forceFlush();\n } catch (error) {\n console.error('[TracingService] ❌ Failed to flush spans:', error);\n throw error;\n }\n }\n\n async cleanup(): Promise<void> {\n try {\n if (this.spanProcessor) {\n await this.spanProcessor.forceFlush();\n await this.spanProcessor.shutdown();\n }\n\n if (this.provider) {\n await this.provider.shutdown();\n }\n } catch (error) {\n console.error('[TracingService] Failed to cleanup:', error);\n }\n }\n\n /**\n * Get the current trace ID (useful for logging correlation)\n */\n getCurrentTraceId(): string | undefined {\n try {\n const span = trace.getSpan(context.active());\n return span?.spanContext().traceId;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get the current span ID\n */\n getCurrentSpanId(): string | undefined {\n try {\n const span = trace.getSpan(context.active());\n return span?.spanContext().spanId;\n } catch {\n return undefined;\n }\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * AggregationTemporality indicates the way additive quantities are expressed.\n */\nexport var AggregationTemporality;\n(function (AggregationTemporality) {\n AggregationTemporality[AggregationTemporality[\"DELTA\"] = 0] = \"DELTA\";\n AggregationTemporality[AggregationTemporality[\"CUMULATIVE\"] = 1] = \"CUMULATIVE\";\n})(AggregationTemporality || (AggregationTemporality = {}));\n//# sourceMappingURL=AggregationTemporality.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Supported types of metric instruments.\n */\nexport var InstrumentType;\n(function (InstrumentType) {\n InstrumentType[\"COUNTER\"] = \"COUNTER\";\n InstrumentType[\"GAUGE\"] = \"GAUGE\";\n InstrumentType[\"HISTOGRAM\"] = \"HISTOGRAM\";\n InstrumentType[\"UP_DOWN_COUNTER\"] = \"UP_DOWN_COUNTER\";\n InstrumentType[\"OBSERVABLE_COUNTER\"] = \"OBSERVABLE_COUNTER\";\n InstrumentType[\"OBSERVABLE_GAUGE\"] = \"OBSERVABLE_GAUGE\";\n InstrumentType[\"OBSERVABLE_UP_DOWN_COUNTER\"] = \"OBSERVABLE_UP_DOWN_COUNTER\";\n})(InstrumentType || (InstrumentType = {}));\n/**\n * The aggregated point data type.\n */\nexport var DataPointType;\n(function (DataPointType) {\n /**\n * A histogram data point contains a histogram statistics of collected\n * values with a list of explicit bucket boundaries and statistics such\n * as min, max, count, and sum of all collected values.\n */\n DataPointType[DataPointType[\"HISTOGRAM\"] = 0] = \"HISTOGRAM\";\n /**\n * An exponential histogram data point contains a histogram statistics of\n * collected values where bucket boundaries are automatically calculated\n * using an exponential function, and statistics such as min, max, count,\n * and sum of all collected values.\n */\n DataPointType[DataPointType[\"EXPONENTIAL_HISTOGRAM\"] = 1] = \"EXPONENTIAL_HISTOGRAM\";\n /**\n * A gauge metric data point has only a single numeric value.\n */\n DataPointType[DataPointType[\"GAUGE\"] = 2] = \"GAUGE\";\n /**\n * A sum metric data point has a single numeric value and a\n * monotonicity-indicator.\n */\n DataPointType[DataPointType[\"SUM\"] = 3] = \"SUM\";\n})(DataPointType || (DataPointType = {}));\n//# sourceMappingURL=MetricData.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Converting the unordered attributes into unique identifier string.\n * @param attributes user provided unordered Attributes.\n */\nexport function hashAttributes(attributes) {\n let keys = Object.keys(attributes);\n if (keys.length === 0)\n return '';\n // Return a string that is stable on key orders.\n keys = keys.sort();\n return JSON.stringify(keys.map(key => [key, attributes[key]]));\n}\n/**\n * Converting the instrumentation scope object to a unique identifier string.\n * @param instrumentationScope\n */\nexport function instrumentationScopeId(instrumentationScope) {\n return `${instrumentationScope.name}:${instrumentationScope.version ?? ''}:${instrumentationScope.schemaUrl ?? ''}`;\n}\n/**\n * Error that is thrown on timeouts.\n */\nexport class TimeoutError extends Error {\n constructor(message) {\n super(message);\n // manually adjust prototype to retain `instanceof` functionality when targeting ES5, see:\n // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n/**\n * Adds a timeout to a promise and rejects if the specified timeout has elapsed. Also rejects if the specified promise\n * rejects, and resolves if the specified promise resolves.\n *\n * <p> NOTE: this operation will continue even after it throws a {@link TimeoutError}.\n *\n * @param promise promise to use with timeout.\n * @param timeout the timeout in milliseconds until the returned promise is rejected.\n */\nexport function callWithTimeout(promise, timeout) {\n let timeoutHandle;\n const timeoutPromise = new Promise(function timeoutFunction(_resolve, reject) {\n timeoutHandle = setTimeout(function timeoutHandler() {\n reject(new TimeoutError('Operation timed out.'));\n }, timeout);\n });\n return Promise.race([promise, timeoutPromise]).then(result => {\n clearTimeout(timeoutHandle);\n return result;\n }, reason => {\n clearTimeout(timeoutHandle);\n throw reason;\n });\n}\nexport function setEquals(lhs, rhs) {\n if (lhs.size !== rhs.size) {\n return false;\n }\n for (const item of lhs) {\n if (!rhs.has(item)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Binary search the sorted array to the find upper bound for the value.\n * @param arr\n * @param value\n * @returns\n */\nexport function binarySearchUB(arr, value) {\n let lo = 0;\n let hi = arr.length - 1;\n let ret = arr.length;\n while (hi >= lo) {\n const mid = lo + Math.trunc((hi - lo) / 2);\n if (arr[mid] < value) {\n lo = mid + 1;\n }\n else {\n ret = mid;\n hi = mid - 1;\n }\n }\n return ret;\n}\nexport function equalsCaseInsensitive(lhs, rhs) {\n return lhs.toLowerCase() === rhs.toLowerCase();\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/** The kind of aggregator. */\nexport var AggregatorKind;\n(function (AggregatorKind) {\n AggregatorKind[AggregatorKind[\"DROP\"] = 0] = \"DROP\";\n AggregatorKind[AggregatorKind[\"SUM\"] = 1] = \"SUM\";\n AggregatorKind[AggregatorKind[\"LAST_VALUE\"] = 2] = \"LAST_VALUE\";\n AggregatorKind[AggregatorKind[\"HISTOGRAM\"] = 3] = \"HISTOGRAM\";\n AggregatorKind[AggregatorKind[\"EXPONENTIAL_HISTOGRAM\"] = 4] = \"EXPONENTIAL_HISTOGRAM\";\n})(AggregatorKind || (AggregatorKind = {}));\n//# sourceMappingURL=types.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregatorKind } from './types';\n/** Basic aggregator for None which keeps no recorded value. */\nexport class DropAggregator {\n kind = AggregatorKind.DROP;\n createAccumulation() {\n return undefined;\n }\n merge(_previous, _delta) {\n return undefined;\n }\n diff(_previous, _current) {\n return undefined;\n }\n toMetricData(_descriptor, _aggregationTemporality, _accumulationByAttributes, _endTime) {\n return undefined;\n }\n}\n//# sourceMappingURL=Drop.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregatorKind, } from './types';\nimport { DataPointType, InstrumentType, } from '../export/MetricData';\nimport { binarySearchUB } from '../utils';\nfunction createNewEmptyCheckpoint(boundaries) {\n const counts = boundaries.map(() => 0);\n counts.push(0);\n return {\n buckets: {\n boundaries,\n counts,\n },\n sum: 0,\n count: 0,\n hasMinMax: false,\n min: Infinity,\n max: -Infinity,\n };\n}\nexport class HistogramAccumulation {\n startTime;\n _boundaries;\n _recordMinMax;\n _current;\n constructor(startTime, boundaries, recordMinMax = true, current = createNewEmptyCheckpoint(boundaries)) {\n this.startTime = startTime;\n this._boundaries = boundaries;\n this._recordMinMax = recordMinMax;\n this._current = current;\n }\n record(value) {\n // NaN does not fall into any bucket, is not zero and should not be counted,\n // NaN is never greater than max nor less than min, therefore return as there's nothing for us to do.\n if (Number.isNaN(value)) {\n return;\n }\n this._current.count += 1;\n this._current.sum += value;\n if (this._recordMinMax) {\n this._current.min = Math.min(value, this._current.min);\n this._current.max = Math.max(value, this._current.max);\n this._current.hasMinMax = true;\n }\n const idx = binarySearchUB(this._boundaries, value);\n this._current.buckets.counts[idx] += 1;\n }\n setStartTime(startTime) {\n this.startTime = startTime;\n }\n toPointValue() {\n return this._current;\n }\n}\n/**\n * Basic aggregator which observes events and counts them in pre-defined buckets\n * and provides the total sum and count of all observations.\n */\nexport class HistogramAggregator {\n kind = AggregatorKind.HISTOGRAM;\n _boundaries;\n _recordMinMax;\n /**\n * @param _boundaries sorted upper bounds of recorded values.\n * @param _recordMinMax If set to true, min and max will be recorded. Otherwise, min and max will not be recorded.\n */\n constructor(boundaries, recordMinMax) {\n this._boundaries = boundaries;\n this._recordMinMax = recordMinMax;\n }\n createAccumulation(startTime) {\n return new HistogramAccumulation(startTime, this._boundaries, this._recordMinMax);\n }\n /**\n * Return the result of the merge of two histogram accumulations. As long as one Aggregator\n * instance produces all Accumulations with constant boundaries we don't need to worry about\n * merging accumulations with different boundaries.\n */\n merge(previous, delta) {\n const previousValue = previous.toPointValue();\n const deltaValue = delta.toPointValue();\n const previousCounts = previousValue.buckets.counts;\n const deltaCounts = deltaValue.buckets.counts;\n const mergedCounts = new Array(previousCounts.length);\n for (let idx = 0; idx < previousCounts.length; idx++) {\n mergedCounts[idx] = previousCounts[idx] + deltaCounts[idx];\n }\n let min = Infinity;\n let max = -Infinity;\n if (this._recordMinMax) {\n if (previousValue.hasMinMax && deltaValue.hasMinMax) {\n min = Math.min(previousValue.min, deltaValue.min);\n max = Math.max(previousValue.max, deltaValue.max);\n }\n else if (previousValue.hasMinMax) {\n min = previousValue.min;\n max = previousValue.max;\n }\n else if (deltaValue.hasMinMax) {\n min = deltaValue.min;\n max = deltaValue.max;\n }\n }\n return new HistogramAccumulation(previous.startTime, previousValue.buckets.boundaries, this._recordMinMax, {\n buckets: {\n boundaries: previousValue.buckets.boundaries,\n counts: mergedCounts,\n },\n count: previousValue.count + deltaValue.count,\n sum: previousValue.sum + deltaValue.sum,\n hasMinMax: this._recordMinMax &&\n (previousValue.hasMinMax || deltaValue.hasMinMax),\n min: min,\n max: max,\n });\n }\n /**\n * Returns a new DELTA aggregation by comparing two cumulative measurements.\n */\n diff(previous, current) {\n const previousValue = previous.toPointValue();\n const currentValue = current.toPointValue();\n const previousCounts = previousValue.buckets.counts;\n const currentCounts = currentValue.buckets.counts;\n const diffedCounts = new Array(previousCounts.length);\n for (let idx = 0; idx < previousCounts.length; idx++) {\n diffedCounts[idx] = currentCounts[idx] - previousCounts[idx];\n }\n return new HistogramAccumulation(current.startTime, previousValue.buckets.boundaries, this._recordMinMax, {\n buckets: {\n boundaries: previousValue.buckets.boundaries,\n counts: diffedCounts,\n },\n count: currentValue.count - previousValue.count,\n sum: currentValue.sum - previousValue.sum,\n hasMinMax: false,\n min: Infinity,\n max: -Infinity,\n });\n }\n toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) {\n return {\n descriptor,\n aggregationTemporality,\n dataPointType: DataPointType.HISTOGRAM,\n dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => {\n const pointValue = accumulation.toPointValue();\n // determine if instrument allows negative values.\n const allowsNegativeValues = descriptor.type === InstrumentType.GAUGE ||\n descriptor.type === InstrumentType.UP_DOWN_COUNTER ||\n descriptor.type === InstrumentType.OBSERVABLE_GAUGE ||\n descriptor.type === InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n return {\n attributes,\n startTime: accumulation.startTime,\n endTime,\n value: {\n min: pointValue.hasMinMax ? pointValue.min : undefined,\n max: pointValue.hasMinMax ? pointValue.max : undefined,\n sum: !allowsNegativeValues ? pointValue.sum : undefined,\n buckets: pointValue.buckets,\n count: pointValue.count,\n },\n };\n }),\n };\n }\n}\n//# sourceMappingURL=Histogram.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport class Buckets {\n backing;\n indexBase;\n indexStart;\n indexEnd;\n /**\n * The term index refers to the number of the exponential histogram bucket\n * used to determine its boundaries. The lower boundary of a bucket is\n * determined by base ** index and the upper boundary of a bucket is\n * determined by base ** (index + 1). index values are signed to account\n * for values less than or equal to 1.\n *\n * indexBase is the index of the 0th position in the\n * backing array, i.e., backing[0] is the count\n * in the bucket with index `indexBase`.\n *\n * indexStart is the smallest index value represented\n * in the backing array.\n *\n * indexEnd is the largest index value represented in\n * the backing array.\n */\n constructor(backing = new BucketsBacking(), indexBase = 0, indexStart = 0, indexEnd = 0) {\n this.backing = backing;\n this.indexBase = indexBase;\n this.indexStart = indexStart;\n this.indexEnd = indexEnd;\n }\n /**\n * Offset is the bucket index of the smallest entry in the counts array\n * @returns {number}\n */\n get offset() {\n return this.indexStart;\n }\n /**\n * Buckets is a view into the backing array.\n * @returns {number}\n */\n get length() {\n if (this.backing.length === 0) {\n return 0;\n }\n if (this.indexEnd === this.indexStart && this.at(0) === 0) {\n return 0;\n }\n return this.indexEnd - this.indexStart + 1;\n }\n /**\n * An array of counts, where count[i] carries the count\n * of the bucket at index (offset+i). count[i] is the count of\n * values greater than base^(offset+i) and less than or equal to\n * base^(offset+i+1).\n * @returns {number} The logical counts based on the backing array\n */\n counts() {\n return Array.from({ length: this.length }, (_, i) => this.at(i));\n }\n /**\n * At returns the count of the bucket at a position in the logical\n * array of counts.\n * @param position\n * @returns {number}\n */\n at(position) {\n const bias = this.indexBase - this.indexStart;\n if (position < bias) {\n position += this.backing.length;\n }\n position -= bias;\n return this.backing.countAt(position);\n }\n /**\n * incrementBucket increments the backing array index by `increment`\n * @param bucketIndex\n * @param increment\n */\n incrementBucket(bucketIndex, increment) {\n this.backing.increment(bucketIndex, increment);\n }\n /**\n * decrementBucket decrements the backing array index by `decrement`\n * if decrement is greater than the current value, it's set to 0.\n * @param bucketIndex\n * @param decrement\n */\n decrementBucket(bucketIndex, decrement) {\n this.backing.decrement(bucketIndex, decrement);\n }\n /**\n * trim removes leading and / or trailing zero buckets (which can occur\n * after diffing two histos) and rotates the backing array so that the\n * smallest non-zero index is in the 0th position of the backing array\n */\n trim() {\n for (let i = 0; i < this.length; i++) {\n if (this.at(i) !== 0) {\n this.indexStart += i;\n break;\n }\n else if (i === this.length - 1) {\n //the entire array is zeroed out\n this.indexStart = this.indexEnd = this.indexBase = 0;\n return;\n }\n }\n for (let i = this.length - 1; i >= 0; i--) {\n if (this.at(i) !== 0) {\n this.indexEnd -= this.length - i - 1;\n break;\n }\n }\n this._rotate();\n }\n /**\n * downscale first rotates, then collapses 2**`by`-to-1 buckets.\n * @param by\n */\n downscale(by) {\n this._rotate();\n const size = 1 + this.indexEnd - this.indexStart;\n const each = 1 << by;\n let inpos = 0;\n let outpos = 0;\n for (let pos = this.indexStart; pos <= this.indexEnd;) {\n let mod = pos % each;\n if (mod < 0) {\n mod += each;\n }\n for (let i = mod; i < each && inpos < size; i++) {\n this._relocateBucket(outpos, inpos);\n inpos++;\n pos++;\n }\n outpos++;\n }\n this.indexStart >>= by;\n this.indexEnd >>= by;\n this.indexBase = this.indexStart;\n }\n /**\n * Clone returns a deep copy of Buckets\n * @returns {Buckets}\n */\n clone() {\n return new Buckets(this.backing.clone(), this.indexBase, this.indexStart, this.indexEnd);\n }\n /**\n * _rotate shifts the backing array contents so that indexStart ==\n * indexBase to simplify the downscale logic.\n */\n _rotate() {\n const bias = this.indexBase - this.indexStart;\n if (bias === 0) {\n return;\n }\n else if (bias > 0) {\n this.backing.reverse(0, this.backing.length);\n this.backing.reverse(0, bias);\n this.backing.reverse(bias, this.backing.length);\n }\n else {\n // negative bias, this can happen when diffing two histograms\n this.backing.reverse(0, this.backing.length);\n this.backing.reverse(0, this.backing.length + bias);\n }\n this.indexBase = this.indexStart;\n }\n /**\n * _relocateBucket adds the count in counts[src] to counts[dest] and\n * resets count[src] to zero.\n */\n _relocateBucket(dest, src) {\n if (dest === src) {\n return;\n }\n this.incrementBucket(dest, this.backing.emptyBucket(src));\n }\n}\n/**\n * BucketsBacking holds the raw buckets and some utility methods to\n * manage them.\n */\nclass BucketsBacking {\n _counts;\n constructor(counts = [0]) {\n this._counts = counts;\n }\n /**\n * length returns the physical size of the backing array, which\n * is >= buckets.length()\n */\n get length() {\n return this._counts.length;\n }\n /**\n * countAt returns the count in a specific bucket\n */\n countAt(pos) {\n return this._counts[pos];\n }\n /**\n * growTo grows a backing array and copies old entries\n * into their correct new positions.\n */\n growTo(newSize, oldPositiveLimit, newPositiveLimit) {\n const tmp = new Array(newSize).fill(0);\n tmp.splice(newPositiveLimit, this._counts.length - oldPositiveLimit, ...this._counts.slice(oldPositiveLimit));\n tmp.splice(0, oldPositiveLimit, ...this._counts.slice(0, oldPositiveLimit));\n this._counts = tmp;\n }\n /**\n * reverse the items in the backing array in the range [from, limit).\n */\n reverse(from, limit) {\n const num = Math.floor((from + limit) / 2) - from;\n for (let i = 0; i < num; i++) {\n const tmp = this._counts[from + i];\n this._counts[from + i] = this._counts[limit - i - 1];\n this._counts[limit - i - 1] = tmp;\n }\n }\n /**\n * emptyBucket empties the count from a bucket, for\n * moving into another.\n */\n emptyBucket(src) {\n const tmp = this._counts[src];\n this._counts[src] = 0;\n return tmp;\n }\n /**\n * increments a bucket by `increment`\n */\n increment(bucketIndex, increment) {\n this._counts[bucketIndex] += increment;\n }\n /**\n * decrements a bucket by `decrement`\n */\n decrement(bucketIndex, decrement) {\n if (this._counts[bucketIndex] >= decrement) {\n this._counts[bucketIndex] -= decrement;\n }\n else {\n // this should not happen, but we're being defensive against\n // negative counts.\n this._counts[bucketIndex] = 0;\n }\n }\n /**\n * clone returns a deep copy of BucketsBacking\n */\n clone() {\n return new BucketsBacking([...this._counts]);\n }\n}\n//# sourceMappingURL=Buckets.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * The functions and constants in this file allow us to interact\n * with the internal representation of an IEEE 64-bit floating point\n * number. We need to work with all 64-bits, thus, care needs to be\n * taken when working with Javascript's bitwise operators (<<, >>, &,\n * |, etc) as they truncate operands to 32-bits. In order to work around\n * this we work with the 64-bits as two 32-bit halves, perform bitwise\n * operations on them independently, and combine the results (if needed).\n */\nexport const SIGNIFICAND_WIDTH = 52;\n/**\n * EXPONENT_MASK is set to 1 for the hi 32-bits of an IEEE 754\n * floating point exponent: 0x7ff00000.\n */\nconst EXPONENT_MASK = 0x7ff00000;\n/**\n * SIGNIFICAND_MASK is the mask for the significand portion of the hi 32-bits\n * of an IEEE 754 double-precision floating-point value: 0xfffff\n */\nconst SIGNIFICAND_MASK = 0xfffff;\n/**\n * EXPONENT_BIAS is the exponent bias specified for encoding\n * the IEEE 754 double-precision floating point exponent: 1023\n */\nconst EXPONENT_BIAS = 1023;\n/**\n * MIN_NORMAL_EXPONENT is the minimum exponent of a normalized\n * floating point: -1022.\n */\nexport const MIN_NORMAL_EXPONENT = -EXPONENT_BIAS + 1;\n/**\n * MAX_NORMAL_EXPONENT is the maximum exponent of a normalized\n * floating point: 1023.\n */\nexport const MAX_NORMAL_EXPONENT = EXPONENT_BIAS;\n/**\n * MIN_VALUE is the smallest normal number\n */\nexport const MIN_VALUE = Math.pow(2, -1022);\n/**\n * getNormalBase2 extracts the normalized base-2 fractional exponent.\n * This returns k for the equation f x 2**k where f is\n * in the range [1, 2). Note that this function is not called for\n * subnormal numbers.\n * @param {number} value - the value to determine normalized base-2 fractional\n * exponent for\n * @returns {number} the normalized base-2 exponent\n */\nexport function getNormalBase2(value) {\n const dv = new DataView(new ArrayBuffer(8));\n dv.setFloat64(0, value);\n // access the raw 64-bit float as 32-bit uints\n const hiBits = dv.getUint32(0);\n const expBits = (hiBits & EXPONENT_MASK) >> 20;\n return expBits - EXPONENT_BIAS;\n}\n/**\n * GetSignificand returns the 52 bit (unsigned) significand as a signed value.\n * @param {number} value - the floating point number to extract the significand from\n * @returns {number} The 52-bit significand\n */\nexport function getSignificand(value) {\n const dv = new DataView(new ArrayBuffer(8));\n dv.setFloat64(0, value);\n // access the raw 64-bit float as two 32-bit uints\n const hiBits = dv.getUint32(0);\n const loBits = dv.getUint32(4);\n // extract the significand bits from the hi bits and left shift 32 places note:\n // we can't use the native << operator as it will truncate the result to 32-bits\n const significandHiBits = (hiBits & SIGNIFICAND_MASK) * Math.pow(2, 32);\n // combine the hi and lo bits and return\n return significandHiBits + loBits;\n}\n//# sourceMappingURL=ieee754.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Note: other languages provide this as a built in function. This is\n * a naive, but functionally correct implementation. This is used sparingly,\n * when creating a new mapping in a running application.\n *\n * ldexp returns frac × 2**exp. With the following special cases:\n * ldexp(±0, exp) = ±0\n * ldexp(±Inf, exp) = ±Inf\n * ldexp(NaN, exp) = NaN\n * @param frac\n * @param exp\n * @returns {number}\n */\nexport function ldexp(frac, exp) {\n if (frac === 0 ||\n frac === Number.POSITIVE_INFINITY ||\n frac === Number.NEGATIVE_INFINITY ||\n Number.isNaN(frac)) {\n return frac;\n }\n return frac * Math.pow(2, exp);\n}\n/**\n * Computes the next power of two that is greater than or equal to v.\n * This implementation more efficient than, but functionally equivalent\n * to Math.pow(2, Math.ceil(Math.log(x)/Math.log(2))).\n * @param v\n * @returns {number}\n */\nexport function nextGreaterSquare(v) {\n // The following expression computes the least power-of-two\n // that is >= v. There are a number of tricky ways to\n // do this, see https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n v--;\n v |= v >> 1;\n v |= v >> 2;\n v |= v >> 4;\n v |= v >> 8;\n v |= v >> 16;\n v++;\n return v;\n}\n//# sourceMappingURL=util.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport class MappingError extends Error {\n}\n//# sourceMappingURL=types.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport * as ieee754 from './ieee754';\nimport * as util from '../util';\nimport { MappingError } from './types';\n/**\n * ExponentMapping implements exponential mapping functions for\n * scales <=0. For scales > 0 LogarithmMapping should be used.\n */\nexport class ExponentMapping {\n _shift;\n constructor(scale) {\n this._shift = -scale;\n }\n /**\n * Maps positive floating point values to indexes corresponding to scale\n * @param value\n * @returns {number} index for provided value at the current scale\n */\n mapToIndex(value) {\n if (value < ieee754.MIN_VALUE) {\n return this._minNormalLowerBoundaryIndex();\n }\n const exp = ieee754.getNormalBase2(value);\n // In case the value is an exact power of two, compute a\n // correction of -1. Note, we are using a custom _rightShift\n // to accommodate a 52-bit argument, which the native bitwise\n // operators do not support\n const correction = this._rightShift(ieee754.getSignificand(value) - 1, ieee754.SIGNIFICAND_WIDTH);\n return (exp + correction) >> this._shift;\n }\n /**\n * Returns the lower bucket boundary for the given index for scale\n *\n * @param index\n * @returns {number}\n */\n lowerBoundary(index) {\n const minIndex = this._minNormalLowerBoundaryIndex();\n if (index < minIndex) {\n throw new MappingError(`underflow: ${index} is < minimum lower boundary: ${minIndex}`);\n }\n const maxIndex = this._maxNormalLowerBoundaryIndex();\n if (index > maxIndex) {\n throw new MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`);\n }\n return util.ldexp(1, index << this._shift);\n }\n /**\n * The scale used by this mapping\n * @returns {number}\n */\n get scale() {\n if (this._shift === 0) {\n return 0;\n }\n return -this._shift;\n }\n _minNormalLowerBoundaryIndex() {\n let index = ieee754.MIN_NORMAL_EXPONENT >> this._shift;\n if (this._shift < 2) {\n index--;\n }\n return index;\n }\n _maxNormalLowerBoundaryIndex() {\n return ieee754.MAX_NORMAL_EXPONENT >> this._shift;\n }\n _rightShift(value, shift) {\n return Math.floor(value * Math.pow(2, -shift));\n }\n}\n//# sourceMappingURL=ExponentMapping.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport * as ieee754 from './ieee754';\nimport * as util from '../util';\nimport { MappingError } from './types';\n/**\n * LogarithmMapping implements exponential mapping functions for scale > 0.\n * For scales <= 0 the exponent mapping should be used.\n */\nexport class LogarithmMapping {\n _scale;\n _scaleFactor;\n _inverseFactor;\n constructor(scale) {\n this._scale = scale;\n this._scaleFactor = util.ldexp(Math.LOG2E, scale);\n this._inverseFactor = util.ldexp(Math.LN2, -scale);\n }\n /**\n * Maps positive floating point values to indexes corresponding to scale\n * @param value\n * @returns {number} index for provided value at the current scale\n */\n mapToIndex(value) {\n if (value <= ieee754.MIN_VALUE) {\n return this._minNormalLowerBoundaryIndex() - 1;\n }\n // exact power of two special case\n if (ieee754.getSignificand(value) === 0) {\n const exp = ieee754.getNormalBase2(value);\n return (exp << this._scale) - 1;\n }\n // non-power of two cases. use Math.floor to round the scaled logarithm\n const index = Math.floor(Math.log(value) * this._scaleFactor);\n const maxIndex = this._maxNormalLowerBoundaryIndex();\n if (index >= maxIndex) {\n return maxIndex;\n }\n return index;\n }\n /**\n * Returns the lower bucket boundary for the given index for scale\n *\n * @param index\n * @returns {number}\n */\n lowerBoundary(index) {\n const maxIndex = this._maxNormalLowerBoundaryIndex();\n if (index >= maxIndex) {\n if (index === maxIndex) {\n return 2 * Math.exp((index - (1 << this._scale)) / this._scaleFactor);\n }\n throw new MappingError(`overflow: ${index} is > maximum lower boundary: ${maxIndex}`);\n }\n const minIndex = this._minNormalLowerBoundaryIndex();\n if (index <= minIndex) {\n if (index === minIndex) {\n return ieee754.MIN_VALUE;\n }\n else if (index === minIndex - 1) {\n return Math.exp((index + (1 << this._scale)) / this._scaleFactor) / 2;\n }\n throw new MappingError(`overflow: ${index} is < minimum lower boundary: ${minIndex}`);\n }\n return Math.exp(index * this._inverseFactor);\n }\n /**\n * The scale used by this mapping\n * @returns {number}\n */\n get scale() {\n return this._scale;\n }\n _minNormalLowerBoundaryIndex() {\n return ieee754.MIN_NORMAL_EXPONENT << this._scale;\n }\n _maxNormalLowerBoundaryIndex() {\n return ((ieee754.MAX_NORMAL_EXPONENT + 1) << this._scale) - 1;\n }\n}\n//# sourceMappingURL=LogarithmMapping.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ExponentMapping } from './ExponentMapping';\nimport { LogarithmMapping } from './LogarithmMapping';\nimport { MappingError } from './types';\nconst MIN_SCALE = -10;\nconst MAX_SCALE = 20;\nconst PREBUILT_MAPPINGS = Array.from({ length: 31 }, (_, i) => {\n if (i > 10) {\n return new LogarithmMapping(i - 10);\n }\n return new ExponentMapping(i - 10);\n});\n/**\n * getMapping returns an appropriate mapping for the given scale. For scales -10\n * to 0 the underlying type will be ExponentMapping. For scales 1 to 20 the\n * underlying type will be LogarithmMapping.\n * @param scale a number in the range [-10, 20]\n * @returns {Mapping}\n */\nexport function getMapping(scale) {\n if (scale > MAX_SCALE || scale < MIN_SCALE) {\n throw new MappingError(`expected scale >= ${MIN_SCALE} && <= ${MAX_SCALE}, got: ${scale}`);\n }\n // mappings are offset by 10. scale -10 is at position 0 and scale 20 is at 30\n return PREBUILT_MAPPINGS[scale + 10];\n}\n//# sourceMappingURL=getMapping.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregatorKind, } from './types';\nimport { DataPointType, InstrumentType, } from '../export/MetricData';\nimport { diag } from '@opentelemetry/api';\nimport { Buckets } from './exponential-histogram/Buckets';\nimport { getMapping } from './exponential-histogram/mapping/getMapping';\nimport { nextGreaterSquare } from './exponential-histogram/util';\n// HighLow is a utility class used for computing a common scale for\n// two exponential histogram accumulations\nclass HighLow {\n static combine(h1, h2) {\n return new HighLow(Math.min(h1.low, h2.low), Math.max(h1.high, h2.high));\n }\n low;\n high;\n constructor(low, high) {\n this.low = low;\n this.high = high;\n }\n}\nconst MAX_SCALE = 20;\nconst DEFAULT_MAX_SIZE = 160;\nconst MIN_MAX_SIZE = 2;\nexport class ExponentialHistogramAccumulation {\n startTime;\n _maxSize;\n _recordMinMax;\n _sum;\n _count;\n _zeroCount;\n _min;\n _max;\n _positive;\n _negative;\n _mapping;\n constructor(startTime, maxSize = DEFAULT_MAX_SIZE, recordMinMax = true, sum = 0, count = 0, zeroCount = 0, min = Number.POSITIVE_INFINITY, max = Number.NEGATIVE_INFINITY, positive = new Buckets(), negative = new Buckets(), mapping = getMapping(MAX_SCALE)) {\n this.startTime = startTime;\n this._maxSize = maxSize;\n this._recordMinMax = recordMinMax;\n this._sum = sum;\n this._count = count;\n this._zeroCount = zeroCount;\n this._min = min;\n this._max = max;\n this._positive = positive;\n this._negative = negative;\n this._mapping = mapping;\n if (this._maxSize < MIN_MAX_SIZE) {\n diag.warn(`Exponential Histogram Max Size set to ${this._maxSize}, \\\n changing to the minimum size of: ${MIN_MAX_SIZE}`);\n this._maxSize = MIN_MAX_SIZE;\n }\n }\n /**\n * record updates a histogram with a single count\n * @param {Number} value\n */\n record(value) {\n this.updateByIncrement(value, 1);\n }\n /**\n * Sets the start time for this accumulation\n * @param {HrTime} startTime\n */\n setStartTime(startTime) {\n this.startTime = startTime;\n }\n /**\n * Returns the datapoint representation of this accumulation\n * @param {HrTime} startTime\n */\n toPointValue() {\n return {\n hasMinMax: this._recordMinMax,\n min: this.min,\n max: this.max,\n sum: this.sum,\n positive: {\n offset: this.positive.offset,\n bucketCounts: this.positive.counts(),\n },\n negative: {\n offset: this.negative.offset,\n bucketCounts: this.negative.counts(),\n },\n count: this.count,\n scale: this.scale,\n zeroCount: this.zeroCount,\n };\n }\n /**\n * @returns {Number} The sum of values recorded by this accumulation\n */\n get sum() {\n return this._sum;\n }\n /**\n * @returns {Number} The minimum value recorded by this accumulation\n */\n get min() {\n return this._min;\n }\n /**\n * @returns {Number} The maximum value recorded by this accumulation\n */\n get max() {\n return this._max;\n }\n /**\n * @returns {Number} The count of values recorded by this accumulation\n */\n get count() {\n return this._count;\n }\n /**\n * @returns {Number} The number of 0 values recorded by this accumulation\n */\n get zeroCount() {\n return this._zeroCount;\n }\n /**\n * @returns {Number} The scale used by this accumulation\n */\n get scale() {\n if (this._count === this._zeroCount) {\n // all zeros! scale doesn't matter, use zero\n return 0;\n }\n return this._mapping.scale;\n }\n /**\n * positive holds the positive values\n * @returns {Buckets}\n */\n get positive() {\n return this._positive;\n }\n /**\n * negative holds the negative values by their absolute value\n * @returns {Buckets}\n */\n get negative() {\n return this._negative;\n }\n /**\n * updateByIncr supports updating a histogram with a non-negative\n * increment.\n * @param value\n * @param increment\n */\n updateByIncrement(value, increment) {\n // NaN does not fall into any bucket, is not zero and should not be counted,\n // NaN is never greater than max nor less than min, therefore return as there's nothing for us to do.\n if (Number.isNaN(value)) {\n return;\n }\n if (value > this._max) {\n this._max = value;\n }\n if (value < this._min) {\n this._min = value;\n }\n this._count += increment;\n if (value === 0) {\n this._zeroCount += increment;\n return;\n }\n this._sum += value * increment;\n if (value > 0) {\n this._updateBuckets(this._positive, value, increment);\n }\n else {\n this._updateBuckets(this._negative, -value, increment);\n }\n }\n /**\n * merge combines data from previous value into self\n * @param {ExponentialHistogramAccumulation} previous\n */\n merge(previous) {\n if (this._count === 0) {\n this._min = previous.min;\n this._max = previous.max;\n }\n else if (previous.count !== 0) {\n if (previous.min < this.min) {\n this._min = previous.min;\n }\n if (previous.max > this.max) {\n this._max = previous.max;\n }\n }\n this.startTime = previous.startTime;\n this._sum += previous.sum;\n this._count += previous.count;\n this._zeroCount += previous.zeroCount;\n const minScale = this._minScale(previous);\n this._downscale(this.scale - minScale);\n this._mergeBuckets(this.positive, previous, previous.positive, minScale);\n this._mergeBuckets(this.negative, previous, previous.negative, minScale);\n }\n /**\n * diff subtracts other from self\n * @param {ExponentialHistogramAccumulation} other\n */\n diff(other) {\n this._min = Infinity;\n this._max = -Infinity;\n this._sum -= other.sum;\n this._count -= other.count;\n this._zeroCount -= other.zeroCount;\n const minScale = this._minScale(other);\n this._downscale(this.scale - minScale);\n this._diffBuckets(this.positive, other, other.positive, minScale);\n this._diffBuckets(this.negative, other, other.negative, minScale);\n }\n /**\n * clone returns a deep copy of self\n * @returns {ExponentialHistogramAccumulation}\n */\n clone() {\n return new ExponentialHistogramAccumulation(this.startTime, this._maxSize, this._recordMinMax, this._sum, this._count, this._zeroCount, this._min, this._max, this.positive.clone(), this.negative.clone(), this._mapping);\n }\n /**\n * _updateBuckets maps the incoming value to a bucket index for the current\n * scale. If the bucket index is outside of the range of the backing array,\n * it will rescale the backing array and update the mapping for the new scale.\n */\n _updateBuckets(buckets, value, increment) {\n let index = this._mapping.mapToIndex(value);\n // rescale the mapping if needed\n let rescalingNeeded = false;\n let high = 0;\n let low = 0;\n if (buckets.length === 0) {\n buckets.indexStart = index;\n buckets.indexEnd = buckets.indexStart;\n buckets.indexBase = buckets.indexStart;\n }\n else if (index < buckets.indexStart &&\n buckets.indexEnd - index >= this._maxSize) {\n rescalingNeeded = true;\n low = index;\n high = buckets.indexEnd;\n }\n else if (index > buckets.indexEnd &&\n index - buckets.indexStart >= this._maxSize) {\n rescalingNeeded = true;\n low = buckets.indexStart;\n high = index;\n }\n // rescale and compute index at new scale\n if (rescalingNeeded) {\n const change = this._changeScale(high, low);\n this._downscale(change);\n index = this._mapping.mapToIndex(value);\n }\n this._incrementIndexBy(buckets, index, increment);\n }\n /**\n * _incrementIndexBy increments the count of the bucket specified by `index`.\n * If the index is outside of the range [buckets.indexStart, buckets.indexEnd]\n * the boundaries of the backing array will be adjusted and more buckets will\n * be added if needed.\n */\n _incrementIndexBy(buckets, index, increment) {\n if (increment === 0) {\n // nothing to do for a zero increment, can happen during a merge operation\n return;\n }\n if (buckets.length === 0) {\n buckets.indexStart = buckets.indexEnd = buckets.indexBase = index;\n }\n if (index < buckets.indexStart) {\n const span = buckets.indexEnd - index;\n if (span >= buckets.backing.length) {\n this._grow(buckets, span + 1);\n }\n buckets.indexStart = index;\n }\n else if (index > buckets.indexEnd) {\n const span = index - buckets.indexStart;\n if (span >= buckets.backing.length) {\n this._grow(buckets, span + 1);\n }\n buckets.indexEnd = index;\n }\n let bucketIndex = index - buckets.indexBase;\n if (bucketIndex < 0) {\n bucketIndex += buckets.backing.length;\n }\n buckets.incrementBucket(bucketIndex, increment);\n }\n /**\n * grow resizes the backing array by doubling in size up to maxSize.\n * This extends the array with a bunch of zeros and copies the\n * existing counts to the same position.\n */\n _grow(buckets, needed) {\n const size = buckets.backing.length;\n const bias = buckets.indexBase - buckets.indexStart;\n const oldPositiveLimit = size - bias;\n let newSize = nextGreaterSquare(needed);\n if (newSize > this._maxSize) {\n newSize = this._maxSize;\n }\n const newPositiveLimit = newSize - bias;\n buckets.backing.growTo(newSize, oldPositiveLimit, newPositiveLimit);\n }\n /**\n * _changeScale computes how much downscaling is needed by shifting the\n * high and low values until they are separated by no more than size.\n */\n _changeScale(high, low) {\n let change = 0;\n while (high - low >= this._maxSize) {\n high >>= 1;\n low >>= 1;\n change++;\n }\n return change;\n }\n /**\n * _downscale subtracts `change` from the current mapping scale.\n */\n _downscale(change) {\n if (change === 0) {\n return;\n }\n if (change < 0) {\n // Note: this should be impossible. If we get here it's because\n // there is a bug in the implementation.\n throw new Error(`impossible change of scale: ${this.scale}`);\n }\n const newScale = this._mapping.scale - change;\n this._positive.downscale(change);\n this._negative.downscale(change);\n this._mapping = getMapping(newScale);\n }\n /**\n * _minScale is used by diff and merge to compute an ideal combined scale\n */\n _minScale(other) {\n const minScale = Math.min(this.scale, other.scale);\n const highLowPos = HighLow.combine(this._highLowAtScale(this.positive, this.scale, minScale), this._highLowAtScale(other.positive, other.scale, minScale));\n const highLowNeg = HighLow.combine(this._highLowAtScale(this.negative, this.scale, minScale), this._highLowAtScale(other.negative, other.scale, minScale));\n return Math.min(minScale - this._changeScale(highLowPos.high, highLowPos.low), minScale - this._changeScale(highLowNeg.high, highLowNeg.low));\n }\n /**\n * _highLowAtScale is used by diff and merge to compute an ideal combined scale.\n */\n _highLowAtScale(buckets, currentScale, newScale) {\n if (buckets.length === 0) {\n return new HighLow(0, -1);\n }\n const shift = currentScale - newScale;\n return new HighLow(buckets.indexStart >> shift, buckets.indexEnd >> shift);\n }\n /**\n * _mergeBuckets translates index values from another histogram and\n * adds the values into the corresponding buckets of this histogram.\n */\n _mergeBuckets(ours, other, theirs, scale) {\n const theirOffset = theirs.offset;\n const theirChange = other.scale - scale;\n for (let i = 0; i < theirs.length; i++) {\n this._incrementIndexBy(ours, (theirOffset + i) >> theirChange, theirs.at(i));\n }\n }\n /**\n * _diffBuckets translates index values from another histogram and\n * subtracts the values in the corresponding buckets of this histogram.\n */\n _diffBuckets(ours, other, theirs, scale) {\n const theirOffset = theirs.offset;\n const theirChange = other.scale - scale;\n for (let i = 0; i < theirs.length; i++) {\n const ourIndex = (theirOffset + i) >> theirChange;\n let bucketIndex = ourIndex - ours.indexBase;\n if (bucketIndex < 0) {\n bucketIndex += ours.backing.length;\n }\n ours.decrementBucket(bucketIndex, theirs.at(i));\n }\n ours.trim();\n }\n}\n/**\n * Aggregator for ExponentialHistogramAccumulations\n */\nexport class ExponentialHistogramAggregator {\n kind = AggregatorKind.EXPONENTIAL_HISTOGRAM;\n _maxSize;\n _recordMinMax;\n /**\n * @param _maxSize Maximum number of buckets for each of the positive\n * and negative ranges, exclusive of the zero-bucket.\n * @param _recordMinMax If set to true, min and max will be recorded.\n * Otherwise, min and max will not be recorded.\n */\n constructor(maxSize, recordMinMax) {\n this._maxSize = maxSize;\n this._recordMinMax = recordMinMax;\n }\n createAccumulation(startTime) {\n return new ExponentialHistogramAccumulation(startTime, this._maxSize, this._recordMinMax);\n }\n /**\n * Return the result of the merge of two exponential histogram accumulations.\n */\n merge(previous, delta) {\n const result = delta.clone();\n result.merge(previous);\n return result;\n }\n /**\n * Returns a new DELTA aggregation by comparing two cumulative measurements.\n */\n diff(previous, current) {\n const result = current.clone();\n result.diff(previous);\n return result;\n }\n toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) {\n return {\n descriptor,\n aggregationTemporality,\n dataPointType: DataPointType.EXPONENTIAL_HISTOGRAM,\n dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => {\n const pointValue = accumulation.toPointValue();\n // determine if instrument allows negative values.\n const allowsNegativeValues = descriptor.type === InstrumentType.GAUGE ||\n descriptor.type === InstrumentType.UP_DOWN_COUNTER ||\n descriptor.type === InstrumentType.OBSERVABLE_GAUGE ||\n descriptor.type === InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n return {\n attributes,\n startTime: accumulation.startTime,\n endTime,\n value: {\n min: pointValue.hasMinMax ? pointValue.min : undefined,\n max: pointValue.hasMinMax ? pointValue.max : undefined,\n sum: !allowsNegativeValues ? pointValue.sum : undefined,\n positive: {\n offset: pointValue.positive.offset,\n bucketCounts: pointValue.positive.bucketCounts,\n },\n negative: {\n offset: pointValue.negative.offset,\n bucketCounts: pointValue.negative.bucketCounts,\n },\n count: pointValue.count,\n scale: pointValue.scale,\n zeroCount: pointValue.zeroCount,\n },\n };\n }),\n };\n }\n}\n//# sourceMappingURL=ExponentialHistogram.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { createContextKey } from '@opentelemetry/api';\nconst SUPPRESS_TRACING_KEY = createContextKey('OpenTelemetry SDK Context Key SUPPRESS_TRACING');\nexport function suppressTracing(context) {\n return context.setValue(SUPPRESS_TRACING_KEY, true);\n}\nexport function unsuppressTracing(context) {\n return context.deleteValue(SUPPRESS_TRACING_KEY);\n}\nexport function isTracingSuppressed(context) {\n return context.getValue(SUPPRESS_TRACING_KEY) === true;\n}\n//# sourceMappingURL=suppress-tracing.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { diag } from '@opentelemetry/api';\n/**\n * Returns a function that logs an error using the provided logger, or a\n * console logger if one was not provided.\n */\nexport function loggingErrorHandler() {\n return (ex) => {\n diag.error(stringifyException(ex));\n };\n}\n/**\n * Converts an exception into a string representation\n * @param {Exception} ex\n */\nfunction stringifyException(ex) {\n if (typeof ex === 'string') {\n return ex;\n }\n else {\n return JSON.stringify(flattenException(ex));\n }\n}\n/**\n * Flattens an exception into key-value pairs by traversing the prototype chain\n * and coercing values to strings. Duplicate properties will not be overwritten;\n * the first insert wins.\n */\nfunction flattenException(ex) {\n const result = {};\n let current = ex;\n while (current !== null) {\n Object.getOwnPropertyNames(current).forEach(propertyName => {\n if (result[propertyName])\n return;\n const value = current[propertyName];\n if (value) {\n result[propertyName] = String(value);\n }\n });\n current = Object.getPrototypeOf(current);\n }\n return result;\n}\n//# sourceMappingURL=logging-error-handler.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { loggingErrorHandler } from './logging-error-handler';\n/** The global error handler delegate */\nlet delegateHandler = loggingErrorHandler();\n/**\n * Set the global error handler\n * @param {ErrorHandler} handler\n */\nexport function setGlobalErrorHandler(handler) {\n delegateHandler = handler;\n}\n/**\n * Return the global error handler\n * @param {Exception} ex\n */\nexport function globalErrorHandler(ex) {\n try {\n delegateHandler(ex);\n }\n catch { } // eslint-disable-line no-empty\n}\n//# sourceMappingURL=global-error-handler.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '2.6.0';\n//# sourceMappingURL=version.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n/**\n * The name of the runtime of this process.\n *\n * @example OpenJDK Runtime Environment\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_RUNTIME_NAME = 'process.runtime.name';\n//# sourceMappingURL=semconv.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { VERSION } from '../../version';\nimport { ATTR_TELEMETRY_SDK_NAME, ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS, ATTR_TELEMETRY_SDK_VERSION, } from '@opentelemetry/semantic-conventions';\nimport { ATTR_PROCESS_RUNTIME_NAME } from '../../semconv';\n/** Constants describing the SDK in use */\nexport const SDK_INFO = {\n [ATTR_TELEMETRY_SDK_NAME]: 'opentelemetry',\n [ATTR_PROCESS_RUNTIME_NAME]: 'browser',\n [ATTR_TELEMETRY_SDK_LANGUAGE]: TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS,\n [ATTR_TELEMETRY_SDK_VERSION]: VERSION,\n};\n//# sourceMappingURL=sdk-info.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { otperformance as performance } from '../platform';\nconst NANOSECOND_DIGITS = 9;\nconst NANOSECOND_DIGITS_IN_MILLIS = 6;\nconst MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS);\nconst SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS);\n/**\n * Converts a number of milliseconds from epoch to HrTime([seconds, remainder in nanoseconds]).\n * @param epochMillis\n */\nexport function millisToHrTime(epochMillis) {\n const epochSeconds = epochMillis / 1000;\n // Decimals only.\n const seconds = Math.trunc(epochSeconds);\n // Round sub-nanosecond accuracy to nanosecond.\n const nanos = Math.round((epochMillis % 1000) * MILLISECONDS_TO_NANOSECONDS);\n return [seconds, nanos];\n}\n/**\n * @deprecated Use `performance.timeOrigin` directly.\n */\nexport function getTimeOrigin() {\n return performance.timeOrigin;\n}\n/**\n * Returns an hrtime calculated via performance component.\n * @param performanceNow\n */\nexport function hrTime(performanceNow) {\n const timeOrigin = millisToHrTime(performance.timeOrigin);\n const now = millisToHrTime(typeof performanceNow === 'number' ? performanceNow : performance.now());\n return addHrTimes(timeOrigin, now);\n}\n/**\n *\n * Converts a TimeInput to an HrTime, defaults to _hrtime().\n * @param time\n */\nexport function timeInputToHrTime(time) {\n // process.hrtime\n if (isTimeInputHrTime(time)) {\n return time;\n }\n else if (typeof time === 'number') {\n // Must be a performance.now() if it's smaller than process start time.\n if (time < performance.timeOrigin) {\n return hrTime(time);\n }\n else {\n // epoch milliseconds or performance.timeOrigin\n return millisToHrTime(time);\n }\n }\n else if (time instanceof Date) {\n return millisToHrTime(time.getTime());\n }\n else {\n throw TypeError('Invalid input type');\n }\n}\n/**\n * Returns a duration of two hrTime.\n * @param startTime\n * @param endTime\n */\nexport function hrTimeDuration(startTime, endTime) {\n let seconds = endTime[0] - startTime[0];\n let nanos = endTime[1] - startTime[1];\n // overflow\n if (nanos < 0) {\n seconds -= 1;\n // negate\n nanos += SECOND_TO_NANOSECONDS;\n }\n return [seconds, nanos];\n}\n/**\n * Convert hrTime to timestamp, for example \"2019-05-14T17:00:00.000123456Z\"\n * @param time\n */\nexport function hrTimeToTimeStamp(time) {\n const precision = NANOSECOND_DIGITS;\n const tmp = `${'0'.repeat(precision)}${time[1]}Z`;\n const nanoString = tmp.substring(tmp.length - precision - 1);\n const date = new Date(time[0] * 1000).toISOString();\n return date.replace('000Z', nanoString);\n}\n/**\n * Convert hrTime to nanoseconds.\n * @param time\n */\nexport function hrTimeToNanoseconds(time) {\n return time[0] * SECOND_TO_NANOSECONDS + time[1];\n}\n/**\n * Convert hrTime to milliseconds.\n * @param time\n */\nexport function hrTimeToMilliseconds(time) {\n return time[0] * 1e3 + time[1] / 1e6;\n}\n/**\n * Convert hrTime to microseconds.\n * @param time\n */\nexport function hrTimeToMicroseconds(time) {\n return time[0] * 1e6 + time[1] / 1e3;\n}\n/**\n * check if time is HrTime\n * @param value\n */\nexport function isTimeInputHrTime(value) {\n return (Array.isArray(value) &&\n value.length === 2 &&\n typeof value[0] === 'number' &&\n typeof value[1] === 'number');\n}\n/**\n * check if input value is a correct types.TimeInput\n * @param value\n */\nexport function isTimeInput(value) {\n return (isTimeInputHrTime(value) ||\n typeof value === 'number' ||\n value instanceof Date);\n}\n/**\n * Given 2 HrTime formatted times, return their sum as an HrTime.\n */\nexport function addHrTimes(time1, time2) {\n const out = [time1[0] + time2[0], time1[1] + time2[1]];\n // Nanoseconds\n if (out[1] >= SECOND_TO_NANOSECONDS) {\n out[1] -= SECOND_TO_NANOSECONDS;\n out[0] += 1;\n }\n return out;\n}\n//# sourceMappingURL=time.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport var ExportResultCode;\n(function (ExportResultCode) {\n ExportResultCode[ExportResultCode[\"SUCCESS\"] = 0] = \"SUCCESS\";\n ExportResultCode[ExportResultCode[\"FAILED\"] = 1] = \"FAILED\";\n})(ExportResultCode || (ExportResultCode = {}));\n//# sourceMappingURL=ExportResult.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { context } from '@opentelemetry/api';\nimport { suppressTracing } from '../trace/suppress-tracing';\n/**\n * @internal\n * Shared functionality used by Exporters while exporting data, including suppression of Traces.\n */\nexport function _export(exporter, arg) {\n return new Promise(resolve => {\n // prevent downstream exporter calls from generating spans\n context.with(suppressTracing(context.active()), () => {\n exporter.export(arg, resolve);\n });\n });\n}\n//# sourceMappingURL=exporter.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport { W3CBaggagePropagator } from './baggage/propagation/W3CBaggagePropagator';\nexport { AnchoredClock } from './common/anchored-clock';\nexport { isAttributeValue, sanitizeAttributes } from './common/attributes';\nexport { globalErrorHandler, setGlobalErrorHandler, } from './common/global-error-handler';\nexport { loggingErrorHandler } from './common/logging-error-handler';\nexport { addHrTimes, getTimeOrigin, hrTime, hrTimeDuration, hrTimeToMicroseconds, hrTimeToMilliseconds, hrTimeToNanoseconds, hrTimeToTimeStamp, isTimeInput, isTimeInputHrTime, millisToHrTime, timeInputToHrTime, } from './common/time';\nexport { unrefTimer } from './common/timer-util';\nexport { ExportResultCode } from './ExportResult';\nexport { parseKeyPairsIntoRecord } from './baggage/utils';\nexport { SDK_INFO, _globalThis, getStringFromEnv, getBooleanFromEnv, getNumberFromEnv, getStringListFromEnv, otperformance, } from './platform';\nexport { CompositePropagator } from './propagation/composite';\nexport { TRACE_PARENT_HEADER, TRACE_STATE_HEADER, W3CTraceContextPropagator, parseTraceParent, } from './trace/W3CTraceContextPropagator';\nexport { RPCType, deleteRPCMetadata, getRPCMetadata, setRPCMetadata, } from './trace/rpc-metadata';\nexport { isTracingSuppressed, suppressTracing, unsuppressTracing, } from './trace/suppress-tracing';\nexport { TraceState } from './trace/TraceState';\nexport { merge } from './utils/merge';\nexport { TimeoutError, callWithTimeout } from './utils/timeout';\nexport { isUrlIgnored, urlMatches } from './utils/url';\nexport { BindOnceFuture } from './utils/callback';\nexport { diagLogLevelFromString } from './utils/configuration';\nimport { _export } from './internal/exporter';\nexport const internal = {\n _export,\n};\n//# sourceMappingURL=index.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregatorKind, } from './types';\nimport { millisToHrTime, hrTimeToMicroseconds } from '@opentelemetry/core';\nimport { DataPointType } from '../export/MetricData';\nexport class LastValueAccumulation {\n startTime;\n _current;\n sampleTime;\n constructor(startTime, current = 0, sampleTime = [0, 0]) {\n this.startTime = startTime;\n this._current = current;\n this.sampleTime = sampleTime;\n }\n record(value) {\n this._current = value;\n this.sampleTime = millisToHrTime(Date.now());\n }\n setStartTime(startTime) {\n this.startTime = startTime;\n }\n toPointValue() {\n return this._current;\n }\n}\n/** Basic aggregator which calculates a LastValue from individual measurements. */\nexport class LastValueAggregator {\n kind = AggregatorKind.LAST_VALUE;\n createAccumulation(startTime) {\n return new LastValueAccumulation(startTime);\n }\n /**\n * Returns the result of the merge of the given accumulations.\n *\n * Return the newly captured (delta) accumulation for LastValueAggregator.\n */\n merge(previous, delta) {\n // nanoseconds may lose precisions.\n const latestAccumulation = hrTimeToMicroseconds(delta.sampleTime) >=\n hrTimeToMicroseconds(previous.sampleTime)\n ? delta\n : previous;\n return new LastValueAccumulation(previous.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime);\n }\n /**\n * Returns a new DELTA aggregation by comparing two cumulative measurements.\n *\n * A delta aggregation is not meaningful to LastValueAggregator, just return\n * the newly captured (delta) accumulation for LastValueAggregator.\n */\n diff(previous, current) {\n // nanoseconds may lose precisions.\n const latestAccumulation = hrTimeToMicroseconds(current.sampleTime) >=\n hrTimeToMicroseconds(previous.sampleTime)\n ? current\n : previous;\n return new LastValueAccumulation(current.startTime, latestAccumulation.toPointValue(), latestAccumulation.sampleTime);\n }\n toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) {\n return {\n descriptor,\n aggregationTemporality,\n dataPointType: DataPointType.GAUGE,\n dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => {\n return {\n attributes,\n startTime: accumulation.startTime,\n endTime,\n value: accumulation.toPointValue(),\n };\n }),\n };\n }\n}\n//# sourceMappingURL=LastValue.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregatorKind, } from './types';\nimport { DataPointType } from '../export/MetricData';\nexport class SumAccumulation {\n startTime;\n monotonic;\n _current;\n reset;\n constructor(startTime, monotonic, current = 0, reset = false) {\n this.startTime = startTime;\n this.monotonic = monotonic;\n this._current = current;\n this.reset = reset;\n }\n record(value) {\n if (this.monotonic && value < 0) {\n return;\n }\n this._current += value;\n }\n setStartTime(startTime) {\n this.startTime = startTime;\n }\n toPointValue() {\n return this._current;\n }\n}\n/** Basic aggregator which calculates a Sum from individual measurements. */\nexport class SumAggregator {\n kind = AggregatorKind.SUM;\n monotonic;\n constructor(monotonic) {\n this.monotonic = monotonic;\n }\n createAccumulation(startTime) {\n return new SumAccumulation(startTime, this.monotonic);\n }\n /**\n * Returns the result of the merge of the given accumulations.\n */\n merge(previous, delta) {\n const prevPv = previous.toPointValue();\n const deltaPv = delta.toPointValue();\n if (delta.reset) {\n return new SumAccumulation(delta.startTime, this.monotonic, deltaPv, delta.reset);\n }\n return new SumAccumulation(previous.startTime, this.monotonic, prevPv + deltaPv);\n }\n /**\n * Returns a new DELTA aggregation by comparing two cumulative measurements.\n */\n diff(previous, current) {\n const prevPv = previous.toPointValue();\n const currPv = current.toPointValue();\n /**\n * If the SumAggregator is a monotonic one and the previous point value is\n * greater than the current one, a reset is deemed to be happened.\n * Return the current point value to prevent the value from been reset.\n */\n if (this.monotonic && prevPv > currPv) {\n return new SumAccumulation(current.startTime, this.monotonic, currPv, true);\n }\n return new SumAccumulation(current.startTime, this.monotonic, currPv - prevPv);\n }\n toMetricData(descriptor, aggregationTemporality, accumulationByAttributes, endTime) {\n return {\n descriptor,\n aggregationTemporality,\n dataPointType: DataPointType.SUM,\n dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => {\n return {\n attributes,\n startTime: accumulation.startTime,\n endTime,\n value: accumulation.toPointValue(),\n };\n }),\n isMonotonic: this.monotonic,\n };\n }\n}\n//# sourceMappingURL=Sum.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport * as api from '@opentelemetry/api';\nimport { SumAggregator, DropAggregator, LastValueAggregator, HistogramAggregator, ExponentialHistogramAggregator, } from '../aggregator';\nimport { InstrumentType } from '../export/MetricData';\n/**\n * The default drop aggregation.\n */\nclass DropAggregation {\n static DEFAULT_INSTANCE = new DropAggregator();\n createAggregator(_instrument) {\n return DropAggregation.DEFAULT_INSTANCE;\n }\n}\nexport { DropAggregation };\n/**\n * The default sum aggregation.\n */\nclass SumAggregation {\n static MONOTONIC_INSTANCE = new SumAggregator(true);\n static NON_MONOTONIC_INSTANCE = new SumAggregator(false);\n createAggregator(instrument) {\n switch (instrument.type) {\n case InstrumentType.COUNTER:\n case InstrumentType.OBSERVABLE_COUNTER:\n case InstrumentType.HISTOGRAM: {\n return SumAggregation.MONOTONIC_INSTANCE;\n }\n default: {\n return SumAggregation.NON_MONOTONIC_INSTANCE;\n }\n }\n }\n}\nexport { SumAggregation };\n/**\n * The default last value aggregation.\n */\nclass LastValueAggregation {\n static DEFAULT_INSTANCE = new LastValueAggregator();\n createAggregator(_instrument) {\n return LastValueAggregation.DEFAULT_INSTANCE;\n }\n}\nexport { LastValueAggregation };\n/**\n * The default histogram aggregation.\n\n */\nclass HistogramAggregation {\n static DEFAULT_INSTANCE = new HistogramAggregator([0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500, 10000], true);\n createAggregator(_instrument) {\n return HistogramAggregation.DEFAULT_INSTANCE;\n }\n}\nexport { HistogramAggregation };\n/**\n * The explicit bucket histogram aggregation.\n */\nexport class ExplicitBucketHistogramAggregation {\n _boundaries;\n _recordMinMax;\n /**\n * @param boundaries the bucket boundaries of the histogram aggregation\n * @param _recordMinMax If set to true, min and max will be recorded. Otherwise, min and max will not be recorded.\n */\n constructor(boundaries, recordMinMax = true) {\n if (boundaries == null) {\n throw new Error('ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array');\n }\n // Copy the boundaries array for modification.\n boundaries = boundaries.concat();\n // We need to an ordered set to be able to correctly compute count for each\n // boundary since we'll iterate on each in order.\n boundaries = boundaries.sort((a, b) => a - b);\n // Remove all Infinity from the boundaries.\n const minusInfinityIndex = boundaries.lastIndexOf(-Infinity);\n let infinityIndex = boundaries.indexOf(Infinity);\n if (infinityIndex === -1) {\n infinityIndex = undefined;\n }\n this._boundaries = boundaries.slice(minusInfinityIndex + 1, infinityIndex);\n this._recordMinMax = recordMinMax;\n }\n createAggregator(_instrument) {\n return new HistogramAggregator(this._boundaries, this._recordMinMax);\n }\n}\nexport class ExponentialHistogramAggregation {\n _maxSize;\n _recordMinMax;\n constructor(maxSize = 160, recordMinMax = true) {\n this._maxSize = maxSize;\n this._recordMinMax = recordMinMax;\n }\n createAggregator(_instrument) {\n return new ExponentialHistogramAggregator(this._maxSize, this._recordMinMax);\n }\n}\n/**\n * The default aggregation.\n */\nexport class DefaultAggregation {\n _resolve(instrument) {\n // cast to unknown to disable complaints on the (unreachable) fallback.\n switch (instrument.type) {\n case InstrumentType.COUNTER:\n case InstrumentType.UP_DOWN_COUNTER:\n case InstrumentType.OBSERVABLE_COUNTER:\n case InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: {\n return SUM_AGGREGATION;\n }\n case InstrumentType.GAUGE:\n case InstrumentType.OBSERVABLE_GAUGE: {\n return LAST_VALUE_AGGREGATION;\n }\n case InstrumentType.HISTOGRAM: {\n if (instrument.advice.explicitBucketBoundaries) {\n return new ExplicitBucketHistogramAggregation(instrument.advice.explicitBucketBoundaries);\n }\n return HISTOGRAM_AGGREGATION;\n }\n }\n api.diag.warn(`Unable to recognize instrument type: ${instrument.type}`);\n return DROP_AGGREGATION;\n }\n createAggregator(instrument) {\n return this._resolve(instrument).createAggregator(instrument);\n }\n}\nexport const DROP_AGGREGATION = new DropAggregation();\nexport const SUM_AGGREGATION = new SumAggregation();\nexport const LAST_VALUE_AGGREGATION = new LastValueAggregation();\nexport const HISTOGRAM_AGGREGATION = new HistogramAggregation();\nexport const EXPONENTIAL_HISTOGRAM_AGGREGATION = new ExponentialHistogramAggregation();\nexport const DEFAULT_AGGREGATION = new DefaultAggregation();\n//# sourceMappingURL=Aggregation.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { DEFAULT_AGGREGATION, DROP_AGGREGATION, ExplicitBucketHistogramAggregation, ExponentialHistogramAggregation, HISTOGRAM_AGGREGATION, LAST_VALUE_AGGREGATION, SUM_AGGREGATION, } from './Aggregation';\nexport var AggregationType;\n(function (AggregationType) {\n AggregationType[AggregationType[\"DEFAULT\"] = 0] = \"DEFAULT\";\n AggregationType[AggregationType[\"DROP\"] = 1] = \"DROP\";\n AggregationType[AggregationType[\"SUM\"] = 2] = \"SUM\";\n AggregationType[AggregationType[\"LAST_VALUE\"] = 3] = \"LAST_VALUE\";\n AggregationType[AggregationType[\"EXPLICIT_BUCKET_HISTOGRAM\"] = 4] = \"EXPLICIT_BUCKET_HISTOGRAM\";\n AggregationType[AggregationType[\"EXPONENTIAL_HISTOGRAM\"] = 5] = \"EXPONENTIAL_HISTOGRAM\";\n})(AggregationType || (AggregationType = {}));\nexport function toAggregation(option) {\n switch (option.type) {\n case AggregationType.DEFAULT:\n return DEFAULT_AGGREGATION;\n case AggregationType.DROP:\n return DROP_AGGREGATION;\n case AggregationType.SUM:\n return SUM_AGGREGATION;\n case AggregationType.LAST_VALUE:\n return LAST_VALUE_AGGREGATION;\n case AggregationType.EXPONENTIAL_HISTOGRAM: {\n const expOption = option;\n return new ExponentialHistogramAggregation(expOption.options?.maxSize, expOption.options?.recordMinMax);\n }\n case AggregationType.EXPLICIT_BUCKET_HISTOGRAM: {\n const expOption = option;\n if (expOption.options == null) {\n return HISTOGRAM_AGGREGATION;\n }\n else {\n return new ExplicitBucketHistogramAggregation(expOption.options?.boundaries, expOption.options?.recordMinMax);\n }\n }\n default:\n throw new Error('Unsupported Aggregation');\n }\n}\n//# sourceMappingURL=AggregationOption.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregationTemporality } from './AggregationTemporality';\nimport { AggregationType } from '../view/AggregationOption';\nexport const DEFAULT_AGGREGATION_SELECTOR = _instrumentType => {\n return {\n type: AggregationType.DEFAULT,\n };\n};\nexport const DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR = _instrumentType => AggregationTemporality.CUMULATIVE;\n//# sourceMappingURL=AggregationSelector.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport * as api from '@opentelemetry/api';\nimport { callWithTimeout } from '../utils';\nimport { DEFAULT_AGGREGATION_SELECTOR, DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR, } from './AggregationSelector';\n/**\n * A registered reader of metrics that, when linked to a {@link MetricProducer}, offers global\n * control over metrics.\n */\nexport class MetricReader {\n // Tracks the shutdown state.\n // TODO: use BindOncePromise here once a new version of @opentelemetry/core is available.\n _shutdown = false;\n // Additional MetricProducers which will be combined with the SDK's output\n _metricProducers;\n // MetricProducer used by this instance which produces metrics from the SDK\n _sdkMetricProducer;\n _aggregationTemporalitySelector;\n _aggregationSelector;\n _cardinalitySelector;\n constructor(options) {\n this._aggregationSelector =\n options?.aggregationSelector ?? DEFAULT_AGGREGATION_SELECTOR;\n this._aggregationTemporalitySelector =\n options?.aggregationTemporalitySelector ??\n DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR;\n this._metricProducers = options?.metricProducers ?? [];\n this._cardinalitySelector = options?.cardinalitySelector;\n }\n setMetricProducer(metricProducer) {\n if (this._sdkMetricProducer) {\n throw new Error('MetricReader can not be bound to a MeterProvider again.');\n }\n this._sdkMetricProducer = metricProducer;\n this.onInitialized();\n }\n selectAggregation(instrumentType) {\n return this._aggregationSelector(instrumentType);\n }\n selectAggregationTemporality(instrumentType) {\n return this._aggregationTemporalitySelector(instrumentType);\n }\n selectCardinalityLimit(instrumentType) {\n return this._cardinalitySelector\n ? this._cardinalitySelector(instrumentType)\n : 2000; // default value if no selector is provided\n }\n /**\n * Handle once the SDK has initialized this {@link MetricReader}\n * Overriding this method is optional.\n */\n onInitialized() {\n // Default implementation is empty.\n }\n async collect(options) {\n if (this._sdkMetricProducer === undefined) {\n throw new Error('MetricReader is not bound to a MetricProducer');\n }\n // Subsequent invocations to collect are not allowed. SDKs SHOULD return some failure for these calls.\n if (this._shutdown) {\n throw new Error('MetricReader is shutdown');\n }\n const [sdkCollectionResults, ...additionalCollectionResults] = await Promise.all([\n this._sdkMetricProducer.collect({\n timeoutMillis: options?.timeoutMillis,\n }),\n ...this._metricProducers.map(producer => producer.collect({\n timeoutMillis: options?.timeoutMillis,\n })),\n ]);\n // Merge the results, keeping the SDK's Resource\n const errors = sdkCollectionResults.errors.concat(additionalCollectionResults.flatMap(result => result.errors));\n const resource = sdkCollectionResults.resourceMetrics.resource;\n const scopeMetrics = sdkCollectionResults.resourceMetrics.scopeMetrics.concat(additionalCollectionResults.flatMap(result => result.resourceMetrics.scopeMetrics));\n return {\n resourceMetrics: {\n resource,\n scopeMetrics,\n },\n errors,\n };\n }\n async shutdown(options) {\n // Do not call shutdown again if it has already been called.\n if (this._shutdown) {\n api.diag.error('Cannot call shutdown twice.');\n return;\n }\n // No timeout if timeoutMillis is undefined or null.\n if (options?.timeoutMillis == null) {\n await this.onShutdown();\n }\n else {\n await callWithTimeout(this.onShutdown(), options.timeoutMillis);\n }\n this._shutdown = true;\n }\n async forceFlush(options) {\n if (this._shutdown) {\n api.diag.warn('Cannot forceFlush on already shutdown MetricReader.');\n return;\n }\n // No timeout if timeoutMillis is undefined or null.\n if (options?.timeoutMillis == null) {\n await this.onForceFlush();\n return;\n }\n await callWithTimeout(this.onForceFlush(), options.timeoutMillis);\n }\n}\n//# sourceMappingURL=MetricReader.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport * as api from '@opentelemetry/api';\nimport { internal, ExportResultCode, globalErrorHandler, } from '@opentelemetry/core';\nimport { MetricReader } from './MetricReader';\nimport { callWithTimeout, TimeoutError } from '../utils';\n/**\n * {@link MetricReader} which collects metrics based on a user-configurable time interval, and passes the metrics to\n * the configured {@link PushMetricExporter}\n */\nexport class PeriodicExportingMetricReader extends MetricReader {\n _interval;\n _exporter;\n _exportInterval;\n _exportTimeout;\n constructor(options) {\n const { exporter, exportIntervalMillis = 60000, metricProducers } = options;\n let { exportTimeoutMillis = 30000 } = options;\n super({\n aggregationSelector: exporter.selectAggregation?.bind(exporter),\n aggregationTemporalitySelector: exporter.selectAggregationTemporality?.bind(exporter),\n metricProducers,\n });\n if (exportIntervalMillis <= 0) {\n throw Error('exportIntervalMillis must be greater than 0');\n }\n if (exportTimeoutMillis <= 0) {\n throw Error('exportTimeoutMillis must be greater than 0');\n }\n if (exportIntervalMillis < exportTimeoutMillis) {\n if ('exportIntervalMillis' in options &&\n 'exportTimeoutMillis' in options) {\n // An invalid combination of values was explicitly provided.\n throw Error('exportIntervalMillis must be greater than or equal to exportTimeoutMillis');\n }\n else {\n // An invalid combination of value was implicitly provided.\n api.diag.info(`Timeout of ${exportTimeoutMillis} exceeds the interval of ${exportIntervalMillis}. Clamping timeout to interval duration.`);\n exportTimeoutMillis = exportIntervalMillis;\n }\n }\n this._exportInterval = exportIntervalMillis;\n this._exportTimeout = exportTimeoutMillis;\n this._exporter = exporter;\n }\n async _runOnce() {\n try {\n await callWithTimeout(this._doRun(), this._exportTimeout);\n }\n catch (err) {\n if (err instanceof TimeoutError) {\n api.diag.error('Export took longer than %s milliseconds and timed out.', this._exportTimeout);\n return;\n }\n globalErrorHandler(err);\n }\n }\n async _doRun() {\n const { resourceMetrics, errors } = await this.collect({\n timeoutMillis: this._exportTimeout,\n });\n if (errors.length > 0) {\n api.diag.error('PeriodicExportingMetricReader: metrics collection errors', ...errors);\n }\n if (resourceMetrics.resource.asyncAttributesPending) {\n try {\n await resourceMetrics.resource.waitForAsyncAttributes?.();\n }\n catch (e) {\n api.diag.debug('Error while resolving async portion of resource: ', e);\n globalErrorHandler(e);\n }\n }\n if (resourceMetrics.scopeMetrics.length === 0) {\n return;\n }\n const result = await internal._export(this._exporter, resourceMetrics);\n if (result.code !== ExportResultCode.SUCCESS) {\n throw new Error(`PeriodicExportingMetricReader: metrics export failed (error ${result.error})`);\n }\n }\n onInitialized() {\n // start running the interval as soon as this reader is initialized and keep handle for shutdown.\n this._interval = setInterval(() => {\n // this._runOnce never rejects. Using void operator to suppress @typescript-eslint/no-floating-promises.\n void this._runOnce();\n }, this._exportInterval);\n // depending on runtime, this may be a 'number' or NodeJS.Timeout\n if (typeof this._interval !== 'number') {\n this._interval.unref();\n }\n }\n async onForceFlush() {\n await this._runOnce();\n await this._exporter.forceFlush();\n }\n async onShutdown() {\n if (this._interval) {\n clearInterval(this._interval);\n }\n await this.onForceFlush();\n await this._exporter.shutdown();\n }\n}\n//# sourceMappingURL=PeriodicExportingMetricReader.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nlet serviceName;\n/**\n * Returns the default service name for OpenTelemetry resources.\n * In Node.js environments, returns \"unknown_service:<process.argv0>\".\n * In browser/edge environments, returns \"unknown_service\".\n */\nexport function defaultServiceName() {\n if (serviceName === undefined) {\n try {\n const argv0 = globalThis.process.argv0;\n serviceName = argv0 ? `unknown_service:${argv0}` : 'unknown_service';\n }\n catch {\n serviceName = 'unknown_service';\n }\n }\n return serviceName;\n}\n/** @internal For testing purposes only */\nexport function _clearDefaultServiceNameCache() {\n serviceName = undefined;\n}\n//# sourceMappingURL=default-service-name.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport const isPromiseLike = (val) => {\n return (val !== null &&\n typeof val === 'object' &&\n typeof val.then === 'function');\n};\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { diag } from '@opentelemetry/api';\nimport { SDK_INFO } from '@opentelemetry/core';\nimport { ATTR_SERVICE_NAME, ATTR_TELEMETRY_SDK_LANGUAGE, ATTR_TELEMETRY_SDK_NAME, ATTR_TELEMETRY_SDK_VERSION, } from '@opentelemetry/semantic-conventions';\nimport { defaultServiceName } from './default-service-name';\nimport { isPromiseLike } from './utils';\nclass ResourceImpl {\n _rawAttributes;\n _asyncAttributesPending = false;\n _schemaUrl;\n _memoizedAttributes;\n static FromAttributeList(attributes, options) {\n const res = new ResourceImpl({}, options);\n res._rawAttributes = guardedRawAttributes(attributes);\n res._asyncAttributesPending =\n attributes.filter(([_, val]) => isPromiseLike(val)).length > 0;\n return res;\n }\n constructor(\n /**\n * A dictionary of attributes with string keys and values that provide\n * information about the entity as numbers, strings or booleans\n * TODO: Consider to add check/validation on attributes.\n */\n resource, options) {\n const attributes = resource.attributes ?? {};\n this._rawAttributes = Object.entries(attributes).map(([k, v]) => {\n if (isPromiseLike(v)) {\n // side-effect\n this._asyncAttributesPending = true;\n }\n return [k, v];\n });\n this._rawAttributes = guardedRawAttributes(this._rawAttributes);\n this._schemaUrl = validateSchemaUrl(options?.schemaUrl);\n }\n get asyncAttributesPending() {\n return this._asyncAttributesPending;\n }\n async waitForAsyncAttributes() {\n if (!this.asyncAttributesPending) {\n return;\n }\n for (let i = 0; i < this._rawAttributes.length; i++) {\n const [k, v] = this._rawAttributes[i];\n this._rawAttributes[i] = [k, isPromiseLike(v) ? await v : v];\n }\n this._asyncAttributesPending = false;\n }\n get attributes() {\n if (this.asyncAttributesPending) {\n diag.error('Accessing resource attributes before async attributes settled');\n }\n if (this._memoizedAttributes) {\n return this._memoizedAttributes;\n }\n const attrs = {};\n for (const [k, v] of this._rawAttributes) {\n if (isPromiseLike(v)) {\n diag.debug(`Unsettled resource attribute ${k} skipped`);\n continue;\n }\n if (v != null) {\n attrs[k] ??= v;\n }\n }\n // only memoize output if all attributes are settled\n if (!this._asyncAttributesPending) {\n this._memoizedAttributes = attrs;\n }\n return attrs;\n }\n getRawAttributes() {\n return this._rawAttributes;\n }\n get schemaUrl() {\n return this._schemaUrl;\n }\n merge(resource) {\n if (resource == null)\n return this;\n // Order is important\n // Spec states incoming attributes override existing attributes\n const mergedSchemaUrl = mergeSchemaUrl(this, resource);\n const mergedOptions = mergedSchemaUrl\n ? { schemaUrl: mergedSchemaUrl }\n : undefined;\n return ResourceImpl.FromAttributeList([...resource.getRawAttributes(), ...this.getRawAttributes()], mergedOptions);\n }\n}\nexport function resourceFromAttributes(attributes, options) {\n return ResourceImpl.FromAttributeList(Object.entries(attributes), options);\n}\nexport function resourceFromDetectedResource(detectedResource, options) {\n return new ResourceImpl(detectedResource, options);\n}\nexport function emptyResource() {\n return resourceFromAttributes({});\n}\nexport function defaultResource() {\n return resourceFromAttributes({\n [ATTR_SERVICE_NAME]: defaultServiceName(),\n [ATTR_TELEMETRY_SDK_LANGUAGE]: SDK_INFO[ATTR_TELEMETRY_SDK_LANGUAGE],\n [ATTR_TELEMETRY_SDK_NAME]: SDK_INFO[ATTR_TELEMETRY_SDK_NAME],\n [ATTR_TELEMETRY_SDK_VERSION]: SDK_INFO[ATTR_TELEMETRY_SDK_VERSION],\n });\n}\nfunction guardedRawAttributes(attributes) {\n return attributes.map(([k, v]) => {\n if (isPromiseLike(v)) {\n return [\n k,\n v.catch(err => {\n diag.debug('promise rejection for resource attribute: %s - %s', k, err);\n return undefined;\n }),\n ];\n }\n return [k, v];\n });\n}\nfunction validateSchemaUrl(schemaUrl) {\n if (typeof schemaUrl === 'string' || schemaUrl === undefined) {\n return schemaUrl;\n }\n diag.warn('Schema URL must be string or undefined, got %s. Schema URL will be ignored.', schemaUrl);\n return undefined;\n}\nfunction mergeSchemaUrl(old, updating) {\n const oldSchemaUrl = old?.schemaUrl;\n const updatingSchemaUrl = updating?.schemaUrl;\n const isOldEmpty = oldSchemaUrl === undefined || oldSchemaUrl === '';\n const isUpdatingEmpty = updatingSchemaUrl === undefined || updatingSchemaUrl === '';\n if (isOldEmpty) {\n return updatingSchemaUrl;\n }\n if (isUpdatingEmpty) {\n return oldSchemaUrl;\n }\n if (oldSchemaUrl === updatingSchemaUrl) {\n return oldSchemaUrl;\n }\n diag.warn('Schema URL merge conflict: old resource has \"%s\", updating resource has \"%s\". Resulting resource will have undefined Schema URL.', oldSchemaUrl, updatingSchemaUrl);\n return undefined;\n}\n//# sourceMappingURL=ResourceImpl.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport class ViewRegistry {\n _registeredViews = [];\n addView(view) {\n this._registeredViews.push(view);\n }\n findViews(instrument, meter) {\n const views = this._registeredViews.filter(registeredView => {\n return (this._matchInstrument(registeredView.instrumentSelector, instrument) &&\n this._matchMeter(registeredView.meterSelector, meter));\n });\n return views;\n }\n _matchInstrument(selector, instrument) {\n return ((selector.getType() === undefined ||\n instrument.type === selector.getType()) &&\n selector.getNameFilter().match(instrument.name) &&\n selector.getUnitFilter().match(instrument.unit));\n }\n _matchMeter(selector, meter) {\n return (selector.getNameFilter().match(meter.name) &&\n (meter.version === undefined ||\n selector.getVersionFilter().match(meter.version)) &&\n (meter.schemaUrl === undefined ||\n selector.getSchemaUrlFilter().match(meter.schemaUrl)));\n }\n}\n//# sourceMappingURL=ViewRegistry.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ValueType, diag, } from '@opentelemetry/api';\nimport { equalsCaseInsensitive } from './utils';\nexport function createInstrumentDescriptor(name, type, options) {\n if (!isValidName(name)) {\n diag.warn(`Invalid metric name: \"${name}\". The metric name should be a ASCII string with a length no greater than 255 characters.`);\n }\n return {\n name,\n type,\n description: options?.description ?? '',\n unit: options?.unit ?? '',\n valueType: options?.valueType ?? ValueType.DOUBLE,\n advice: options?.advice ?? {},\n };\n}\nexport function createInstrumentDescriptorWithView(view, instrument) {\n return {\n name: view.name ?? instrument.name,\n description: view.description ?? instrument.description,\n type: instrument.type,\n unit: instrument.unit,\n valueType: instrument.valueType,\n advice: instrument.advice,\n };\n}\nexport function isDescriptorCompatibleWith(descriptor, otherDescriptor) {\n // Names are case-insensitive strings.\n return (equalsCaseInsensitive(descriptor.name, otherDescriptor.name) &&\n descriptor.unit === otherDescriptor.unit &&\n descriptor.type === otherDescriptor.type &&\n descriptor.valueType === otherDescriptor.valueType);\n}\n// ASCII string with a length no greater than 255 characters.\n// NB: the first character counted separately from the rest.\nconst NAME_REGEXP = /^[a-z][a-z0-9_.\\-/]{0,254}$/i;\nexport function isValidName(name) {\n return NAME_REGEXP.test(name);\n}\n//# sourceMappingURL=InstrumentDescriptor.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { context as contextApi, diag, ValueType, } from '@opentelemetry/api';\nimport { millisToHrTime } from '@opentelemetry/core';\nexport class SyncInstrument {\n _writableMetricStorage;\n _descriptor;\n constructor(writableMetricStorage, descriptor) {\n this._writableMetricStorage = writableMetricStorage;\n this._descriptor = descriptor;\n }\n _record(value, attributes = {}, context = contextApi.active()) {\n if (typeof value !== 'number') {\n diag.warn(`non-number value provided to metric ${this._descriptor.name}: ${value}`);\n return;\n }\n if (this._descriptor.valueType === ValueType.INT &&\n !Number.isInteger(value)) {\n diag.warn(`INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.`);\n value = Math.trunc(value);\n // ignore non-finite values.\n if (!Number.isInteger(value)) {\n return;\n }\n }\n this._writableMetricStorage.record(value, attributes, context, millisToHrTime(Date.now()));\n }\n}\n/**\n * The class implements {@link UpDownCounter} interface.\n */\nexport class UpDownCounterInstrument extends SyncInstrument {\n /**\n * Increment value of counter by the input. Inputs may be negative.\n */\n add(value, attributes, ctx) {\n this._record(value, attributes, ctx);\n }\n}\n/**\n * The class implements {@link Counter} interface.\n */\nexport class CounterInstrument extends SyncInstrument {\n /**\n * Increment value of counter by the input. Inputs may not be negative.\n */\n add(value, attributes, ctx) {\n if (value < 0) {\n diag.warn(`negative value provided to counter ${this._descriptor.name}: ${value}`);\n return;\n }\n this._record(value, attributes, ctx);\n }\n}\n/**\n * The class implements {@link Gauge} interface.\n */\nexport class GaugeInstrument extends SyncInstrument {\n /**\n * Records a measurement.\n */\n record(value, attributes, ctx) {\n this._record(value, attributes, ctx);\n }\n}\n/**\n * The class implements {@link Histogram} interface.\n */\nexport class HistogramInstrument extends SyncInstrument {\n /**\n * Records a measurement. Value of the measurement must not be negative.\n */\n record(value, attributes, ctx) {\n if (value < 0) {\n diag.warn(`negative value provided to histogram ${this._descriptor.name}: ${value}`);\n return;\n }\n this._record(value, attributes, ctx);\n }\n}\nexport class ObservableInstrument {\n /** @internal */\n _metricStorages;\n /** @internal */\n _descriptor;\n _observableRegistry;\n constructor(descriptor, metricStorages, observableRegistry) {\n this._descriptor = descriptor;\n this._metricStorages = metricStorages;\n this._observableRegistry = observableRegistry;\n }\n /**\n * @see {Observable.addCallback}\n */\n addCallback(callback) {\n this._observableRegistry.addCallback(callback, this);\n }\n /**\n * @see {Observable.removeCallback}\n */\n removeCallback(callback) {\n this._observableRegistry.removeCallback(callback, this);\n }\n}\nexport class ObservableCounterInstrument extends ObservableInstrument {\n}\nexport class ObservableGaugeInstrument extends ObservableInstrument {\n}\nexport class ObservableUpDownCounterInstrument extends ObservableInstrument {\n}\nexport function isObservableInstrument(it) {\n return it instanceof ObservableInstrument;\n}\n//# sourceMappingURL=Instruments.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { createInstrumentDescriptor } from './InstrumentDescriptor';\nimport { CounterInstrument, GaugeInstrument, HistogramInstrument, ObservableCounterInstrument, ObservableGaugeInstrument, ObservableUpDownCounterInstrument, UpDownCounterInstrument, } from './Instruments';\nimport { InstrumentType } from './export/MetricData';\n/**\n * This class implements the {@link IMeter} interface.\n */\nexport class Meter {\n _meterSharedState;\n constructor(meterSharedState) {\n this._meterSharedState = meterSharedState;\n }\n /**\n * Create a {@link Gauge} instrument.\n */\n createGauge(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.GAUGE, options);\n const storage = this._meterSharedState.registerMetricStorage(descriptor);\n return new GaugeInstrument(storage, descriptor);\n }\n /**\n * Create a {@link Histogram} instrument.\n */\n createHistogram(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.HISTOGRAM, options);\n const storage = this._meterSharedState.registerMetricStorage(descriptor);\n return new HistogramInstrument(storage, descriptor);\n }\n /**\n * Create a {@link Counter} instrument.\n */\n createCounter(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.COUNTER, options);\n const storage = this._meterSharedState.registerMetricStorage(descriptor);\n return new CounterInstrument(storage, descriptor);\n }\n /**\n * Create a {@link UpDownCounter} instrument.\n */\n createUpDownCounter(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.UP_DOWN_COUNTER, options);\n const storage = this._meterSharedState.registerMetricStorage(descriptor);\n return new UpDownCounterInstrument(storage, descriptor);\n }\n /**\n * Create a {@link ObservableGauge} instrument.\n */\n createObservableGauge(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.OBSERVABLE_GAUGE, options);\n const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor);\n return new ObservableGaugeInstrument(descriptor, storages, this._meterSharedState.observableRegistry);\n }\n /**\n * Create a {@link ObservableCounter} instrument.\n */\n createObservableCounter(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.OBSERVABLE_COUNTER, options);\n const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor);\n return new ObservableCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry);\n }\n /**\n * Create a {@link ObservableUpDownCounter} instrument.\n */\n createObservableUpDownCounter(name, options) {\n const descriptor = createInstrumentDescriptor(name, InstrumentType.OBSERVABLE_UP_DOWN_COUNTER, options);\n const storages = this._meterSharedState.registerAsyncMetricStorage(descriptor);\n return new ObservableUpDownCounterInstrument(descriptor, storages, this._meterSharedState.observableRegistry);\n }\n /**\n * @see {@link Meter.addBatchObservableCallback}\n */\n addBatchObservableCallback(callback, observables) {\n this._meterSharedState.observableRegistry.addBatchCallback(callback, observables);\n }\n /**\n * @see {@link Meter.removeBatchObservableCallback}\n */\n removeBatchObservableCallback(callback, observables) {\n this._meterSharedState.observableRegistry.removeBatchCallback(callback, observables);\n }\n}\n//# sourceMappingURL=Meter.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { createInstrumentDescriptor, } from '../InstrumentDescriptor';\n/**\n * Internal interface.\n *\n * Represents a storage from which we can collect metrics.\n */\nexport class MetricStorage {\n _instrumentDescriptor;\n constructor(instrumentDescriptor) {\n this._instrumentDescriptor = instrumentDescriptor;\n }\n getInstrumentDescriptor() {\n return this._instrumentDescriptor;\n }\n updateDescription(description) {\n this._instrumentDescriptor = createInstrumentDescriptor(this._instrumentDescriptor.name, this._instrumentDescriptor.type, {\n description: description,\n valueType: this._instrumentDescriptor.valueType,\n unit: this._instrumentDescriptor.unit,\n advice: this._instrumentDescriptor.advice,\n });\n }\n}\n//# sourceMappingURL=MetricStorage.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { hashAttributes } from '../utils';\nexport class HashMap {\n _valueMap = new Map();\n _keyMap = new Map();\n _hash;\n constructor(hash) {\n this._hash = hash;\n }\n get(key, hashCode) {\n hashCode ??= this._hash(key);\n return this._valueMap.get(hashCode);\n }\n getOrDefault(key, defaultFactory) {\n const hash = this._hash(key);\n if (this._valueMap.has(hash)) {\n return this._valueMap.get(hash);\n }\n const val = defaultFactory();\n if (!this._keyMap.has(hash)) {\n this._keyMap.set(hash, key);\n }\n this._valueMap.set(hash, val);\n return val;\n }\n set(key, value, hashCode) {\n hashCode ??= this._hash(key);\n if (!this._keyMap.has(hashCode)) {\n this._keyMap.set(hashCode, key);\n }\n this._valueMap.set(hashCode, value);\n }\n has(key, hashCode) {\n hashCode ??= this._hash(key);\n return this._valueMap.has(hashCode);\n }\n *keys() {\n const keyIterator = this._keyMap.entries();\n let next = keyIterator.next();\n while (next.done !== true) {\n yield [next.value[1], next.value[0]];\n next = keyIterator.next();\n }\n }\n *entries() {\n const valueIterator = this._valueMap.entries();\n let next = valueIterator.next();\n while (next.done !== true) {\n // next.value[0] here can not be undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n yield [this._keyMap.get(next.value[0]), next.value[1], next.value[0]];\n next = valueIterator.next();\n }\n }\n get size() {\n return this._valueMap.size;\n }\n}\nexport class AttributeHashMap extends HashMap {\n constructor() {\n super(hashAttributes);\n }\n}\n//# sourceMappingURL=HashMap.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { hashAttributes } from '../utils';\nimport { AttributeHashMap } from './HashMap';\n/**\n * Internal interface.\n *\n * Allows synchronous collection of metrics. This processor should allow\n * allocation of new aggregation cells for metrics and convert cumulative\n * recording to delta data points.\n */\nexport class DeltaMetricProcessor {\n _activeCollectionStorage = new AttributeHashMap();\n // TODO: find a reasonable mean to clean the memo;\n // https://github.com/open-telemetry/opentelemetry-specification/pull/2208\n _cumulativeMemoStorage = new AttributeHashMap();\n _cardinalityLimit;\n _overflowAttributes = { 'otel.metric.overflow': true };\n _overflowHashCode;\n _aggregator;\n constructor(aggregator, aggregationCardinalityLimit) {\n this._aggregator = aggregator;\n this._cardinalityLimit = (aggregationCardinalityLimit ?? 2000) - 1;\n this._overflowHashCode = hashAttributes(this._overflowAttributes);\n }\n record(value, attributes, _context, collectionTime) {\n let accumulation = this._activeCollectionStorage.get(attributes);\n if (!accumulation) {\n if (this._activeCollectionStorage.size >= this._cardinalityLimit) {\n const overflowAccumulation = this._activeCollectionStorage.getOrDefault(this._overflowAttributes, () => this._aggregator.createAccumulation(collectionTime));\n overflowAccumulation?.record(value);\n return;\n }\n accumulation = this._aggregator.createAccumulation(collectionTime);\n this._activeCollectionStorage.set(attributes, accumulation);\n }\n accumulation?.record(value);\n }\n batchCumulate(measurements, collectionTime) {\n Array.from(measurements.entries()).forEach(([attributes, value, hashCode]) => {\n const accumulation = this._aggregator.createAccumulation(collectionTime);\n accumulation?.record(value);\n let delta = accumulation;\n // Diff with recorded cumulative memo.\n if (this._cumulativeMemoStorage.has(attributes, hashCode)) {\n // has() returned true, previous is present.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const previous = this._cumulativeMemoStorage.get(attributes, hashCode);\n delta = this._aggregator.diff(previous, accumulation);\n }\n else {\n // If the cardinality limit is reached, we need to change the attributes\n if (this._cumulativeMemoStorage.size >= this._cardinalityLimit) {\n attributes = this._overflowAttributes;\n hashCode = this._overflowHashCode;\n if (this._cumulativeMemoStorage.has(attributes, hashCode)) {\n // has() returned true, previous is present.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const previous = this._cumulativeMemoStorage.get(attributes, hashCode);\n delta = this._aggregator.diff(previous, accumulation);\n }\n }\n }\n // Merge with uncollected active delta.\n if (this._activeCollectionStorage.has(attributes, hashCode)) {\n // has() returned true, active is present.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const active = this._activeCollectionStorage.get(attributes, hashCode);\n delta = this._aggregator.merge(active, delta);\n }\n // Save the current record and the delta record.\n this._cumulativeMemoStorage.set(attributes, accumulation, hashCode);\n this._activeCollectionStorage.set(attributes, delta, hashCode);\n });\n }\n /**\n * Returns a collection of delta metrics. Start time is the when first\n * time event collected.\n */\n collect() {\n const unreportedDelta = this._activeCollectionStorage;\n this._activeCollectionStorage = new AttributeHashMap();\n return unreportedDelta;\n }\n}\n//# sourceMappingURL=DeltaMetricProcessor.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { AggregationTemporality } from '../export/AggregationTemporality';\nimport { AttributeHashMap } from './HashMap';\n/**\n * Internal interface.\n *\n * Provides unique reporting for each collector. Allows synchronous collection\n * of metrics and reports given temporality values.\n */\nexport class TemporalMetricProcessor {\n _aggregator;\n _unreportedAccumulations = new Map();\n _reportHistory = new Map();\n constructor(aggregator, collectorHandles) {\n this._aggregator = aggregator;\n collectorHandles.forEach(handle => {\n this._unreportedAccumulations.set(handle, []);\n });\n }\n /**\n * Builds the {@link MetricData} streams to report against a specific MetricCollector.\n * @param collector The information of the MetricCollector.\n * @param collectors The registered collectors.\n * @param instrumentDescriptor The instrumentation descriptor that these metrics generated with.\n * @param currentAccumulations The current accumulation of metric data from instruments.\n * @param collectionTime The current collection timestamp.\n * @returns The {@link MetricData} points or `null`.\n */\n buildMetrics(collector, instrumentDescriptor, currentAccumulations, collectionTime) {\n this._stashAccumulations(currentAccumulations);\n const unreportedAccumulations = this._getMergedUnreportedAccumulations(collector);\n let result = unreportedAccumulations;\n let aggregationTemporality;\n // Check our last report time.\n if (this._reportHistory.has(collector)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const last = this._reportHistory.get(collector);\n const lastCollectionTime = last.collectionTime;\n aggregationTemporality = last.aggregationTemporality;\n // Use aggregation temporality + instrument to determine if we do a merge or a diff of\n // previous. We have the following four scenarios:\n // 1. Cumulative Aggregation (temporality) + Delta recording (sync instrument).\n // Here we merge with our last record to get a cumulative aggregation.\n // 2. Cumulative Aggregation + Cumulative recording (async instrument).\n // Cumulative records are converted to delta recording with DeltaMetricProcessor.\n // Here we merge with our last record to get a cumulative aggregation.\n // 3. Delta Aggregation + Delta recording\n // Calibrate the startTime of metric streams to be the reader's lastCollectionTime.\n // 4. Delta Aggregation + Cumulative recording.\n // Cumulative records are converted to delta recording with DeltaMetricProcessor.\n // Calibrate the startTime of metric streams to be the reader's lastCollectionTime.\n if (aggregationTemporality === AggregationTemporality.CUMULATIVE) {\n // We need to make sure the current delta recording gets merged into the previous cumulative\n // for the next cumulative recording.\n result = TemporalMetricProcessor.merge(last.accumulations, unreportedAccumulations, this._aggregator);\n }\n else {\n result = TemporalMetricProcessor.calibrateStartTime(last.accumulations, unreportedAccumulations, lastCollectionTime);\n }\n }\n else {\n // Call into user code to select aggregation temporality for the instrument.\n aggregationTemporality = collector.selectAggregationTemporality(instrumentDescriptor.type);\n }\n // Update last reported (cumulative) accumulation.\n this._reportHistory.set(collector, {\n accumulations: result,\n collectionTime,\n aggregationTemporality,\n });\n const accumulationRecords = AttributesMapToAccumulationRecords(result);\n // do not convert to metric data if there is nothing to convert.\n if (accumulationRecords.length === 0) {\n return undefined;\n }\n return this._aggregator.toMetricData(instrumentDescriptor, aggregationTemporality, accumulationRecords, \n /* endTime */ collectionTime);\n }\n _stashAccumulations(currentAccumulation) {\n const registeredCollectors = this._unreportedAccumulations.keys();\n for (const collector of registeredCollectors) {\n let stash = this._unreportedAccumulations.get(collector);\n if (stash === undefined) {\n stash = [];\n this._unreportedAccumulations.set(collector, stash);\n }\n stash.push(currentAccumulation);\n }\n }\n _getMergedUnreportedAccumulations(collector) {\n let result = new AttributeHashMap();\n const unreportedList = this._unreportedAccumulations.get(collector);\n this._unreportedAccumulations.set(collector, []);\n if (unreportedList === undefined) {\n return result;\n }\n for (const it of unreportedList) {\n result = TemporalMetricProcessor.merge(result, it, this._aggregator);\n }\n return result;\n }\n static merge(last, current, aggregator) {\n const result = last;\n const iterator = current.entries();\n let next = iterator.next();\n while (next.done !== true) {\n const [key, record, hash] = next.value;\n if (last.has(key, hash)) {\n const lastAccumulation = last.get(key, hash);\n // last.has() returned true, lastAccumulation is present.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const accumulation = aggregator.merge(lastAccumulation, record);\n result.set(key, accumulation, hash);\n }\n else {\n result.set(key, record, hash);\n }\n next = iterator.next();\n }\n return result;\n }\n /**\n * Calibrate the reported metric streams' startTime to lastCollectionTime. Leaves\n * the new stream to be the initial observation time unchanged.\n */\n static calibrateStartTime(last, current, lastCollectionTime) {\n for (const [key, hash] of last.keys()) {\n const currentAccumulation = current.get(key, hash);\n currentAccumulation?.setStartTime(lastCollectionTime);\n }\n return current;\n }\n}\n// TypeScript complains about converting 3 elements tuple to AccumulationRecord<T>.\nfunction AttributesMapToAccumulationRecords(map) {\n return Array.from(map.entries());\n}\n//# sourceMappingURL=TemporalMetricProcessor.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { MetricStorage } from './MetricStorage';\nimport { DeltaMetricProcessor } from './DeltaMetricProcessor';\nimport { TemporalMetricProcessor } from './TemporalMetricProcessor';\nimport { AttributeHashMap } from './HashMap';\n/**\n * Internal interface.\n *\n * Stores and aggregates {@link MetricData} for asynchronous instruments.\n */\nexport class AsyncMetricStorage extends MetricStorage {\n _aggregationCardinalityLimit;\n _deltaMetricStorage;\n _temporalMetricStorage;\n _attributesProcessor;\n constructor(_instrumentDescriptor, aggregator, attributesProcessor, collectorHandles, aggregationCardinalityLimit) {\n super(_instrumentDescriptor);\n this._aggregationCardinalityLimit = aggregationCardinalityLimit;\n this._deltaMetricStorage = new DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit);\n this._temporalMetricStorage = new TemporalMetricProcessor(aggregator, collectorHandles);\n this._attributesProcessor = attributesProcessor;\n }\n record(measurements, observationTime) {\n const processed = new AttributeHashMap();\n Array.from(measurements.entries()).forEach(([attributes, value]) => {\n processed.set(this._attributesProcessor.process(attributes), value);\n });\n this._deltaMetricStorage.batchCumulate(processed, observationTime);\n }\n /**\n * Collects the metrics from this storage. The ObservableCallback is invoked\n * during the collection.\n *\n * Note: This is a stateful operation and may reset any interval-related\n * state for the MetricCollector.\n */\n collect(collector, collectionTime) {\n const accumulations = this._deltaMetricStorage.collect();\n return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime);\n }\n}\n//# sourceMappingURL=AsyncMetricStorage.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport function getIncompatibilityDetails(existing, otherDescriptor) {\n let incompatibility = '';\n if (existing.unit !== otherDescriptor.unit) {\n incompatibility += `\\t- Unit '${existing.unit}' does not match '${otherDescriptor.unit}'\\n`;\n }\n if (existing.type !== otherDescriptor.type) {\n incompatibility += `\\t- Type '${existing.type}' does not match '${otherDescriptor.type}'\\n`;\n }\n if (existing.valueType !== otherDescriptor.valueType) {\n incompatibility += `\\t- Value Type '${existing.valueType}' does not match '${otherDescriptor.valueType}'\\n`;\n }\n if (existing.description !== otherDescriptor.description) {\n incompatibility += `\\t- Description '${existing.description}' does not match '${otherDescriptor.description}'\\n`;\n }\n return incompatibility;\n}\nexport function getValueTypeConflictResolutionRecipe(existing, otherDescriptor) {\n return `\\t- use valueType '${existing.valueType}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`;\n}\nexport function getUnitConflictResolutionRecipe(existing, otherDescriptor) {\n return `\\t- use unit '${existing.unit}' on instrument creation or use an instrument name other than '${otherDescriptor.name}'`;\n}\nexport function getTypeConflictResolutionRecipe(existing, otherDescriptor) {\n const selector = {\n name: otherDescriptor.name,\n type: otherDescriptor.type,\n unit: otherDescriptor.unit,\n };\n const selectorString = JSON.stringify(selector);\n return `\\t- create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}'`;\n}\nexport function getDescriptionResolutionRecipe(existing, otherDescriptor) {\n const selector = {\n name: otherDescriptor.name,\n type: otherDescriptor.type,\n unit: otherDescriptor.unit,\n };\n const selectorString = JSON.stringify(selector);\n return `\\t- create a new view with a name other than '${existing.name}' and InstrumentSelector '${selectorString}'\n \\t- OR - create a new view with the name ${existing.name} and description '${existing.description}' and InstrumentSelector ${selectorString}\n \\t- OR - create a new view with the name ${otherDescriptor.name} and description '${existing.description}' and InstrumentSelector ${selectorString}`;\n}\nexport function getConflictResolutionRecipe(existing, otherDescriptor) {\n // Conflicts that cannot be solved via views.\n if (existing.valueType !== otherDescriptor.valueType) {\n return getValueTypeConflictResolutionRecipe(existing, otherDescriptor);\n }\n if (existing.unit !== otherDescriptor.unit) {\n return getUnitConflictResolutionRecipe(existing, otherDescriptor);\n }\n // Conflicts that can be solved via views.\n if (existing.type !== otherDescriptor.type) {\n // this will automatically solve possible description conflicts.\n return getTypeConflictResolutionRecipe(existing, otherDescriptor);\n }\n if (existing.description !== otherDescriptor.description) {\n return getDescriptionResolutionRecipe(existing, otherDescriptor);\n }\n return '';\n}\n//# sourceMappingURL=RegistrationConflicts.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isDescriptorCompatibleWith, } from '../InstrumentDescriptor';\nimport * as api from '@opentelemetry/api';\nimport { getConflictResolutionRecipe, getIncompatibilityDetails, } from '../view/RegistrationConflicts';\n/**\n * Internal class for storing {@link MetricStorage}\n */\nexport class MetricStorageRegistry {\n _sharedRegistry = new Map();\n _perCollectorRegistry = new Map();\n static create() {\n return new MetricStorageRegistry();\n }\n getStorages(collector) {\n let storages = [];\n for (const metricStorages of this._sharedRegistry.values()) {\n storages = storages.concat(metricStorages);\n }\n const perCollectorStorages = this._perCollectorRegistry.get(collector);\n if (perCollectorStorages != null) {\n for (const metricStorages of perCollectorStorages.values()) {\n storages = storages.concat(metricStorages);\n }\n }\n return storages;\n }\n register(storage) {\n this._registerStorage(storage, this._sharedRegistry);\n }\n registerForCollector(collector, storage) {\n let storageMap = this._perCollectorRegistry.get(collector);\n if (storageMap == null) {\n storageMap = new Map();\n this._perCollectorRegistry.set(collector, storageMap);\n }\n this._registerStorage(storage, storageMap);\n }\n findOrUpdateCompatibleStorage(expectedDescriptor) {\n const storages = this._sharedRegistry.get(expectedDescriptor.name);\n if (storages === undefined) {\n return null;\n }\n // If the descriptor is compatible, the type of their metric storage\n // (either SyncMetricStorage or AsyncMetricStorage) must be compatible.\n return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages);\n }\n findOrUpdateCompatibleCollectorStorage(collector, expectedDescriptor) {\n const storageMap = this._perCollectorRegistry.get(collector);\n if (storageMap === undefined) {\n return null;\n }\n const storages = storageMap.get(expectedDescriptor.name);\n if (storages === undefined) {\n return null;\n }\n // If the descriptor is compatible, the type of their metric storage\n // (either SyncMetricStorage or AsyncMetricStorage) must be compatible.\n return this._findOrUpdateCompatibleStorage(expectedDescriptor, storages);\n }\n _registerStorage(storage, storageMap) {\n const descriptor = storage.getInstrumentDescriptor();\n const storages = storageMap.get(descriptor.name);\n if (storages === undefined) {\n storageMap.set(descriptor.name, [storage]);\n return;\n }\n storages.push(storage);\n }\n _findOrUpdateCompatibleStorage(expectedDescriptor, existingStorages) {\n let compatibleStorage = null;\n for (const existingStorage of existingStorages) {\n const existingDescriptor = existingStorage.getInstrumentDescriptor();\n if (isDescriptorCompatibleWith(existingDescriptor, expectedDescriptor)) {\n // Use the longer description if it does not match.\n if (existingDescriptor.description !== expectedDescriptor.description) {\n if (expectedDescriptor.description.length >\n existingDescriptor.description.length) {\n existingStorage.updateDescription(expectedDescriptor.description);\n }\n api.diag.warn('A view or instrument with the name ', expectedDescriptor.name, ' has already been registered, but has a different description and is incompatible with another registered view.\\n', 'Details:\\n', getIncompatibilityDetails(existingDescriptor, expectedDescriptor), 'The longer description will be used.\\nTo resolve the conflict:', getConflictResolutionRecipe(existingDescriptor, expectedDescriptor));\n }\n // Storage is fully compatible. There will never be more than one pre-existing fully compatible storage.\n compatibleStorage = existingStorage;\n }\n else {\n // The implementation SHOULD warn about duplicate instrument registration\n // conflicts after applying View configuration.\n api.diag.warn('A view or instrument with the name ', expectedDescriptor.name, ' has already been registered and is incompatible with another registered view.\\n', 'Details:\\n', getIncompatibilityDetails(existingDescriptor, expectedDescriptor), 'To resolve the conflict:\\n', getConflictResolutionRecipe(existingDescriptor, expectedDescriptor));\n }\n }\n return compatibleStorage;\n }\n}\n//# sourceMappingURL=MetricStorageRegistry.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Internal interface.\n */\nexport class MultiMetricStorage {\n _backingStorages;\n constructor(backingStorages) {\n this._backingStorages = backingStorages;\n }\n record(value, attributes, context, recordTime) {\n this._backingStorages.forEach(it => {\n it.record(value, attributes, context, recordTime);\n });\n }\n}\n//# sourceMappingURL=MultiWritableMetricStorage.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { diag, ValueType, } from '@opentelemetry/api';\nimport { AttributeHashMap } from './state/HashMap';\nimport { isObservableInstrument } from './Instruments';\n/**\n * The class implements {@link ObservableResult} interface.\n */\nexport class ObservableResultImpl {\n /**\n * @internal\n */\n _buffer = new AttributeHashMap();\n _instrumentName;\n _valueType;\n constructor(instrumentName, valueType) {\n this._instrumentName = instrumentName;\n this._valueType = valueType;\n }\n /**\n * Observe a measurement of the value associated with the given attributes.\n */\n observe(value, attributes = {}) {\n if (typeof value !== 'number') {\n diag.warn(`non-number value provided to metric ${this._instrumentName}: ${value}`);\n return;\n }\n if (this._valueType === ValueType.INT && !Number.isInteger(value)) {\n diag.warn(`INT value type cannot accept a floating-point value for ${this._instrumentName}, ignoring the fractional digits.`);\n value = Math.trunc(value);\n // ignore non-finite values.\n if (!Number.isInteger(value)) {\n return;\n }\n }\n this._buffer.set(attributes, value);\n }\n}\n/**\n * The class implements {@link BatchObservableCallback} interface.\n */\nexport class BatchObservableResultImpl {\n /**\n * @internal\n */\n _buffer = new Map();\n /**\n * Observe a measurement of the value associated with the given attributes.\n */\n observe(metric, value, attributes = {}) {\n if (!isObservableInstrument(metric)) {\n return;\n }\n let map = this._buffer.get(metric);\n if (map == null) {\n map = new AttributeHashMap();\n this._buffer.set(metric, map);\n }\n if (typeof value !== 'number') {\n diag.warn(`non-number value provided to metric ${metric._descriptor.name}: ${value}`);\n return;\n }\n if (metric._descriptor.valueType === ValueType.INT &&\n !Number.isInteger(value)) {\n diag.warn(`INT value type cannot accept a floating-point value for ${metric._descriptor.name}, ignoring the fractional digits.`);\n value = Math.trunc(value);\n // ignore non-finite values.\n if (!Number.isInteger(value)) {\n return;\n }\n }\n map.set(attributes, value);\n }\n}\n//# sourceMappingURL=ObservableResult.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { diag, } from '@opentelemetry/api';\nimport { isObservableInstrument } from '../Instruments';\nimport { BatchObservableResultImpl, ObservableResultImpl, } from '../ObservableResult';\nimport { callWithTimeout, setEquals } from '../utils';\n/**\n * An internal interface for managing ObservableCallbacks.\n *\n * Every registered callback associated with a set of instruments are be evaluated\n * exactly once during collection prior to reading data for that instrument.\n */\nexport class ObservableRegistry {\n _callbacks = [];\n _batchCallbacks = [];\n addCallback(callback, instrument) {\n const idx = this._findCallback(callback, instrument);\n if (idx >= 0) {\n return;\n }\n this._callbacks.push({ callback, instrument });\n }\n removeCallback(callback, instrument) {\n const idx = this._findCallback(callback, instrument);\n if (idx < 0) {\n return;\n }\n this._callbacks.splice(idx, 1);\n }\n addBatchCallback(callback, instruments) {\n // Create a set of unique instruments.\n const observableInstruments = new Set(instruments.filter(isObservableInstrument));\n if (observableInstruments.size === 0) {\n diag.error('BatchObservableCallback is not associated with valid instruments', instruments);\n return;\n }\n const idx = this._findBatchCallback(callback, observableInstruments);\n if (idx >= 0) {\n return;\n }\n this._batchCallbacks.push({ callback, instruments: observableInstruments });\n }\n removeBatchCallback(callback, instruments) {\n // Create a set of unique instruments.\n const observableInstruments = new Set(instruments.filter(isObservableInstrument));\n const idx = this._findBatchCallback(callback, observableInstruments);\n if (idx < 0) {\n return;\n }\n this._batchCallbacks.splice(idx, 1);\n }\n /**\n * @returns a promise of rejected reasons for invoking callbacks.\n */\n async observe(collectionTime, timeoutMillis) {\n const callbackFutures = this._observeCallbacks(collectionTime, timeoutMillis);\n const batchCallbackFutures = this._observeBatchCallbacks(collectionTime, timeoutMillis);\n const results = await Promise.allSettled([\n ...callbackFutures,\n ...batchCallbackFutures,\n ]);\n const rejections = results\n .filter(result => result.status === 'rejected')\n .map(result => result.reason);\n return rejections;\n }\n _observeCallbacks(observationTime, timeoutMillis) {\n return this._callbacks.map(async ({ callback, instrument }) => {\n const observableResult = new ObservableResultImpl(instrument._descriptor.name, instrument._descriptor.valueType);\n let callPromise = Promise.resolve(callback(observableResult));\n if (timeoutMillis != null) {\n callPromise = callWithTimeout(callPromise, timeoutMillis);\n }\n await callPromise;\n instrument._metricStorages.forEach(metricStorage => {\n metricStorage.record(observableResult._buffer, observationTime);\n });\n });\n }\n _observeBatchCallbacks(observationTime, timeoutMillis) {\n return this._batchCallbacks.map(async ({ callback, instruments }) => {\n const observableResult = new BatchObservableResultImpl();\n let callPromise = Promise.resolve(callback(observableResult));\n if (timeoutMillis != null) {\n callPromise = callWithTimeout(callPromise, timeoutMillis);\n }\n await callPromise;\n instruments.forEach(instrument => {\n const buffer = observableResult._buffer.get(instrument);\n if (buffer == null) {\n return;\n }\n instrument._metricStorages.forEach(metricStorage => {\n metricStorage.record(buffer, observationTime);\n });\n });\n });\n }\n _findCallback(callback, instrument) {\n return this._callbacks.findIndex(record => {\n return record.callback === callback && record.instrument === instrument;\n });\n }\n _findBatchCallback(callback, instruments) {\n return this._batchCallbacks.findIndex(record => {\n return (record.callback === callback &&\n setEquals(record.instruments, instruments));\n });\n }\n}\n//# sourceMappingURL=ObservableRegistry.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { MetricStorage } from './MetricStorage';\nimport { DeltaMetricProcessor } from './DeltaMetricProcessor';\nimport { TemporalMetricProcessor } from './TemporalMetricProcessor';\n/**\n * Internal interface.\n *\n * Stores and aggregates {@link MetricData} for synchronous instruments.\n */\nexport class SyncMetricStorage extends MetricStorage {\n _aggregationCardinalityLimit;\n _deltaMetricStorage;\n _temporalMetricStorage;\n _attributesProcessor;\n constructor(instrumentDescriptor, aggregator, attributesProcessor, collectorHandles, aggregationCardinalityLimit) {\n super(instrumentDescriptor);\n this._aggregationCardinalityLimit = aggregationCardinalityLimit;\n this._deltaMetricStorage = new DeltaMetricProcessor(aggregator, this._aggregationCardinalityLimit);\n this._temporalMetricStorage = new TemporalMetricProcessor(aggregator, collectorHandles);\n this._attributesProcessor = attributesProcessor;\n }\n record(value, attributes, context, recordTime) {\n attributes = this._attributesProcessor.process(attributes, context);\n this._deltaMetricStorage.record(value, attributes, context, recordTime);\n }\n /**\n * Collects the metrics from this storage.\n *\n * Note: This is a stateful operation and may reset any interval-related\n * state for the MetricCollector.\n */\n collect(collector, collectionTime) {\n const accumulations = this._deltaMetricStorage.collect();\n return this._temporalMetricStorage.buildMetrics(collector, this._instrumentDescriptor, accumulations, collectionTime);\n }\n}\n//# sourceMappingURL=SyncMetricStorage.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nclass NoopAttributesProcessor {\n process(incoming, _context) {\n return incoming;\n }\n}\nclass MultiAttributesProcessor {\n _processors;\n constructor(processors) {\n this._processors = processors;\n }\n process(incoming, context) {\n let filteredAttributes = incoming;\n for (const processor of this._processors) {\n filteredAttributes = processor.process(filteredAttributes, context);\n }\n return filteredAttributes;\n }\n}\nclass AllowListProcessor {\n _allowedAttributeNames;\n constructor(allowedAttributeNames) {\n this._allowedAttributeNames = allowedAttributeNames;\n }\n process(incoming, _context) {\n const filteredAttributes = {};\n Object.keys(incoming).forEach(attributeName => {\n if (this._allowedAttributeNames.includes(attributeName)) {\n filteredAttributes[attributeName] = incoming[attributeName];\n }\n });\n return filteredAttributes;\n }\n}\nclass DenyListProcessor {\n _deniedAttributeNames;\n constructor(deniedAttributeNames) {\n this._deniedAttributeNames = deniedAttributeNames;\n }\n process(incoming, _context) {\n const filteredAttributes = {};\n Object.keys(incoming).forEach(attributeName => {\n if (!this._deniedAttributeNames.includes(attributeName)) {\n filteredAttributes[attributeName] = incoming[attributeName];\n }\n });\n return filteredAttributes;\n }\n}\n/**\n * @internal\n *\n * Create an {@link IAttributesProcessor} that acts as a simple pass-through for attributes.\n */\nexport function createNoopAttributesProcessor() {\n return NOOP;\n}\n/**\n * @internal\n *\n * Create an {@link IAttributesProcessor} that applies all processors from the provided list in order.\n *\n * @param processors Processors to apply in order.\n */\nexport function createMultiAttributesProcessor(processors) {\n return new MultiAttributesProcessor(processors);\n}\n/**\n * Create an {@link IAttributesProcessor} that filters by allowed attribute names and drops any names that are not in the\n * allow list.\n */\nexport function createAllowListAttributesProcessor(attributeAllowList) {\n return new AllowListProcessor(attributeAllowList);\n}\n/**\n * Create an {@link IAttributesProcessor} that drops attributes based on the names provided in the deny list\n */\nexport function createDenyListAttributesProcessor(attributeDenyList) {\n return new DenyListProcessor(attributeDenyList);\n}\nconst NOOP = new NoopAttributesProcessor();\n//# sourceMappingURL=AttributesProcessor.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { createInstrumentDescriptorWithView, } from '../InstrumentDescriptor';\nimport { Meter } from '../Meter';\nimport { AsyncMetricStorage } from './AsyncMetricStorage';\nimport { MetricStorageRegistry } from './MetricStorageRegistry';\nimport { MultiMetricStorage } from './MultiWritableMetricStorage';\nimport { ObservableRegistry } from './ObservableRegistry';\nimport { SyncMetricStorage } from './SyncMetricStorage';\nimport { createNoopAttributesProcessor, } from '../view/AttributesProcessor';\n/**\n * An internal record for shared meter provider states.\n */\nexport class MeterSharedState {\n metricStorageRegistry = new MetricStorageRegistry();\n observableRegistry = new ObservableRegistry();\n meter;\n _meterProviderSharedState;\n _instrumentationScope;\n constructor(meterProviderSharedState, instrumentationScope) {\n this.meter = new Meter(this);\n this._meterProviderSharedState = meterProviderSharedState;\n this._instrumentationScope = instrumentationScope;\n }\n registerMetricStorage(descriptor) {\n const storages = this._registerMetricStorage(descriptor, SyncMetricStorage);\n if (storages.length === 1) {\n return storages[0];\n }\n return new MultiMetricStorage(storages);\n }\n registerAsyncMetricStorage(descriptor) {\n const storages = this._registerMetricStorage(descriptor, AsyncMetricStorage);\n return storages;\n }\n /**\n * @param collector opaque handle of {@link MetricCollector} which initiated the collection.\n * @param collectionTime the HrTime at which the collection was initiated.\n * @param options options for collection.\n * @returns the list of metric data collected.\n */\n async collect(collector, collectionTime, options) {\n /**\n * 1. Call all observable callbacks first.\n * 2. Collect metric result for the collector.\n */\n const errors = await this.observableRegistry.observe(collectionTime, options?.timeoutMillis);\n const storages = this.metricStorageRegistry.getStorages(collector);\n // prevent more allocations if there are no storages.\n if (storages.length === 0) {\n return null;\n }\n const metricDataList = [];\n storages.forEach(metricStorage => {\n const metricData = metricStorage.collect(collector, collectionTime);\n if (metricData != null) {\n metricDataList.push(metricData);\n }\n });\n // skip this scope if no data was collected (storage created, but no data observed)\n if (metricDataList.length === 0) {\n return { errors };\n }\n return {\n scopeMetrics: {\n scope: this._instrumentationScope,\n metrics: metricDataList,\n },\n errors,\n };\n }\n _registerMetricStorage(descriptor, MetricStorageType) {\n const views = this._meterProviderSharedState.viewRegistry.findViews(descriptor, this._instrumentationScope);\n let storages = views.map(view => {\n const viewDescriptor = createInstrumentDescriptorWithView(view, descriptor);\n const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleStorage(viewDescriptor);\n if (compatibleStorage != null) {\n return compatibleStorage;\n }\n const aggregator = view.aggregation.createAggregator(viewDescriptor);\n const viewStorage = new MetricStorageType(viewDescriptor, aggregator, view.attributesProcessor, this._meterProviderSharedState.metricCollectors, view.aggregationCardinalityLimit);\n this.metricStorageRegistry.register(viewStorage);\n return viewStorage;\n });\n // Fallback to the per-collector aggregations if no view is configured for the instrument.\n if (storages.length === 0) {\n const perCollectorAggregations = this._meterProviderSharedState.selectAggregations(descriptor.type);\n const collectorStorages = perCollectorAggregations.map(([collector, aggregation]) => {\n const compatibleStorage = this.metricStorageRegistry.findOrUpdateCompatibleCollectorStorage(collector, descriptor);\n if (compatibleStorage != null) {\n return compatibleStorage;\n }\n const aggregator = aggregation.createAggregator(descriptor);\n const cardinalityLimit = collector.selectCardinalityLimit(descriptor.type);\n const storage = new MetricStorageType(descriptor, aggregator, createNoopAttributesProcessor(), [collector], cardinalityLimit);\n this.metricStorageRegistry.registerForCollector(collector, storage);\n return storage;\n });\n storages = storages.concat(collectorStorages);\n }\n return storages;\n }\n}\n//# sourceMappingURL=MeterSharedState.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { instrumentationScopeId } from '../utils';\nimport { ViewRegistry } from '../view/ViewRegistry';\nimport { MeterSharedState } from './MeterSharedState';\nimport { toAggregation } from '../view/AggregationOption';\n/**\n * An internal record for shared meter provider states.\n */\nexport class MeterProviderSharedState {\n viewRegistry = new ViewRegistry();\n metricCollectors = [];\n meterSharedStates = new Map();\n resource;\n constructor(resource) {\n this.resource = resource;\n }\n getMeterSharedState(instrumentationScope) {\n const id = instrumentationScopeId(instrumentationScope);\n let meterSharedState = this.meterSharedStates.get(id);\n if (meterSharedState == null) {\n meterSharedState = new MeterSharedState(this, instrumentationScope);\n this.meterSharedStates.set(id, meterSharedState);\n }\n return meterSharedState;\n }\n selectAggregations(instrumentType) {\n const result = [];\n for (const collector of this.metricCollectors) {\n result.push([\n collector,\n toAggregation(collector.selectAggregation(instrumentType)),\n ]);\n }\n return result;\n }\n}\n//# sourceMappingURL=MeterProviderSharedState.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { millisToHrTime } from '@opentelemetry/core';\n/**\n * An internal opaque interface that the MetricReader receives as\n * MetricProducer. It acts as the storage key to the internal metric stream\n * state for each MetricReader.\n */\nexport class MetricCollector {\n _sharedState;\n _metricReader;\n constructor(sharedState, metricReader) {\n this._sharedState = sharedState;\n this._metricReader = metricReader;\n }\n async collect(options) {\n const collectionTime = millisToHrTime(Date.now());\n const scopeMetrics = [];\n const errors = [];\n const meterCollectionPromises = Array.from(this._sharedState.meterSharedStates.values()).map(async (meterSharedState) => {\n const current = await meterSharedState.collect(this, collectionTime, options);\n // only add scope metrics if available\n if (current?.scopeMetrics != null) {\n scopeMetrics.push(current.scopeMetrics);\n }\n // only add errors if available\n if (current?.errors != null) {\n errors.push(...current.errors);\n }\n });\n await Promise.all(meterCollectionPromises);\n return {\n resourceMetrics: {\n resource: this._sharedState.resource,\n scopeMetrics: scopeMetrics,\n },\n errors: errors,\n };\n }\n /**\n * Delegates for MetricReader.forceFlush.\n */\n async forceFlush(options) {\n await this._metricReader.forceFlush(options);\n }\n /**\n * Delegates for MetricReader.shutdown.\n */\n async shutdown(options) {\n await this._metricReader.shutdown(options);\n }\n selectAggregationTemporality(instrumentType) {\n return this._metricReader.selectAggregationTemporality(instrumentType);\n }\n selectAggregation(instrumentType) {\n return this._metricReader.selectAggregation(instrumentType);\n }\n /**\n * Select the cardinality limit for the given {@link InstrumentType} for this\n * collector.\n */\n selectCardinalityLimit(instrumentType) {\n return this._metricReader.selectCardinalityLimit?.(instrumentType) ?? 2000;\n }\n}\n//# sourceMappingURL=MetricCollector.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n// https://tc39.es/proposal-regex-escaping\n// escape ^ $ \\ . + ? ( ) [ ] { } |\n// do not need to escape * as we interpret it as wildcard\nconst ESCAPE = /[\\^$\\\\.+?()[\\]{}|]/g;\n/**\n * Wildcard pattern predicate, supports patterns like `*`, `foo*`, `*bar`.\n */\nexport class PatternPredicate {\n _matchAll;\n _regexp;\n constructor(pattern) {\n if (pattern === '*') {\n this._matchAll = true;\n this._regexp = /.*/;\n }\n else {\n this._matchAll = false;\n this._regexp = new RegExp(PatternPredicate.escapePattern(pattern));\n }\n }\n match(str) {\n if (this._matchAll) {\n return true;\n }\n return this._regexp.test(str);\n }\n static escapePattern(pattern) {\n return `^${pattern.replace(ESCAPE, '\\\\$&').replace('*', '.*')}$`;\n }\n static hasWildcard(pattern) {\n return pattern.includes('*');\n }\n}\nexport class ExactPredicate {\n _matchAll;\n _pattern;\n constructor(pattern) {\n this._matchAll = pattern === undefined;\n this._pattern = pattern;\n }\n match(str) {\n if (this._matchAll) {\n return true;\n }\n if (str === this._pattern) {\n return true;\n }\n return false;\n }\n}\n//# sourceMappingURL=Predicate.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ExactPredicate, PatternPredicate } from './Predicate';\nexport class InstrumentSelector {\n _nameFilter;\n _type;\n _unitFilter;\n constructor(criteria) {\n this._nameFilter = new PatternPredicate(criteria?.name ?? '*');\n this._type = criteria?.type;\n this._unitFilter = new ExactPredicate(criteria?.unit);\n }\n getType() {\n return this._type;\n }\n getNameFilter() {\n return this._nameFilter;\n }\n getUnitFilter() {\n return this._unitFilter;\n }\n}\n//# sourceMappingURL=InstrumentSelector.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ExactPredicate } from './Predicate';\nexport class MeterSelector {\n _nameFilter;\n _versionFilter;\n _schemaUrlFilter;\n constructor(criteria) {\n this._nameFilter = new ExactPredicate(criteria?.name);\n this._versionFilter = new ExactPredicate(criteria?.version);\n this._schemaUrlFilter = new ExactPredicate(criteria?.schemaUrl);\n }\n getNameFilter() {\n return this._nameFilter;\n }\n /**\n * TODO: semver filter? no spec yet.\n */\n getVersionFilter() {\n return this._versionFilter;\n }\n getSchemaUrlFilter() {\n return this._schemaUrlFilter;\n }\n}\n//# sourceMappingURL=MeterSelector.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { PatternPredicate } from './Predicate';\nimport { createMultiAttributesProcessor, createNoopAttributesProcessor, } from './AttributesProcessor';\nimport { InstrumentSelector } from './InstrumentSelector';\nimport { MeterSelector } from './MeterSelector';\nimport { AggregationType, toAggregation, } from './AggregationOption';\nfunction isSelectorNotProvided(options) {\n return (options.instrumentName == null &&\n options.instrumentType == null &&\n options.instrumentUnit == null &&\n options.meterName == null &&\n options.meterVersion == null &&\n options.meterSchemaUrl == null);\n}\nfunction validateViewOptions(viewOptions) {\n // If no criteria is provided, the SDK SHOULD treat it as an error.\n // It is recommended that the SDK implementations fail fast.\n if (isSelectorNotProvided(viewOptions)) {\n throw new Error('Cannot create view with no selector arguments supplied');\n }\n // the SDK SHOULD NOT allow Views with a specified name to be declared with instrument selectors that\n // may select more than one instrument (e.g. wild card instrument name) in the same Meter.\n if (viewOptions.name != null &&\n (viewOptions?.instrumentName == null ||\n PatternPredicate.hasWildcard(viewOptions.instrumentName))) {\n throw new Error('Views with a specified name must be declared with an instrument selector that selects at most one instrument per meter.');\n }\n}\n/**\n * Can be passed to a {@link MeterProvider} to select instruments and alter their metric stream.\n */\nexport class View {\n name;\n description;\n aggregation;\n attributesProcessor;\n instrumentSelector;\n meterSelector;\n aggregationCardinalityLimit;\n /**\n * Create a new {@link View} instance.\n *\n * Parameters can be categorized as two types:\n * Instrument selection criteria: Used to describe the instrument(s) this view will be applied to.\n * Will be treated as additive (the Instrument has to meet all the provided criteria to be selected).\n *\n * Metric stream altering: Alter the metric stream of instruments selected by instrument selection criteria.\n *\n * @param viewOptions {@link ViewOptions} for altering the metric stream and instrument selection.\n * @param viewOptions.name\n * Alters the metric stream:\n * This will be used as the name of the metrics stream.\n * If not provided, the original Instrument name will be used.\n * @param viewOptions.description\n * Alters the metric stream:\n * This will be used as the description of the metrics stream.\n * If not provided, the original Instrument description will be used by default.\n * @param viewOptions.attributesProcessors\n * Alters the metric stream:\n * If provided, the attributes will be modified as defined by the added processors.\n * If not provided, all attribute keys will be used by default.\n * @param viewOptions.aggregationCardinalityLimit\n * Alters the metric stream:\n * Sets a limit on the number of unique attribute combinations (cardinality) that can be aggregated.\n * If not provided, the default limit of 2000 will be used.\n * @param viewOptions.aggregation\n * Alters the metric stream:\n * Alters the {@link Aggregation} of the metric stream.\n * @param viewOptions.instrumentName\n * Instrument selection criteria:\n * Original name of the Instrument(s) with wildcard support.\n * @param viewOptions.instrumentType\n * Instrument selection criteria:\n * The original type of the Instrument(s).\n * @param viewOptions.instrumentUnit\n * Instrument selection criteria:\n * The unit of the Instrument(s).\n * @param viewOptions.meterName\n * Instrument selection criteria:\n * The name of the Meter. No wildcard support, name must match the meter exactly.\n * @param viewOptions.meterVersion\n * Instrument selection criteria:\n * The version of the Meter. No wildcard support, version must match exactly.\n * @param viewOptions.meterSchemaUrl\n * Instrument selection criteria:\n * The schema URL of the Meter. No wildcard support, schema URL must match exactly.\n *\n * @example\n * // Create a view that changes the Instrument 'my.instrument' to use to an\n * // ExplicitBucketHistogramAggregation with the boundaries [20, 30, 40]\n * new View({\n * aggregation: new ExplicitBucketHistogramAggregation([20, 30, 40]),\n * instrumentName: 'my.instrument'\n * })\n */\n constructor(viewOptions) {\n validateViewOptions(viewOptions);\n // Create multi-processor if attributesProcessors are defined.\n if (viewOptions.attributesProcessors != null) {\n this.attributesProcessor = createMultiAttributesProcessor(viewOptions.attributesProcessors);\n }\n else {\n this.attributesProcessor = createNoopAttributesProcessor();\n }\n this.name = viewOptions.name;\n this.description = viewOptions.description;\n this.aggregation = toAggregation(viewOptions.aggregation ?? { type: AggregationType.DEFAULT });\n this.instrumentSelector = new InstrumentSelector({\n name: viewOptions.instrumentName,\n type: viewOptions.instrumentType,\n unit: viewOptions.instrumentUnit,\n });\n this.meterSelector = new MeterSelector({\n name: viewOptions.meterName,\n version: viewOptions.meterVersion,\n schemaUrl: viewOptions.meterSchemaUrl,\n });\n this.aggregationCardinalityLimit = viewOptions.aggregationCardinalityLimit;\n }\n}\n//# sourceMappingURL=View.js.map","/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { diag, createNoopMeter, } from '@opentelemetry/api';\nimport { defaultResource } from '@opentelemetry/resources';\nimport { MeterProviderSharedState } from './state/MeterProviderSharedState';\nimport { MetricCollector } from './state/MetricCollector';\nimport { View } from './view/View';\n/**\n * This class implements the {@link MeterProvider} interface.\n */\nexport class MeterProvider {\n _sharedState;\n _shutdown = false;\n constructor(options) {\n this._sharedState = new MeterProviderSharedState(options?.resource ?? defaultResource());\n if (options?.views != null && options.views.length > 0) {\n for (const viewOption of options.views) {\n this._sharedState.viewRegistry.addView(new View(viewOption));\n }\n }\n if (options?.readers != null && options.readers.length > 0) {\n for (const metricReader of options.readers) {\n const collector = new MetricCollector(this._sharedState, metricReader);\n metricReader.setMetricProducer(collector);\n this._sharedState.metricCollectors.push(collector);\n }\n }\n }\n /**\n * Get a meter with the configuration of the MeterProvider.\n */\n getMeter(name, version = '', options = {}) {\n // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#meter-creation\n if (this._shutdown) {\n diag.warn('A shutdown MeterProvider cannot provide a Meter');\n return createNoopMeter();\n }\n return this._sharedState.getMeterSharedState({\n name,\n version,\n schemaUrl: options.schemaUrl,\n }).meter;\n }\n /**\n * Shut down the MeterProvider and all registered\n * MetricReaders.\n *\n * Returns a promise which is resolved when all flushes are complete.\n */\n async shutdown(options) {\n if (this._shutdown) {\n diag.warn('shutdown may only be called once per MeterProvider');\n return;\n }\n this._shutdown = true;\n await Promise.all(this._sharedState.metricCollectors.map(collector => {\n return collector.shutdown(options);\n }));\n }\n /**\n * Notifies all registered MetricReaders to flush any buffered data.\n *\n * Returns a promise which is resolved when all flushes are complete.\n */\n async forceFlush(options) {\n // do not flush after shutdown\n if (this._shutdown) {\n diag.warn('invalid attempt to force flush after MeterProvider shutdown');\n return;\n }\n await Promise.all(this._sharedState.metricCollectors.map(collector => {\n return collector.forceFlush(options);\n }));\n }\n}\n//# sourceMappingURL=MeterProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * AggregationTemporality indicates the way additive quantities are expressed.\n */\nexport var AggregationTemporality;\n(function (AggregationTemporality) {\n AggregationTemporality[AggregationTemporality[\"DELTA\"] = 0] = \"DELTA\";\n AggregationTemporality[AggregationTemporality[\"CUMULATIVE\"] = 1] = \"CUMULATIVE\";\n})(AggregationTemporality || (AggregationTemporality = {}));\n//# sourceMappingURL=AggregationTemporality.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Supported types of metric instruments.\n */\nexport var InstrumentType;\n(function (InstrumentType) {\n InstrumentType[\"COUNTER\"] = \"COUNTER\";\n InstrumentType[\"GAUGE\"] = \"GAUGE\";\n InstrumentType[\"HISTOGRAM\"] = \"HISTOGRAM\";\n InstrumentType[\"UP_DOWN_COUNTER\"] = \"UP_DOWN_COUNTER\";\n InstrumentType[\"OBSERVABLE_COUNTER\"] = \"OBSERVABLE_COUNTER\";\n InstrumentType[\"OBSERVABLE_GAUGE\"] = \"OBSERVABLE_GAUGE\";\n InstrumentType[\"OBSERVABLE_UP_DOWN_COUNTER\"] = \"OBSERVABLE_UP_DOWN_COUNTER\";\n})(InstrumentType || (InstrumentType = {}));\n/**\n * The aggregated point data type.\n */\nexport var DataPointType;\n(function (DataPointType) {\n /**\n * A histogram data point contains a histogram statistics of collected\n * values with a list of explicit bucket boundaries and statistics such\n * as min, max, count, and sum of all collected values.\n */\n DataPointType[DataPointType[\"HISTOGRAM\"] = 0] = \"HISTOGRAM\";\n /**\n * An exponential histogram data point contains a histogram statistics of\n * collected values where bucket boundaries are automatically calculated\n * using an exponential function, and statistics such as min, max, count,\n * and sum of all collected values.\n */\n DataPointType[DataPointType[\"EXPONENTIAL_HISTOGRAM\"] = 1] = \"EXPONENTIAL_HISTOGRAM\";\n /**\n * A gauge metric data point has only a single numeric value.\n */\n DataPointType[DataPointType[\"GAUGE\"] = 2] = \"GAUGE\";\n /**\n * A sum metric data point has a single numeric value and a\n * monotonicity-indicator.\n */\n DataPointType[DataPointType[\"SUM\"] = 3] = \"SUM\";\n})(DataPointType || (DataPointType = {}));\n//# sourceMappingURL=MetricData.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DEFAULT_AGGREGATION, DROP_AGGREGATION, ExplicitBucketHistogramAggregation, ExponentialHistogramAggregation, HISTOGRAM_AGGREGATION, LAST_VALUE_AGGREGATION, SUM_AGGREGATION, } from './Aggregation';\nexport var AggregationType;\n(function (AggregationType) {\n AggregationType[AggregationType[\"DEFAULT\"] = 0] = \"DEFAULT\";\n AggregationType[AggregationType[\"DROP\"] = 1] = \"DROP\";\n AggregationType[AggregationType[\"SUM\"] = 2] = \"SUM\";\n AggregationType[AggregationType[\"LAST_VALUE\"] = 3] = \"LAST_VALUE\";\n AggregationType[AggregationType[\"EXPLICIT_BUCKET_HISTOGRAM\"] = 4] = \"EXPLICIT_BUCKET_HISTOGRAM\";\n AggregationType[AggregationType[\"EXPONENTIAL_HISTOGRAM\"] = 5] = \"EXPONENTIAL_HISTOGRAM\";\n})(AggregationType || (AggregationType = {}));\nexport function toAggregation(option) {\n switch (option.type) {\n case AggregationType.DEFAULT:\n return DEFAULT_AGGREGATION;\n case AggregationType.DROP:\n return DROP_AGGREGATION;\n case AggregationType.SUM:\n return SUM_AGGREGATION;\n case AggregationType.LAST_VALUE:\n return LAST_VALUE_AGGREGATION;\n case AggregationType.EXPONENTIAL_HISTOGRAM: {\n const expOption = option;\n return new ExponentialHistogramAggregation(expOption.options?.maxSize, expOption.options?.recordMinMax);\n }\n case AggregationType.EXPLICIT_BUCKET_HISTOGRAM: {\n const expOption = option;\n if (expOption.options == null) {\n return HISTOGRAM_AGGREGATION;\n }\n else {\n return new ExplicitBucketHistogramAggregation(expOption.options?.boundaries, expOption.options?.recordMinMax);\n }\n }\n default:\n throw new Error('Unsupported Aggregation');\n }\n}\n//# sourceMappingURL=AggregationOption.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var AggregationTemporalityPreference;\n(function (AggregationTemporalityPreference) {\n AggregationTemporalityPreference[AggregationTemporalityPreference[\"DELTA\"] = 0] = \"DELTA\";\n AggregationTemporalityPreference[AggregationTemporalityPreference[\"CUMULATIVE\"] = 1] = \"CUMULATIVE\";\n AggregationTemporalityPreference[AggregationTemporalityPreference[\"LOWMEMORY\"] = 2] = \"LOWMEMORY\";\n})(AggregationTemporalityPreference || (AggregationTemporalityPreference = {}));\n//# sourceMappingURL=OTLPMetricExporterOptions.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getStringFromEnv } from '@opentelemetry/core';\nimport { AggregationTemporality, InstrumentType, AggregationType, } from '@opentelemetry/sdk-metrics';\nimport { AggregationTemporalityPreference, } from './OTLPMetricExporterOptions';\nimport { OTLPExporterBase, } from '@opentelemetry/otlp-exporter-base';\nimport { diag } from '@opentelemetry/api';\nexport const CumulativeTemporalitySelector = () => AggregationTemporality.CUMULATIVE;\nexport const DeltaTemporalitySelector = (instrumentType) => {\n switch (instrumentType) {\n case InstrumentType.COUNTER:\n case InstrumentType.OBSERVABLE_COUNTER:\n case InstrumentType.GAUGE:\n case InstrumentType.HISTOGRAM:\n case InstrumentType.OBSERVABLE_GAUGE:\n return AggregationTemporality.DELTA;\n case InstrumentType.UP_DOWN_COUNTER:\n case InstrumentType.OBSERVABLE_UP_DOWN_COUNTER:\n return AggregationTemporality.CUMULATIVE;\n }\n};\nexport const LowMemoryTemporalitySelector = (instrumentType) => {\n switch (instrumentType) {\n case InstrumentType.COUNTER:\n case InstrumentType.HISTOGRAM:\n return AggregationTemporality.DELTA;\n case InstrumentType.GAUGE:\n case InstrumentType.UP_DOWN_COUNTER:\n case InstrumentType.OBSERVABLE_UP_DOWN_COUNTER:\n case InstrumentType.OBSERVABLE_COUNTER:\n case InstrumentType.OBSERVABLE_GAUGE:\n return AggregationTemporality.CUMULATIVE;\n }\n};\nfunction chooseTemporalitySelectorFromEnvironment() {\n const configuredTemporality = (getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE') ??\n 'cumulative').toLowerCase();\n if (configuredTemporality === 'cumulative') {\n return CumulativeTemporalitySelector;\n }\n if (configuredTemporality === 'delta') {\n return DeltaTemporalitySelector;\n }\n if (configuredTemporality === 'lowmemory') {\n return LowMemoryTemporalitySelector;\n }\n diag.warn(`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '${configuredTemporality}', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead.`);\n return CumulativeTemporalitySelector;\n}\nfunction chooseTemporalitySelector(temporalityPreference) {\n // Directly passed preference has priority.\n if (temporalityPreference != null) {\n if (temporalityPreference === AggregationTemporalityPreference.DELTA) {\n return DeltaTemporalitySelector;\n }\n else if (temporalityPreference === AggregationTemporalityPreference.LOWMEMORY) {\n return LowMemoryTemporalitySelector;\n }\n return CumulativeTemporalitySelector;\n }\n return chooseTemporalitySelectorFromEnvironment();\n}\nconst DEFAULT_AGGREGATION = Object.freeze({\n type: AggregationType.DEFAULT,\n});\nfunction chooseAggregationSelector(config) {\n return config?.aggregationPreference ?? (() => DEFAULT_AGGREGATION);\n}\nexport class OTLPMetricExporterBase extends OTLPExporterBase {\n _aggregationTemporalitySelector;\n _aggregationSelector;\n constructor(delegate, config) {\n super(delegate);\n this._aggregationSelector = chooseAggregationSelector(config);\n this._aggregationTemporalitySelector = chooseTemporalitySelector(config?.temporalityPreference);\n }\n selectAggregation(instrumentType) {\n return this._aggregationSelector(instrumentType);\n }\n selectAggregationTemporality(instrumentType) {\n return this._aggregationTemporalitySelector(instrumentType);\n }\n}\n//# sourceMappingURL=OTLPMetricExporterBase.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { OTLPMetricExporterBase } from '../../OTLPMetricExporterBase';\nimport { JsonMetricsSerializer } from '@opentelemetry/otlp-transformer';\nimport { createLegacyOtlpBrowserExportDelegate } from '@opentelemetry/otlp-exporter-base/browser-http';\n/**\n * Collector Metric Exporter for Web\n */\nexport class OTLPMetricExporter extends OTLPMetricExporterBase {\n constructor(config) {\n super(createLegacyOtlpBrowserExportDelegate(config ?? {}, JsonMetricsSerializer, 'v1/metrics', { 'Content-Type': 'application/json' }), config);\n }\n}\n//# sourceMappingURL=OTLPMetricExporter.js.map","import { IMetricsService } from './interfaces/IMetricsService';\nimport { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport type { Counter, Histogram, ObservableGauge, Meter } from '@opentelemetry/api';\n\nexport interface MetricsConfig {\n collectorUrl?: string;\n serviceName?: string;\n serviceVersion?: string;\n debug?: boolean;\n customerId?: string;\n tenantId?: string;\n environment?: string;\n exportIntervalMillis?: number;\n}\n\nexport class MetricsService implements IMetricsService {\n private meterProvider: MeterProvider | null = null;\n private meter: Meter | null = null;\n private readonly collectorUrl: string;\n private readonly serviceName: string;\n private readonly serviceVersion: string;\n private readonly debug: boolean;\n private readonly customerId?: string;\n private readonly tenantId?: string;\n private readonly environment?: string;\n private readonly exportIntervalMillis: number;\n private metricReader: PeriodicExportingMetricReader | null = null;\n\n // Business Metrics - Counters\n private captureCounter: Counter | null = null;\n private errorCounter: Counter | null = null;\n private modelLoadCounter: Counter | null = null;\n private userInteractionCounter: Counter | null = null;\n\n // Business Metrics - Histograms (for latencies and sizes)\n private captureLatencyHistogram: Histogram | null = null;\n private modelLoadLatencyHistogram: Histogram | null = null;\n private detectionLatencyHistogram: Histogram | null = null;\n private imageSizeHistogram: Histogram | null = null;\n\n // Business Metrics - Gauges (for current state)\n private activeSessionsGauge: ObservableGauge | null = null;\n private memoryUsageGauge: ObservableGauge | null = null;\n\n // State tracking\n private activeSessions: number = 0;\n private gaugeValues: Map<string, number> = new Map();\n\n constructor(config: MetricsConfig = {}) {\n this.collectorUrl = config.collectorUrl || 'https://collector.jaak.ai/v1/metrics';\n this.serviceName = config.serviceName || 'jaak-stamps-webcomponent';\n this.serviceVersion = config.serviceVersion || '2.1.0';\n this.debug = config.debug || false;\n this.customerId = config.customerId;\n this.tenantId = config.tenantId;\n this.environment = config.environment || 'production';\n this.exportIntervalMillis = config.exportIntervalMillis || 60000; // Export every 60 seconds\n }\n\n initialize(): void {\n try {\n // Create OTLP metrics exporter\n const exporter = new OTLPMetricExporter({\n url: this.collectorUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Create periodic exporting metric reader\n this.metricReader = new PeriodicExportingMetricReader({\n exporter: exporter,\n exportIntervalMillis: this.exportIntervalMillis,\n exportTimeoutMillis: 30000,\n });\n\n // Create meter provider\n this.meterProvider = new MeterProvider({\n readers: [this.metricReader],\n });\n\n // Get meter\n this.meter = this.meterProvider.getMeter(this.serviceName, this.serviceVersion);\n\n // Initialize business metrics\n this.initializeMetrics();\n\n if (this.debug) {\n console.log('[MetricsService] Initialized successfully', {\n collectorUrl: this.collectorUrl,\n serviceName: this.serviceName,\n serviceVersion: this.serviceVersion,\n environment: this.environment,\n customerId: this.customerId,\n tenantId: this.tenantId,\n exportIntervalMillis: this.exportIntervalMillis,\n });\n }\n } catch (error) {\n console.error('[MetricsService] Failed to initialize:', error);\n // Don't throw - metrics should fail silently in production\n }\n }\n\n private initializeMetrics(): void {\n if (!this.meter) return;\n\n const baseAttributes = this.getBaseAttributes();\n\n try {\n // COUNTERS - Track events and totals\n\n // Total captures performed\n this.captureCounter = this.meter.createCounter('jaak.captures.total', {\n description: 'Total number of document captures',\n unit: '1',\n });\n\n // Total errors\n this.errorCounter = this.meter.createCounter('jaak.errors.total', {\n description: 'Total number of errors',\n unit: '1',\n });\n\n // Model loads\n this.modelLoadCounter = this.meter.createCounter('jaak.model.loads.total', {\n description: 'Total number of model loads',\n unit: '1',\n });\n\n // User interactions\n this.userInteractionCounter = this.meter.createCounter('jaak.user.interactions.total', {\n description: 'Total user interactions (clicks, etc.)',\n unit: '1',\n });\n\n // HISTOGRAMS - Track distributions of latencies and sizes\n\n // Capture latency (time from start to completion)\n this.captureLatencyHistogram = this.meter.createHistogram('jaak.capture.duration', {\n description: 'Duration of capture operations',\n unit: 'ms',\n });\n\n // Model load latency\n this.modelLoadLatencyHistogram = this.meter.createHistogram('jaak.model.load.duration', {\n description: 'Duration of model loading',\n unit: 'ms',\n });\n\n // Detection latency (per frame)\n this.detectionLatencyHistogram = this.meter.createHistogram('jaak.detection.duration', {\n description: 'Duration of detection inference',\n unit: 'ms',\n });\n\n // Image sizes\n this.imageSizeHistogram = this.meter.createHistogram('jaak.image.size', {\n description: 'Size of captured images',\n unit: 'bytes',\n });\n\n // GAUGES - Track current state values\n\n // Active capture sessions\n this.activeSessionsGauge = this.meter.createObservableGauge('jaak.sessions.active', {\n description: 'Number of active capture sessions',\n unit: '1',\n });\n\n this.activeSessionsGauge.addCallback((observableResult) => {\n observableResult.observe(this.activeSessions, baseAttributes);\n });\n\n // Memory usage (if available)\n if ('memory' in performance) {\n this.memoryUsageGauge = this.meter.createObservableGauge('jaak.memory.usage', {\n description: 'JavaScript heap memory usage',\n unit: 'bytes',\n });\n\n this.memoryUsageGauge.addCallback((observableResult) => {\n const memInfo = (performance as any).memory;\n if (memInfo) {\n observableResult.observe(memInfo.usedJSHeapSize, baseAttributes);\n }\n });\n }\n\n if (this.debug) {\n console.log('[MetricsService] Business metrics initialized');\n }\n } catch (error) {\n console.error('[MetricsService] Failed to initialize metrics:', error);\n }\n }\n\n private getBaseAttributes(): Record<string, any> {\n const attributes: Record<string, any> = {\n 'service.name': this.serviceName,\n 'service.version': this.serviceVersion,\n 'deployment.environment': this.environment,\n };\n\n if (this.customerId) {\n attributes['customer.id'] = this.customerId;\n }\n\n if (this.tenantId) {\n attributes['tenant.id'] = this.tenantId;\n }\n\n return attributes;\n }\n\n incrementCounter(name: string, value: number = 1, attributes?: Record<string, any>): void {\n try {\n const baseAttrs = this.getBaseAttributes();\n const allAttrs = { ...baseAttrs, ...attributes };\n\n // Use predefined counters or create ad-hoc\n switch (name) {\n case 'captures':\n this.captureCounter?.add(value, allAttrs);\n break;\n case 'errors':\n this.errorCounter?.add(value, allAttrs);\n break;\n case 'model_loads':\n this.modelLoadCounter?.add(value, allAttrs);\n break;\n case 'user_interactions':\n this.userInteractionCounter?.add(value, allAttrs);\n break;\n default:\n // Create ad-hoc counter if needed\n if (this.meter) {\n const counter = this.meter.createCounter(`jaak.${name}.total`, {\n description: `Total ${name}`,\n unit: '1',\n });\n counter.add(value, allAttrs);\n }\n }\n\n if (this.debug) {\n console.log(`[MetricsService] Counter incremented: ${name} += ${value}`, attributes);\n }\n } catch (error) {\n console.error('[MetricsService] Failed to increment counter:', error);\n }\n }\n\n recordHistogram(name: string, value: number, attributes?: Record<string, any>): void {\n try {\n const baseAttrs = this.getBaseAttributes();\n const allAttrs = { ...baseAttrs, ...attributes };\n\n // Use predefined histograms\n switch (name) {\n case 'capture_duration':\n this.captureLatencyHistogram?.record(value, allAttrs);\n break;\n case 'model_load_duration':\n this.modelLoadLatencyHistogram?.record(value, allAttrs);\n break;\n case 'detection_duration':\n this.detectionLatencyHistogram?.record(value, allAttrs);\n break;\n case 'image_size':\n this.imageSizeHistogram?.record(value, allAttrs);\n break;\n default:\n // Create ad-hoc histogram if needed\n if (this.meter) {\n const histogram = this.meter.createHistogram(`jaak.${name}`, {\n description: `Distribution of ${name}`,\n unit: 'ms',\n });\n histogram.record(value, allAttrs);\n }\n }\n\n if (this.debug) {\n console.log(`[MetricsService] Histogram recorded: ${name} = ${value}`, attributes);\n }\n } catch (error) {\n console.error('[MetricsService] Failed to record histogram:', error);\n }\n }\n\n setGauge(name: string, value: number, attributes?: Record<string, any>): void {\n try {\n // Store gauge value for observable callbacks\n this.gaugeValues.set(name, value);\n\n // Update known gauges\n if (name === 'active_sessions') {\n this.activeSessions = value;\n }\n\n if (this.debug) {\n console.log(`[MetricsService] Gauge set: ${name} = ${value}`, attributes);\n }\n } catch (error) {\n console.error('[MetricsService] Failed to set gauge:', error);\n }\n }\n\n async measureDuration<T>(name: string, fn: () => T | Promise<T>, attributes?: Record<string, any>): Promise<T> {\n const startTime = performance.now();\n\n try {\n const result = await fn();\n const duration = performance.now() - startTime;\n\n this.recordHistogram(name, duration, attributes);\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n this.recordHistogram(name, duration, { ...attributes, error: true });\n throw error;\n }\n }\n\n async flush(): Promise<void> {\n try {\n if (this.metricReader) {\n await this.metricReader.forceFlush();\n }\n\n if (this.debug) {\n console.log('[MetricsService] Metrics flushed');\n }\n } catch (error) {\n console.error('[MetricsService] Failed to flush metrics:', error);\n }\n }\n\n async cleanup(): Promise<void> {\n try {\n if (this.metricReader) {\n await this.metricReader.forceFlush();\n await this.metricReader.shutdown();\n }\n\n if (this.meterProvider) {\n await this.meterProvider.shutdown();\n }\n\n if (this.debug) {\n console.log('[MetricsService] Cleaned up successfully');\n }\n } catch (error) {\n console.error('[MetricsService] Failed to cleanup:', error);\n }\n }\n\n // Helper methods for common business metrics\n\n /**\n * Record a successful capture\n */\n recordCapture(side: 'front' | 'back', mode: 'auto' | 'manual', durationMs: number): void {\n this.incrementCounter('captures', 1, { side, mode });\n this.recordHistogram('capture_duration', durationMs, { side, mode });\n }\n\n /**\n * Record an error\n */\n recordError(errorType: string, operation: string): void {\n this.incrementCounter('errors', 1, { error_type: errorType, operation });\n }\n\n /**\n * Record model load performance\n */\n recordModelLoad(modelType: 'detection' | 'classification', durationMs: number, cached: boolean): void {\n this.incrementCounter('model_loads', 1, { model_type: modelType, cached });\n this.recordHistogram('model_load_duration', durationMs, { model_type: modelType, cached });\n }\n\n /**\n * Record detection performance\n */\n recordDetection(durationMs: number, detectionsFound: number): void {\n this.recordHistogram('detection_duration', durationMs, { detections_found: detectionsFound });\n }\n\n /**\n * Record image size\n */\n recordImageSize(side: 'front' | 'back', sizeBytes: number): void {\n this.recordHistogram('image_size', sizeBytes, { side });\n }\n\n /**\n * Update active sessions count\n */\n updateActiveSessions(count: number): void {\n this.setGauge('active_sessions', count);\n }\n\n /**\n * Record user interaction\n */\n recordUserInteraction(interactionType: string): void {\n this.incrementCounter('user_interactions', 1, { interaction_type: interactionType });\n }\n}\n","import { ICameraService } from './interfaces/ICameraService';\nimport { IDetectionService } from './interfaces/IDetectionService';\nimport { IStateManager } from './interfaces/IStateManager';\nimport { IEventBus } from './interfaces/IEventBus';\nimport { ITracingService } from './interfaces/ITracingService';\nimport { IMetricsService } from './interfaces/IMetricsService';\n\nimport { EventBusService } from './EventBusService';\nimport { StateManagerService } from './StateManagerService';\nimport { CameraService } from './CameraService';\nimport { DetectionService } from './DetectionService';\nimport { TracingService } from './TracingService';\nimport { MetricsService } from './MetricsService';\n\nexport interface ComponentConfig {\n debug: boolean;\n alignmentTolerance: number;\n maskSize: number;\n cropMargin: number;\n useDocumentClassification: boolean;\n useDocumentDetector: boolean;\n preferredCamera: 'auto' | 'front' | 'back';\n captureDelay: number;\n telemetryCollectorUrl?: string;\n metricsCollectorUrl?: string;\n enableTelemetry?: boolean;\n enableMetrics?: boolean;\n customerId?: string;\n tenantId?: string;\n environment?: string;\n propagateTraceHeaderCorsUrls?: (string | RegExp)[];\n metricsExportIntervalMillis?: number;\n}\n\nexport class ServiceContainer {\n private services = new Map<string, any>();\n private cleanedUp = false;\n\n constructor(config: ComponentConfig) {\n this.initializeServices(config);\n }\n\n private initializeServices(config: ComponentConfig): void {\n // Initialize services in dependency order\n const eventBus = new EventBusService();\n const stateManager = new StateManagerService(eventBus);\n const cameraService = new CameraService(eventBus, config.preferredCamera);\n const detectionService = new DetectionService(\n config.debug,\n config.useDocumentClassification,\n config.useDocumentDetector\n );\n\n // Initialize tracing service if enabled\n let tracingService: ITracingService | null = null;\n if (config.enableTelemetry !== false) {\n tracingService = new TracingService({\n collectorUrl: config.telemetryCollectorUrl || 'https://collector.jaak.ai/v1/traces',\n serviceName: 'jaak-stamps-webcomponent',\n serviceVersion: '2.1.0',\n debug: config.debug,\n customerId: config.customerId,\n tenantId: config.tenantId,\n environment: config.environment || 'production',\n propagateTraceHeaderCorsUrls: config.propagateTraceHeaderCorsUrls || [],\n enableAutoInstrumentation: true,\n });\n tracingService.initialize();\n }\n\n // Initialize metrics service if enabled\n let metricsService: IMetricsService | null = null;\n if (config.enableMetrics !== false) {\n metricsService = new MetricsService({\n collectorUrl: config.metricsCollectorUrl || 'https://collector.jaak.ai/v1/metrics',\n serviceName: 'jaak-stamps-webcomponent',\n serviceVersion: '2.1.0',\n debug: config.debug,\n customerId: config.customerId,\n tenantId: config.tenantId,\n environment: config.environment || 'production',\n exportIntervalMillis: config.metricsExportIntervalMillis || 60000,\n });\n metricsService.initialize();\n }\n\n // Register services\n this.services.set('eventBus', eventBus);\n this.services.set('stateManager', stateManager);\n this.services.set('cameraService', cameraService);\n this.services.set('detectionService', detectionService);\n if (tracingService) {\n this.services.set('tracingService', tracingService);\n }\n if (metricsService) {\n this.services.set('metricsService', metricsService);\n }\n }\n\n get<T>(serviceName: string): T {\n const service = this.services.get(serviceName);\n if (!service) {\n throw new Error(`Service ${serviceName} not found`);\n }\n return service as T;\n }\n\n\n getEventBus(): IEventBus {\n return this.get<IEventBus>('eventBus');\n }\n\n getStateManager(): IStateManager {\n return this.get<IStateManager>('stateManager');\n }\n\n getCameraService(): ICameraService {\n return this.get<ICameraService>('cameraService');\n }\n\n getDetectionService(): IDetectionService {\n return this.get<IDetectionService>('detectionService');\n }\n\n getTracingService(): ITracingService | null {\n try {\n return this.get<ITracingService>('tracingService');\n } catch {\n return null;\n }\n }\n\n getMetricsService(): IMetricsService | null {\n try {\n return this.get<IMetricsService>('metricsService');\n } catch {\n return null;\n }\n }\n\n updateConfig(config: Partial<ComponentConfig>): void {\n // Reinitialize services that depend on configuration changes\n if (config.preferredCamera !== undefined || \n config.useDocumentClassification !== undefined ||\n config.useDocumentDetector !== undefined) {\n // Would need to reinitialize specific services\n // For simplicity, this is omitted in this example\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.cleanedUp) {\n return;\n }\n this.cleanedUp = true;\n\n // Cleanup services in reverse order\n this.getDetectionService().cleanup();\n\n // Cleanup metrics service if present\n const metricsService = this.getMetricsService();\n if (metricsService) {\n await metricsService.cleanup();\n }\n\n // Cleanup tracing service if present\n const tracingService = this.getTracingService();\n if (tracingService) {\n await tracingService.cleanup();\n }\n\n this.getEventBus().clear();\n this.services.clear();\n }\n}","export const POWERED_BY_JAAK_FALLBACK = 'data:image/png;base64,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';\n","/**\n * License Validation Service\n * Handles license validation for the jaak-stamps webcomponent\n */\n\nexport type Environment = 'dev' | 'qa' | 'sandbox' | 'prod';\n\nexport interface LicenseValidationRequest {\n license: string;\n origin: string;\n app_id?: string;\n product?: string;\n product_version?: string;\n metadata?: {\n [key: string]: any;\n };\n}\n\nexport interface LicenseValidationResponse {\n access_token: string;\n token_type: string;\n expires_at: string;\n session_id: string;\n jti: string;\n step: number;\n license: string;\n traceId?: string; // Generated or provided traceId\n}\n\nexport interface LicenseValidationError {\n error: string;\n error_description?: string;\n status_code?: number;\n}\n\nexport class LicenseValidationService {\n private apiEndpoint: string = '/api/v1/license/validate';\n private baseUrl: string;\n\n // Environment-specific base URLs\n private static readonly ENVIRONMENT_URLS: Record<Environment, string> = {\n dev: 'https://api.dev.jaak.ai',\n qa: 'https://api.qa.jaak.ai',\n sandbox: 'https://api.sandbox.jaak.ai',\n prod: 'https://services.api.jaak.ai',\n };\n\n constructor(environment: Environment = 'prod') {\n this.baseUrl = LicenseValidationService.ENVIRONMENT_URLS[environment];\n }\n\n /**\n * Validate license with the API\n * @param license License key to validate\n * @param traceId Optional trace ID from W3C Trace Context\n * @param appId Optional application ID\n * @param metadata Optional additional metadata\n * @returns Promise<LicenseValidationResponse>\n */\n async validateLicense(\n license: string,\n traceId?: string,\n appId: string = 'jaak-stamps-web',\n ): Promise<LicenseValidationResponse> {\n // Generate traceId if not provided\n const effectiveTraceId = traceId || this.generateTraceId();\n\n // Build request body\n const requestBody: LicenseValidationRequest = {\n license: traceId ? `L${effectiveTraceId}` : license,\n origin: 'web',\n app_id: appId,\n product: 'kyc',\n metadata: {\n sdk_version: '2.1.0',\n },\n };\n\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n };\n\n // Add traceparent header with the effective traceId\n headers['traceparent'] = `00-${effectiveTraceId}-${this.generateSpanId()}-01`;\n\n try {\n const response = await fetch(`${this.baseUrl}${this.apiEndpoint}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(requestBody),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw {\n error: errorData.error || 'license_validation_failed',\n error_description: errorData.error_description || `HTTP ${response.status}: ${response.statusText}`,\n status_code: response.status,\n } as LicenseValidationError;\n }\n\n const responseData = await response.json();\n // Add the traceId to the response\n return {\n ...responseData,\n traceId: effectiveTraceId,\n };\n } catch (error) {\n if ((error as any).error) {\n throw error;\n }\n\n throw {\n error: 'network_error',\n error_description: 'Failed to connect to license validation service',\n status_code: 0,\n } as LicenseValidationError;\n }\n }\n\n /**\n * Generate a random trace ID for W3C Trace Context (32 hex characters)\n */\n private generateTraceId(): string {\n const array = new Uint8Array(16);\n crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n }\n\n /**\n * Generate a random span ID for W3C Trace Context (16 hex characters)\n */\n private generateSpanId(): string {\n const array = new Uint8Array(8);\n crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n }\n\n /**\n * Extract trace ID from license field\n * License format: \"L<32-hex-chars>\"\n * Example: \"Ld79223833a2fd91971e4c14a33298904\" -> \"d79223833a2fd91971e4c14a33298904\"\n */\n static extractTraceIdFromLicense(license: string): string | null {\n if (!license || typeof license !== 'string') {\n return null;\n }\n\n // Remove \"L\" prefix if present\n const traceId = license.startsWith('L') ? license.slice(1) : license;\n\n // Validate format (32 hex characters)\n if (traceId.length === 32 && /^[a-f0-9]{32}$/i.test(traceId)) {\n return traceId.toLowerCase();\n }\n\n console.warn('[LicenseValidationService] Invalid license format for trace ID:', license);\n return null;\n }\n}\n",":host {\n display: block;\n width: 100%;\n height: 100%;\n font-family: system-ui, -apple-system, sans-serif;\n color: #1a1a1a;\n}\n\n.detector-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n}\n\nh1 {\n font-size: 24px;\n font-weight: 500;\n color: #333;\n margin: 0 0 24px 0;\n}\n\n.video-container {\n position: relative;\n width: 100%;\n height: 100%;\n background-color: #000;\n border: none;\n border-radius: 8px;\n overflow: hidden;\n}\n\nvideo, .detection-overlay {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n}\n\nvideo.mirror, .detection-overlay.mirror {\n transform: rotateY(180deg);\n}\n\n.detection-overlay {\n z-index: 1;\n pointer-events: none;\n}\n\nvideo {\n z-index: 0;\n}\n\n/* Hide native video controls on Safari/WebKit */\nvideo::-webkit-media-controls {\n display: none !important;\n}\n\nvideo::-webkit-media-controls-panel {\n display: none !important;\n}\n\nvideo::-webkit-media-controls-play-button {\n display: none !important;\n}\n\nvideo::-webkit-media-controls-start-playback-button {\n display: none !important;\n}\n\nvideo::-webkit-media-controls-enclosure {\n display: none !important;\n}\n\n/* Detection boxes for debug mode */\n.detection-box {\n transition: opacity 0.2s ease;\n}\n\n\n.status {\n margin-top: 16px;\n font-size: 12px;\n color: #666;\n}\n\n/* Overlay mask for ID card guidance */\n.overlay-mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n display: block;\n pointer-events: none;\n}\n\n.card-outline {\n position: absolute;\n top: var(--mask-center-y, 50%);\n left: var(--mask-center-x, 50%);\n transform: translate(-50%, -50%);\n width: var(--mask-width, 88%);\n height: var(--mask-height, 55%);\n border: none;\n border-radius: 4px;\n background: transparent;\n opacity: 0.8;\n}\n\n.card-outline.perfect-match {\n}\n\n/* Lados individuales de la máscara */\n.side {\n position: absolute;\n background: #999;\n transition: background-color 0.3s ease;\n border-radius: 1px;\n}\n\n.side-top.aligned {\n border-left-color: #28a745;\n border-top-color: #28a745;\n}\n\n.side-right.aligned {\n border-right-color: #28a745;\n border-top-color: #28a745;\n}\n\n.side-bottom.aligned {\n border-left-color: #28a745;\n border-bottom-color: #28a745;\n}\n\n.side-left.aligned {\n border-right-color: #28a745;\n border-bottom-color: #28a745;\n}\n\n.side-top {\n top: -3px;\n left: -3px;\n width: 30px;\n height: 30px;\n border-left: 6px solid #ffffff;\n border-top: 6px solid #ffffff;\n background: transparent;\n}\n\n.side-right {\n top: -3px;\n right: -3px;\n width: 30px;\n height: 30px;\n border-right: 6px solid #ffffff;\n border-top: 6px solid #ffffff;\n background: transparent;\n}\n\n.side-bottom {\n bottom: -3px;\n left: -3px;\n width: 30px;\n height: 30px;\n border-left: 6px solid #ffffff;\n border-bottom: 6px solid #ffffff;\n background: transparent;\n}\n\n.side-left {\n bottom: -3px;\n right: -3px;\n width: 30px;\n height: 30px;\n border-right: 6px solid #ffffff;\n border-bottom: 6px solid #ffffff;\n background: transparent;\n}\n\n\n\n\n\n\n\n.guide-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: rgba(0, 0, 0, 0.25);\n backdrop-filter: blur(20px);\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n color: #ffffff;\n font-size: 12px;\n font-weight: 500;\n text-align: center;\n white-space: normal;\n padding: 13px;\n max-width: 300px;\n z-index: 20;\n height: fit-content;\n width: fit-content;\n animation: slideInFromTopCentered 0.3s ease-out;\n}\n\n/* Quality indicator */\n.quality-indicator {\n position: absolute;\n top: 20px;\n right: 20px;\n display: flex;\n align-items: center;\n gap: 8px;\n background: rgba(0, 0, 0, 0.8);\n padding: 8px 12px;\n border-radius: 20px;\n z-index: 25;\n transition: all 0.3s ease;\n}\n\n.quality-indicator.warning {\n background: rgba(255, 152, 0, 0.9);\n}\n\n.quality-indicator.good {\n background: rgba(76, 175, 80, 0.9);\n}\n\n.quality-score {\n color: #fff;\n font-size: 12px;\n font-weight: 600;\n min-width: 30px;\n text-align: center;\n}\n\n.quality-status {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n font-weight: bold;\n color: #fff;\n transition: all 0.3s ease;\n}\n\n.quality-status.ready {\n background: #4CAF50;\n}\n\n.quality-status.not-ready {\n background: #f44336;\n}\n\n/* Enhanced card outline for quality warnings */\n.card-outline.quality-warning {\n animation: qualityWarning 1s ease-in-out infinite alternate;\n}\n\n@keyframes qualityWarning {\n 0% {\n box-shadow: 0 0 0 3px rgba(255, 152, 0, 0.6);\n }\n 100% {\n box-shadow: 0 0 0 6px rgba(255, 152, 0, 0.3);\n }\n}\n\n\n/* Animación de captura */\n.capture-animation {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: #fff;\n opacity: 0;\n z-index: 30;\n pointer-events: none;\n animation: captureFlash 0.6s ease-out;\n}\n\n@keyframes captureFlash {\n 0% {\n opacity: 0;\n }\n 15% {\n opacity: 0.8;\n }\n 30% {\n opacity: 0;\n }\n 45% {\n opacity: 0.4;\n }\n 60% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n}\n\n/* Animación del marco durante captura */\n.card-outline.capturing {\n animation: pulseGreen 0.6s ease-out;\n}\n\n@keyframes pulseGreen {\n 0% {\n border-color: #28a745;\n box-shadow: 0 0 0 4px rgba(40, 167, 69, 0);\n }\n 50% {\n border-color: #28a745;\n box-shadow: 0 0 0 8px rgba(40, 167, 69, 0.6);\n }\n 100% {\n border-color: #28a745;\n box-shadow: 0 0 0 4px rgba(40, 167, 69, 0);\n }\n}\n\n/* Animación de voltear identificación */\n.flip-animation {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 35;\n pointer-events: none;\n opacity: 0;\n animation: showFlipInstruction 3s ease-in-out;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.id-card-icon {\n width: 80px;\n height: 50px;\n background: linear-gradient(135deg, #6c757d 0%, #495057 100%);\n border-radius: 8px;\n position: relative;\n animation: flipCard 2s ease-in-out infinite;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n}\n\n.id-card-icon::before {\n content: '';\n position: absolute;\n top: 8px;\n left: 8px;\n width: 16px;\n height: 12px;\n background: rgba(255, 255, 255, 0.9);\n border-radius: 2px;\n}\n\n.id-card-icon::after {\n content: '';\n position: absolute;\n top: 25px;\n left: 8px;\n width: 64px;\n height: 3px;\n background: rgba(255, 255, 255, 0.7);\n border-radius: 1px;\n box-shadow: 0 6px 0 rgba(255, 255, 255, 0.7), 0 12px 0 rgba(255, 255, 255, 0.7);\n}\n\n.flip-text {\n margin-top: 12px;\n color: #fff;\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n background: rgba(128, 128, 128, 0.8);\n padding: 12px 20px;\n border-radius: 20px;\n max-width: 300px;\n}\n\n@keyframes showFlipInstruction {\n 0% {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.8);\n }\n 15% {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n 85% {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.8);\n }\n}\n\n@keyframes flipCard {\n 0% {\n transform: rotateY(0deg);\n }\n 50% {\n transform: rotateY(180deg);\n }\n 100% {\n transform: rotateY(360deg);\n }\n}\n\n/* Animación de éxito */\n.success-animation {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 35;\n pointer-events: none;\n opacity: 0;\n animation: showSuccessMessage 3s ease-in-out;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.check-icon {\n width: 80px;\n height: 80px;\n background: linear-gradient(135deg, #6c757d 0%, #495057 100%);\n border-radius: 50%;\n position: relative;\n animation: bounceSuccess 0.6s ease-out;\n box-shadow: 0 4px 16px rgba(108, 117, 125, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.check-icon::before {\n content: '';\n position: absolute;\n width: 20px;\n height: 35px;\n border: 4px solid #fff;\n border-top: none;\n border-left: none;\n transform: rotate(45deg);\n /* animation: drawCheck 0.4s ease-out 0.2s both; */ /* Deshabilitado - check aparece completo */\n}\n\n.success-text {\n margin-top: 16px;\n color: #fff;\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n background: rgba(128, 128, 128, 0.8);\n padding: 12px 20px;\n border-radius: 20px;\n max-width: 300px;\n animation: fadeInUp 0.5s ease-out 0.4s both;\n}\n\n@keyframes showSuccessMessage {\n 0% {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.5);\n }\n 15% {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n 85% {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.9);\n }\n}\n\n@keyframes bounceSuccess {\n 0% {\n transform: scale(0);\n }\n 50% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes drawCheck {\n 0% {\n width: 0;\n height: 0;\n }\n 50% {\n width: 20px;\n height: 0;\n }\n 100% {\n width: 20px;\n height: 35px;\n }\n}\n\n@keyframes fadeInUp {\n 0% {\n opacity: 0;\n transform: translateY(20px);\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Sección para saltar reverso */\n.skip-section {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 25;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n max-width: 300px;\n}\n\n/* Sección unificada para captura del reverso */\n.back-capture-section {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 25;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n max-width: 320px;\n}\n\n\n.back-capture-buttons {\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.capture-button {\n pointer-events: auto;\n background: #fff;\n color: #333;\n border: none;\n border-radius: 25px;\n padding: 12px 24px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.capture-button:hover {\n background: #f8f9fa;\n}\n\n.capture-button:active {\n background: #e9ecef;\n transform: translateY(1px);\n}\n\n.capture-button:disabled,\n.capture-button.primary-button:disabled {\n cursor: not-allowed !important;\n transform: none !important;\n opacity: 0.7 !important;\n transition: none !important;\n}\n\n/* Responsive para móviles */\n@media (max-width: 480px) {\n .back-capture-section {\n bottom: 16px;\n max-width: 300px;\n }\n \n \n .back-capture-buttons {\n flex-direction: column;\n gap: 8px;\n width: 100%;\n }\n \n .capture-button,\n .back-capture-buttons .skip-button {\n width: 100%;\n max-width: 200px;\n padding: 10px 20px;\n font-size: 13px;\n }\n\n /* Ensure disabled styles work on mobile too */\n .capture-button:disabled,\n .capture-button.primary-button:disabled,\n .skip-button:disabled {\n opacity: 0.7 !important;\n cursor: not-allowed !important;\n }\n}\n\n.skip-explanation {\n background: rgba(0, 0, 0, 0.5);\n color: #ffffff;\n padding: 10px 16px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n text-align: center;\n margin-bottom: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(12px);\n border: 1px solid rgba(255, 255, 255, 0.1);\n animation: fadeIn 0.3s ease-in-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* Performance warning animation for guide-text */\n.guide-text.performance-warning-text {\n animation: gentlePulse 2s ease-in-out infinite;\n background: rgba(255, 107, 107, 0.3);\n border: 1px solid rgba(255, 107, 107, 0.5);\n}\n\n@keyframes gentlePulse {\n 0%, 100% {\n transform: translate(-50%, -50%) scale(1);\n background: rgba(255, 107, 107, 0.3);\n }\n 50% {\n transform: translate(-50%, -50%) scale(1.02);\n background: rgba(255, 107, 107, 0.4);\n }\n}\n\n\n/* Botón para saltar reverso */\n.skip-button {\n pointer-events: auto;\n background: #fff;\n color: #333;\n border: none;\n border-radius: 25px;\n padding: 12px 24px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.skip-button:hover {\n background: #f8f9fa;\n}\n\n.skip-button:active {\n background: #e9ecef;\n transform: translateY(1px);\n}\n\n.skip-button:disabled {\n cursor: not-allowed !important;\n transform: none !important;\n opacity: 0.7 !important;\n transition: none !important;\n}\n\n/* Camera controls */\n.camera-controls {\n position: absolute;\n top: 16px;\n right: 16px;\n z-index: 25;\n display: flex;\n gap: 8px;\n pointer-events: auto;\n animation: slideInFromTop 0.3s ease-out;\n}\n\n\n.camera-selector-button {\n height: 32px;\n padding: 0 10px;\n border: none;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.25);\n backdrop-filter: blur(12px);\n color: #ffffff;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid rgba(255, 255, 255, 0.1);\n white-space: nowrap;\n min-width: fit-content;\n}\n\n.camera-selector-button:hover {\n background: rgba(0, 0, 0, 0.8);\n border-color: rgba(255, 255, 255, 0.2);\n transform: translateY(-1px);\n}\n\n.camera-selector-button:active {\n transform: translateY(0);\n background: rgba(0, 0, 0, 0.9);\n}\n\n.camera-selector-button:disabled,\n.camera-selector-button.loading {\n opacity: 0.7;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.camera-selector-button:disabled:hover,\n.camera-selector-button.loading:hover {\n transform: none;\n background: rgba(0, 0, 0, 0.6);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.button-spinner {\n width: 16px;\n height: 16px;\n border: 2px solid rgba(0, 0, 0, 0.2);\n border-top: 2px solid #333333;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n display: inline-block;\n margin-right: 8px;\n vertical-align: middle;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* Camera selector dropdown */\n.camera-selector-dropdown {\n position: absolute;\n top: 56px;\n right: 16px;\n z-index: 30;\n background: rgba(0, 0, 0, 0.25);\n backdrop-filter: blur(20px);\n border-radius: 12px;\n min-width: 260px;\n max-width: 300px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n overflow: hidden;\n pointer-events: auto;\n animation: slideInFromTop 0.3s ease-out;\n}\n\n@keyframes slideInFromTop {\n 0% {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n }\n 100% {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n/* Animación específica para elementos centrados */\n@keyframes slideInFromTopCentered {\n 0% {\n opacity: 0;\n transform: translate(-50%, -50%) translateY(-8px) scale(0.95);\n }\n 100% {\n opacity: 1;\n transform: translate(-50%, -50%) translateY(0) scale(1);\n }\n}\n\n.camera-selector-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.camera-selector-header span {\n font-weight: 500;\n color: #ffffff;\n font-size: 13px;\n opacity: 0.9;\n}\n\n.close-selector {\n width: 20px;\n height: 20px;\n border: none;\n background: none;\n color: rgba(255, 255, 255, 0.7);\n font-size: 16px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.close-selector:hover {\n background: rgba(255, 255, 255, 0.1);\n color: #ffffff;\n}\n\n.camera-list {\n padding: 4px 0;\n max-height: 240px;\n overflow-y: auto;\n}\n\n.camera-option {\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 8px;\n color: rgba(255, 255, 255, 0.9);\n}\n\n.camera-option:hover {\n background: rgba(255, 255, 255, 0.08);\n}\n\n.camera-option.selected {\n background: rgba(255, 255, 255, 0.12);\n color: #ffffff;\n}\n\n.camera-label {\n font-size: 13px;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 0;\n font-weight: 400;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.camera-label .autofocus-icon {\n font-size: 12px;\n color: #ffffff !important;\n opacity: 0.8;\n flex-shrink: 0;\n}\n\n.selected-indicator {\n font-size: 14px;\n color: #ffffff;\n opacity: 0.9;\n flex-shrink: 0;\n}\n\n.device-info {\n padding: 6px 12px;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n background: rgba(255, 255, 255, 0.05);\n}\n\n.device-info small {\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n text-transform: capitalize;\n font-weight: 400;\n}\n\n/* Responsive design for camera controls */\n@media (max-width: 480px) {\n .camera-controls {\n top: 12px;\n right: 12px;\n gap: 6px;\n }\n\n .camera-selector-button {\n height: 36px;\n padding: 0 12px;\n font-size: 11px;\n border-radius: 6px;\n }\n\n .camera-selector-dropdown {\n right: 12px;\n top: 48px;\n min-width: 240px;\n max-width: calc(100vw - 24px);\n }\n\n .camera-selector-header {\n padding: 6px 10px;\n }\n\n .camera-option {\n padding: 6px 10px;\n }\n\n .device-info {\n padding: 4px 10px;\n }\n}\n\n/* Marca de agua */\n.watermark {\n position: absolute;\n bottom: 12px;\n right: 12px;\n z-index: 15;\n pointer-events: none;\n opacity: 0.7;\n}\n\n.watermark img {\n height: 24px;\n width: auto;\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));\n}\n\n/* Estado siempre visible del componente */\n.component-status {\n position: absolute;\n top: 16px;\n left: 16px;\n background: rgba(0, 0, 0, 0.25);\n backdrop-filter: blur(20px);\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n z-index: 40;\n height: 32px;\n width: fit-content;\n animation: slideInFromTop 0.3s ease-out;\n}\n\n\n.status-spinner {\n width: 16px;\n height: 16px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-top: 1px solid #ffffff;\n border-radius: 50%;\n animation: statusSpin 1s linear infinite;\n flex-shrink: 0;\n}\n\n.status-content {\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.status-message {\n color: #ffffff;\n font-size: 12px;\n font-weight: 500;\n margin: 0;\n}\n\n.status-description {\n color: rgba(255, 255, 255, 0.7);\n font-size: 10px;\n line-height: 1.2;\n margin: 0;\n}\n\n@keyframes statusSpin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* Responsive para estado en móviles */\n@media (max-width: 480px) {\n .component-status {\n top: 12px;\n left: 12px;\n padding: 4px 8px;\n gap: 4px;\n height: 28px;\n border-radius: 8px;\n }\n\n .status-spinner {\n width: 14px;\n height: 14px;\n }\n\n .status-message {\n font-size: 11px;\n }\n\n .status-description {\n font-size: 9px;\n }\n \n .guide-text {\n font-size: 11px;\n padding: 4px 8px;\n border-radius: 8px;\n }\n}\n\n/* Animación de carga mejorada */\n.loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.85);\n backdrop-filter: blur(4px);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: 30;\n border-radius: 8px;\n}\n\n.loading-spinner {\n width: 50px;\n height: 50px;\n border: 3px solid rgba(255, 255, 255, 0.15);\n border-top: 3px solid #28a745;\n border-radius: 50%;\n animation: spin 1s ease-in-out infinite;\n margin-bottom: 16px;\n}\n\n.loading-text {\n color: #ffffff;\n font-size: 14px;\n font-weight: 500;\n text-align: center;\n opacity: 0.9;\n margin-bottom: 4px;\n}\n\n.loading-description {\n color: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n text-align: center;\n opacity: 0.8;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* Monitor de Performance - Diseño compacto y minimalista */\n.performance-monitor {\n position: absolute;\n top: 70px;\n left: 16px;\n background: rgba(0, 0, 0, 0.25);\n backdrop-filter: blur(20px);\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n z-index: 35;\n width: fit-content;\n animation: slideInFromTop 0.3s ease-out;\n transition: all 0.3s ease;\n}\n\n@keyframes slideInFromLeft {\n 0% {\n opacity: 0;\n transform: translateX(-20px) scale(0.95);\n }\n 100% {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n}\n\n\n.performance-expanded {\n padding: 6px 10px;\n}\n\n.metrics-row {\n display: flex;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.metrics-row:last-child {\n margin-bottom: 0;\n}\n\n.metric-compact {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n min-width: 50px;\n}\n\n.metric-label {\n font-size: 9px;\n color: rgba(255, 255, 255, 0.6);\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.metric-value {\n font-size: 10px;\n font-weight: 600;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n padding: 2px 4px;\n border-radius: 3px;\n text-align: center;\n white-space: nowrap;\n}\n\n.metric-value.good {\n color: #4ade80;\n background: rgba(74, 222, 128, 0.1);\n border: 1px solid rgba(74, 222, 128, 0.2);\n}\n\n.metric-value.warning {\n color: #fbbf24;\n background: rgba(251, 191, 36, 0.1);\n border: 1px solid rgba(251, 191, 36, 0.2);\n}\n\n.metric-value.danger {\n color: #f87171;\n background: rgba(248, 113, 113, 0.1);\n border: 1px solid rgba(248, 113, 113, 0.2);\n}\n\n/* Responsive para monitor de performance */\n@media (max-width: 480px) {\n .performance-monitor {\n top: 60px;\n left: 12px;\n width: fit-content;\n }\n\n .performance-expanded {\n padding: 4px 8px;\n }\n\n .metrics-row {\n gap: 6px;\n margin-bottom: 3px;\n }\n\n .metric-compact {\n min-width: 45px;\n gap: 1px;\n }\n\n .metric-label {\n font-size: 8px;\n }\n\n .metric-value {\n font-size: 9px;\n padding: 1px 3px;\n }\n}\n\n/* Quality Monitor */\n.quality-monitor {\n position: absolute;\n top: 200px;\n left: 16px;\n background: rgba(0, 0, 0, 0.25);\n backdrop-filter: blur(20px);\n border-radius: 12px;\n border: 1px solid rgba(255, 255, 255, 0.1);\n z-index: 35;\n width: fit-content;\n animation: slideInFromLeft 0.3s ease-out;\n transition: all 0.3s ease;\n}\n\n.quality-text {\n padding: 6px 10px;\n font-size: 11px;\n color: white;\n font-family: 'Monaco', 'Menlo', 'Consolas', monospace;\n line-height: 1.4;\n}\n\n.quality-fail {\n color: #ff9999;\n}\n\n/* Animación pulsante para valores críticos */\n@keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n}\n\n.metric-value.danger {\n animation: pulse 2s infinite;\n}\n\n/* Mobile optimizations */\n@media (max-width: 480px) {\n .quality-monitor {\n top: 160px;\n left: 12px;\n }\n\n .quality-text {\n padding: 4px 8px;\n font-size: 10px;\n }\n}\n\n/* Sección de captura manual */\n.manual-capture-section {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 25;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n max-width: 300px;\n}\n\n\n.manual-capture-button {\n pointer-events: auto;\n background: #fff;\n color: #333;\n border: none;\n border-radius: 25px;\n padding: 12px 24px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.manual-capture-button:hover {\n background: #f8f9fa;\n}\n\n.manual-capture-button:active {\n background: #e9ecef;\n transform: translateY(1px);\n}\n\n.manual-capture-button:disabled {\n cursor: not-allowed !important;\n transform: none !important;\n opacity: 0.7 !important;\n transition: none !important;\n}\n\n/* Responsive para móviles */\n@media (max-width: 480px) {\n .manual-capture-section {\n bottom: 16px;\n max-width: 280px;\n }\n\n\n .manual-capture-button {\n padding: 10px 20px;\n font-size: 13px;\n }\n\n /* Ensure disabled styles work on mobile too */\n .manual-capture-button:disabled {\n opacity: 0.7 !important;\n cursor: not-allowed !important;\n }\n}\n\n/* License error container styles - Simple Design */\n.license-error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n height: 100%;\n width: 100%;\n background: #f5f7fa;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;\n}\n\n.license-error-card {\n background: #ffffff;\n border-radius: 8px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);\n max-width: 480px;\n width: 100%;\n padding: 48px 32px;\n text-align: center;\n}\n\n.license-error-icon {\n color: #dc3545;\n margin-bottom: 24px;\n}\n\n.license-error-title {\n color: #2c3e50;\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 16px 0;\n}\n\n.license-error-message {\n color: #495057;\n font-size: 16px;\n line-height: 1.6;\n margin: 0 0 24px 0;\n}\n\n.license-error-help {\n color: #6c757d;\n font-size: 14px;\n margin: 0 0 32px 0;\n}\n\n.license-error-help a {\n color: #007bff;\n text-decoration: none;\n font-weight: 500;\n}\n\n.license-error-help a:hover {\n text-decoration: underline;\n}\n\n.license-error-footer {\n color: #adb5bd;\n font-size: 12px;\n font-weight: 500;\n padding-top: 24px;\n border-top: 1px solid #e9ecef;\n}\n\n/* Responsive */\n@media (max-width: 640px) {\n .license-error-card {\n padding: 32px 24px;\n }\n\n .license-error-title {\n font-size: 20px;\n }\n\n .license-error-message {\n font-size: 14px;\n }\n}\n","import { Component, Element, State, Prop, Method, Event, EventEmitter, h } from '@stencil/core';\nimport { ServiceContainer, ComponentConfig } from '../../services/ServiceContainer';\nimport { POWERED_BY_JAAK_FALLBACK } from './watermark-fallback';\nimport { ICameraService } from '../../services/interfaces/ICameraService';\nimport { IDetectionService, DetectionBox } from '../../services/interfaces/IDetectionService';\nimport { IStateManager } from '../../services/interfaces/IStateManager';\nimport { IEventBus } from '../../services/interfaces/IEventBus';\nimport { ITracingService } from '../../services/interfaces/ITracingService';\nimport { IMetricsService } from '../../services/interfaces/IMetricsService';\nimport { CameraInfoResponse, CapturedImagesResponse, StatusResponse } from '../../types/component-types';\nimport { LicenseValidationService, LicenseValidationError } from '../../services/LicenseValidationService';\n\n@Component({\n tag: 'jaak-stamps',\n styleUrl: 'my-component.css',\n assetsDirs: ['../../assets'],\n shadow: true,\n})\nexport class JaakStamps {\n @Element() el!: HTMLElement;\n @Prop() debug: boolean = false;\n @Prop() alignmentTolerance: number = 15;\n @Prop() maskSize: number = 90;\n @Prop() cropMargin: number = 20;\n @Prop() useDocumentClassification: boolean = false;\n @Prop() useDocumentDetector: boolean = true;\n @Prop() preferredCamera: 'auto' | 'front' | 'back' = 'auto';\n @Prop() captureDelay: number = 1500;\n @Prop() enableBackDocumentTimer: boolean = false;\n @Prop() backDocumentTimerDuration: number = 20;\n @Prop() telemetryCollectorUrl?: string = 'https://collector.jaak.ai/v1/traces';\n @Prop() metricsCollectorUrl?: string = 'https://collector.jaak.ai/v1/metrics';\n @Prop() enableTelemetry: boolean = true;\n @Prop() enableMetrics: boolean = true;\n @Prop() customerId?: string;\n @Prop() tenantId?: string;\n @Prop() environment?: string = 'production';\n @Prop() propagateTraceHeaderCorsUrls?: string; // Comma-separated URLs or regex patterns\n @Prop() metricsExportIntervalMillis?: number = 60000; // Export metrics every 60 seconds\n @Prop() license?: string; // License key for validation\n @Prop() licenseEnvironment?: 'dev' | 'qa' | 'sandbox' | 'prod' = 'prod'; // Environment for license validation\n @Prop() traceId?: string; // Optional trace ID for tracking\n @Prop() appId?: string = 'jaak-stamps-web'; // Application ID for license validation\n\n @Event() captureCompleted: EventEmitter<any>;\n @Event() isReady: EventEmitter<boolean>;\n @Event() traceIdGenerated: EventEmitter<{traceId: string}>;\n\n // State derived from services\n @State() detectionBoxes: Array<{x: number, y: number, w: number, h: number, score: number}> = [];\n @State() sideAlignment: { top: boolean; right: boolean; bottom: boolean; left: boolean } = {\n top: false, right: false, bottom: false, left: false\n };\n @State() isMaskReady: boolean = false;\n @State() shouldMirrorVideo: boolean = true;\n @State() showCameraSelector: boolean = false;\n @State() isSwitchingCamera: boolean = false;\n @State() hasDocumentDetected: boolean = false;\n @State() cameraInfoWithAutofocus: {\n availableCameras: Array<{id: string, label: string, selected: boolean, hasAutofocus: boolean}>;\n selectedCameraId: string | null;\n deviceType: string;\n isMultipleCamerasAvailable: boolean;\n preferredFacing: 'environment' | 'user' | null;\n } = {\n availableCameras: [],\n selectedCameraId: null,\n deviceType: 'desktop',\n isMultipleCamerasAvailable: false,\n preferredFacing: null\n };\n @State() currentStatus: {\n message: string;\n description?: string;\n type: 'initializing' | 'ready' | 'loading' | 'active' | 'error';\n isInitialized: boolean;\n } = {\n message: 'Preparando capturador...',\n description: 'Configurando herramientas de captura',\n type: 'initializing',\n isInitialized: false\n };\n @State() performanceData = {\n fps: 0,\n inferenceTime: 0,\n memoryUsage: 0,\n onnxLoadTime: 0,\n frameProcessingTime: 0,\n totalDetections: 0,\n successfulDetections: 0,\n detectionRate: 0\n };\n @State() backDocumentTimerRemaining: number = 0;\n @State() showManualCaptureButton: boolean = false;\n @State() performanceDegradedMode: boolean = false; // Auto-switched to manual mode due to performance\n @State() showPerformanceMessage: boolean = false; // Show performance message temporarily\n @State() captureStateVersion: number = 0; // Triggers re-render when StateManager changes\n @State() processingButton: 'capture-front' | 'capture-back' | 'skip-back' | null = null; // Track which button is processing\n @State() licenseValid: boolean = true; // License validation status\n @State() licenseError: string | null = null; // License validation error message\n @State() classificationDisabled: boolean = false; // Classification disabled at runtime due to errors\n\n // Services\n private licenseValidationService: LicenseValidationService | null = null;\n private serviceContainer!: ServiceContainer;\n private eventBus!: IEventBus;\n private stateManager!: IStateManager;\n private cameraService!: ICameraService;\n private detectionService!: IDetectionService;\n private tracingService!: ITracingService | null;\n private metricsService!: IMetricsService | null;\n\n\n // UI References\n private videoRef?: HTMLVideoElement;\n private detectionContainer?: HTMLDivElement;\n private videoStream?: MediaStream;\n private animationId?: number;\n\n // Detection state\n private lastDetectedBox?: DetectionBox;\n private startTime?: number;\n private hasScreenshotTaken: boolean = false;\n private alignmentStartTime?: number;\n private alignmentTimer?: number;\n private backDocumentTimer?: number;\n private orientationTimer?: number;\n\n // Performance monitoring\n private performanceMetrics = {\n fps: 0,\n inferenceTime: 0,\n memoryUsage: 0,\n onnxLoadTime: 0,\n frameProcessingTime: 0,\n totalDetections: 0,\n successfulDetections: 0,\n detectionRate: 0,\n lastUpdateTime: 0\n };\n private performanceUpdateInterval?: number;\n\n // Performance optimization with adaptive frame skipping\n private frameSkipCounter: number = 0;\n private readonly BASE_FRAME_SKIP: number = 2;\n private readonly MAX_FRAME_SKIP: number = 8;\n private consecutiveFailures: number = 0;\n private readonly MAX_FAILURES: number = 30;\n private lastInferenceTime: number = 0;\n private readonly MIN_INFERENCE_INTERVAL: number = 50;\n private readonly MOBILE_MIN_INFERENCE_INTERVAL: number = 100; // Higher interval for mobile to prevent slow motion\n private performanceHistory: number[] = [];\n private readonly PERFORMANCE_HISTORY_SIZE: number = 10;\n\n // Sistema simplificado de monitoreo de rendimiento\n private readonly PERFORMANCE_THRESHOLD_MS: number = 2000; // Umbral único para todos los frames\n private readonly SLOW_FRAMES_TO_TRIGGER: number = 2; // Cuántos frames lentos consecutivos antes de cambiar\n private slowFrameCount: number = 0; // Contador de frames consecutivos lentos\n private processedFramesCount: number = 0; // Contador total de frames procesados\n private hasAutoSwitchedToManual: boolean = false;\n private _manualModeLoggedOnce: boolean = false;\n private readonly VIDEO_DIAGNOSTIC_EVENTS = [\n 'loadstart',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'playing',\n 'pause',\n 'stalled',\n 'suspend',\n 'abort',\n 'emptied',\n ];\n\n\n // Canvas pool for optimized screenshot capture\n private canvasPool: HTMLCanvasElement[] = [];\n private readonly MAX_CANVAS_POOL_SIZE = 3;\n\n async componentWillLoad() {\n if (this.debug) {\n console.log('[JAAK-DEBUG] componentWillLoad() - Props at initialization:');\n console.log('[JAAK-DEBUG] useDocumentDetector:', this.useDocumentDetector, '(type:', typeof this.useDocumentDetector, ')');\n console.log('[JAAK-DEBUG] useDocumentClassification:', this.useDocumentClassification);\n console.log('[JAAK-DEBUG] debug:', this.debug);\n console.log('[JAAK-DEBUG] license:', this.license ? this.license.substring(0, 8) + '...' : 'EMPTY');\n console.log('[JAAK-DEBUG] licenseEnvironment:', this.licenseEnvironment);\n console.log('[JAAK-DEBUG] alignmentTolerance:', this.alignmentTolerance);\n console.log('[JAAK-DEBUG] maskSize:', this.maskSize);\n console.log('[JAAK-DEBUG] captureDelay:', this.captureDelay);\n console.log('[JAAK-DEBUG] preferredCamera:', this.preferredCamera);\n console.log('[JAAK-DEBUG] appId:', this.appId);\n }\n\n // License is required - always validate\n // Wait a bit to ensure props are set from attributes\n await new Promise(resolve => setTimeout(resolve, 50));\n\n if (this.debug) {\n console.log('[JAAK-DEBUG] Props AFTER 50ms wait:');\n console.log('[JAAK-DEBUG] useDocumentDetector:', this.useDocumentDetector, '(type:', typeof this.useDocumentDetector, ')');\n }\n\n this.updateStatus('Validando licencia...', 'Verificando autorización de uso', 'initializing');\n await this.validateLicense();\n\n // If license validation failed, stop initialization\n if (!this.licenseValid) {\n if (this.debug) {\n console.error('[JAAK-DEBUG] License validation FAILED. Stopping initialization.');\n }\n return;\n }\n\n if (this.debug) {\n console.log('[JAAK-DEBUG] License validation OK');\n }\n }\n\n async componentDidLoad() {\n try {\n // If license validation failed, stop initialization\n if (!this.licenseValid) {\n return;\n }\n\n this.updateStatus('Preparando capturador...', 'Configurando herramientas de captura', 'initializing');\n await this.initializeServices();\n\n this.updateStatus('Preparando funciones...', 'Configurando herramientas de trabajo', 'initializing');\n await this.setupEventListeners();\n\n this.updateStatus('Configurando cámara...', 'Detectando dispositivos disponibles', 'initializing');\n await this.initializeComponent();\n\n if (this.debug) {\n this.initializePerformanceMonitor();\n }\n } catch (error) {\n this.updateStatus('Error de inicialización', error.message, 'error');\n }\n }\n\n private async initializeServices(): Promise<void> {\n // Parse propagateTraceHeaderCorsUrls from comma-separated string\n const propagateUrls = this.propagateTraceHeaderCorsUrls\n ? this.propagateTraceHeaderCorsUrls.split(',').map(url => url.trim())\n : [];\n\n const config: ComponentConfig = {\n debug: this.debug,\n alignmentTolerance: this.alignmentTolerance,\n maskSize: this.maskSize,\n cropMargin: this.cropMargin,\n useDocumentClassification: this.useDocumentClassification,\n useDocumentDetector: this.useDocumentDetector,\n preferredCamera: this.preferredCamera,\n captureDelay: this.captureDelay,\n telemetryCollectorUrl: this.telemetryCollectorUrl,\n metricsCollectorUrl: this.metricsCollectorUrl,\n enableTelemetry: this.enableTelemetry,\n enableMetrics: this.enableMetrics,\n customerId: this.customerId,\n tenantId: this.tenantId,\n environment: this.environment,\n propagateTraceHeaderCorsUrls: propagateUrls,\n metricsExportIntervalMillis: this.metricsExportIntervalMillis\n };\n\n this.serviceContainer = new ServiceContainer(config);\n this.eventBus = this.serviceContainer.getEventBus();\n this.stateManager = this.serviceContainer.getStateManager();\n this.cameraService = this.serviceContainer.getCameraService();\n this.detectionService = this.serviceContainer.getDetectionService();\n this.tracingService = this.serviceContainer.getTracingService();\n this.metricsService = this.serviceContainer.getMetricsService();\n\n // Set the custom trace ID if provided via prop\n if (this.tracingService && this.traceId) {\n this.tracingService.setSessionTraceId(this.traceId);\n }\n\n // Record component initialization\n if (this.tracingService) {\n const span = this.tracingService.startSpan('component.initialize', {\n 'component.debug': this.debug,\n 'component.useDocumentDetector': this.useDocumentDetector,\n 'component.useDocumentClassification': this.useDocumentClassification,\n });\n this.tracingService.endSpan(span);\n }\n }\n\n private async validateLicense(): Promise<void> {\n if (!this.license) {\n console.error('❌ No license provided for JAAK Stamps component');\n this.licenseError = 'Este componente requiere una licencia válida. Por favor, proporcione una licencia usando el atributo \"license\".';\n this.licenseValid = false;\n this.updateStatus('Error de licencia', 'Licencia no proporcionada', 'error');\n return;\n }\n\n try {\n console.log('🔑 Validating license for JAAK Stamps...');\n\n // Initialize license validation service\n this.licenseValidationService = new LicenseValidationService(this.licenseEnvironment);\n\n // Validate the license, passing traceId and appId if provided\n const response = await this.licenseValidationService.validateLicense(this.license, this.traceId, this.appId);\n\n if (response && response.access_token) {\n this.licenseValid = true;\n this.licenseError = null;\n console.log('✅ License validated successfully for JAAK Stamps');\n\n // Emit the traceId (either provided or generated)\n if (response.traceId) {\n this.traceIdGenerated.emit({ traceId: response.traceId });\n console.log('📋 TraceId:', response.traceId);\n }\n } else {\n this.licenseValid = false;\n this.licenseError = 'La licencia proporcionada no es válida. Por favor, verifique su licencia e intente nuevamente.';\n this.updateStatus('Error de licencia', 'Licencia inválida', 'error');\n console.error('❌ Invalid license for JAAK Stamps');\n }\n } catch (error) {\n this.licenseValid = false;\n const licenseError = error as LicenseValidationError;\n this.licenseError = licenseError.error_description || 'Error al validar la licencia. Por favor, verifique su conexión e intente nuevamente.';\n this.updateStatus('Error de licencia', 'Fallo en la validación', 'error');\n console.error('❌ License validation failed for JAAK Stamps:', error);\n }\n }\n\n private async setupEventListeners(): Promise<void> {\n this.eventBus.on('state-changed', () => {\n this.handleStateChange();\n });\n\n }\n\n private async initializeComponent(): Promise<void> {\n\n this.validateProps();\n\n if (this.debug) {\n this.stateManager.updateCaptureState({ isLoading: true });\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n\n this.updateStatus('Detectando cámaras...', 'Buscando dispositivos de captura', 'initializing');\n await this.cameraService.detectDeviceType();\n await this.cameraService.enumerateDevices();\n await this.updateCameraInfoWithAutofocus();\n\n this.updateStatus('Preparando reconocimiento...', 'Configurando detección de documentos', 'initializing');\n await this.loadOnnxRuntime();\n this.initializeResizeObserver();\n }\n\n private validateProps(): void {\n if (this.maskSize < 50 || this.maskSize > 100) {\n this.maskSize = 90;\n }\n\n if (this.cropMargin < 0 || this.cropMargin > 100) {\n this.cropMargin = 0;\n }\n\n const validOptions = ['auto', 'front', 'back'];\n if (!validOptions.includes(this.preferredCamera)) {\n this.preferredCamera = 'auto';\n }\n\n if (this.captureDelay < 0 || this.captureDelay > 10000) {\n this.captureDelay = 1500;\n }\n\n }\n\n // Pin onnxruntime-web to a specific version so JS bindings and WASM binary\n // always come from the same release. Without a version pin, jsDelivr serves\n // \"latest\" and a browser that cached files from a previous release may end up\n // mixing old JS with newer WASM (or vice versa) → ABI mismatch → main-thread\n // freeze on InferenceSession.create. Bump this constant deliberately when\n // upgrading and validate against all supported browsers.\n private readonly ORT_VERSION = '1.24.3';\n private readonly ORT_CDN_BASE = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${this.ORT_VERSION}/dist/`;\n\n private async loadOnnxRuntime(): Promise<void> {\n if (!(window as any).ort) {\n this.updateStatus('Preparando herramientas...', 'Configurando funciones de captura', 'initializing');\n const script = document.createElement('script');\n\n // iOS devices use WASM-only build to prevent memory issues (WebKit 26+ bug)\n // All iOS browsers use WebKit, so this applies to Safari, Chrome, Firefox, etc.\n const ua = navigator.userAgent;\n const isIOS = /iPad|iPhone|iPod/.test(ua);\n\n script.src = `${this.ORT_CDN_BASE}${isIOS ? 'ort.wasm.min.js' : 'ort.min.js'}`;\n document.head.appendChild(script);\n\n await new Promise((resolve) => {\n script.onload = () => {\n const ort = (window as any).ort;\n\n // Pin the WASM binary URLs to the same release as the JS bindings.\n // Without this, ort would resolve wasm files from \"latest\" again.\n if (ort?.env?.wasm) {\n ort.env.wasm.wasmPaths = this.ORT_CDN_BASE;\n }\n\n // Configure ONNX for iOS low memory mode\n if (isIOS && ort?.env) {\n ort.env.wasm.simd = false;\n ort.env.wasm.numThreads = 1;\n ort.env.wasm.proxy = false;\n }\n\n setTimeout(async () => {\n await this.finalizeInitialization();\n resolve(undefined);\n }, 300);\n };\n });\n } else {\n setTimeout(async () => {\n await this.finalizeInitialization();\n }, 300);\n }\n }\n\n private async finalizeInitialization(): Promise<void> {\n this.stateManager.updateCaptureState({ isLoading: false });\n\n // Check camera permissions before showing \"ready\" status\n const hasPermissions = await this.checkCameraPermissions();\n\n if (hasPermissions) {\n this.currentStatus = {\n message: 'Listo para capturar',\n description: '',\n type: 'ready',\n isInitialized: true\n };\n } else {\n this.currentStatus = {\n message: 'Permisos de cámara requeridos',\n description: 'Por favor, otorgue permisos de cámara para continuar',\n type: 'error',\n isInitialized: true\n };\n }\n\n this.emitReadyEvent();\n }\n\n private updateStatus(message: string, description?: string, type: 'initializing' | 'ready' | 'loading' | 'active' | 'error' = 'loading'): void {\n this.currentStatus = {\n message,\n description,\n type,\n isInitialized: this.currentStatus.isInitialized\n };\n }\n\n private emitReadyEvent(): void {\n const isDocumentReady = !!(window as any).ort && this.detectionService.isModelLoaded();\n this.isReady.emit(isDocumentReady);\n }\n\n private async checkCameraPermissions(): Promise<boolean> {\n try {\n if (!navigator.permissions) {\n // Fallback: try to access camera directly\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n stream.getTracks().forEach(track => track.stop());\n return true;\n } catch {\n return false;\n }\n }\n\n const permission = await navigator.permissions.query({ name: 'camera' as PermissionName });\n return permission.state === 'granted';\n } catch (error) {\n return false;\n }\n }\n\n private handleStateChange(): void {\n // Handle state changes from StateManager if needed\n }\n\n private initializeResizeObserver(): void {\n if ('ResizeObserver' in window && this.detectionContainer) {\n const resizeObserver = new ResizeObserver(() => {\n this.handleResize();\n });\n resizeObserver.observe(this.detectionContainer.parentElement!);\n }\n\n // Handle mobile device orientation changes\n window.addEventListener('orientationchange', () => {\n // Clear any existing orientation timer\n if (this.orientationTimer) {\n clearTimeout(this.orientationTimer);\n }\n // Add delay to ensure video dimensions are updated after rotation\n this.orientationTimer = window.setTimeout(() => {\n this.handleResize();\n this.orientationTimer = undefined;\n }, 300);\n });\n }\n\n private handleResize(): void {\n if (this.detectionContainer) {\n const container = this.detectionContainer.parentElement!;\n const rect = container.getBoundingClientRect();\n this.updateMaskDimensions(rect);\n }\n }\n\n private triggerRerender(): void {\n this.captureStateVersion = this.captureStateVersion + 1;\n }\n\n private getGuideText(step: 'front' | 'back' | 'completed'): string {\n if (step === 'completed') {\n return 'Proceso completado';\n }\n\n // Check if we should show performance message\n if (this.showPerformanceMessage && step === 'front') {\n return 'Modo manual activado por rendimiento. Use el botón para capturar.';\n }\n\n if (step === 'front') {\n // Para el frente, si el detector manual está activo, mostrar instrucciones de captura manual\n if (this.showManualCaptureButton) {\n return 'Posicione el frente de su documento en el marco y presione el botón para capturar';\n }\n // Instrucción básica de alineación\n return 'Alinee su identificación con el marco';\n } else if (step === 'back') {\n // Para el reverso, mostrar instrucciones específicas según el modo\n if (this.useDocumentDetector) {\n return 'Si tu documento no tiene lado trasero, da clic en el botón para continuar con el proceso';\n } else {\n return 'Posicione el reverso de su documento en el marco y capture, o salte este paso';\n }\n }\n\n return 'Alinee su identificación con el marco';\n }\n\n private updateMaskDimensions(containerRect: DOMRect): void {\n if (!this.videoRef) return;\n\n const videoWidth = this.videoRef.videoWidth;\n const videoHeight = this.videoRef.videoHeight;\n\n if (videoWidth === 0 || videoHeight === 0) return;\n\n // Calculate video aspect ratio and container aspect ratio\n const videoAspectRatio = videoWidth / videoHeight;\n const containerAspectRatio = containerRect.width / containerRect.height;\n\n // Determine how video fits in container (letterboxed or pillarboxed)\n let displayedVideoWidth: number, displayedVideoHeight: number;\n let videoOffsetX = 0, videoOffsetY = 0;\n\n if (videoAspectRatio > containerAspectRatio) {\n displayedVideoWidth = containerRect.width;\n displayedVideoHeight = containerRect.width / videoAspectRatio;\n videoOffsetY = (containerRect.height - displayedVideoHeight) / 2;\n } else {\n displayedVideoHeight = containerRect.height;\n displayedVideoWidth = containerRect.height * videoAspectRatio;\n videoOffsetX = (containerRect.width - displayedVideoWidth) / 2;\n }\n\n // Calculate mask dimensions with ID-1 aspect ratio\n const ID1_ASPECT_RATIO = 85.60 / 53.98;\n const maxWidthByHeight = displayedVideoHeight * ID1_ASPECT_RATIO;\n\n let maskWidthInVideo: number, maskHeightInVideo: number;\n const sizeRatio = this.maskSize / 100;\n\n if (maxWidthByHeight <= displayedVideoWidth) {\n maskHeightInVideo = displayedVideoHeight * sizeRatio;\n maskWidthInVideo = maskHeightInVideo * ID1_ASPECT_RATIO;\n } else {\n maskWidthInVideo = displayedVideoWidth * sizeRatio;\n maskHeightInVideo = maskWidthInVideo / ID1_ASPECT_RATIO;\n }\n\n // Convert to percentages of the container\n const maskWidthPercent = (maskWidthInVideo / containerRect.width) * 100;\n const maskHeightPercent = (maskHeightInVideo / containerRect.height) * 100;\n\n // Calculate the center position of the displayed video area\n const videoCenterX = videoOffsetX + (displayedVideoWidth / 2);\n const videoCenterY = videoOffsetY + (displayedVideoHeight / 2);\n\n // Convert to percentages of the container\n const videoCenterXPercent = (videoCenterX / containerRect.width) * 100;\n const videoCenterYPercent = (videoCenterY / containerRect.height) * 100;\n\n // Update CSS custom properties for mask sizing and positioning\n this.el.style.setProperty('--mask-width', `${maskWidthPercent}%`);\n this.el.style.setProperty('--mask-height', `${maskHeightPercent}%`);\n this.el.style.setProperty('--mask-center-x', `${videoCenterXPercent}%`);\n this.el.style.setProperty('--mask-center-y', `${videoCenterYPercent}%`);\n\n this.isMaskReady = true;\n }\n\n // PUBLIC METHODS\n\n // Helper method to check if component is ready for operations\n private isComponentReady(): { ready: boolean; message?: string; status?: string } {\n if (!this.currentStatus.isInitialized) {\n return {\n ready: false,\n message: 'El componente aún se está inicializando',\n status: 'initializing'\n };\n }\n\n if (this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') {\n return {\n ready: false,\n message: 'El componente está cargando recursos',\n status: 'loading'\n };\n }\n\n if (!this.serviceContainer || !this.stateManager || !this.cameraService || !this.detectionService) {\n return {\n ready: false,\n message: 'Los servicios del componente no están disponibles',\n status: 'error'\n };\n }\n\n return { ready: true };\n }\n\n @Method()\n async getCapturedImages(): Promise<CapturedImagesResponse> {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n throw new Error(readyCheck.message);\n }\n\n const state = this.stateManager.getCaptureState();\n if (state.step !== 'completed') {\n throw new Error('El proceso de captura no ha sido completado');\n }\n return this.stateManager.getCapturedImages();\n }\n\n @Method()\n async isProcessCompleted() {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n return false; // Return false instead of error for this method\n }\n\n return this.stateManager.isProcessCompleted();\n }\n\n @Method()\n async startCapture() {\n const span = this.tracingService?.startSpan('capture.start');\n const readyCheck = this.isComponentReady();\n\n if (!readyCheck.ready) {\n this.updateStatus(readyCheck.message!, 'Espere a que termine la inicialización', readyCheck.status as any);\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'error', true);\n this.tracingService?.setSpanAttribute(span, 'error.message', readyCheck.message!);\n this.tracingService?.endSpan(span);\n }\n return { success: false, error: readyCheck.message };\n }\n\n try {\n await this.startDetection();\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'success', true);\n this.tracingService?.endSpan(span);\n }\n return { success: true };\n } catch (error) {\n this.updateStatus('Error al iniciar captura', error.message, 'error');\n if (span) {\n this.tracingService?.recordException(span, error);\n this.tracingService?.endSpan(span);\n }\n return { success: false, error: error.message };\n }\n }\n\n @Method()\n async stopCapture() {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n return { success: false, error: readyCheck.message };\n }\n\n try {\n this.exitSession();\n return { success: true };\n } catch (error) {\n return { success: false, error: error.message };\n }\n }\n\n @Method()\n async resetCapture() {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n return { success: false, error: readyCheck.message };\n }\n\n try {\n this.resetDetection();\n return { success: true };\n } catch (error) {\n return { success: false, error: error.message };\n }\n }\n\n @Method()\n async skipBackCapture() {\n console.log('🟡 Botón clicked: Saltar reverso');\n\n // Set processing state immediately\n this.processingButton = 'skip-back';\n\n // Add small delay to show spinner\n await new Promise(resolve => setTimeout(resolve, 100));\n\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n this.processingButton = null;\n return { success: false, error: readyCheck.message };\n }\n\n try {\n const captureState = this.stateManager.getCaptureState();\n const capturedImages = this.stateManager.getCapturedImages();\n\n if (captureState.step === 'back' && capturedImages.front.fullFrame) {\n this.completeProcess(true);\n return { success: true };\n } else {\n return { success: false, error: 'No se puede saltar el reverso en el estado actual' };\n }\n } catch (error) {\n return { success: false, error: error.message };\n } finally {\n // Always clear processing state when done\n this.processingButton = null;\n }\n }\n\n @Method()\n async getStatus(): Promise<StatusResponse> {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n return {\n isVideoActive: false,\n captureStep: 'front',\n hasImages: false,\n isProcessCompleted: false,\n isModelPreloaded: false,\n componentStatus: readyCheck.status,\n componentMessage: readyCheck.message\n } as StatusResponse;\n }\n\n try {\n const captureState = this.stateManager.getCaptureState();\n const capturedImages = this.stateManager.getCapturedImages();\n\n return {\n isVideoActive: captureState.isVideoActive,\n captureStep: captureState.step,\n hasImages: !!(capturedImages.front.fullFrame || capturedImages.back.fullFrame),\n isProcessCompleted: this.stateManager.isProcessCompleted(),\n isModelPreloaded: this.detectionService.isModelLoaded(),\n componentStatus: 'ready'\n };\n } catch (error) {\n return {\n isVideoActive: false,\n captureStep: 'front',\n hasImages: false,\n isProcessCompleted: false,\n isModelPreloaded: false,\n componentStatus: 'error',\n componentMessage: error.message\n } as StatusResponse;\n }\n }\n\n @Method()\n async preloadModel() {\n const span = this.tracingService?.startSpan('model.preload');\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n this.updateStatus(readyCheck.message!, 'Espere a que termine la inicialización', readyCheck.status as any);\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'error', true);\n this.tracingService?.endSpan(span);\n }\n return { success: false, error: readyCheck.message };\n }\n\n if (this.detectionService.isModelLoaded()) {\n this.updateStatus('Reconocimiento listo', '', 'ready');\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'cached', true);\n this.tracingService?.endSpan(span);\n }\n return { success: true, message: 'Model already loaded' };\n }\n\n try {\n const loadStartTime = performance.now();\n\n this.updateStatus('Preparando reconocimiento...', 'Configurando detección de documentos', 'loading');\n if (this.stateManager) {\n this.stateManager.updateCaptureState({ isLoading: true });\n }\n\n try {\n const detectionStartTime = performance.now();\n const modelSpan = this.tracingService?.startSpan('model.detection.load');\n await this.detectionService.loadModel();\n if (modelSpan) this.tracingService?.endSpan(modelSpan);\n\n const detectionLoadTime = performance.now() - detectionStartTime;\n this.metricsService?.recordModelLoad('detection', detectionLoadTime, false);\n } catch (modelError) {\n this.metricsService?.recordError('model_load_failed', 'detection');\n this.switchToManualModeWithError('Error al cargar modelo de detección');\n throw modelError;\n }\n\n this.updateStatus('Optimizando detección...', 'Configurando reconocimiento de documentos', 'loading');\n\n try {\n const classificationStartTime = performance.now();\n const classSpan = this.tracingService?.startSpan('model.classification.load');\n await this.detectionService.loadClassificationModel();\n if (classSpan) this.tracingService?.endSpan(classSpan);\n\n const classificationLoadTime = performance.now() - classificationStartTime;\n this.metricsService?.recordModelLoad('classification', classificationLoadTime, false);\n } catch (classificationError) {\n this.metricsService?.recordError('model_load_failed', 'classification');\n this.switchToManualModeWithError('Error al cargar modelo de clasificación');\n throw classificationError;\n }\n\n const loadEndTime = performance.now();\n const loadTime = loadEndTime - loadStartTime;\n\n // Record ONNX load time\n if (this.debug) {\n this.recordOnnxPerformance(loadTime, 0);\n }\n\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'loadTime', loadTime);\n }\n\n this.updateStatus('Finalizando configuración...', 'Preparando herramientas para captura', 'loading');\n await new Promise(resolve => setTimeout(resolve, 300));\n\n this.updateStatus('Reconocimiento preparado', '', 'ready');\n if (this.stateManager) {\n this.stateManager.updateCaptureState({ isLoading: false });\n }\n this.emitReadyEvent();\n\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'success', true);\n this.tracingService?.endSpan(span);\n }\n\n return { success: true, message: 'Models preloaded successfully' };\n } catch (error) {\n this.updateStatus('Error de configuración', 'No se pudieron preparar las herramientas necesarias', 'error');\n if (this.stateManager) {\n this.stateManager.updateCaptureState({ isLoading: false });\n }\n if (span) {\n this.tracingService?.recordException(span, error);\n this.tracingService?.endSpan(span);\n }\n return { success: false, error: error.message };\n }\n }\n\n @Method()\n async getCameraInfo(): Promise<CameraInfoResponse> {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n return {\n availableCameras: [],\n selectedCameraId: null,\n deviceType: 'desktop',\n isMultipleCamerasAvailable: false,\n preferredFacing: null,\n error: readyCheck.message\n } as CameraInfoResponse;\n }\n\n try {\n return await this.cameraService.getCameraInfo();\n } catch (error) {\n return {\n availableCameras: [],\n selectedCameraId: null,\n deviceType: 'desktop',\n isMultipleCamerasAvailable: false,\n preferredFacing: null,\n error: error.message\n } as CameraInfoResponse;\n }\n }\n\n @Method()\n async setPreferredCamera(camera: 'auto' | 'front' | 'back') {\n const readyCheck = this.isComponentReady();\n if (!readyCheck.ready) {\n return {\n success: false,\n error: readyCheck.message,\n selectedCamera: null,\n availableCameras: 0\n };\n }\n\n try {\n this.preferredCamera = camera;\n this.serviceContainer.updateConfig({ preferredCamera: camera });\n\n await this.cameraService.enumerateDevices();\n await this.updateCameraInfoWithAutofocus();\n\n const captureState = this.stateManager.getCaptureState();\n if (captureState.isVideoActive) {\n const selectedCameraId = this.cameraService.getSelectedCameraId();\n if (selectedCameraId) {\n await this.cameraService.switchCamera(selectedCameraId);\n }\n }\n\n return {\n success: true,\n selectedCamera: this.cameraService.getSelectedCameraId(),\n availableCameras: this.cameraService.getAvailableCameras().length\n };\n } catch (error) {\n return {\n success: false,\n error: error.message,\n selectedCamera: null,\n availableCameras: 0\n };\n }\n }\n\n @Method()\n async setCaptureDelay(delay: number) {\n if (delay < 0 || delay > 10000) {\n return {\n success: false,\n error: 'Capture delay must be between 0 and 10000 milliseconds',\n captureDelay: this.captureDelay\n };\n }\n\n // Allow setting capture delay even during initialization\n this.captureDelay = delay;\n if (this.serviceContainer) {\n this.serviceContainer.updateConfig({ captureDelay: delay });\n }\n\n return {\n success: true,\n captureDelay: this.captureDelay\n };\n }\n\n @Method()\n async getCaptureDelay() {\n // Always allow getting capture delay, even during initialization\n return this.captureDelay;\n }\n\n\n\n\n\n // Memory and device capability detection\n private checkDeviceCapabilities(): { canUseML: boolean; reason: string; memoryMB: number | null } {\n const deviceMemory = (navigator as any).deviceMemory;\n\n // Siempre intentar usar ML, independientemente del dispositivo\n // Las restricciones anteriores no eran confiables\n return {\n canUseML: true,\n reason: 'Dispositivo compatible con detección automática.',\n memoryMB: deviceMemory ? deviceMemory * 1024 : null\n };\n }\n\n private debugLog(message: string, details?: unknown): void {\n if (!this.debug) {\n return;\n }\n\n if (typeof details === 'undefined') {\n console.log(`[jaak-stamps][diag] ${message}`);\n return;\n }\n\n console.log(`[jaak-stamps][diag] ${message}`, details);\n }\n\n private debugWarn(message: string, details?: unknown): void {\n if (!this.debug) {\n return;\n }\n\n if (typeof details === 'undefined') {\n console.warn(`[jaak-stamps][diag] ${message}`);\n return;\n }\n\n console.warn(`[jaak-stamps][diag] ${message}`, details);\n }\n\n private summarizeId(id?: string): string | null {\n if (!id) {\n return null;\n }\n\n return id.length <= 8 ? id : `${id.slice(0, 8)}...`;\n }\n\n private getCameraDevicesSnapshot(): Array<Record<string, unknown>> {\n return this.cameraService.getAvailableCameras().map(camera => ({\n label: camera.label || '(sin label)',\n deviceId: this.summarizeId(camera.deviceId),\n groupId: this.summarizeId(camera.groupId),\n kind: camera.kind,\n }));\n }\n\n private sanitizeTrackSettings(settings?: MediaTrackSettings): Record<string, unknown> | null {\n if (!settings) {\n return null;\n }\n\n return {\n ...settings,\n deviceId: this.summarizeId(settings.deviceId),\n groupId: this.summarizeId((settings as MediaTrackSettings & { groupId?: string }).groupId),\n };\n }\n\n private sanitizeTrackConstraints(track?: MediaStreamTrack): Record<string, unknown> | null {\n if (!track) {\n return null;\n }\n\n const constraints = track.getConstraints ? track.getConstraints() : {};\n const sanitizedConstraints: Record<string, unknown> = { ...constraints };\n\n if (typeof sanitizedConstraints.deviceId === 'string') {\n sanitizedConstraints.deviceId = this.summarizeId(sanitizedConstraints.deviceId);\n }\n\n return sanitizedConstraints;\n }\n\n private getStreamSnapshot(stream?: MediaStream | null): Record<string, unknown> {\n if (!stream) {\n return { hasStream: false };\n }\n\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n return {\n hasStream: true,\n streamActive: stream.active,\n trackCount: stream.getTracks().length,\n hasVideoTrack: false,\n };\n }\n\n return {\n hasStream: true,\n streamActive: stream.active,\n trackCount: stream.getTracks().length,\n trackLabel: videoTrack.label || '(sin label)',\n trackEnabled: videoTrack.enabled,\n trackMuted: videoTrack.muted,\n trackReadyState: videoTrack.readyState,\n settings: this.sanitizeTrackSettings(videoTrack.getSettings ? videoTrack.getSettings() : undefined),\n constraints: this.sanitizeTrackConstraints(videoTrack),\n };\n }\n\n private getVideoElementSnapshot(): Record<string, unknown> {\n if (!this.videoRef) {\n return { hasVideoRef: false };\n }\n\n const computedStyle = this.el.ownerDocument?.defaultView?.getComputedStyle(this.videoRef);\n\n return {\n hasVideoRef: true,\n isConnected: this.videoRef.isConnected,\n readyState: this.videoRef.readyState,\n networkState: this.videoRef.networkState,\n paused: this.videoRef.paused,\n muted: this.videoRef.muted,\n autoplay: this.videoRef.autoplay,\n playsInline: this.videoRef.playsInline,\n currentTime: Number.isFinite(this.videoRef.currentTime)\n ? Number(this.videoRef.currentTime.toFixed(3))\n : this.videoRef.currentTime,\n videoWidth: this.videoRef.videoWidth,\n videoHeight: this.videoRef.videoHeight,\n clientWidth: this.videoRef.clientWidth,\n clientHeight: this.videoRef.clientHeight,\n hasSrcObject: !!this.videoRef.srcObject,\n display: computedStyle?.display ?? 'unknown',\n visibility: computedStyle?.visibility ?? 'unknown',\n };\n }\n\n private attachVideoDiagnosticListeners(): () => void {\n if (!this.debug || !this.videoRef) {\n return () => undefined;\n }\n\n const video = this.videoRef;\n const listeners = this.VIDEO_DIAGNOSTIC_EVENTS.map(eventName => {\n const handler = () => {\n this.debugLog(`video event \"${eventName}\"`, this.getVideoElementSnapshot());\n };\n video.addEventListener(eventName, handler);\n return { eventName, handler };\n });\n\n return () => {\n listeners.forEach(({ eventName, handler }) => {\n video.removeEventListener(eventName, handler);\n });\n };\n }\n\n // DETECTION METHODS\n private async startDetection(): Promise<void> {\n try {\n if (this.debug) {\n console.log('[JAAK-DEBUG] startDetection() called');\n console.log('[JAAK-DEBUG] useDocumentDetector:', this.useDocumentDetector);\n console.log('[JAAK-DEBUG] useDocumentClassification:', this.useDocumentClassification);\n }\n\n // Verificar capacidades del dispositivo antes de cargar modelos\n const capabilities = this.checkDeviceCapabilities();\n\n if (this.debug) {\n console.log('[JAAK-DEBUG] Device capabilities:', JSON.stringify(capabilities));\n }\n\n // Si el dispositivo no puede usar ML o tenemos problemas de memoria, usar modo manual\n if (!capabilities.canUseML && this.useDocumentDetector) {\n if (this.debug) {\n console.warn('[JAAK-DEBUG] MANUAL MODE: Device cannot use ML. Reason:', capabilities.reason);\n }\n this.switchToManualModeWithWarning(capabilities.reason);\n return;\n }\n\n // Paso 1: Verificar y cargar modelos si es necesario\n if (!this.detectionService.isModelLoaded()) {\n const loadStartTime = performance.now();\n\n if (this.debug) {\n console.log('[JAAK-DEBUG] Loading detection model...');\n }\n\n this.updateStatus('Preparando reconocimiento...', 'Configurando detección de documentos', 'loading');\n this.stateManager.updateCaptureState({ isLoading: true });\n\n try {\n await this.detectionService.loadModel();\n if (this.debug) {\n console.log('[JAAK-DEBUG] Detection model loaded successfully in', (performance.now() - loadStartTime).toFixed(0), 'ms');\n }\n } catch (modelError) {\n // Si es un error de memoria, cambiar a modo manual con mensaje específico\n if (modelError.message.includes('Out of memory') || modelError.message.includes('no available backend')) {\n const memoryInfo = (navigator as any).deviceMemory ? `(${(navigator as any).deviceMemory}GB disponible)` : '';\n if (this.debug) {\n console.warn('[JAAK-DEBUG] MANUAL MODE: Out of memory loading detection model.', memoryInfo);\n }\n this.switchToManualModeWithWarning(`Memoria insuficiente para detección automática ${memoryInfo}. Modo manual activado - funciona igual de bien!`);\n return;\n } else {\n if (this.debug) {\n console.error('[JAAK-DEBUG] MANUAL MODE: Error loading detection model:', modelError.message);\n }\n this.switchToManualModeWithError('Error al cargar modelo de detección');\n throw modelError;\n }\n }\n\n this.updateStatus('Optimizando detección...', 'Configurando reconocimiento de documentos', 'loading');\n\n if (this.debug) {\n console.log('[JAAK-DEBUG] Loading classification model...');\n }\n\n try {\n await this.detectionService.loadClassificationModel();\n if (this.debug) {\n console.log('[JAAK-DEBUG] Classification model loaded successfully');\n }\n } catch (classificationError) {\n // La clasificacion es opcional, no debe bloquear la deteccion\n if (this.debug) {\n console.warn('[JAAK-DEBUG] Classification model failed to load, disabling classification. Error:', classificationError.message);\n }\n this.classificationDisabled = true;\n }\n\n const loadEndTime = performance.now();\n const loadTime = loadEndTime - loadStartTime;\n\n if (this.debug) {\n console.log('[JAAK-DEBUG] All models loaded in', loadTime.toFixed(0), 'ms');\n this.recordOnnxPerformance(loadTime, 0);\n }\n\n } else {\n if (this.debug) {\n console.log('[JAAK-DEBUG] Models already loaded, skipping load');\n }\n }\n\n // Paso 2: Detectar y configurar dispositivos\n this.updateStatus('Configurando cámara...', 'Buscando dispositivos disponibles', 'loading');\n\n try {\n await this.cameraService.enumerateDevices();\n this.debugLog('step 2/5 enumerateDevices()', {\n cameras: this.getCameraDevicesSnapshot(),\n selectedCameraId: this.summarizeId(this.cameraService.getSelectedCameraId() || undefined),\n });\n } catch (enumerateError) {\n throw new Error(`Error al enumerar dispositivos: ${enumerateError.message}`);\n }\n\n try {\n await this.updateCameraInfoWithAutofocus();\n this.debugLog('step 2/5 updateCameraInfoWithAutofocus()', {\n cameraInfo: this.cameraInfoWithAutofocus,\n });\n } catch (cameraInfoError) {\n throw new Error(`Error al actualizar información de cámara: ${cameraInfoError.message}`);\n }\n\n // Paso 3: Configurar cámara seleccionada\n this.updateStatus('Ajustando cámara...', 'Configurando calidad de imagen', 'loading');\n\n let stream: MediaStream;\n try {\n stream = await this.cameraService.setupCamera();\n this.debugLog('step 3/5 setupCamera() resolved', {\n stream: this.getStreamSnapshot(stream),\n videoRef: this.getVideoElementSnapshot(),\n });\n } catch (setupError) {\n throw new Error(`Error al configurar cámara: ${setupError.message}`);\n }\n\n // Paso 4: Inicializar video y mostrar estado de análisis inicial\n if (this.useDocumentDetector) {\n this.updateStatus('Analizando estabilidad...', 'Evaluando rendimiento del sistema', 'loading');\n } else {\n this.updateStatus('Captura activa', 'Posicione su documento y use el botón para capturar', 'active');\n }\n\n try {\n this.debugLog('step 4/5 initializeVideoStream() start', {\n stream: this.getStreamSnapshot(stream),\n videoRef: this.getVideoElementSnapshot(),\n });\n await this.initializeVideoStream(stream);\n this.debugLog('step 4/5 initializeVideoStream() completed', {\n stream: this.getStreamSnapshot(stream),\n videoRef: this.getVideoElementSnapshot(),\n });\n } catch (videoError) {\n throw new Error(`Error al inicializar video: ${videoError.message}`);\n }\n\n // Paso 5: Calibrar máscara\n if (this.detectionContainer) {\n const container = this.detectionContainer.parentElement!;\n const rect = container.getBoundingClientRect();\n this.updateMaskDimensions(rect);\n }\n\n\n // Finalizar e iniciar captura\n this.startTime = Date.now();\n this.stateManager.updateCaptureState({ isLoading: false });\n\n // Mostrar botón manual si el detector está deshabilitado\n if (!this.useDocumentDetector) {\n this.showManualCaptureButton = true;\n }\n\n this.debugLog('step 5/5 capture loop ready', {\n videoRef: this.getVideoElementSnapshot(),\n stream: this.getStreamSnapshot(this.videoStream),\n useDocumentDetector: this.useDocumentDetector,\n });\n\n this.detectFrame();\n\n } catch (err) {\n this.debugWarn('startDetection() failed', {\n error: err instanceof Error ? err.message : String(err),\n videoRef: this.getVideoElementSnapshot(),\n stream: this.getStreamSnapshot(this.videoStream),\n });\n console.error('[jaak-stamps] Error al preparar captura:', err);\n this.updateStatus('Error al iniciar', 'No se pudo preparar la captura', 'error');\n this.stateManager.updateCaptureState({ isLoading: false });\n }\n }\n\n private async initializeVideoStream(stream: MediaStream): Promise<void> {\n if (!this.videoRef) {\n throw new Error('Video element not available');\n }\n\n const detachVideoDiagnosticListeners = this.attachVideoDiagnosticListeners();\n\n this.debugLog('initializeVideoStream() pre-assign', {\n stream: this.getStreamSnapshot(stream),\n videoRef: this.getVideoElementSnapshot(),\n });\n\n this.videoRef.srcObject = stream;\n this.videoStream = stream;\n\n this.debugLog('initializeVideoStream() post-srcObject assignment', {\n stream: this.getStreamSnapshot(stream),\n videoRef: this.getVideoElementSnapshot(),\n });\n\n const isRear = this.cameraService.isRearCamera(stream);\n this.shouldMirrorVideo = !isRear;\n\n const LOAD_METADATA_TIMEOUT_MS = 10000;\n\n // Diagnostic instrumentation: when the timeout fires we need enough\n // context to distinguish between \"OS muted the track\", \"permission\n // revoked mid-flight\", \"device never produced frames\" and other modes\n // that all surface as the same generic timeout error.\n const track = stream.getVideoTracks()[0];\n const waitStart = performance.now();\n const trackEvents: Array<{ at: number; event: string; state?: string }> = [];\n const recordTrackEvent = (event: string) => {\n trackEvents.push({\n at: Math.round(performance.now() - waitStart),\n event,\n state: track?.readyState,\n });\n };\n const onTrackMute = () => recordTrackEvent('mute');\n const onTrackUnmute = () => recordTrackEvent('unmute');\n const onTrackEnded = () => recordTrackEvent('ended');\n if (track) {\n track.addEventListener('mute', onTrackMute);\n track.addEventListener('unmute', onTrackUnmute);\n track.addEventListener('ended', onTrackEnded);\n }\n const cleanupTrackListeners = () => {\n if (!track) return;\n track.removeEventListener('mute', onTrackMute);\n track.removeEventListener('unmute', onTrackUnmute);\n track.removeEventListener('ended', onTrackEnded);\n };\n const captureDiagnostics = () => {\n const settings = track?.getSettings?.();\n const computed = this.videoRef ? getComputedStyle(this.videoRef) : null;\n return {\n reason: 'VIDEO_METADATA_TIMEOUT',\n waitedMs: Math.round(performance.now() - waitStart),\n stream: {\n videoTrackCount: stream.getVideoTracks().length,\n audioTrackCount: stream.getAudioTracks().length,\n },\n track: track ? {\n readyState: track.readyState,\n muted: track.muted,\n enabled: track.enabled,\n label: track.label,\n kind: track.kind,\n settings: settings ? {\n width: settings.width,\n height: settings.height,\n frameRate: settings.frameRate,\n deviceId: settings.deviceId,\n facingMode: settings.facingMode,\n } : null,\n } : null,\n video: this.videoRef ? {\n readyState: this.videoRef.readyState,\n networkState: this.videoRef.networkState,\n error: this.videoRef.error ? { code: this.videoRef.error.code, message: this.videoRef.error.message } : null,\n paused: this.videoRef.paused,\n offsetWidth: this.videoRef.offsetWidth,\n offsetHeight: this.videoRef.offsetHeight,\n videoWidth: this.videoRef.videoWidth,\n videoHeight: this.videoRef.videoHeight,\n display: computed?.display,\n visibility: computed?.visibility,\n } : null,\n document: {\n visibilityState: document.visibilityState,\n hasFocus: document.hasFocus(),\n },\n trackEvents,\n userAgent: navigator.userAgent,\n };\n };\n\n const finalizeStreamInitialization = async (): Promise<void> => {\n try {\n await this.videoRef!.play();\n } catch (playError) {\n console.error('[jaak-stamps] video.play() failed (likely autoplay policy):', playError);\n throw playError;\n }\n\n this.stateManager.updateCaptureState({ isVideoActive: true });\n\n if (this.detectionContainer) {\n const container = this.detectionContainer.parentElement!;\n const rect = container.getBoundingClientRect();\n this.updateMaskDimensions(rect);\n }\n\n this.debugLog('initializeVideoStream() finalized after play()', {\n stream: this.getStreamSnapshot(stream),\n videoRef: this.getVideoElementSnapshot(),\n });\n };\n\n // If metadata is already available (readyState >= HAVE_METADATA = 1),\n // the 'loadedmetadata' event will not fire again. Handle both cases.\n if (this.videoRef.readyState >= 1) {\n this.debugLog('video metadata already available, skipping event wait', this.getVideoElementSnapshot());\n cleanupTrackListeners();\n await finalizeStreamInitialization();\n detachVideoDiagnosticListeners();\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const cleanup = () => {\n this.videoRef!.onloadedmetadata = null;\n this.videoRef!.onerror = null;\n detachVideoDiagnosticListeners();\n };\n\n const timeoutId = setTimeout(() => {\n if (settled) return;\n settled = true;\n const diagnostics = captureDiagnostics();\n this.debugWarn(`initializeVideoStream() timeout after ${LOAD_METADATA_TIMEOUT_MS}ms`, {\n videoRef: this.getVideoElementSnapshot(),\n stream: this.getStreamSnapshot(stream),\n });\n console.error('[jaak-stamps] Video metadata timeout diagnostics (json):', JSON.stringify(diagnostics));\n cleanup();\n cleanupTrackListeners();\n reject(new Error(`Video metadata load timeout after ${LOAD_METADATA_TIMEOUT_MS}ms`));\n }, LOAD_METADATA_TIMEOUT_MS);\n\n this.videoRef!.onloadedmetadata = async () => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n this.debugLog('initializeVideoStream() onloadedmetadata fired', {\n videoRef: this.getVideoElementSnapshot(),\n stream: this.getStreamSnapshot(stream),\n });\n cleanupTrackListeners();\n try {\n await finalizeStreamInitialization();\n cleanup();\n resolve();\n } catch (err) {\n cleanup();\n reject(err);\n }\n };\n\n this.videoRef!.onerror = (event) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n this.debugWarn('initializeVideoStream() video element emitted error', {\n event,\n videoRef: this.getVideoElementSnapshot(),\n stream: this.getStreamSnapshot(stream),\n });\n cleanup();\n cleanupTrackListeners();\n reject(new Error(`Video element error: ${event}`));\n };\n });\n }\n\n\n private async detectFrame(): Promise<void> {\n try {\n const frameStartTime = performance.now();\n const captureState = this.stateManager.getCaptureState();\n if (!this.videoRef || !this.detectionContainer || !this.detectionService.isModelLoaded()) {\n if (this.debug) {\n console.log('[JAAK-DEBUG] detectFrame() skipped: videoRef=', !!this.videoRef, 'detectionContainer=', !!this.detectionContainer, 'modelLoaded=', this.detectionService.isModelLoaded());\n }\n return;\n }\n\n\n // Show manual capture button when document detector is disabled or performance is degraded\n if (!this.useDocumentDetector || this.performanceDegradedMode) {\n if (this.debug && !this._manualModeLoggedOnce) {\n console.warn('[JAAK-DEBUG] detectFrame() in MANUAL MODE: useDocumentDetector=', this.useDocumentDetector, 'performanceDegradedMode=', this.performanceDegradedMode);\n this._manualModeLoggedOnce = true;\n }\n this.showManualCaptureButton = true;\n // Continue the loop for UI updates but skip detection logic\n if (captureState.step !== 'completed') {\n this.animationId = requestAnimationFrame(() => this.detectFrame());\n }\n return;\n } else if (!this.performanceDegradedMode) {\n this.showManualCaptureButton = false;\n }\n\n if (captureState.isDetectionPaused) {\n if (captureState.step !== 'completed') {\n this.animationId = requestAnimationFrame(() => this.detectFrame());\n }\n return;\n }\n\n // Adaptive frame skipping for performance\n this.frameSkipCounter++;\n const currentFrameSkip = this.getAdaptiveFrameSkip();\n if (this.frameSkipCounter <= currentFrameSkip) {\n if (captureState.step !== 'completed') {\n this.animationId = requestAnimationFrame(() => this.detectFrame());\n }\n return;\n }\n this.frameSkipCounter = 0;\n\n // Throttle inference - use higher interval for mobile devices to prevent slow motion effect\n const currentTime = Date.now();\n const isMobileDevice = this.cameraInfoWithAutofocus.deviceType === 'mobile' ||\n /Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n const isTablet = this.cameraInfoWithAutofocus.deviceType === 'tablet' ||\n (/iPad|Android/i.test(navigator.userAgent) && window.innerWidth >= 768);\n const minInterval = (isMobileDevice && !isTablet) ? this.MOBILE_MIN_INFERENCE_INTERVAL : this.MIN_INFERENCE_INTERVAL;\n\n if (currentTime - this.lastInferenceTime < minInterval) {\n if (captureState.step !== 'completed') {\n this.animationId = requestAnimationFrame(() => this.detectFrame());\n }\n return;\n }\n this.lastInferenceTime = currentTime;\n\n // Measure preprocessing and inference time\n const inferenceStartTime = performance.now();\n\n let inputTensor;\n let detections;\n let inferenceTime;\n\n try {\n inputTensor = this.detectionService.preprocess(this.videoRef);\n } catch (preprocessError) {\n if (this.debug) {\n console.error('[JAAK-DEBUG] MANUAL MODE: Preprocess error:', preprocessError.message);\n }\n this.switchToManualModeWithError('Error al procesar imagen');\n return;\n }\n\n try {\n // Standard detection without timeout (timeout is handled by frame counting)\n detections = await this.detectionService.runInference(inputTensor);\n inferenceTime = performance.now() - inferenceStartTime;\n } catch (inferenceError) {\n if (this.debug) {\n console.error('[JAAK-DEBUG] MANUAL MODE: Inference error:', inferenceError.message);\n }\n this.switchToManualModeWithError('Error en detección automática');\n return;\n }\n\n // Increment frame count\n this.processedFramesCount++;\n\n\n // Record ONNX performance metrics\n if (this.debug) {\n this.recordOnnxPerformance(0, inferenceTime);\n }\n\n // Update best score logic\n if (this.startTime && Date.now() - this.startTime < 5000) {\n detections.forEach((detection: DetectionBox) => {\n const isWellPositioned = this.detectionService.isCardInFrame(detection);\n const effectiveScore = isWellPositioned ? detection.score * 1.2 : detection.score;\n\n if (effectiveScore > captureState.bestScore) {\n this.stateManager.updateCaptureState({ bestScore: effectiveScore });\n }\n });\n }\n\n // Update document detection state\n const wasDocumentDetected = this.hasDocumentDetected;\n this.hasDocumentDetected = detections.length > 0;\n\n // Restart timer if document detected during back capture\n if (!wasDocumentDetected && this.hasDocumentDetected &&\n captureState.step === 'back' && this.enableBackDocumentTimer) {\n this.startBackDocumentTimer();\n }\n\n // Adaptive frame rate\n if (detections.length === 0) {\n this.consecutiveFailures++;\n } else {\n this.consecutiveFailures = 0;\n }\n\n // Update detection boxes for debug\n if (this.debug) {\n this.updateDetectionBoxes(detections);\n } else {\n this.detectionBoxes = [];\n }\n\n this.updateMaskColor(detections);\n\n // Record frame processing metrics\n const frameEndTime = performance.now();\n const totalFrameTime = frameEndTime - frameStartTime;\n\n // Sistema simplificado: Verificar rendimiento de cada frame (solo si no se ha cambiado a manual)\n if (this.useDocumentDetector && !this.hasAutoSwitchedToManual) {\n if (this.debug) {\n console.log(`[JAAK-DEBUG] Frame #${this.processedFramesCount} time: ${totalFrameTime.toFixed(0)}ms (threshold: ${this.PERFORMANCE_THRESHOLD_MS}ms) | inference: ${inferenceTime.toFixed(0)}ms | slowFrames: ${this.slowFrameCount}/${this.SLOW_FRAMES_TO_TRIGGER}`);\n }\n // Verificar si el frame es lento\n if (totalFrameTime >= this.PERFORMANCE_THRESHOLD_MS) {\n this.slowFrameCount++;\n\n if (this.debug) {\n console.warn(`[JAAK-DEBUG] SLOW FRAME detected: ${totalFrameTime.toFixed(0)}ms >= ${this.PERFORMANCE_THRESHOLD_MS}ms | slowFrameCount: ${this.slowFrameCount}/${this.SLOW_FRAMES_TO_TRIGGER}`);\n }\n\n // Si tenemos suficientes frames lentos consecutivos, cambiar a manual\n if (this.slowFrameCount >= this.SLOW_FRAMES_TO_TRIGGER) {\n if (this.debug) {\n console.error(`[JAAK-DEBUG] MANUAL MODE: Performance degraded. ${this.slowFrameCount} slow frames (>= ${this.PERFORMANCE_THRESHOLD_MS}ms) exceeded threshold of ${this.SLOW_FRAMES_TO_TRIGGER}`);\n }\n this.switchToManualMode();\n }\n } else {\n // Frame rápido, reiniciar contador\n if (this.slowFrameCount > 0) {\n if (this.debug) {\n console.log(`[JAAK-DEBUG] Fast frame, resetting slowFrameCount from ${this.slowFrameCount} to 0`);\n }\n this.slowFrameCount = 0;\n }\n }\n\n // Cambiar mensaje de estado después de analizar los primeros 2 frames\n if (this.processedFramesCount === 2) {\n this.updateStatus('Captura activa', 'Buscando documento en el marco de captura', 'active');\n }\n }\n\n if (this.debug) {\n this.recordFrameProcessing(totalFrameTime, detections.length);\n }\n\n // Continue detection loop\n if (captureState.step !== 'completed') {\n if (this.consecutiveFailures > this.MAX_FAILURES) {\n setTimeout(() => this.detectFrame(), 200);\n } else {\n this.animationId = requestAnimationFrame(() => this.detectFrame());\n }\n }\n } catch (e) {\n const captureState = this.stateManager.getCaptureState();\n if (captureState.step !== 'completed') {\n setTimeout(() => this.detectFrame(), 100);\n }\n }\n }\n\n // ... (continuing with remaining methods)\n // Due to length constraints, I'll provide the key architectural changes\n\n disconnectedCallback() {\n this.cleanup();\n }\n\n private cleanup(): void {\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n }\n if (this.videoStream) {\n this.videoStream.getTracks().forEach(track => track.stop());\n }\n if (this.alignmentTimer) {\n clearTimeout(this.alignmentTimer);\n this.alignmentTimer = undefined;\n }\n\n if (this.orientationTimer) {\n clearTimeout(this.orientationTimer);\n this.orientationTimer = undefined;\n }\n\n // Liberar recursos de ONNX al limpiar el componente\n this.releaseOnnxResources();\n if (this.performanceUpdateInterval) {\n clearInterval(this.performanceUpdateInterval);\n this.performanceUpdateInterval = undefined;\n }\n\n // Clear canvas pool\n this.canvasPool = [];\n\n this.detectionBoxes = [];\n this.alignmentStartTime = undefined;\n this.hasDocumentDetected = false;\n this.serviceContainer?.cleanup();\n }\n\n render() {\n const captureState = this.stateManager?.getCaptureState() || {\n isVideoActive: false,\n isLoading: false,\n showFlipAnimation: false,\n showSuccessAnimation: false,\n step: 'front',\n isCapturing: false\n };\n const cameraInfo = this.cameraInfoWithAutofocus;\n\n return (\n <div class=\"detector-container\">\n {/* License validation error message */}\n {!this.licenseValid && this.licenseError && (\n <div class=\"license-error-container\">\n <div class=\"license-error-card\">\n <svg class=\"license-error-icon\" width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 22C12 22 20 18 20 12V5L12 2L4 5V12C4 18 12 22 12 22Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 8V12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n <circle cx=\"12\" cy=\"16\" r=\"0.5\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1\"/>\n </svg>\n <h2 class=\"license-error-title\">Licencia Requerida</h2>\n <p class=\"license-error-message\">{this.licenseError}</p>\n <p class=\"license-error-help\">\n Contacte a soporte: <a href=\"mailto:support@jaak.ai\">support@jaak.ai</a>\n </p>\n <div class=\"license-error-footer\">JAAK Stamps</div>\n </div>\n </div>\n )}\n\n {/* Component content loads only if license is valid */}\n {this.licenseValid && (\n <div class=\"video-container\">\n <video\n ref={el => this.videoRef = el}\n autoplay\n muted\n playsinline\n class={this.shouldMirrorVideo ? 'mirror' : ''}\n style={{\n // Keep the element rendered (display: block) so the browser\n // loads stream metadata and fires 'loadedmetadata'. Hiding it\n // with display:none prevents metadata loading in Chrome and\n // causes initializeVideoStream to hang waiting for the event.\n // Use opacity + visibility to hide visually while keeping the\n // render context alive.\n opacity: captureState.isVideoActive ? '1' : '0',\n visibility: captureState.isVideoActive ? 'visible' : 'hidden',\n }}\n />\n <div\n ref={el => this.detectionContainer = el}\n class={`detection-overlay ${this.shouldMirrorVideo ? 'mirror' : ''}`}\n >\n {this.debug && this.detectionBoxes.map((box, index) => (\n <div\n key={index}\n class=\"detection-box\"\n style={{\n position: 'absolute',\n left: `${box.x}px`,\n top: `${box.y}px`,\n width: `${box.w}px`,\n height: `${box.h}px`,\n border: '2px solid #32406C',\n pointerEvents: 'none',\n boxSizing: 'border-box'\n }}\n />\n ))}\n </div>\n\n {this.isMaskReady && (\n <div class=\"overlay-mask\">\n <div class=\"card-outline\">\n <div class=\"side side-top\"></div>\n <div class=\"side side-right\"></div>\n <div class=\"side side-bottom\"></div>\n <div class=\"side side-left\"></div>\n </div>\n\n {/* Texto guía fuera del marco del documento */}\n {!captureState.showFlipAnimation && !captureState.showSuccessAnimation && (\n <div class={`guide-text ${this.showPerformanceMessage ? 'performance-warning-text' : ''}`}>\n {this.getGuideText(captureState.step)}\n </div>\n )}\n\n {captureState.step === 'back' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (\n <div class=\"back-capture-section\">\n <div class=\"back-capture-buttons\">\n {(!this.useDocumentDetector || this.performanceDegradedMode || this.showManualCaptureButton) && (\n <button\n class=\"capture-button primary-button\"\n onClick={() => this.takeManualScreenshot()}\n type=\"button\"\n disabled={this.processingButton !== null}\n >\n {this.processingButton === 'capture-back' && (\n <span class=\"button-spinner\"></span>\n )}\n Capturar Reverso\n </button>\n )}\n <button\n class=\"skip-button\"\n onClick={() => this.skipBackCapture()}\n type=\"button\"\n disabled={this.processingButton !== null}\n >\n {this.processingButton === 'skip-back' && (\n <span class=\"button-spinner\"></span>\n )}\n {this.enableBackDocumentTimer && this.backDocumentTimerRemaining > 0\n ? `Saltar reverso (${this.backDocumentTimerRemaining}s)`\n : 'Saltar reverso'\n }\n </button>\n </div>\n </div>\n )}\n\n {/* Camera controls */}\n {captureState.isVideoActive && (\n <div class=\"camera-controls\">\n\n <button\n class={`camera-selector-button ${this.isSwitchingCamera ? 'loading' : ''}`}\n onClick={() => this.toggleCameraSelector()}\n type=\"button\"\n title=\"Seleccionar cámara\"\n disabled={this.isSwitchingCamera}\n >\n {this.isSwitchingCamera ? (\n <div class=\"button-spinner\"></div>\n ) : (\n 'Cámaras'\n )}\n </button>\n </div>\n )}\n\n {/* Camera selector dropdown */}\n {this.showCameraSelector && cameraInfo.availableCameras.length > 0 && (\n <div class=\"camera-selector-dropdown\">\n <div class=\"camera-selector-header\">\n <span>Seleccionar Cámara</span>\n <button\n class=\"close-selector\"\n onClick={() => this.toggleCameraSelector()}\n type=\"button\"\n >\n ×\n </button>\n </div>\n <div class=\"camera-list\">\n {cameraInfo.availableCameras.map((camera) => (\n <button\n key={camera.id}\n class={`camera-option ${cameraInfo.selectedCameraId === camera.id ? 'selected' : ''}`}\n onClick={() => this.handleCameraSwitch(camera.id)}\n type=\"button\"\n >\n <span class=\"camera-label\">\n {camera.label || `Cámara ${cameraInfo.availableCameras.indexOf(camera) + 1}`}\n {camera.hasAutofocus && (\n <span class=\"autofocus-icon\" title=\"Autofoco disponible\">⦿</span>\n )}\n </span>\n {cameraInfo.selectedCameraId === camera.id && (\n <span class=\"selected-indicator\">✓</span>\n )}\n </button>\n ))}\n </div>\n <div class=\"device-info\">\n <small>Dispositivo: {cameraInfo.deviceType}</small>\n </div>\n </div>\n )}\n\n {/* Botón de captura manual cuando el detector está deshabilitado (solo para el frente) */}\n {this.showManualCaptureButton && captureState.step === 'front' && !captureState.showFlipAnimation && !captureState.showSuccessAnimation && (\n <div class=\"manual-capture-section\">\n <button\n class=\"manual-capture-button\"\n onClick={() => this.takeManualScreenshot()}\n type=\"button\"\n disabled={this.processingButton !== null}\n >\n {this.processingButton === 'capture-front' && (\n <span class=\"button-spinner\"></span>\n )}\n Capturar Frente\n </button>\n </div>\n )}\n </div>\n )}\n\n {captureState.isCapturing && (\n <div class=\"capture-animation\"></div>\n )}\n\n {captureState.showFlipAnimation && (\n <div class=\"flip-animation\">\n <div class=\"id-card-icon\"></div>\n <div class=\"flip-text\">¡Voltea tu identificación!</div>\n </div>\n )}\n\n {captureState.showSuccessAnimation && (\n <div class=\"success-animation\">\n <div class=\"check-icon\"></div>\n <div class=\"success-text\">¡Proceso completado!</div>\n </div>\n )}\n\n {/* Estado siempre visible */}\n <div class={`component-status status-${this.currentStatus.type}`}>\n {(this.currentStatus.type === 'loading' || this.currentStatus.type === 'initializing') && (\n <div class=\"status-spinner\"></div>\n )}\n <div class=\"status-content\">\n <div class=\"status-message\">{this.currentStatus.message}</div>\n {this.currentStatus.description && (\n <div class=\"status-description\">{this.currentStatus.description}</div>\n )}\n </div>\n </div>\n\n {/* Monitor de performance - solo visible en modo debug */}\n {this.debug && (\n <div class=\"performance-monitor\">\n <div class=\"performance-expanded\">\n <div class=\"metrics-row\">\n <div class=\"metric-compact\">\n <span class=\"metric-label\">FPS</span>\n <span class={`metric-value ${this.performanceData.fps < 15 ? 'warning' : this.performanceData.fps < 10 ? 'danger' : 'good'}`}>\n {this.performanceData.fps}\n </span>\n </div>\n <div class=\"metric-compact\">\n <span class=\"metric-label\">MEM</span>\n <span class={`metric-value ${this.performanceData.memoryUsage > 100 ? 'warning' : this.performanceData.memoryUsage > 200 ? 'danger' : 'good'}`}>\n {this.performanceData.memoryUsage}MB\n </span>\n </div>\n </div>\n <div class=\"metrics-row\">\n <div class=\"metric-compact\">\n <span class=\"metric-label\">INF</span>\n <span class={`metric-value ${this.performanceData.inferenceTime > 100 ? 'warning' : this.performanceData.inferenceTime > 200 ? 'danger' : 'good'}`}>\n {this.performanceData.inferenceTime}ms\n </span>\n </div>\n <div class=\"metric-compact\">\n <span class=\"metric-label\">FRAME</span>\n <span class={`metric-value ${this.performanceData.frameProcessingTime > 50 ? 'warning' : this.performanceData.frameProcessingTime > 100 ? 'danger' : 'good'}`}>\n {this.performanceData.frameProcessingTime}ms\n </span>\n </div>\n </div>\n <div class=\"metrics-row\">\n <div class=\"metric-compact\">\n <span class=\"metric-label\">DET</span>\n <span class=\"metric-value good\">\n {this.performanceData.successfulDetections}/{this.performanceData.totalDetections}\n </span>\n </div>\n <div class=\"metric-compact\">\n <span class=\"metric-label\">RATE</span>\n <span class={`metric-value ${this.performanceData.detectionRate < 30 ? 'danger' : this.performanceData.detectionRate < 60 ? 'warning' : 'good'}`}>\n {this.performanceData.detectionRate}%\n </span>\n </div>\n </div>\n </div>\n </div>\n )}\n\n\n <div class=\"watermark\">\n <img\n src=\"https://static.jaak.ai/commons/powered-by-jaak.png\"\n alt=\"Powered by Jaak\"\n onError={(e) => {\n const img = e.target as HTMLImageElement;\n img.onerror = null;\n img.src = POWERED_BY_JAAK_FALLBACK;\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n\n // Utility methods\n private updateDetectionBoxes(boxes: DetectionBox[]): void {\n if (!this.videoRef || !this.detectionContainer) return;\n\n const videoWidth = this.videoRef.videoWidth;\n const videoHeight = this.videoRef.videoHeight;\n const container = this.detectionContainer.parentElement!;\n const containerRect = container.getBoundingClientRect();\n const containerWidth = containerRect.width;\n const containerHeight = containerRect.height;\n\n if (videoWidth === 0 || videoHeight === 0) return;\n\n const videoAspectRatio = videoWidth / videoHeight;\n const containerAspectRatio = containerWidth / containerHeight;\n\n let displayedVideoWidth: number, displayedVideoHeight: number;\n let videoOffsetX = 0, videoOffsetY = 0;\n\n if (videoAspectRatio > containerAspectRatio) {\n displayedVideoWidth = containerWidth;\n displayedVideoHeight = containerWidth / videoAspectRatio;\n videoOffsetY = (containerHeight - displayedVideoHeight) / 2;\n } else {\n displayedVideoHeight = containerHeight;\n displayedVideoWidth = containerHeight * videoAspectRatio;\n videoOffsetX = (containerWidth - displayedVideoWidth) / 2;\n }\n\n const INPUT_SIZE = 320;\n const scaleX = displayedVideoWidth / INPUT_SIZE;\n const scaleY = displayedVideoHeight / INPUT_SIZE;\n\n this.detectionBoxes = boxes.map(det => ({\n x: det.x * scaleX + videoOffsetX,\n y: det.y * scaleY + videoOffsetY,\n w: det.w * scaleX,\n h: det.h * scaleY,\n score: det.score\n }));\n }\n\n private updateMaskColor(boxes: DetectionBox[]): void {\n const cardOutline = this.el.shadowRoot?.querySelector('.card-outline');\n const corners = this.el.shadowRoot?.querySelectorAll('.corner');\n const topSide = this.el.shadowRoot?.querySelector('.side-top');\n const rightSide = this.el.shadowRoot?.querySelector('.side-right');\n const bottomSide = this.el.shadowRoot?.querySelector('.side-bottom');\n const leftSide = this.el.shadowRoot?.querySelector('.side-left');\n\n let bestBox = null;\n let currentAlignment = { top: false, right: false, bottom: false, left: false };\n\n if (boxes.length > 0) {\n bestBox = boxes.reduce((best, current) =>\n current.score > best.score ? current : best\n );\n\n const maskConfig = {\n INPUT_SIZE: 320,\n ID1_ASPECT_RATIO: 85.60 / 53.98,\n shouldMirrorVideo: this.shouldMirrorVideo,\n alignmentTolerance: this.alignmentTolerance,\n maskSize: this.maskSize,\n videoRef: this.videoRef\n };\n\n currentAlignment = this.detectionService.checkSideAlignment(bestBox, maskConfig);\n this.sideAlignment = currentAlignment;\n } else {\n this.sideAlignment = { top: false, right: false, bottom: false, left: false };\n }\n\n topSide?.classList.toggle('aligned', currentAlignment.top);\n rightSide?.classList.toggle('aligned', currentAlignment.right);\n bottomSide?.classList.toggle('aligned', currentAlignment.bottom);\n leftSide?.classList.toggle('aligned', currentAlignment.left);\n\n const allSidesAligned = this.detectionService.areAllSidesAligned(currentAlignment);\n\n // Restart back document timer if any border is aligned during back capture\n const captureState = this.stateManager.getCaptureState();\n if (captureState.step === 'back' && this.enableBackDocumentTimer && bestBox) {\n const anyBorderAligned = currentAlignment.top || currentAlignment.right ||\n currentAlignment.bottom || currentAlignment.left;\n if (anyBorderAligned) {\n this.startBackDocumentTimer();\n }\n }\n\n if (allSidesAligned && bestBox) {\n cardOutline?.classList.add('perfect-match');\n corners?.forEach(corner => corner.classList.add('perfect-match'));\n\n\n if (!this.hasScreenshotTaken) {\n const currentTime = Date.now();\n\n // Initialize alignment start time if not set\n if (!this.alignmentStartTime) {\n this.alignmentStartTime = currentTime;\n }\n\n // Check if document has been aligned for the configured delay\n const alignmentDuration = currentTime - this.alignmentStartTime;\n\n if (alignmentDuration >= this.captureDelay) {\n this.lastDetectedBox = bestBox;\n this.takeScreenshot().catch(() => {\n // Handle screenshot error silently\n });\n this.hasScreenshotTaken = true;\n this.alignmentStartTime = undefined;\n\n setTimeout(() => {\n this.hasScreenshotTaken = false;\n }, 2000);\n }\n }\n } else {\n cardOutline?.classList.remove('perfect-match');\n corners?.forEach(corner => corner.classList.remove('perfect-match'));\n\n // Reset alignment timer when document moves out of position\n if (this.alignmentStartTime) {\n this.alignmentStartTime = undefined;\n }\n if (this.alignmentTimer) {\n clearTimeout(this.alignmentTimer);\n this.alignmentTimer = undefined;\n }\n }\n }\n\n private async takeManualScreenshot(): Promise<void> {\n console.log('🔵 Botón clicked: Capturar (Frente/Reverso)');\n\n const captureStartTime = performance.now();\n const span = this.tracingService?.startSpan('capture.screenshot.manual');\n\n // Set processing state immediately\n const captureState = this.stateManager?.getCaptureState();\n const side = captureState?.step === 'front' ? 'front' : 'back';\n\n if (captureState?.step === 'front') {\n this.processingButton = 'capture-front';\n if (span) this.tracingService?.setSpanAttribute(span, 'side', 'front');\n } else if (captureState?.step === 'back') {\n this.processingButton = 'capture-back';\n if (span) this.tracingService?.setSpanAttribute(span, 'side', 'back');\n }\n\n // Record user interaction\n this.metricsService?.recordUserInteraction('manual_capture_button');\n\n console.log('🔵 processingButton set to:', this.processingButton);\n\n // Add small delay to show spinner\n await new Promise(resolve => setTimeout(resolve, 100));\n\n if (!this.videoRef) {\n this.processingButton = null;\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'error', 'no_video_ref');\n this.tracingService?.endSpan(span);\n }\n return;\n }\n\n // When using manual capture, use mask coordinates for cropping\n // Note: processingButton will be cleared inside takeScreenshotWithMaskCoordinates\n await this.takeScreenshotWithMaskCoordinates();\n\n // Record metrics\n const captureDuration = performance.now() - captureStartTime;\n this.metricsService?.recordCapture(side as 'front' | 'back', 'manual', captureDuration);\n\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'success', true);\n this.tracingService?.endSpan(span);\n }\n }\n\n private async takeScreenshotWithMaskCoordinates(): Promise<void> {\n if (!this.videoRef || !this.detectionContainer) return;\n\n this.stateManager.updateCaptureState({ isCapturing: true });\n this.triggerCaptureAnimation();\n\n // Use pooled canvas for optimization\n const captureCanvas = this.getPooledCanvas(this.videoRef.videoWidth, this.videoRef.videoHeight);\n const captureCtx = captureCanvas.getContext('2d', { alpha: false })!;\n captureCtx.clearRect(0, 0, captureCanvas.width, captureCanvas.height);\n captureCtx.drawImage(this.videoRef, 0, 0, captureCanvas.width, captureCanvas.height);\n\n // Calculate mask coordinates for cropping\n const container = this.detectionContainer.parentElement!;\n const containerRect = container.getBoundingClientRect();\n\n // Get mask dimensions from CSS properties\n const maskWidthPercent = parseFloat(this.el.style.getPropertyValue('--mask-width').replace('%', '')) || 90;\n const maskHeightPercent = parseFloat(this.el.style.getPropertyValue('--mask-height').replace('%', '')) || 56.25;\n const maskCenterXPercent = parseFloat(this.el.style.getPropertyValue('--mask-center-x').replace('%', '')) || 50;\n const maskCenterYPercent = parseFloat(this.el.style.getPropertyValue('--mask-center-y').replace('%', '')) || 50;\n\n // Convert percentages to actual video coordinates\n const videoWidth = this.videoRef.videoWidth;\n const videoHeight = this.videoRef.videoHeight;\n const videoAspectRatio = videoWidth / videoHeight;\n const containerAspectRatio = containerRect.width / containerRect.height;\n\n let displayedVideoWidth: number, displayedVideoHeight: number;\n let videoOffsetX = 0, videoOffsetY = 0;\n\n if (videoAspectRatio > containerAspectRatio) {\n displayedVideoWidth = containerRect.width;\n displayedVideoHeight = containerRect.width / videoAspectRatio;\n videoOffsetY = (containerRect.height - displayedVideoHeight) / 2;\n } else {\n displayedVideoHeight = containerRect.height;\n displayedVideoWidth = containerRect.height * videoAspectRatio;\n videoOffsetX = (containerRect.width - displayedVideoWidth) / 2;\n }\n\n // Calculate mask coordinates in video space\n const maskWidthInContainer = (maskWidthPercent / 100) * containerRect.width;\n const maskHeightInContainer = (maskHeightPercent / 100) * containerRect.height;\n const maskCenterXInContainer = (maskCenterXPercent / 100) * containerRect.width;\n const maskCenterYInContainer = (maskCenterYPercent / 100) * containerRect.height;\n\n // Convert to video coordinates\n const scaleX = videoWidth / displayedVideoWidth;\n const scaleY = videoHeight / displayedVideoHeight;\n\n const maskCenterXInVideo = (maskCenterXInContainer - videoOffsetX) * scaleX;\n const maskCenterYInVideo = (maskCenterYInContainer - videoOffsetY) * scaleY;\n const maskWidthInVideo = maskWidthInContainer * scaleX;\n const maskHeightInVideo = maskHeightInContainer * scaleY;\n\n // Calculate crop coordinates\n const cropX = Math.max(0, maskCenterXInVideo - (maskWidthInVideo / 2) - this.cropMargin);\n const cropY = Math.max(0, maskCenterYInVideo - (maskHeightInVideo / 2) - this.cropMargin);\n const cropWidth = Math.min(maskWidthInVideo + (2 * this.cropMargin), videoWidth - cropX);\n const cropHeight = Math.min(maskHeightInVideo + (2 * this.cropMargin), videoHeight - cropY);\n\n // Use pooled canvas for cropped version\n const croppedCanvas = this.getPooledCanvas(cropWidth, cropHeight);\n const croppedCtx = croppedCanvas.getContext('2d', { alpha: false })!;\n croppedCtx.clearRect(0, 0, croppedCanvas.width, croppedCanvas.height);\n\n croppedCtx.drawImage(\n this.videoRef,\n cropX, cropY, cropWidth, cropHeight,\n 0, 0, cropWidth, cropHeight\n );\n\n const captureState = this.stateManager.getCaptureState();\n\n if (captureState.step === 'front') {\n this.stateManager.setCapturedImages({\n front: {\n fullFrame: captureCanvas.toDataURL('image/jpeg'),\n cropped: croppedCanvas.toDataURL('image/jpeg')\n }\n });\n\n // Check if document classification is enabled (independent of detector)\n if (this.useDocumentClassification && !this.classificationDisabled) {\n try {\n const classification = await this.detectionService.classifyDocument(croppedCanvas);\n\n if (classification && classification.class === 'passport') {\n this.completeProcess(true);\n this.returnCanvasToPool(captureCanvas);\n this.returnCanvasToPool(croppedCanvas);\n // Clear processing button when passport is detected\n this.processingButton = null;\n return;\n }\n } catch (classifyError) {\n // No cambiar a manual aquí, solo registrar el error y continuar\n }\n }\n\n this.stateManager.updateCaptureState({\n step: 'back',\n isDetectionPaused: true,\n showFlipAnimation: true\n });\n\n this.triggerRerender();\n\n setTimeout(() => {\n this.stateManager.updateCaptureState({\n showFlipAnimation: false,\n isDetectionPaused: false\n });\n\n this.triggerRerender();\n this.startBackDocumentTimer();\n // Clear processing button after animation completes\n this.processingButton = null;\n }, 3000);\n\n } else if (captureState.step === 'back') {\n this.stateManager.setCapturedImages({\n back: {\n fullFrame: captureCanvas.toDataURL('image/jpeg'),\n cropped: croppedCanvas.toDataURL('image/jpeg')\n }\n });\n\n this.completeProcess(false);\n // Clear processing button after back capture completes\n this.processingButton = null;\n }\n\n // Return canvases to pool after use\n this.returnCanvasToPool(captureCanvas);\n this.returnCanvasToPool(croppedCanvas);\n }\n\n private async takeScreenshot(): Promise<void> {\n if (!this.videoRef || !this.lastDetectedBox) return;\n\n const captureStartTime = performance.now();\n const span = this.tracingService?.startSpan('capture.screenshot.auto');\n\n this.stateManager.updateCaptureState({ isCapturing: true });\n this.triggerCaptureAnimation();\n\n // Use pooled canvas for optimization\n const captureCanvas = this.getPooledCanvas(this.videoRef.videoWidth, this.videoRef.videoHeight);\n const captureCtx = captureCanvas.getContext('2d', { alpha: false })!;\n captureCtx.clearRect(0, 0, captureCanvas.width, captureCanvas.height);\n captureCtx.drawImage(this.videoRef, 0, 0, captureCanvas.width, captureCanvas.height);\n\n // Calculate crop coordinates\n const INPUT_SIZE = 320;\n const scaleX = this.videoRef.videoWidth / INPUT_SIZE;\n const scaleY = this.videoRef.videoHeight / INPUT_SIZE;\n\n const cropX = Math.max(0, (this.lastDetectedBox.x * scaleX) - this.cropMargin);\n const cropY = Math.max(0, (this.lastDetectedBox.y * scaleY) - this.cropMargin);\n const cropWidth = Math.min((this.lastDetectedBox.w * scaleX) + (2 * this.cropMargin), this.videoRef.videoWidth - cropX);\n const cropHeight = Math.min((this.lastDetectedBox.h * scaleY) + (2 * this.cropMargin), this.videoRef.videoHeight - cropY);\n\n // Use pooled canvas for cropped version\n const croppedCanvas = this.getPooledCanvas(cropWidth, cropHeight);\n const croppedCtx = croppedCanvas.getContext('2d', { alpha: false })!;\n croppedCtx.clearRect(0, 0, croppedCanvas.width, croppedCanvas.height);\n\n croppedCtx.drawImage(\n this.videoRef,\n cropX, cropY, cropWidth, cropHeight,\n 0, 0, cropWidth, cropHeight\n );\n\n const captureState = this.stateManager.getCaptureState();\n\n if (captureState.step === 'front') {\n const frontImageData = captureCanvas.toDataURL('image/jpeg');\n const croppedImageData = croppedCanvas.toDataURL('image/jpeg');\n\n this.stateManager.setCapturedImages({\n front: {\n fullFrame: frontImageData,\n cropped: croppedImageData\n }\n });\n\n // Record metrics\n const captureDuration = performance.now() - captureStartTime;\n this.metricsService?.recordCapture('front', 'auto', captureDuration);\n this.metricsService?.recordImageSize('front', frontImageData.length);\n\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'side', 'front');\n }\n\n // Check if document classification is enabled\n if (this.useDocumentClassification && !this.classificationDisabled) {\n try {\n const classification = await this.detectionService.classifyDocument(croppedCanvas);\n\n if (classification && classification.class === 'passport') {\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'document.type', 'passport');\n this.tracingService?.endSpan(span);\n }\n this.completeProcess(true);\n return;\n }\n } catch (classifyError) {\n // No cambiar a manual aquí, solo registrar el error y continuar\n }\n }\n\n this.stateManager.updateCaptureState({\n step: 'back',\n isDetectionPaused: true,\n showFlipAnimation: true\n });\n\n if (span) {\n this.tracingService?.endSpan(span);\n }\n\n setTimeout(() => {\n this.stateManager.updateCaptureState({\n showFlipAnimation: false,\n isDetectionPaused: false\n });\n this.startBackDocumentTimer();\n }, 3000);\n\n } else if (captureState.step === 'back') {\n const backImageData = captureCanvas.toDataURL('image/jpeg');\n const croppedBackImageData = croppedCanvas.toDataURL('image/jpeg');\n\n this.stateManager.setCapturedImages({\n back: {\n fullFrame: backImageData,\n cropped: croppedBackImageData\n }\n });\n\n // Record metrics\n const captureDuration = performance.now() - captureStartTime;\n this.metricsService?.recordCapture('back', 'auto', captureDuration);\n this.metricsService?.recordImageSize('back', backImageData.length);\n\n if (span) {\n this.tracingService?.setSpanAttribute(span, 'side', 'back');\n this.tracingService?.endSpan(span);\n }\n\n this.completeProcess(false);\n }\n\n // Return canvases to pool after use\n this.returnCanvasToPool(captureCanvas);\n this.returnCanvasToPool(croppedCanvas);\n }\n\n private triggerCaptureAnimation(): void {\n const cardOutline = this.el.shadowRoot?.querySelector('.card-outline');\n cardOutline?.classList.add('capturing');\n\n setTimeout(() => {\n this.stateManager.updateCaptureState({ isCapturing: false });\n cardOutline?.classList.remove('capturing');\n }, 600);\n }\n\n // Método simplificado para cambio a modo manual\n private switchToManualMode(): void {\n // Only switch if detector is enabled and not already switched\n if (!this.useDocumentDetector || this.hasAutoSwitchedToManual) {\n return;\n }\n\n if (this.debug) {\n console.warn('[JAAK-DEBUG] switchToManualMode() called - PERFORMANCE DEGRADED');\n console.warn('[JAAK-DEBUG] Cause: Slow frames exceeded threshold');\n console.warn('[JAAK-DEBUG] slowFrameCount:', this.slowFrameCount, '| threshold:', this.PERFORMANCE_THRESHOLD_MS, 'ms | trigger:', this.SLOW_FRAMES_TO_TRIGGER);\n }\n\n // Detener todo el monitoreo de performance\n this.stopPerformanceMonitoring();\n\n // Liberar recursos de ONNX\n this.releaseOnnxResources();\n\n // Resetear máscara a blanco y limpiar detecciones\n this.resetMaskToWhite();\n this.detectionBoxes = [];\n\n this.hasAutoSwitchedToManual = true;\n this.performanceDegradedMode = true;\n this.showManualCaptureButton = true;\n this.showPerformanceMessage = true;\n\n // Hide performance message after 5 seconds\n setTimeout(() => {\n this.showPerformanceMessage = false;\n }, 5000);\n }\n\n // Método para cambiar a modo manual por errores de ONNX\n private switchToManualModeWithWarning(warningMessage: string): void {\n // Solo cambiar si el detector está habilitado y no se ha cambiado ya\n if (!this.useDocumentDetector || this.hasAutoSwitchedToManual) {\n return;\n }\n\n if (this.debug) {\n console.warn('[JAAK-DEBUG] switchToManualModeWithWarning() called');\n console.warn('[JAAK-DEBUG] Cause:', warningMessage);\n console.warn('[JAAK-DEBUG] deviceMemory:', (navigator as any).deviceMemory, '| hardwareConcurrency:', navigator.hardwareConcurrency);\n }\n\n // No necesitamos liberar recursos ONNX porque no se han cargado aún\n\n // Resetear máscara a blanco y limpiar detecciones\n this.resetMaskToWhite();\n this.detectionBoxes = [];\n\n // Cambiar a modo manual\n this.hasAutoSwitchedToManual = true;\n this.performanceDegradedMode = true;\n this.showManualCaptureButton = true;\n // No modificar @Prop directamente (immutable). hasAutoSwitchedToManual + performanceDegradedMode ya desactivan la deteccion.\n\n // Actualizar el estado con mensaje informativo (no error)\n this.updateStatus('Modo manual activado', warningMessage, 'active');\n\n // Continuar con la configuración de cámara\n this.continueWithCameraSetup();\n }\n\n private async continueWithCameraSetup(): Promise<void> {\n try {\n // Paso 2: Detectar y configurar dispositivos\n this.updateStatus('Configurando cámara...', 'Buscando dispositivos disponibles', 'loading');\n\n try {\n await this.cameraService.enumerateDevices();\n } catch (enumerateError) {\n throw new Error(`Error al enumerar dispositivos: ${enumerateError.message}`);\n }\n\n try {\n await this.updateCameraInfoWithAutofocus();\n } catch (cameraInfoError) {\n throw new Error(`Error al actualizar información de cámara: ${cameraInfoError.message}`);\n }\n\n // Paso 3: Configurar cámara seleccionada\n this.updateStatus('Ajustando cámara...', 'Configurando calidad de imagen', 'loading');\n\n let stream: MediaStream;\n try {\n stream = await this.cameraService.setupCamera();\n } catch (setupError) {\n throw new Error(`Error al configurar cámara: ${setupError.message}`);\n }\n\n // Paso 4: Inicializar video\n this.updateStatus('Captura manual', 'Posicione su documento y use el botón para capturar', 'active');\n\n try {\n await this.initializeVideoStream(stream);\n } catch (videoError) {\n throw new Error(`Error al inicializar video: ${videoError.message}`);\n }\n\n // Paso 5: Calibrar máscara\n if (this.detectionContainer) {\n const container = this.detectionContainer.parentElement!;\n const rect = container.getBoundingClientRect();\n this.updateMaskDimensions(rect);\n }\n\n // Finalizar\n this.startTime = Date.now();\n this.stateManager.updateCaptureState({ isLoading: false });\n\n // Mostrar botón manual (ya debe estar habilitado)\n this.showManualCaptureButton = true;\n\n } catch (error) {\n this.updateStatus('Error de cámara', error.message, 'error');\n throw error;\n }\n }\n\n private switchToManualModeWithError(errorMessage: string): void {\n\n // Solo cambiar si el detector está habilitado y no se ha cambiado ya\n if (!this.useDocumentDetector || this.hasAutoSwitchedToManual) {\n return;\n }\n\n if (this.debug) {\n console.error('[JAAK-DEBUG] switchToManualModeWithError() called');\n console.error('[JAAK-DEBUG] Cause:', errorMessage);\n console.error('[JAAK-DEBUG] deviceMemory:', (navigator as any).deviceMemory, '| hardwareConcurrency:', navigator.hardwareConcurrency);\n }\n\n // Liberar recursos de ONNX inmediatamente\n this.releaseOnnxResources();\n\n // Resetear máscara a blanco y limpiar detecciones\n this.resetMaskToWhite();\n this.detectionBoxes = [];\n\n // Cambiar a modo manual\n this.hasAutoSwitchedToManual = true;\n this.performanceDegradedMode = true;\n this.showManualCaptureButton = true;\n // No modificar @Prop directamente (immutable). hasAutoSwitchedToManual + performanceDegradedMode ya desactivan la deteccion.\n\n // Actualizar el estado con mensaje de error\n this.updateStatus('Modo manual activado', errorMessage, 'error');\n\n // Continuar con la configuración de cámara para mostrar el video\n this.continueWithCameraSetup().catch(() => {\n // Si falla la configuración de cámara, mantener el mensaje de error pero cambiar el estado\n setTimeout(() => {\n this.updateStatus('Captura manual', 'Use el botón para capturar', 'ready');\n }, 5000);\n });\n }\n\n private stopPerformanceMonitoring(): void {\n // Nota: No necesitamos limpiar más variables porque ya no se usarán\n // El sistema automáticamente saltará la lógica de performance una vez que hasAutoSwitchedToManual = true\n }\n\n // Método para liberar recursos de ONNX cuando se cambia a modo manual\n private releaseOnnxResources(): void {\n\n try {\n // Liberar recursos del servicio de detección\n if (this.detectionService) {\n this.detectionService.cleanup();\n }\n } catch (error) {\n }\n }\n\n private async completeProcess(skippedBack: boolean = false): Promise<void> {\n this.stateManager.updateCaptureState({\n step: 'completed',\n showSuccessAnimation: true\n });\n\n const capturedImages = this.stateManager.getCapturedImages();\n capturedImages.metadata.processCompleted = true;\n capturedImages.metadata.backCaptureSkipped = skippedBack;\n this.stateManager.setCapturedImages(capturedImages);\n\n this.stopDetection();\n this.updateStatus('Proceso completado', `Imágenes capturadas exitosamente`, 'ready');\n\n const finalImages = {\n ...capturedImages,\n timestamp: new Date().toISOString()\n };\n\n // Flush all traces to collector before emitting capture completed\n if (this.tracingService) {\n try {\n await this.tracingService.flush();\n } catch (error) {\n console.error('[my-component] Failed to flush traces:', error);\n }\n }\n\n this.captureCompleted.emit(finalImages);\n\n setTimeout(() => {\n this.stateManager.updateCaptureState({ showSuccessAnimation: false });\n }, 3000);\n\n }\n\n private stopDetection(): void {\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationId = undefined;\n }\n this.clearBackDocumentTimer();\n\n this.detectionBoxes = [];\n }\n\n private startBackDocumentTimer(): void {\n if (!this.enableBackDocumentTimer) return;\n\n if (this.backDocumentTimer) {\n clearInterval(this.backDocumentTimer);\n }\n\n this.backDocumentTimerRemaining = this.backDocumentTimerDuration;\n\n this.backDocumentTimer = window.setInterval(() => {\n this.backDocumentTimerRemaining--;\n\n if (this.backDocumentTimerRemaining <= 0) {\n this.clearBackDocumentTimer();\n this.skipBackCapture();\n }\n }, 1000);\n }\n\n private clearBackDocumentTimer(): void {\n if (this.backDocumentTimer) {\n clearInterval(this.backDocumentTimer);\n this.backDocumentTimer = undefined;\n }\n this.backDocumentTimerRemaining = 0;\n }\n\n\n private toggleCameraSelector(): void {\n if (this.isSwitchingCamera) return; // Don't toggle if switching camera\n this.showCameraSelector = !this.showCameraSelector;\n }\n\n private async updateCameraInfoWithAutofocus() {\n try {\n const cameraInfo = await this.cameraService.getCameraInfo();\n this.cameraInfoWithAutofocus = cameraInfo;\n } catch (error) {\n // Keep existing state if update fails\n }\n }\n\n private async handleCameraSwitch(cameraId: string): Promise<void> {\n if (this.isSwitchingCamera) return; // Prevent multiple simultaneous switches\n\n try {\n // Close the selector immediately when user selects a camera\n this.showCameraSelector = false;\n\n // Check if user selected the same camera that's already active\n const currentCameraId = this.cameraService.getSelectedCameraId();\n if (currentCameraId === cameraId) {\n // Same camera selected, just close the selector without switching\n return;\n }\n\n this.isSwitchingCamera = true;\n\n // Stop current video stream\n if (this.videoStream) {\n this.videoStream.getTracks().forEach(track => track.stop());\n }\n\n // Switch camera in service\n await this.cameraService.switchCamera(cameraId);\n\n // Setup new camera stream\n const newStream = await this.cameraService.setupCamera();\n\n // Update video element\n await this.initializeVideoStream(newStream);\n\n // Update camera info with autofocus data\n await this.updateCameraInfoWithAutofocus();\n\n } catch (error) {\n // Try to restore previous camera if switch failed\n try {\n const fallbackStream = await this.cameraService.setupCamera();\n await this.initializeVideoStream(fallbackStream);\n } catch (fallbackError) {\n this.updateStatus('Error al cambiar cámara', 'No se pudo cambiar el dispositivo', 'error');\n }\n } finally {\n this.isSwitchingCamera = false;\n }\n }\n\n private resetDetection(): void {\n const currentCaptureState = this.stateManager.getCaptureState();\n const wasVideoActive = currentCaptureState.isVideoActive;\n\n this.stateManager.reset();\n\n if (wasVideoActive) {\n this.stateManager.updateCaptureState({ isVideoActive: true });\n }\n\n this.hasScreenshotTaken = false;\n this.startTime = Date.now();\n this.frameSkipCounter = 0;\n this.consecutiveFailures = 0;\n this.lastInferenceTime = 0;\n this.detectionBoxes = [];\n this.alignmentStartTime = undefined;\n this.hasDocumentDetected = false;\n\n // Reset sistema simplificado\n this.processedFramesCount = 0;\n this.slowFrameCount = 0;\n\n // Reset performance degradation state\n this.hasAutoSwitchedToManual = false;\n this.performanceDegradedMode = false;\n this.showPerformanceMessage = false;\n\n if (this.alignmentTimer) {\n clearTimeout(this.alignmentTimer);\n this.alignmentTimer = undefined;\n }\n\n if (wasVideoActive && this.detectionService.isModelLoaded()) {\n this.updateStatus('Captura reiniciada', 'Buscando documento en el marco de captura', 'active');\n this.detectFrame();\n } else {\n this.updateStatus('Listo para capturar', '', 'ready');\n }\n }\n\n private exitSession(): void {\n if (this.videoStream) {\n this.videoStream.getTracks().forEach(track => track.stop());\n this.videoStream = undefined;\n this.stateManager.updateCaptureState({ isVideoActive: false, isLoading: false });\n }\n\n this.isMaskReady = false;\n this.updateStatus('Captura finalizada', '', 'ready');\n this.detectionBoxes = [];\n this.cleanup();\n }\n\n // PERFORMANCE MONITORING METHODS\n private initializePerformanceMonitor(): void {\n this.performanceMetrics.lastUpdateTime = performance.now();\n\n // Update performance metrics every 500ms\n this.performanceUpdateInterval = window.setInterval(() => {\n this.updatePerformanceMetrics();\n }, 500);\n\n }\n\n private updatePerformanceMetrics(): void {\n const currentTime = performance.now();\n const deltaTime = currentTime - this.performanceMetrics.lastUpdateTime;\n\n // Calculate FPS\n if (deltaTime > 0) {\n this.performanceMetrics.fps = Math.round(1000 / (deltaTime / this.frameSkipCounter || 1));\n }\n\n // Get memory usage if available\n if ('memory' in performance) {\n const memInfo = (performance as any).memory;\n this.performanceMetrics.memoryUsage = Math.round(memInfo.usedJSHeapSize / 1048576); // MB\n }\n\n // Calculate detection success rate\n if (this.performanceMetrics.totalDetections > 0) {\n this.performanceMetrics.successfulDetections = this.performanceMetrics.successfulDetections;\n const detectionRate = (this.performanceMetrics.successfulDetections / this.performanceMetrics.totalDetections) * 100;\n this.performanceMetrics.detectionRate = Math.round(detectionRate);\n }\n\n // Update state for rendering\n this.performanceData = {\n fps: this.performanceMetrics.fps,\n inferenceTime: this.performanceMetrics.inferenceTime,\n memoryUsage: this.performanceMetrics.memoryUsage,\n onnxLoadTime: this.performanceMetrics.onnxLoadTime,\n frameProcessingTime: this.performanceMetrics.frameProcessingTime,\n totalDetections: this.performanceMetrics.totalDetections,\n successfulDetections: this.performanceMetrics.successfulDetections,\n detectionRate: this.performanceMetrics.detectionRate\n };\n\n this.performanceMetrics.lastUpdateTime = currentTime;\n }\n\n private recordOnnxPerformance(loadTime: number, inferenceTime: number): void {\n this.performanceMetrics.onnxLoadTime = Math.round(loadTime);\n this.performanceMetrics.inferenceTime = Math.round(inferenceTime);\n }\n\n private recordFrameProcessing(processingTime: number, detectionsFound: number): void {\n this.performanceMetrics.frameProcessingTime = Math.round(processingTime);\n this.performanceMetrics.totalDetections++;\n\n if (detectionsFound > 0) {\n this.performanceMetrics.successfulDetections++;\n }\n\n // Update performance history for adaptive frame skipping\n this.performanceHistory.push(processingTime);\n if (this.performanceHistory.length > this.PERFORMANCE_HISTORY_SIZE) {\n this.performanceHistory.shift();\n }\n }\n\n // Adaptive frame skipping based on performance\n private getAdaptiveFrameSkip(): number {\n // Check if running on mobile device for more aggressive frame skipping\n const isMobileDevice = this.cameraInfoWithAutofocus.deviceType === 'mobile' ||\n /Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n const isTablet = this.cameraInfoWithAutofocus.deviceType === 'tablet' ||\n (/iPad|Android/i.test(navigator.userAgent) && window.innerWidth >= 768);\n\n // Mobile-specific base frame skip (more aggressive to prevent slow motion effect)\n const mobileBaseSkip = isMobileDevice && !isTablet ? 4 : this.BASE_FRAME_SKIP;\n\n // Base conditions for high frame skip\n if (this.consecutiveFailures > 20) return this.MAX_FRAME_SKIP;\n if (this.performanceMetrics.inferenceTime > 200) return Math.max(6, mobileBaseSkip);\n if (this.performanceMetrics.memoryUsage > 200) return Math.max(5, mobileBaseSkip);\n\n // Calculate average processing time\n if (this.performanceHistory.length > 0) {\n const avgProcessingTime = this.performanceHistory.reduce((a, b) => a + b, 0) / this.performanceHistory.length;\n\n if (avgProcessingTime > 100) return Math.max(4, mobileBaseSkip);\n if (avgProcessingTime > 80) return Math.max(3, mobileBaseSkip);\n if (avgProcessingTime > 60) return Math.max(this.BASE_FRAME_SKIP + 1, mobileBaseSkip);\n }\n\n // Low memory devices get higher frame skip\n if (this.performanceMetrics.memoryUsage > 150) return Math.max(4, mobileBaseSkip);\n\n // Mobile devices use higher base frame skip for smoother video\n return mobileBaseSkip;\n }\n\n // Método para resetear la máscara a color blanco\n private resetMaskToWhite(): void {\n const cardOutline = this.el.shadowRoot?.querySelector('.card-outline');\n const corners = this.el.shadowRoot?.querySelectorAll('.corner');\n const topSide = this.el.shadowRoot?.querySelector('.side-top');\n const rightSide = this.el.shadowRoot?.querySelector('.side-right');\n const bottomSide = this.el.shadowRoot?.querySelector('.side-bottom');\n const leftSide = this.el.shadowRoot?.querySelector('.side-left');\n\n // Remover todas las clases de alineación y estado perfecto\n cardOutline?.classList.remove('perfect-match');\n corners?.forEach(corner => corner.classList.remove('perfect-match'));\n\n topSide?.classList.remove('aligned');\n rightSide?.classList.remove('aligned');\n bottomSide?.classList.remove('aligned');\n leftSide?.classList.remove('aligned');\n\n // Resetear estado de alineación\n this.sideAlignment = { top: false, right: false, bottom: false, left: false };\n }\n\n // Canvas pool management for screenshots\n private getPooledCanvas(width: number, height: number): HTMLCanvasElement {\n // Try to find a canvas with matching dimensions\n const matchingIndex = this.canvasPool.findIndex(canvas =>\n canvas.width === width && canvas.height === height\n );\n\n if (matchingIndex !== -1) {\n return this.canvasPool.splice(matchingIndex, 1)[0];\n }\n\n // If no matching canvas, try to reuse any canvas and resize\n if (this.canvasPool.length > 0) {\n const canvas = this.canvasPool.pop()!;\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n // Create new canvas if pool is empty\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n private returnCanvasToPool(canvas: HTMLCanvasElement): void {\n // Only return to pool if not at max capacity\n if (this.canvasPool.length < this.MAX_CANVAS_POOL_SIZE) {\n // Clear the canvas before returning to pool\n const ctx = canvas.getContext('2d')!;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n this.canvasPool.push(canvas);\n }\n // If pool is full, let the canvas be garbage collected\n }\n\n}\n"],"mappings":"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","ignoreList":[]}