o11y 240.8.0 → 242.1.0

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.
@@ -418,8 +418,8 @@ class ActivityImpl {
418
418
  }
419
419
  ActivityImpl._count = 0;
420
420
 
421
- const activity={namespace:"sf.instrumentation",name:"Activity",pbjsSchema:{"nested":{"sf":{"nested":{"instrumentation":{"nested":{"Activity":{"reserved":[[5,5],[7,7]],"fields":{"duration":{"options":{},"id":3,"type":"double"},"stopReason":{"options":{},"id":6,"type":"string"},"isRoot":{"options":{},"id":8,"type":"bool"},"name":{"options":{"(meta.max_length)":25},"id":2,"type":"string"},"isSampled":{"options":{},"id":11,"type":"bool"},"preRootId":{"options":{},"id":9,"type":"string"},"id":{"options":{},
422
- "id":1,"type":"string"},"userPayload":{"options":{},"id":4,"type":"Payload"},"errorCount":{"options":{},"id":10,"type":"uint32"}}},"Payload":{"fields":{"payload":{"options":{},"id":2,"type":"bytes"},"schemaName":{"options":{},"id":1,"type":"string"}}}}}}}}}};
421
+ const activity={namespace:"sf.instrumentation",name:"Activity",pbjsSchema:{"nested":{"sf":{"nested":{"instrumentation":{"nested":{"Activity":{"reserved":[[5,5],[7,7]],"fields":{"duration":{"options":{},"id":3,"type":"double"},"stopReason":{"options":{},"id":6,"type":"string"},"isRoot":{"options":{},"id":8,"type":"bool"},"timerOverridden":{"options":{},"id":12,"type":"uint32"},"name":{"options":{"(meta.max_length)":25},"id":2,"type":"string"},"isSampled":{"options":{},"id":11,"type":"bool"},
422
+ "preRootId":{"options":{},"id":9,"type":"string"},"id":{"options":{},"id":1,"type":"string"},"userPayload":{"options":{},"id":4,"type":"Payload"},"errorCount":{"options":{},"id":10,"type":"uint32"}}},"Payload":{"fields":{"payload":{"options":{},"id":2,"type":"bytes"},"schemaName":{"options":{},"id":1,"type":"string"}}}}}}}}}};
423
423
 
424
424
  const error={namespace:"sf.instrumentation",name:"Error",pbjsSchema:{"nested":{"sf":{"nested":{"instrumentation":{"nested":{"Error":{"reserved":[[5,5],[7,7]],"fields":{"activityId":{"options":{},"id":6,"type":"string"},"stack":{"options":{},"id":3,"type":"string"},"name":{"options":{},"id":1,"type":"string"},"message":{"options":{"(meta.max_length)":200},"id":2,"type":"string"},"userPayload":{"options":{},"id":4,"type":"Payload"}}},"Payload":{"fields":{"payload":{"options":{},"id":2,"type":"bytes"},
425
425
  "schemaName":{"options":{},"id":1,"type":"string"}}}}}}}}}};
@@ -1098,7 +1098,8 @@ class InstrumentationImpl {
1098
1098
  stopReason: detail.stopReason,
1099
1099
  userPayload,
1100
1100
  errorCount: detail.errorCount,
1101
- isSampled: detail.isSampled
1101
+ isSampled: detail.isSampled,
1102
+ timerOverridden: detail.timerOverridden
1102
1103
  };
1103
1104
  }
1104
1105
  _handleActivityStop(detail) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../../../../src/library/Tracing.ts","../../../../src/library/TimerOverride.ts","../../../../src/library/ActivityImpl.ts","../../../../../../node_modules/o11y_schema/sf_instrumentation/activity.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/error.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/idle_detector_report.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/instrumented_event.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/simple.js","../../../../src/library/ActivityNoOp.ts","../../../../src/library/DomEventHelpers.ts","../../../../src/library/LogValidator.ts","../../../../src/library/BucketHistogramImpl.ts","../../../../src/library/UpCounterImpl.ts","../../../../src/library/ValueRecorderImpl.ts","../../../../src/library/SizeLimitedMap.ts","../../../../src/library/MetricsImpl.ts","../../../../src/library/MockEvent.ts","../../../../src/library/InstrumentationImpl.ts","../../../../src/library/RootActivityImpl.ts","../../../../src/library/RootActivityNoOp.ts","../../../../src/library/AppInstrumentationImpl.ts","../../../../src/library/AutomaticClickTracker.ts","../../../../src/library/NextgenImpl.ts","../../../../src/index.ts","../../../../src/library/TaskerImpl.ts","../../../../src/library/IdleDetectorImpl.ts","../../../../src/console-collector/ConsoleCollector.ts","../../../../src/client.ts"],"sourcesContent":["import {\n Instrumentation,\n TracingHeadersOptions,\n NetworkInstrumentationOptions,\n Activity\n} from '../interfaces';\nimport { utility } from 'o11y/shared';\n\ntype FetchType = (input: RequestInfo, init?: RequestInit) => Promise<Response>;\ntype XhrType = {\n prototype: XMLHttpRequest;\n new (): XMLHttpRequest;\n readonly DONE: number;\n readonly HEADERS_RECEIVED: number;\n readonly LOADING: number;\n readonly OPENED: number;\n readonly UNSENT: number;\n};\ntype XhrSendType = (body?: Document | BodyInit | null) => void;\ninterface O11yXhr extends XMLHttpRequest {\n _o11yActivity: Activity;\n}\n\nconst defaultTraceIdLengthW3 = 32; // 32 Characters = 128 bits\nconst defaultTraceIdLengthB3 = 16; // 16 Characters = 64 bits\nconst defaultSpanIdLength = 16; // 16 Characters = 64 bits\n\n// Headers for W3 tracing (https://www.w3.org/TR/trace-context/#traceparent-header)\nconst headerTraceParent = 'traceparent';\n\n// Headers for B3 tracing (https://github.com/openzipkin/b3-propagation)\nconst headerB3 = 'b3';\nconst headerTraceId = 'X-B3-TraceId';\nconst headerSpanId = 'X-B3-SpanId';\nconst headerSampled = 'X-B3-Sampled';\nconst headerParentSpanId = 'X-B3-ParentSpanId';\n\nconst defaultActivityNameForFetch = 'fetch';\nconst defaultActivityNameForXhrSend = 'xhr_send';\n\nexport class Tracing {\n private static _global = utility.getGlobal();\n private static _originalFetch: FetchType;\n private static _originalXhr: XhrType;\n private static _originalXhrSend: XhrSendType;\n private static _isNetworkInstrumentationEnabled = false;\n\n constructor(private readonly instr: Instrumentation) {\n utility.requireArgument(instr, 'instr', 'object');\n }\n\n private static _getB3CompactFormat(\n traceId: string,\n spanId: string,\n isSampled?: boolean,\n parentSpanId?: string\n ): string {\n // b3={TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}\n // Note: last two fields are optional\n\n let b3 = `${traceId}-${spanId}`;\n\n if (isSampled !== undefined || parentSpanId !== undefined) {\n b3 += isSampled ? '-1' : '-0';\n if (parentSpanId !== undefined) {\n b3 += `-${parentSpanId}`;\n }\n }\n return b3;\n }\n\n private static _getW3CompactFormat(\n traceId: string,\n spanId: string,\n isSampled: boolean\n ): string {\n // traceparent={version}-{trace-id}-{parent-id}-{trace-flags}\n // \"in some tracing systems, parent-id is known as the span-id, where a span is the execution of a client request\"\n return `00-${traceId}-${spanId}-${isSampled ? '01' : '00'}`;\n }\n\n private static _conformTextAsId(text: string, numChars: number): string {\n // First validate\n text = text.toLowerCase();\n const len: number = text.length;\n for (let i = 0; i < len; i += 1) {\n const c = text[i];\n if (!(c >= 'a' && c <= 'f') && !(c >= '0' && c <= '9')) {\n throw new Error(`The text '${text}' has an invalid character at index #${i}`);\n }\n }\n\n if (len > numChars) {\n // Use the right-most characters per spec\n return text.substr(len - numChars);\n }\n if (len < numChars) {\n // Pad left with 0s per spec\n return text.padStart(numChars, '0');\n }\n return text;\n }\n\n public static getHeaders(\n traceId: string,\n spanId: string,\n isSampled?: boolean,\n options?: TracingHeadersOptions\n ): Record<string, string> {\n utility.requireArgument(traceId, 'traceId', 'string');\n utility.requireArgument(spanId, 'spanId', 'string');\n\n const useB3Headers: boolean = options && options.useB3Headers;\n\n traceId = this._conformTextAsId(\n traceId,\n options && options.traceIdEffectiveLength !== undefined\n ? options.traceIdEffectiveLength\n : useB3Headers\n ? defaultTraceIdLengthB3\n : defaultTraceIdLengthW3\n );\n spanId = this._conformTextAsId(spanId, defaultSpanIdLength);\n\n const parentSpanId =\n (options &&\n options.parentSpanId !== undefined &&\n this._conformTextAsId(options.parentSpanId, defaultSpanIdLength)) ||\n undefined;\n\n const headers: Record<string, string> = {};\n\n if (useB3Headers) {\n // By default, use non-compact\n const isCompact: boolean = options && options.useCompactHeader;\n if (isCompact) {\n headers[headerB3] = this._getB3CompactFormat(\n traceId,\n spanId,\n isSampled,\n parentSpanId\n );\n } else {\n headers[headerTraceId] = traceId;\n headers[headerSpanId] = spanId;\n if (parentSpanId !== undefined) {\n headers[headerParentSpanId] = parentSpanId;\n }\n if (isSampled !== undefined) {\n headers[headerSampled] = isSampled ? '1' : '0';\n }\n }\n } else {\n headers[headerTraceParent] = this._getW3CompactFormat(traceId, spanId, isSampled);\n }\n\n return headers;\n }\n\n private _disableNetworkInstrumentation(): void {\n if (Tracing._isNetworkInstrumentationEnabled) {\n if (Tracing._originalFetch) {\n Tracing._global.fetch = Tracing._originalFetch;\n Tracing._originalFetch = undefined;\n }\n if (Tracing._originalXhr) {\n Tracing._global.XMLHttpRequest = Tracing._originalXhr;\n Tracing._originalXhr = undefined;\n }\n if (Tracing._originalXhrSend) {\n Tracing._global.XMLHttpRequest.prototype.send = Tracing._originalXhrSend;\n Tracing._originalXhrSend = undefined;\n }\n Tracing._isNetworkInstrumentationEnabled = false;\n }\n }\n\n private _enableNetworkInstrumentation(\n instr: Instrumentation,\n logErrors: boolean,\n activityName: string,\n useTracing: boolean,\n options: TracingHeadersOptions\n ): void {\n if (typeof Tracing._global.fetch === 'function') {\n this._overrideFetch(instr, logErrors, activityName, useTracing, options);\n Tracing._isNetworkInstrumentationEnabled = true;\n }\n\n if (typeof Tracing._global.XMLHttpRequest === 'function') {\n this._overrideXhr(instr, logErrors, activityName, useTracing, options);\n Tracing._isNetworkInstrumentationEnabled = true;\n }\n }\n\n private _overrideFetch(\n instr: Instrumentation,\n logErrors: boolean,\n activityName: string,\n useTracing: boolean,\n options: TracingHeadersOptions\n ): void {\n Tracing._originalFetch = Tracing._global.fetch;\n const o11yFetch: FetchType = async (url, reqOptions, ...restArgs) => {\n let activity: Activity;\n try {\n activity = instr.startActivity(activityName || defaultActivityNameForFetch);\n\n if (useTracing) {\n reqOptions = reqOptions || {};\n const traceHeaders = activity.getTraceHeaders(options);\n reqOptions.headers = Object.assign(reqOptions.headers || {}, traceHeaders);\n }\n return await Tracing._originalFetch.call(\n Tracing._global,\n url,\n reqOptions,\n ...restArgs\n );\n } catch (ex) {\n if (logErrors) {\n if (activity) {\n activity.error(ex);\n } else {\n instr.error(ex);\n }\n }\n throw ex;\n } finally {\n if (activity) {\n activity.stop();\n }\n }\n };\n Tracing._global.fetch = o11yFetch;\n }\n\n private _overrideXhr(\n instr: Instrumentation,\n logErrors: boolean,\n activityName: string,\n useTracing: boolean,\n options: TracingHeadersOptions\n ): void {\n Tracing._originalXhr = Tracing._global.XMLHttpRequest;\n Tracing._originalXhrSend = Tracing._originalXhr.prototype.send;\n\n Tracing._originalXhr.prototype.send = function (this: O11yXhr, ...args) {\n let activity: Activity;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr: O11yXhr = this;\n try {\n xhr._o11yActivity = activity = instr.startActivity(\n activityName || defaultActivityNameForXhrSend\n );\n if (useTracing) {\n const headers = activity.getTraceHeaders(options);\n\n Object.entries(headers).forEach((entry) => {\n xhr.setRequestHeader(entry[0], entry[1]);\n });\n }\n Tracing._originalXhrSend.call(this, ...args);\n } catch (ex) {\n if (logErrors) {\n if (activity) {\n activity.error(ex);\n } else {\n instr.error(ex);\n }\n }\n if (activity) {\n activity.stop();\n }\n throw ex;\n }\n };\n\n const xhrProxy = new Proxy<XhrType>(Tracing._originalXhr, {\n construct(target: XhrType) {\n const newXhr = new target() as O11yXhr;\n\n // Be the first in the event chain\n newXhr.addEventListener('load', () => {\n const activity = newXhr._o11yActivity;\n if (activity) {\n activity.stop();\n }\n });\n newXhr.addEventListener(\n 'error',\n (__err: ProgressEvent<XMLHttpRequestEventTarget>) => {\n const error = new Error('XHR Network-Level Error');\n const activity = newXhr._o11yActivity;\n if (activity) {\n if (logErrors) {\n activity.error(error);\n }\n activity.stop();\n } else if (logErrors) {\n instr.error(error);\n }\n }\n );\n newXhr.addEventListener('abort', () => {\n const activity = newXhr._o11yActivity;\n if (activity) {\n activity.discard();\n }\n });\n return newXhr;\n }\n });\n\n Tracing._global.XMLHttpRequest = xhrProxy;\n }\n\n networkInstrumentation(options: boolean | NetworkInstrumentationOptions): void {\n utility.requireArgument(options, 'options', ['boolean', 'object']);\n\n if (options) {\n // First disable it if necessary, so we can use the new options if it was already enabled\n this._disableNetworkInstrumentation();\n\n const tracingOptions: NetworkInstrumentationOptions =\n typeof options === 'object' ? options : {};\n\n this._enableNetworkInstrumentation(\n utility.definedValueOrDefault(tracingOptions.instrumentation, this.instr),\n utility.definedValueOrDefault(tracingOptions.logErrors, true),\n tracingOptions.activityName,\n utility.definedValueOrDefault(tracingOptions.useTracing, true),\n tracingOptions.tracingHeadersOptions\n );\n } else {\n // Options is falsy, disable.\n this._disableNetworkInstrumentation();\n }\n }\n}\n","export enum TimerOverride {\n none,\n start,\n stop,\n both\n}\n","import { PublicSafety, SchematizedData, utility } from 'o11y/shared';\n\nimport {\n Activity,\n ActivityDetail,\n ActivityStopOptions,\n Schema,\n TracingHeadersOptions\n} from '../interfaces';\nimport { Tracing } from './Tracing';\nimport { TimerOverride } from './TimerOverride';\nexport const timedout = 'timedout';\nexport const terminated = 'terminated';\nexport const discarded = 'discarded';\n\nconst stopReason = {\n timedout,\n terminated,\n discarded\n};\n\nexport type onActivityStop = (detail: ActivityDetail) => void;\nexport type onActivityError = (error: unknown, detail: ActivityDetail) => void;\n\nexport class ActivityImpl implements Activity {\n protected readonly _id: string;\n private readonly _safety: PublicSafety;\n private readonly _usePerf: boolean;\n protected static _count = 0;\n private readonly _perfId: string;\n private readonly _perfName: string;\n private _startTimestamp: number;\n private _startPerfTime: number;\n private _stopPerfTime: number;\n private _stopReason: string;\n private _timer: NodeJS.Timer;\n private _errorCount = 0;\n private _timerOverridden: TimerOverride = TimerOverride.none;\n\n constructor(\n protected readonly _name: string,\n protected readonly _rootId: string,\n private readonly _onStopped: onActivityStop,\n private readonly _onError: onActivityError,\n timeout?: number,\n id?: string,\n protected readonly _isSampled?: boolean\n ) {\n const { tsNow, perfNow } = utility.time();\n\n ActivityImpl._count += 1;\n this._id = id || utility.generateUniqueId();\n\n this._usePerf =\n typeof performance !== 'undefined' &&\n typeof performance.mark === 'function' &&\n typeof performance.measure === 'function';\n if (this._usePerf) {\n this._perfName = `${this._name}__${ActivityImpl._count}`;\n this._perfId = `${this._name}__${this.id}`;\n try {\n performance.mark(this._perfId);\n } catch {\n this._usePerf = false;\n }\n }\n\n this._startTimestamp = tsNow;\n this._startPerfTime = perfNow;\n\n if (timeout > 0) {\n this._timer = setTimeout(() => {\n this._stopReason = this._stopReason || stopReason.timedout;\n this.stop();\n }, timeout);\n }\n this._safety = new PublicSafety();\n }\n\n get id(): string {\n return this._id;\n }\n\n getId(): string {\n return this.id;\n }\n\n getRootId(): string {\n return this._rootId;\n }\n\n get stopReason(): string {\n return this._stopReason;\n }\n\n error(error: unknown, userSchemaOrText?: Schema | string, userData?: SchematizedData): void {\n this._safety.tryCatch(() => {\n this._errorCount += 1;\n if (typeof error === 'string') {\n error = new Error(error);\n }\n this._onError(error, this._getDetail(userSchemaOrText, userData));\n });\n }\n\n stop(\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n options?: ActivityStopOptions\n ): void {\n this._safety.tryCatch(() => {\n utility.requireArgumentIfDefined(userSchemaOrText, 'userSchemaOrText', [\n 'object',\n 'string'\n ]);\n utility.requireArgumentIfDefined(userData, 'userData', 'object');\n\n if (options) {\n const perfStart: number = options.perfStartOverride;\n const isStartTimeDefined = utility.requireArgumentIfDefined(\n perfStart,\n 'options.perfStartOverride',\n 'number'\n );\n\n const perfStop: number = options.perfStopOverride;\n const isStopTimeDefined = utility.requireArgumentIfDefined(\n perfStop,\n 'options.perfStopOverride',\n 'number'\n );\n\n if (isStartTimeDefined && perfStart < 0) {\n throw new Error('perfStartOverride, if defined, must be >= 0');\n }\n\n if (\n isStopTimeDefined &&\n (perfStop < 0 ||\n perfStop < (isStartTimeDefined ? perfStart : this._startPerfTime))\n ) {\n throw new Error('perfStopOverride, if defined, must be >= 0 and >= startTime');\n }\n }\n\n this._stopInternal(userSchemaOrText, userData, options);\n });\n }\n\n private _overrideTimer(perfStartTime?: number, perfStopTime?: number): void {\n if (perfStartTime !== undefined) {\n this._startTimestamp = Math.round(\n this._startTimestamp - (this._startPerfTime - perfStartTime)\n );\n this._startPerfTime = perfStartTime;\n this._setTimerOverride(TimerOverride.start);\n }\n\n if (perfStopTime !== undefined) {\n this._stopPerfTime = perfStopTime;\n this._setTimerOverride(TimerOverride.stop);\n }\n }\n\n private _setTimerOverride(value: TimerOverride): void {\n if (\n this._timerOverridden === TimerOverride.both ||\n this._timerOverridden === value ||\n value === TimerOverride.none\n ) {\n return;\n }\n this._timerOverridden =\n this._timerOverridden === TimerOverride.none ? value : TimerOverride.both;\n }\n\n private _stopInternal(\n userSchemaOrText: Schema | string,\n userData: SchematizedData,\n options?: ActivityStopOptions\n ): void {\n // First things first.\n const stopPerfTime = utility.perfNow();\n if (this._usePerf) {\n try {\n // Use a more user-friendly name for measure.\n if (this._stopReason !== stopReason.discarded) {\n performance.measure(this._perfName, this._perfId);\n }\n performance.clearMarks(this._perfId);\n performance.clearMeasures(this._perfName);\n } catch {}\n }\n\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = undefined;\n }\n if (this.isStopped) {\n // Already stopped\n return;\n }\n\n if (options) {\n this._overrideTimer(options.perfStartOverride, options.perfStopOverride);\n }\n\n // We may set this already in override so check that here\n this._stopPerfTime =\n this._timerOverridden === TimerOverride.none ||\n this._timerOverridden === TimerOverride.start\n ? stopPerfTime\n : this._stopPerfTime;\n\n const activityDetail: ActivityDetail = this._getDetail(userSchemaOrText, userData);\n this._onStopped(activityDetail);\n }\n\n get isStopped(): boolean {\n return this._stopPerfTime !== undefined;\n }\n\n discard(): void {\n this._safety.tryCatch(() => {\n this._stopReason = this._stopReason || stopReason.discarded;\n this.stop();\n });\n }\n\n terminate(): void {\n this._safety.tryCatch(() => {\n this._stopReason = this._stopReason || stopReason.terminated;\n this.stop();\n });\n }\n\n getIsSampled(): boolean {\n return this._isSampled || false;\n }\n\n protected _getDetail(\n userSchemaOrText: Schema | string,\n userData: SchematizedData\n ): ActivityDetail {\n return {\n id: this._id,\n rootId: this._rootId,\n name: this._name,\n userSchemaOrText: userSchemaOrText,\n userData,\n stopReason: this._stopReason,\n startTimestamp: this._startTimestamp,\n startPerfTime: this._startPerfTime,\n stopPerfTime: this._stopPerfTime,\n errorCount: this._errorCount,\n isSampled: this.getIsSampled(),\n timerOverridden: this._timerOverridden\n };\n }\n\n public getTraceHeaders(options: TracingHeadersOptions): Record<string, string> {\n // Normally, the root activity ID is the traceId.\n // If the activity is root, it's ID is (also) the traceId.\n // If the activity has no root, it's ID is (also) the traceId. i.e. It creates its own trace.\n const spanId = this.id;\n const traceId = this._rootId || spanId;\n\n return Tracing.getHeaders(traceId, spanId, this.getIsSampled(), options);\n }\n\n getStartTimestamp(): number {\n return this._startTimestamp;\n }\n\n getStartPerfTime(): number {\n return this._startPerfTime;\n }\n\n getStopPerfTime(): number {\n return this._stopPerfTime;\n }\n}\n","export const activity={namespace:\"sf.instrumentation\",name:\"Activity\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"Activity\":{\"reserved\":[[5,5],[7,7]],\"fields\":{\"duration\":{\"options\":{},\"id\":3,\"type\":\"double\"},\"stopReason\":{\"options\":{},\"id\":6,\"type\":\"string\"},\"isRoot\":{\"options\":{},\"id\":8,\"type\":\"bool\"},\"name\":{\"options\":{\"(meta.max_length)\":25},\"id\":2,\"type\":\"string\"},\"isSampled\":{\"options\":{},\"id\":11,\"type\":\"bool\"},\"preRootId\":{\"options\":{},\"id\":9,\"type\":\"string\"},\"id\":{\"options\":{},\n\"id\":1,\"type\":\"string\"},\"userPayload\":{\"options\":{},\"id\":4,\"type\":\"Payload\"},\"errorCount\":{\"options\":{},\"id\":10,\"type\":\"uint32\"}}},\"Payload\":{\"fields\":{\"payload\":{\"options\":{},\"id\":2,\"type\":\"bytes\"},\"schemaName\":{\"options\":{},\"id\":1,\"type\":\"string\"}}}}}}}}}};","export const error={namespace:\"sf.instrumentation\",name:\"Error\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"Error\":{\"reserved\":[[5,5],[7,7]],\"fields\":{\"activityId\":{\"options\":{},\"id\":6,\"type\":\"string\"},\"stack\":{\"options\":{},\"id\":3,\"type\":\"string\"},\"name\":{\"options\":{},\"id\":1,\"type\":\"string\"},\"message\":{\"options\":{\"(meta.max_length)\":200},\"id\":2,\"type\":\"string\"},\"userPayload\":{\"options\":{},\"id\":4,\"type\":\"Payload\"}}},\"Payload\":{\"fields\":{\"payload\":{\"options\":{},\"id\":2,\"type\":\"bytes\"},\n\"schemaName\":{\"options\":{},\"id\":1,\"type\":\"string\"}}}}}}}}}};","export const idle_detector_report={namespace:\"sf.instrumentation\",name:\"IdleDetectorReport\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"IdleDetectorReport\":{\"options\":{\"(meta.msg.desc)\":\"This is used by the Idle Detector in o11y\"},\"fields\":{\"listenerCount\":{\"options\":{},\"id\":3,\"type\":\"uint32\"},\"busyTasks\":{\"options\":{},\"rule\":\"repeated\",\"id\":5,\"type\":\"string\"},\"busyDurations\":{\"options\":{},\"rule\":\"repeated\",\"id\":6,\"type\":\"double\"},\"pollableCount\":{\"options\":{},\"id\":4,\"type\":\"uint32\"},\n\"pollCounts\":{\"options\":{},\"rule\":\"repeated\",\"id\":8,\"type\":\"double\"},\"logThreshold\":{\"options\":{},\"id\":2,\"type\":\"double\"},\"maxDuration\":{\"options\":{},\"id\":1,\"type\":\"double\"},\"pollables\":{\"options\":{},\"rule\":\"repeated\",\"id\":7,\"type\":\"string\"}}}}}}}}}};","export const instrumented_event={namespace:\"sf.instrumentation\",name:\"InstrumentedEvent\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"MouseEvent\":{\"fields\":{\"cancelable\":{\"options\":{},\"id\":5,\"type\":\"bool\"},\"ctrlKey\":{\"options\":{},\"id\":9,\"type\":\"bool\"},\"type\":{\"options\":{},\"id\":25,\"type\":\"string\"},\"button\":{\"options\":{},\"id\":3,\"type\":\"uint32\"},\"offsetX\":{\"options\":{},\"id\":17,\"type\":\"uint32\"},\"eventPhase\":{\"options\":{},\"id\":12,\"type\":\"uint32\"},\"shiftKey\":{\"options\":{},\"id\":23,\n\"type\":\"bool\"},\"offsetY\":{\"options\":{},\"id\":18,\"type\":\"uint32\"},\"composed\":{\"options\":{},\"id\":8,\"type\":\"bool\"},\"altKey\":{\"options\":{},\"id\":1,\"type\":\"bool\"},\"isTrusted\":{\"options\":{},\"id\":13,\"type\":\"bool\"},\"buttons\":{\"options\":{},\"id\":4,\"type\":\"uint32\"},\"movementY\":{\"options\":{},\"id\":16,\"type\":\"uint32\"},\"clientY\":{\"options\":{},\"id\":7,\"type\":\"uint32\"},\"clientX\":{\"options\":{},\"id\":6,\"type\":\"uint32\"},\"movementX\":{\"options\":{},\"id\":15,\"type\":\"uint32\"},\"defaultPrevented\":{\"options\":{},\"id\":10,\"type\":\"bool\"},\n\"metaKey\":{\"options\":{},\"id\":14,\"type\":\"bool\"},\"timeStamp\":{\"options\":{},\"id\":24,\"type\":\"double\"},\"bubbles\":{\"options\":{},\"id\":2,\"type\":\"bool\"},\"detail\":{\"options\":{},\"id\":11,\"type\":\"int64\"},\"pageY\":{\"options\":{},\"id\":20,\"type\":\"uint32\"},\"pageX\":{\"options\":{},\"id\":19,\"type\":\"uint32\"},\"screenX\":{\"options\":{},\"id\":21,\"type\":\"uint32\"},\"screenY\":{\"options\":{},\"id\":22,\"type\":\"uint32\"}}},\"InstrumentedEvent\":{\"oneofs\":{\"event\":{\"oneof\":[\"mouseEvent\"]}},\"reserved\":[[4,4],\"xpath\",[6,6],[8,8]],\"fields\":{\"mouseEvent\":{\"options\":{},\n\"id\":7,\"type\":\"MouseEvent\"},\"auto\":{\"options\":{},\"id\":3,\"type\":\"bool\"},\"parentComponent\":{\"options\":{},\"id\":2,\"type\":\"string\"},\"ownerComponent\":{\"options\":{},\"id\":1,\"type\":\"string\"},\"userPayload\":{\"options\":{},\"id\":5,\"type\":\"Payload\"},\"simplePath\":{\"options\":{},\"id\":9,\"type\":\"string\"}}},\"Payload\":{\"fields\":{\"payload\":{\"options\":{},\"id\":2,\"type\":\"bytes\"},\"schemaName\":{\"options\":{},\"id\":1,\"type\":\"string\"}}}}}}}}}};","export const simple={namespace:\"sf.instrumentation\",name:\"Simple\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"Simple\":{\"options\":{\"(meta.msg.desc)\":\"This message is used internally to allow convenient logging of simple text via the API without requiring a schema.\"},\"fields\":{\"text\":{\"options\":{\"(meta.max_length)\":25},\"id\":1,\"type\":\"string\"}}}}}}}}}};","import { Activity, TracingHeadersOptions } from '../interfaces';\n\nconst id: string = new Array(16).fill(0).join('');\nclass ActivityNoOp implements Activity {\n getId(): string {\n return id;\n }\n getRootId(): string {\n return undefined;\n }\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n error(): void {}\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n stop(): void {}\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n discard(): void {}\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n terminate(): void {}\n\n getIsSampled(): boolean {\n return false;\n }\n getTraceHeaders(__options: TracingHeadersOptions): Record<string, string> {\n return {};\n }\n getStartTimestamp(): number {\n return undefined;\n }\n getStartPerfTime(): number {\n return undefined;\n }\n getStopPerfTime(): number {\n return undefined;\n }\n}\n\nexport const activityNoOp = Object.freeze(new ActivityNoOp());\n","import { SchematizedPayload } from '../interfaces';\nimport { InstrumentedEventData, MouseEventData } from '../interfaces-private';\nimport { DomEventData } from '../types/TypeDefinitions-Private';\nimport { schemaUtil, utility } from 'o11y/shared';\n\nexport class DomEventHelpers {\n getInstrumentedEventData(\n eventData: DomEventData,\n handledBy: HTMLElement,\n userPayload: SchematizedPayload\n ): InstrumentedEventData {\n const instrumentedEvent: InstrumentedEventData = {\n ownerComponent: handledBy.tagName,\n parentComponent:\n (handledBy.parentElement && handledBy.parentElement.tagName) || undefined,\n event: eventData,\n simplePath: utility.getXpath(handledBy)\n };\n\n if (userPayload) {\n instrumentedEvent.userPayload = schemaUtil.makePayload(\n userPayload.schema,\n userPayload.payload,\n true\n );\n }\n\n return instrumentedEvent;\n }\n\n getMouseEventData(e: MouseEvent): MouseEventData {\n return {\n altKey: e.altKey,\n bubbles: e.bubbles,\n button: e.button,\n buttons: e.buttons,\n cancelable: e.cancelable,\n clientX: e.clientX,\n clientY: e.clientY,\n composed: e.composed,\n defaultPrevented: e.defaultPrevented,\n detail: e.detail,\n eventPhase: e.eventPhase,\n isTrusted: e.isTrusted,\n timeStamp: e.timeStamp,\n type: e.type,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n movementX: e.movementX,\n movementY: e.movementY,\n offsetX: e.offsetX,\n offsetY: e.offsetY,\n pageX: e.pageX,\n pageY: e.pageY,\n screenX: e.screenX,\n screenY: e.screenY,\n shiftKey: e.shiftKey\n };\n }\n}\n\nconst singleton = new DomEventHelpers();\nexport const domEventHelpers = singleton;\n","import { IType, Schema, SchemaTokens } from '../interfaces';\nimport {\n PbjsNestedObjectDescriptor,\n SchematizedData,\n SchematizedDataValue,\n schemaUtil,\n utility\n} from 'o11y/shared';\n\n// These are hard-coded limits at the app-level. They may be overridden with a corresponding\n// option at the field level in the schema metadata.\nexport const maxStringLengthAppLimit = 10000; // For strings\nexport const maxItemCountAppLimit = 10000; // For arrays\n\nconst minUnsigned = 0;\nconst maxFourBytes = 2147483647;\nconst minFourBytes = -2147483648;\nconst maxFourBytesUnsigned = 4294967295;\nconst maxEightBytes = 9223372036854776000;\nconst minEightBytes = -9223372036854776001;\nconst maxEightBytesUnsigned = 18446744073709552000;\n\nexport const enum ErrorCode {\n notAnError = 0, // To ensure truthy-checks work for proper error codes.\n arrayExpected,\n incorrectType,\n infiniteNumber,\n numberOutOfRange,\n malformedBytesArray,\n stringLengthOverflowAppLimit,\n itemCountOverflowAppLimit,\n stringLengthOverflow,\n stringLengthUnderflow,\n itemCountOverflow,\n itemCountUnderflow\n}\n\nexport class ValidationEntry {\n constructor(\n public errorCode: ErrorCode,\n public fields: string[],\n public expected?: string,\n public received?: string\n ) {}\n\n asMessage(schemaId: string): string {\n const key: string =\n this.fields[0] +\n this.fields\n .slice(1)\n .reduce(\n (prev, current) =>\n Number(current) >= 0 ? `${prev}[${current}]` : `${prev}.${current}`,\n ''\n );\n let msg: string;\n\n switch (this.errorCode) {\n case ErrorCode.arrayExpected:\n msg = 'Repeated field must be an array';\n break;\n case ErrorCode.incorrectType:\n msg = `Expected type ${this.expected} but received type ${this.received}`;\n break;\n case ErrorCode.infiniteNumber:\n msg = 'Value must be finite';\n break;\n case ErrorCode.numberOutOfRange:\n msg = 'Value is out of range for its type';\n break;\n case ErrorCode.malformedBytesArray:\n msg = 'Bytes array is malformed';\n break;\n case ErrorCode.stringLengthOverflowAppLimit:\n msg = 'Exceeded app limit for maximum string length';\n break;\n case ErrorCode.itemCountOverflowAppLimit:\n msg = 'Exceeded app limit for item count';\n break;\n // TODO: The following should be used when we start validating against schema metadata\n // case ErrorCode.stringLengthOverflow:\n // msg = 'Exceeded maximum string length';\n // break;\n // case ErrorCode.stringLengthUnderflow:\n // msg = 'Failed minimum string length';\n // break;\n // case ErrorCode.itemCountOverflow:\n // msg = 'Exceeded maximum item count';\n // break;\n // case ErrorCode.itemCountUnderflow:\n // msg = 'Failed minimum item count';\n // break;\n default:\n msg = `Unknown error code: ${this.errorCode}`;\n break;\n }\n\n return `Schema ${schemaId} on field \"${key}\": ${msg}`;\n }\n}\n\nclass LogValidator {\n public validate(schema: Schema, data: SchematizedData, noThrow = false): ValidationEntry[] {\n const schemaTokens: SchemaTokens = schemaUtil.checkSchema(schema);\n utility.requireArgument(data, 'data', 'object');\n\n const schemaId: string = schemaUtil.getSchemaId(schema);\n\n const errorInfos = new Array<ValidationEntry>();\n\n const nestedSchema: PbjsNestedObjectDescriptor = schemaUtil.getTypes(schema);\n this.validateFields(\n errorInfos,\n [],\n data,\n nestedSchema[schemaTokens.message] as IType,\n nestedSchema,\n schemaId\n );\n\n if (errorInfos.length && !noThrow) {\n throw new Error(errorInfos[0].asMessage(schemaId));\n }\n\n return errorInfos;\n }\n\n private validateFields(\n errorInfos: ValidationEntry[],\n fieldNames: string[],\n data: SchematizedData,\n message: IType,\n descriptor: PbjsNestedObjectDescriptor,\n schemaId: string\n ): void {\n const oneofs = message.oneofs || {};\n const fields = message.fields || {};\n for (const key in data) {\n const value = data[key];\n // if it's null or undefined we don't need to match\n if (!this.isNullOrUndefinedOrEmpty(value)) {\n const mft: (fieldType: string, rule?: string) => void = (fieldType, rule?) =>\n this.matchFieldTypes(\n errorInfos,\n [...fieldNames, key],\n value,\n fieldType,\n descriptor,\n schemaId,\n key,\n rule\n );\n\n if (oneofs[key]) {\n mft(fields[oneofs[key].oneof[0]].type);\n } else if (fields[key]) {\n mft(fields[key].type, fields[key].rule);\n }\n // if the field is not present in the schema then we ignore it and will drop it later\n }\n }\n }\n\n private isNullOrUndefinedOrEmpty(val: SchematizedDataValue): boolean {\n return val === undefined || val === null || val === '';\n }\n\n private matchFieldTypes(\n errorInfos: ValidationEntry[],\n fieldNames: string[],\n fieldDataValue: SchematizedDataValue,\n protobufType: string,\n descriptor: PbjsNestedObjectDescriptor,\n schemaId: string,\n key: string,\n rule?: string\n ): void {\n let errorCode: ErrorCode;\n\n if (rule === 'repeated') {\n if (Array.isArray(fieldDataValue)) {\n if (fieldDataValue.length > maxItemCountAppLimit) {\n errorCode = ErrorCode.itemCountOverflowAppLimit;\n }\n\n fieldDataValue.forEach((value, index: number) => {\n // if it's repeated they should all be the same type so we can just run it as is\n this.matchFieldTypes(\n errorInfos,\n [...fieldNames, index.toString()],\n value,\n protobufType,\n descriptor,\n schemaId,\n key\n );\n });\n } else {\n errorCode = ErrorCode.arrayExpected;\n }\n\n if (errorCode) {\n errorInfos.push(new ValidationEntry(errorCode, fieldNames));\n }\n\n // this means that every value in the array was validated and we can finish\n return;\n }\n\n let javaScriptType: string;\n switch (protobufType) {\n case 'string':\n javaScriptType = 'string';\n if (fieldDataValue.length > maxStringLengthAppLimit) {\n errorCode = ErrorCode.stringLengthOverflowAppLimit;\n }\n break;\n case 'bytes':\n javaScriptType = 'object';\n if (!(fieldDataValue instanceof Uint8Array)) {\n errorCode = ErrorCode.malformedBytesArray;\n }\n break;\n case 'bool':\n javaScriptType = 'boolean';\n break;\n case 'uint32':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(\n fieldDataValue,\n minUnsigned,\n maxFourBytesUnsigned\n );\n break;\n case 'int32':\n case 'sint32':\n case 'fixed32':\n case 'sfixed32':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(fieldDataValue, minFourBytes, maxFourBytes);\n break;\n case 'uint64':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(\n fieldDataValue,\n minUnsigned,\n maxEightBytesUnsigned\n );\n break;\n case 'fixed64':\n case 'sfixed64':\n case 'int64':\n case 'sint64':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(fieldDataValue, minEightBytes, maxEightBytes);\n break;\n case 'double':\n case 'float':\n javaScriptType = 'number';\n if (!Number.isFinite(fieldDataValue)) {\n errorCode = ErrorCode.infiniteNumber;\n }\n break;\n default:\n if (new Set(Object.keys(descriptor)).has(protobufType)) {\n //now we check this schema\n this.validateFields(\n errorInfos,\n fieldNames,\n fieldDataValue,\n descriptor[protobufType] as IType,\n descriptor,\n schemaId\n );\n javaScriptType = 'object';\n }\n break;\n }\n\n if (typeof fieldDataValue !== javaScriptType) {\n errorInfos.push(\n new ValidationEntry(\n ErrorCode.incorrectType,\n fieldNames,\n protobufType,\n typeof fieldDataValue\n )\n );\n }\n\n if (errorCode) {\n errorInfos.push(new ValidationEntry(errorCode, fieldNames));\n }\n }\n\n private checkNumberRange(value: number, min: number, max: number): ErrorCode {\n return value > max || value < min ? ErrorCode.numberOutOfRange : undefined;\n }\n}\n\nexport const logValidator = new LogValidator();\n","import { BucketHistogram } from '../interfaces/BucketHistogram';\nimport { MetricsTags, utility } from 'o11y/shared';\nimport { BucketMetric } from 'src/interfaces';\n\nexport class BucketHistogramImpl implements BucketMetric<number[]>, BucketHistogram {\n private readonly _createdOn: number;\n private _lastUpdatedOn: number;\n private _values = new Array<number>();\n\n constructor(\n private readonly _name: string,\n private readonly _ownerName: string,\n private readonly _ownerAppName: string,\n private readonly _tags: MetricsTags,\n private readonly _buckets: number[]\n ) {\n this._createdOn = utility.time().tsNow;\n }\n\n getName(): string {\n return this._name;\n }\n\n getCreatedOn(): number {\n return this._createdOn;\n }\n\n getLastUpdatedOn(): number {\n return this._lastUpdatedOn;\n }\n\n getData(): number[] {\n return this.values;\n }\n\n getBuckets(): number[] {\n return this.buckets;\n }\n\n get buckets(): number[] {\n return this._buckets.slice(0, this._buckets.length);\n }\n\n get values(): number[] {\n return this._values.slice(0, this._values.length);\n }\n\n record(value: number): void {\n if (typeof value === 'number') {\n this._values.push(value);\n this._lastUpdatedOn = utility.time().tsNow;\n return;\n }\n\n throw new Error('BucketHistogram can only record numbers.');\n }\n\n reset(): void {\n this._lastUpdatedOn = undefined;\n this._values = [];\n }\n\n getOwnerName(): string {\n return this._ownerName;\n }\n\n getOwnerAppName(): string {\n return this._ownerAppName;\n }\n\n getTags(): MetricsTags {\n return this._tags;\n }\n}\n","import { Metric } from '../interfaces/Metric';\nimport { UpCounter } from '../interfaces/UpCounter';\nimport { MetricsTags, utility } from 'o11y/shared';\n\nexport class UpCounterImpl implements Metric<number>, UpCounter {\n private readonly _createdOn: number;\n private _lastUpdatedOn: number;\n private _value = 0;\n\n constructor(\n private readonly _name: string,\n private readonly _ownerName: string,\n private readonly _ownerAppName: string,\n private readonly _tags: MetricsTags\n ) {\n this._createdOn = utility.time().tsNow;\n }\n\n getName(): string {\n return this._name;\n }\n\n getCreatedOn(): number {\n return this._createdOn;\n }\n\n getLastUpdatedOn(): number {\n return this._lastUpdatedOn;\n }\n\n getData(): number {\n return this._value;\n }\n\n increment(value = 1): void {\n if (typeof value === 'number' && value > 0) {\n this._value += Math.round(value);\n this._lastUpdatedOn = utility.time().tsNow;\n return;\n }\n\n throw new Error('UpCounter can only increment positive numbers.');\n }\n\n reset(): void {\n this._lastUpdatedOn = undefined;\n this._value = 0;\n }\n\n getOwnerName(): string {\n return this._ownerName;\n }\n\n getOwnerAppName(): string {\n return this._ownerAppName;\n }\n\n getTags(): Readonly<MetricsTags> {\n return this._tags;\n }\n}\n","import { Metric } from '../interfaces/Metric';\nimport { ValueRecorder } from '../interfaces/ValueRecorder';\nimport { MetricsTags, utility } from 'o11y/shared';\n\nexport class ValueRecorderImpl implements Metric<number[]>, ValueRecorder {\n private readonly _createdOn: number;\n private _lastUpdatedOn: number;\n private _values = new Array<number>();\n\n constructor(\n private readonly _name: string,\n private readonly _ownerName: string,\n private readonly _ownerAppName: string,\n private readonly _tags: MetricsTags\n ) {\n this._createdOn = utility.time().tsNow;\n // TODO: Add sampling/throttling to put a cap on the size of the array\n }\n\n getName(): string {\n return this._name;\n }\n\n getCreatedOn(): number {\n return this._createdOn;\n }\n\n getLastUpdatedOn(): number {\n return this._lastUpdatedOn;\n }\n\n getData(): number[] {\n return this.values;\n }\n\n get values(): number[] {\n return this._values.slice(0, this._values.length);\n }\n\n record(value: number): void {\n if (typeof value === 'number') {\n this._values.push(value);\n this._lastUpdatedOn = utility.time().tsNow;\n return;\n }\n\n throw new Error('ValueRecorder can only record numbers.');\n }\n\n reset(): void {\n this._lastUpdatedOn = undefined;\n this._values = [];\n }\n\n getOwnerName(): string {\n return this._ownerName;\n }\n\n getOwnerAppName(): string {\n return this._ownerAppName;\n }\n\n getTags(): MetricsTags {\n return this._tags;\n }\n}\n","export class SizeLimitedMap<K, V> {\n private readonly _map = new Map<K, V>();\n\n private _maxSize: number;\n constructor(maxSize: number) {\n if (typeof maxSize === 'number' && maxSize > 0) {\n this._maxSize = Math.ceil(maxSize);\n return;\n }\n throw new Error('maxSize must be a positive number');\n }\n\n get maxSize(): number {\n return this._maxSize;\n }\n\n get(key: K): V {\n return this._map.get(key);\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): boolean {\n if (this.has(key) || this._map.size < this.maxSize) {\n this._map.set(key, value);\n return true;\n }\n return false;\n }\n\n getElements(): V[] {\n return Array.from(this._map.values());\n }\n\n clear(): void {\n this._map.clear();\n }\n}\n","import { MetricsReporter, UpCounter, ValueRecorder } from '../interfaces';\n\nimport { BucketHistogramImpl } from './BucketHistogramImpl';\nimport { UpCounterImpl } from './UpCounterImpl';\nimport { ValueRecorderImpl } from './ValueRecorderImpl';\nimport { SizeLimitedMap } from './SizeLimitedMap';\nimport { MetricsTags } from 'o11y/shared';\n\nconst maxCounters = 1000;\nconst maxValueRecorders = 500;\nconst maxBucketHistograms = 500;\n\nenum MetricType {\n Counter,\n Percentile,\n BucketHistogram\n}\n\nexport class MetricsImpl implements MetricsReporter {\n private readonly _upCounters = new SizeLimitedMap<string, UpCounterImpl>(maxCounters);\n private readonly _valueRecorders = new SizeLimitedMap<string, ValueRecorderImpl>(\n maxValueRecorders\n );\n private readonly _bucketHistograms = new SizeLimitedMap<string, BucketHistogramImpl>(\n maxBucketHistograms\n );\n\n constructor(\n private readonly _ownerName: string,\n private readonly _getOwnerAppName: () => string\n ) {}\n\n incrementCounter(\n operation: string,\n increment: number,\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._tagError(tags, hasError);\n this._upCounter(operation, tags).increment(increment);\n }\n\n trackValue(operation: string, value: number, hasError = false, tags: MetricsTags = {}): void {\n this._tagError(tags, hasError);\n this._valueRecorder(operation, tags).record(value);\n }\n\n bucketValue(\n operation: string,\n value: number,\n buckets: number[],\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._tagError(tags, hasError);\n this._bucketHistogram(operation, tags, buckets).record(value);\n }\n\n private _bucketHistogram(name: string, tags: MetricsTags, buckets: number[]): ValueRecorder {\n const { key, sortedTags } = this._getKeyAndSortedTags(\n name,\n tags,\n MetricType.BucketHistogram\n );\n let instrument = this._bucketHistograms.get(key);\n if (!instrument) {\n instrument = new BucketHistogramImpl(\n name,\n this._ownerName,\n this._getOwnerAppName(),\n sortedTags,\n buckets\n );\n if (!this._bucketHistograms.set(key, instrument)) {\n throw new Error(`Max size of ${maxBucketHistograms} exceeded for BucketHistograms`);\n }\n }\n return instrument;\n }\n\n private _upCounter(name: string, tags: MetricsTags): UpCounter {\n const { key, sortedTags } = this._getKeyAndSortedTags(name, tags, MetricType.Counter);\n let instrument = this._upCounters.get(key);\n if (!instrument) {\n instrument = new UpCounterImpl(\n name,\n this._ownerName,\n this._getOwnerAppName(),\n sortedTags\n );\n if (!this._upCounters.set(key, instrument)) {\n throw new Error(`Max size of ${maxCounters} exceeded for UpCounters`);\n }\n }\n return instrument;\n }\n\n private _valueRecorder(name: string, tags: MetricsTags): ValueRecorder {\n const { key, sortedTags } = this._getKeyAndSortedTags(name, tags, MetricType.Percentile);\n let instrument = this._valueRecorders.get(key);\n if (!instrument) {\n instrument = new ValueRecorderImpl(\n name,\n this._ownerName,\n this._getOwnerAppName(),\n sortedTags\n );\n if (!this._valueRecorders.set(key, instrument)) {\n throw new Error(`Max size of ${maxValueRecorders} exceeded for ValueRecorders`);\n }\n }\n return instrument;\n }\n\n getUpCounters(): UpCounterImpl[] {\n return this._upCounters.getElements();\n }\n\n getValueRecorders(): ValueRecorderImpl[] {\n return this._valueRecorders.getElements();\n }\n\n getBucketHistograms(): BucketHistogramImpl[] {\n return this._bucketHistograms.getElements();\n }\n\n private _tagError(tags: MetricsTags, hasError: boolean): void {\n tags.status = hasError === true ? 'error' : 'success';\n }\n\n private _getKeyAndSortedTags(\n operation: string,\n tags: MetricsTags,\n metricType: MetricType\n ): { key: string; sortedTags: MetricsTags } {\n // This method should be called after any manipulation of tags\n const sortedTags = Object.keys(tags)\n .sort()\n .reduce((prev: MetricsTags, curr: string) => {\n prev[curr] = tags[curr];\n return prev;\n }, {});\n const key = `${MetricType[metricType]}:${operation}${JSON.stringify(sortedTags)}`;\n return {\n key,\n sortedTags\n };\n }\n}\n","export class MockEvent {\n constructor(\n public readonly type: string,\n public readonly composed: boolean,\n private readonly _composedPaths: unknown[]\n ) {}\n composedPath(): unknown[] {\n return this._composedPaths;\n }\n}\n","import {\n activitySchema,\n errorSchema,\n instrumentedEventSchema,\n simpleSchema\n} from 'o11y_schema/sf_instrumentation';\n\nimport {\n LightningElement,\n LogPromptListener,\n MetricsTags,\n PublicSafety,\n SchematizedData,\n schemaUtil,\n utility\n} from 'o11y/shared';\n\nimport {\n Activity,\n ActivityApiOptions,\n ActivityDetail,\n ApiOptions,\n BucketMetric,\n DomEventApiOptions,\n Instrumentation,\n InstrumentationContext,\n Metric,\n MetricsReporter,\n PayloadProvider,\n Schema,\n SchematizedPayload\n} from '../interfaces';\nimport { ActivityData, ErrorData, InstrumentedEventData } from '../interfaces-private';\n\nimport { ActivityImpl, discarded, onActivityError, onActivityStop } from './ActivityImpl';\nimport { activityNoOp } from './ActivityNoOp';\nimport { AutomaticClickTracker } from './AutomaticClickTracker';\nimport { domEventHelpers } from './DomEventHelpers';\nimport {\n ErrorCode,\n ValidationEntry,\n logValidator,\n maxItemCountAppLimit,\n maxStringLengthAppLimit\n} from './LogValidator';\nimport { MetricsImpl } from './MetricsImpl';\nimport { MockEvent } from './MockEvent';\nimport { NextgenImpl } from './NextgenImpl';\n\n// @W-10241440, disable timeouts\nconst maxActivityDurationMsecs: number = undefined;\nconst reservedMetricCharacters = ['`'];\nconst reservedMetricNames = {\n internalError: 'o11y-error'\n};\nconst denyListMetricNames = Object.freeze(Array.from(Object.values(reservedMetricNames)));\n\nexport class InstrumentationImpl implements Instrumentation, MetricsReporter {\n protected static readonly defaultAppName = 'APP_NOT_REGISTERED';\n private readonly _metrics: MetricsImpl;\n private readonly _onActivityStoppedCallback: onActivityStop =\n this._handleActivityStop.bind(this);\n protected readonly _onActivityErrorCallback: onActivityError =\n this._handleActivityError.bind(this);\n protected readonly _safety: PublicSafety;\n private readonly _simpleTextMaxLength: number;\n\n constructor(private readonly _nextGen: NextgenImpl, private readonly _name: string) {\n for (const reservedChar of reservedMetricCharacters) {\n if (this._name.indexOf(reservedChar) >= 0) {\n throw new Error(`Name cannot include the reserved character \"${reservedChar}\"`);\n }\n }\n\n this._safety = new PublicSafety({\n increment: (increment) => this._incrementError(increment)\n });\n\n this._metrics = this._initMetrics();\n\n const simpleTextOptions = schemaUtil.getOptions(simpleSchema, 'Simple', 'text');\n this._simpleTextMaxLength = simpleTextOptions\n ? simpleTextOptions['(meta.max_length)']\n : maxStringLengthAppLimit;\n }\n\n protected _initMetrics(): MetricsImpl {\n return new MetricsImpl(\n this.name,\n () => this._nextGen.appName || InstrumentationImpl.defaultAppName\n );\n }\n\n private _incrementError(increment = 1): void {\n this._metrics.incrementCounter(reservedMetricNames.internalError, increment, false);\n }\n\n get name(): string {\n return this._name;\n }\n\n /**\n * This function is to allow for convenience calls to our API, where a string can\n * be provided instead of an actual Schema. In that case, we wrap the text in\n * a built-in simple schema.\n * @param userSchemaOrText Schema or string.\n * @param userData\n * @param onlyIfBoth If true, then both the schema and the data must be specified.\n * @returns\n */\n protected _wrapUserPayload(\n userSchemaOrText: Schema | string,\n userData: SchematizedData,\n onlyIfBoth = false\n ): SchematizedPayload {\n let userSchema: Schema;\n if (typeof userSchemaOrText === 'string') {\n userSchema = simpleSchema;\n if (userSchemaOrText) {\n userData = {\n text: userSchemaOrText.substring(0, this._simpleTextMaxLength)\n };\n } else {\n userData = undefined;\n }\n } else {\n userSchema = userSchemaOrText;\n }\n\n return schemaUtil.makePayload(userSchema, userData, onlyIfBoth);\n }\n\n private getEffectiveRootId(options?: ApiOptions): string {\n return (\n options?.instrumentationContext?.rootId ??\n this._nextGen.getDefaultInstrumentationContext().rootId\n );\n }\n\n /**\n *\n * @param userSchema The schema of the second argument. Also used as the basis for auto-generated\n * counters for log calls using the same schema.\n * @param userData Optional data that complies with the provided schema\n */\n log(userSchemaOrText: Schema | string, userData?: SchematizedData, options?: ApiOptions): void {\n this._safety.tryCatch(() => {\n const timestamp = utility.time().tsNow;\n utility.requireArgument(userSchemaOrText, 'userSchemaOrText', ['object', 'string']);\n utility.requireArgumentIfDefined(userData, 'userData', 'object');\n utility.requireArgumentIfDefined(options, 'options', 'object');\n\n const userPayload = this._wrapUserPayload(userSchemaOrText, userData);\n\n if (userPayload?.payload) {\n this._logInternal(\n this.name,\n userPayload.schema,\n userPayload.payload,\n timestamp,\n this.getEffectiveRootId(options)\n );\n }\n });\n }\n\n protected _logInternal(\n loggerName: string,\n schema: Schema,\n data: SchematizedData,\n timestamp: number,\n rootId?: string\n ): number {\n this._checkInputs(schema, data);\n const appPayload: SchematizedPayload = this._getPayloadFromProvider(\n this._nextGen.appPayloadProvider\n );\n const pagePayload: SchematizedPayload = this._getPayloadFromProvider(\n this._nextGen.pagePayloadProvider\n );\n\n return this._nextGen.addLog(\n loggerName,\n schema,\n data,\n timestamp,\n rootId,\n pagePayload,\n appPayload\n );\n }\n\n error(\n error: unknown,\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n options?: ApiOptions\n ): void {\n return this._safety.tryCatch(() => {\n utility.requireArgumentIfDefined(userSchemaOrText, 'userSchemaOrText', [\n 'object',\n 'string'\n ]);\n utility.requireArgumentIfDefined(userData, 'userData', 'object');\n utility.requireArgumentIfDefined(options, 'options', 'object');\n\n const rootId: string = this.getEffectiveRootId(options);\n this._errorInternal(error, userSchemaOrText, userData, undefined, rootId);\n });\n }\n\n protected _errorInternal(\n err: unknown,\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n activityId?: string,\n rootActivityId?: string\n ): number {\n const loggedTimestamp = utility.time().tsNow;\n\n let error: Error;\n if (err instanceof Error) {\n error = err;\n } else {\n let msg: string;\n if (err === undefined || err === null || typeof err.toString !== 'function') {\n msg = 'UNKNOWN';\n } else {\n msg = err.toString();\n }\n error = new Error(msg);\n }\n\n const userPayload = this._wrapUserPayload(userSchemaOrText, userData, true);\n\n const errorData: ErrorData = {\n name: error.name,\n message: error.message,\n stack: error.stack,\n userPayload,\n activityId\n };\n\n return this._logInternal(\n this.name,\n errorSchema,\n errorData,\n loggedTimestamp,\n rootActivityId\n );\n }\n\n startActivity(name: string, options?: ApiOptions): Activity {\n return this._safety.tryCatchReturn(() => {\n utility.requireArgument(name, 'name');\n utility.requireArgumentIfDefined(options, 'options', 'object');\n\n let context: InstrumentationContext;\n\n const rootId: string = options?.instrumentationContext?.rootId;\n if (rootId) {\n context = {\n rootId,\n isRootActivitySampled: options.instrumentationContext.isRootActivitySampled\n };\n } else {\n // By definition, an activity is sampled if root activity is sampled\n context = this._nextGen.getDefaultInstrumentationContext();\n }\n const activity: Activity = new ActivityImpl(\n name,\n context.rootId,\n this._onActivityStoppedCallback,\n this._onActivityErrorCallback,\n maxActivityDurationMsecs,\n undefined,\n context.isRootActivitySampled\n );\n return activity;\n }, activityNoOp);\n }\n\n protected _getActivityData(detail: ActivityDetail): ActivityData {\n const userPayload = this._wrapUserPayload(detail.userSchemaOrText, detail.userData, true);\n\n return {\n id: detail.id,\n name: detail.name,\n duration: detail.stopPerfTime - detail.startPerfTime,\n stopReason: detail.stopReason,\n userPayload,\n errorCount: detail.errorCount,\n isSampled: detail.isSampled\n };\n }\n\n private _handleActivityStop(detail: ActivityDetail): void {\n if (detail.stopReason === discarded) {\n return;\n }\n const activityData: ActivityData = this._getActivityData(detail);\n\n this._logActivity(activityData, detail.startTimestamp, detail.rootId);\n }\n\n protected _logActivity(\n activityData: ActivityData,\n startTimestamp: number,\n rootId?: string\n ): void {\n this._logInternal(this.name, activitySchema, activityData, startTimestamp, rootId);\n }\n\n private _handleActivityError(error: unknown, detail: ActivityDetail): void {\n this._errorInternal(\n error,\n detail.userSchemaOrText,\n detail.userData,\n detail.id,\n detail.rootId\n );\n }\n\n private _getPayloadFromProvider(provider: PayloadProvider): SchematizedPayload {\n const payload: SchematizedPayload = provider?.getPayload() || undefined;\n if (payload) {\n this._checkInputs(payload.schema, payload.payload);\n }\n return payload;\n }\n\n domEvent(\n event: Event,\n handledBy: HTMLElement | LightningElement,\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n options?: DomEventApiOptions\n ): void {\n this._safety.tryCatch(() => {\n const tsNow = utility.time().tsNow;\n\n utility.requireArgument(event, 'event', [Event, MockEvent]);\n // TODO: Using 'object' instead of 'LightningElement' for now (no imports)\n utility.requireArgument(handledBy, 'handledBy', [HTMLElement, 'object']);\n\n let htmlElement;\n if (handledBy instanceof HTMLElement) {\n htmlElement = handledBy;\n } else {\n handledBy = handledBy as LightningElement;\n // Convenience for LightningElement developers who pass \"this\" in handledBy.\n // Get the underlying HTML element\n if (handledBy.template && handledBy.template.host instanceof HTMLElement) {\n htmlElement = handledBy.template.host;\n } else {\n utility.requireArgument(undefined, 'handledBy');\n }\n }\n\n const userPayload: SchematizedPayload = this._wrapUserPayload(\n userSchemaOrText,\n userData,\n true\n );\n\n const rootId: string = this.getEffectiveRootId(options);\n\n switch (event.type) {\n case 'click': {\n const mouseEvent = event as MouseEvent;\n\n // If the user has called domEvent API on this event explicitly,\n // then we don't need to log it by default.\n const acd: AutomaticClickTracker = this._nextGen.getClickTracker();\n if (acd) {\n acd.markEventHandled(mouseEvent);\n }\n\n const mouseEventData = domEventHelpers.getMouseEventData(mouseEvent);\n\n const instrumentedEvent: InstrumentedEventData =\n domEventHelpers.getInstrumentedEventData(\n mouseEventData,\n htmlElement,\n userPayload\n );\n instrumentedEvent.auto = options && options._auto;\n\n this._logInternal(\n this.name,\n instrumentedEventSchema,\n instrumentedEvent,\n tsNow,\n rootId\n );\n break;\n }\n default:\n throw new Error(utility.notImplemented);\n }\n });\n }\n\n incrementCounter(\n operation: string,\n increment = 1,\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._safety.tryCatch(() => {\n utility.requireArgument(operation, 'operation', 'string');\n utility.checkForDenyListedValues(operation, 'operation', denyListMetricNames);\n utility.checkForReservedCharacters(operation, 'operation', reservedMetricCharacters);\n utility.requireArgument(increment, 'increment', 'number');\n utility.requireArgument(hasError, 'hasError', 'boolean');\n utility.requireArgument(tags, 'tags', 'object');\n Object.entries(tags).forEach((entry) => {\n utility.requireArgument(entry[1], `Tag value for '${entry[0]}'`, [\n 'string',\n 'number',\n 'boolean'\n ]);\n });\n this._metrics.incrementCounter(operation, increment, hasError, tags);\n });\n }\n\n trackValue(operation: string, value: number, hasError = false, tags: MetricsTags = {}): void {\n this._safety.tryCatch(() => {\n utility.requireArgument(operation, 'operation', 'string');\n utility.checkForDenyListedValues(operation, 'operation', denyListMetricNames);\n utility.checkForReservedCharacters(operation, 'operation', reservedMetricCharacters);\n utility.requireArgument(value, 'value', 'number');\n utility.requireArgument(hasError, 'hasError', 'boolean');\n utility.requireArgument(tags, 'tags', 'object');\n Object.entries(tags).forEach((entry) => {\n utility.requireArgument(entry[1], `Tag value for '${entry[0]}'`, [\n 'string',\n 'number',\n 'boolean'\n ]);\n });\n\n this._metrics.trackValue(operation, value, hasError, tags);\n });\n }\n\n bucketValue(\n operation: string,\n value: number,\n buckets: number[] = [],\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._safety.tryCatch(() => {\n utility.requireArgument(operation, 'operation', 'string');\n utility.checkForDenyListedValues(operation, 'operation', denyListMetricNames);\n utility.checkForReservedCharacters(operation, 'operation', reservedMetricCharacters);\n utility.requireArgument(value, 'value', 'number');\n utility.requireArgument(buckets, 'buckets', Array);\n Object.entries(buckets).forEach((entry) => {\n utility.requireArgument(entry[1], `Bucket value for '${entry[0]}'`, 'number');\n });\n utility.requireArgument(hasError, 'hasError', 'boolean');\n utility.requireArgument(tags, 'tags', 'object');\n Object.entries(tags).forEach((entry) => {\n utility.requireArgument(entry[1], `Tag value for '${entry[0]}'`, [\n 'string',\n 'number',\n 'boolean'\n ]);\n });\n\n this._metrics.bucketValue(operation, value, buckets, hasError, tags);\n });\n }\n\n private _checkInputs(schema: Schema, data: SchematizedData): void {\n schemaUtil.checkSchema(schema);\n utility.requireArgument(data, 'data', 'object');\n\n let vEntries: ValidationEntry[];\n let savedUserPayload: SchematizedPayload;\n if (data.userPayload !== undefined && schemaUtil.isInternal(schema)) {\n // For internal schemas where we have nested messages, we need to temporarily\n // remove userPayload, since it's not yet encoded. (If left in place, it would fail\n // validation since it's not UInt8Array). We validate it separately here.\n savedUserPayload = data.userPayload;\n vEntries = logValidator.validate(\n savedUserPayload.schema,\n savedUserPayload.payload,\n true\n );\n this._processValidationResults(\n schemaUtil.getSchemaId(savedUserPayload.schema),\n savedUserPayload.payload,\n vEntries\n );\n data.userPayload = undefined;\n }\n\n vEntries = logValidator.validate(schema, data, true);\n this._processValidationResults(schemaUtil.getSchemaId(schema), data, vEntries);\n\n if (savedUserPayload !== undefined) {\n // Restore userPayload\n data.userPayload = savedUserPayload;\n }\n }\n\n private _processValidationResults(\n schemaId: string,\n data: SchematizedData,\n ventries: ValidationEntry[]\n ): void {\n for (let i = 0; i < ventries.length; i += 1) {\n const ei = ventries[i];\n\n if (\n ei.errorCode == ErrorCode.stringLengthOverflowAppLimit ||\n ei.errorCode == ErrorCode.itemCountOverflowAppLimit\n ) {\n const lfi = ei.fields.length - 1;\n const obj = this._traverseFields(data, ei.fields.slice(0, lfi));\n const field = ei.fields[lfi];\n if (ei.errorCode == ErrorCode.stringLengthOverflowAppLimit) {\n obj[field] = obj[field].substring(0, maxStringLengthAppLimit);\n } else {\n obj[field].splice(maxItemCountAppLimit);\n }\n } else {\n throw new Error(ei.asMessage(schemaId));\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _traverseFields(data: SchematizedData, fields: string[]): any {\n if (!fields.length) {\n return data;\n }\n return this._traverseFields(data[fields[0]], fields.slice(1));\n }\n\n getUpCounters(): Metric<number>[] {\n return this._metrics.getUpCounters().filter((m) => m.getLastUpdatedOn());\n }\n\n getValueRecorders(): Metric<number[]>[] {\n return this._metrics.getValueRecorders().filter((m) => m.getLastUpdatedOn());\n }\n\n getBucketHistograms(): BucketMetric<number[]>[] {\n return this._metrics.getBucketHistograms().filter((m) => m.getLastUpdatedOn());\n }\n\n registerForLogPrompt(listener: LogPromptListener): void {\n utility.requireArgument(listener, 'listener', 'function');\n this._nextGen.registerForLogPrompt(listener);\n }\n\n activity<T>(name: string, execute: (act: Activity) => T, options?: ActivityApiOptions): T {\n const act = this.startActivity(name, options);\n try {\n return execute(act);\n } catch (err) {\n act.error(err, options?.errorPayload?.schema, options?.errorPayload?.payload);\n throw err;\n } finally {\n act.stop(options?.stopPayload?.schema, options?.stopPayload?.payload);\n }\n }\n\n async activityAsync<T>(\n name: string,\n execute: (act: Activity) => Promise<T>,\n options?: ActivityApiOptions\n ): Promise<T> {\n const act = this.startActivity(name, options);\n try {\n return await execute(act);\n } catch (err) {\n act.error(err, options?.errorPayload?.schema, options?.errorPayload?.payload);\n throw err;\n } finally {\n act.stop(options?.stopPayload?.schema, options?.stopPayload?.payload);\n }\n }\n}\n","import { RootActivity, Schema } from '../interfaces';\nimport { ActivityDetail } from '../interfaces/ActivityDetail';\nimport { ActivityImpl, onActivityError, onActivityStop } from './ActivityImpl';\nimport { SchematizedData, utility } from 'o11y/shared';\n\nexport class RootActivityImpl extends ActivityImpl implements RootActivity {\n constructor(\n name: string,\n onStopped: onActivityStop,\n onError: onActivityError,\n rootId?: string,\n _isSampled?: boolean\n ) {\n super(\n name,\n undefined,\n onStopped,\n onError,\n undefined,\n rootId || utility.generateUniqueId(32),\n _isSampled\n );\n }\n\n private _preRootId: string;\n get preRootId(): string {\n return this._preRootId;\n }\n set preRootId(value: string) {\n this._preRootId = value;\n }\n\n protected _getDetail(userSchema: Schema, userData: SchematizedData): ActivityDetail {\n const detail = super._getDetail(userSchema, userData);\n detail.isRoot = true;\n detail.preRootId = this.preRootId;\n return detail;\n }\n}\n","import { RootActivity, TracingHeadersOptions } from '../interfaces';\n\nconst rootId: string = new Array(32).fill(0).join('');\nclass RootActivityNoOp implements RootActivity {\n getId(): string {\n return rootId;\n }\n getRootId(): string {\n return undefined;\n }\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n error(): void {}\n\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n stop(): void {}\n\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n discard(): void {}\n\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n terminate(): void {}\n\n getIsSampled(): boolean {\n return false;\n }\n getTraceHeaders(__options: TracingHeadersOptions): Record<string, string> {\n return {};\n }\n getStartTimestamp(): number {\n return undefined;\n }\n getStartPerfTime(): number {\n return undefined;\n }\n getStopPerfTime(): number {\n return undefined;\n }\n}\n\nexport const rootActivityNoOp = Object.freeze(new RootActivityNoOp());\n","import { ActivityDetail, RootActivity } from '../interfaces';\nimport { ActivityData } from '../interfaces-private';\nimport { discarded, onActivityStop } from './ActivityImpl';\nimport { InstrumentationImpl } from './InstrumentationImpl';\nimport { RootActivityImpl } from './RootActivityImpl';\nimport { rootActivityNoOp } from './RootActivityNoOp';\nimport { utility } from 'o11y/shared';\nimport { MetricsImpl } from './MetricsImpl';\nimport { NextgenImpl } from './NextgenImpl';\n\nexport class AppInstrumentationImpl extends InstrumentationImpl {\n private _singleRootActivity: RootActivityImpl; // Not used when _allowMulti = true\n\n private readonly _onRootActivityStoppedCallback: onActivityStop =\n this.handleRootActivityStop.bind(this);\n\n constructor(_nextGen: NextgenImpl, _name: string, private readonly _allowMulti: boolean) {\n super(_nextGen, _name);\n }\n\n startRootActivity(name: string, rootId?: string, isSampled?: boolean): RootActivity {\n return this._safety.tryCatchReturn(() => {\n utility.requireArgument(name, 'name');\n\n const newRootActivity = new RootActivityImpl(\n name,\n this._onRootActivityStoppedCallback,\n this._onActivityErrorCallback,\n rootId,\n isSampled\n );\n\n if (!this._allowMulti) {\n if (this._singleRootActivity && !this._singleRootActivity.isStopped) {\n const preRootId = this._singleRootActivity.getId();\n this._singleRootActivity.terminate();\n newRootActivity.preRootId = preRootId;\n }\n this._singleRootActivity = newRootActivity;\n }\n\n return newRootActivity as RootActivity;\n }, rootActivityNoOp);\n }\n\n private handleRootActivityStop(detail: ActivityDetail): void {\n if (detail.stopReason === discarded) {\n return;\n }\n\n const activityData: ActivityData = this._getActivityData(detail);\n\n this._logActivity(activityData, detail.startTimestamp);\n this._singleRootActivity = undefined;\n }\n\n protected _getActivityData(detail: ActivityDetail): ActivityData {\n const activityData: ActivityData = super._getActivityData(detail);\n activityData.isRoot = detail.isRoot;\n activityData.preRootId = detail.preRootId;\n return activityData;\n }\n\n getSingleRootActivityId(): string {\n return this._singleRootActivity?.getId();\n }\n\n isSingleRootActivitySampled(): boolean {\n return this._singleRootActivity?.getIsSampled();\n }\n\n protected _initMetrics(): MetricsImpl {\n return new MetricsImpl(this.name, () => this.name);\n }\n}\n","import { Instrumentation } from '../interfaces';\nimport { utility } from 'o11y/shared';\n\nconst pathLimit = 5;\n\nexport class AutomaticClickTracker {\n private instr: Instrumentation;\n private ignoredEvent: Event;\n private isActive = false;\n private document: Document;\n private readonly _boundClickListener = this.clickListener.bind(this);\n\n constructor(instrumentation: Instrumentation, document: Document) {\n utility.requireArgument(instrumentation, 'instrumentation');\n utility.requireArgument(document, 'document');\n\n this.instr = instrumentation;\n this.document = document;\n }\n\n activate(): void {\n if (!this.isActive) {\n this.document.addEventListener('click', this._boundClickListener, true);\n this.isActive = true;\n }\n }\n\n deactivate(): void {\n if (this.isActive) {\n this.document.removeEventListener('click', this._boundClickListener, true);\n this.isActive = false;\n }\n }\n\n markEventHandled(event: MouseEvent): void {\n this.ignoredEvent = event;\n }\n\n private clickListener(event: MouseEvent): void {\n let eventTargets: EventTarget[] = event.composedPath && event.composedPath();\n if (!eventTargets || !eventTargets.length) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n eventTargets = (event as any).path;\n }\n const handledBy: HTMLElement = this.getClickableElement(eventTargets);\n\n if (handledBy) {\n // Immediate\n setTimeout(() => {\n if (event !== this.ignoredEvent) {\n this.instr.domEvent(event, handledBy, undefined, undefined, {\n _auto: true\n });\n }\n });\n }\n }\n\n private getClickableElement(path: EventTarget[]): HTMLElement {\n const limit = path ? Math.min(path.length, pathLimit) : 0;\n for (let x = 0; x < limit; x += 1) {\n const currentElement = path[x] as HTMLElement;\n const tagName = currentElement.tagName && currentElement.tagName.toLowerCase();\n if (tagName === 'a' || tagName === 'button') {\n return currentElement;\n }\n if (tagName === 'input') {\n const inputElement = currentElement as HTMLInputElement;\n if (inputElement.type && inputElement.type.toLowerCase() === 'button') {\n return inputElement;\n }\n }\n }\n return undefined;\n }\n}\n","import {\n BucketMetric,\n BufferedLog,\n Instrumentation,\n InstrumentationContext,\n InstrumentedAppMethods,\n InstrumentedAppOptions,\n LogCollector,\n LogCollectorOptions,\n LogMeta,\n Metric,\n MetricsCollector,\n Nextgen,\n PayloadProvider,\n Schema,\n SchematizedPayload\n} from '../interfaces';\nimport { AppInstrumentationImpl } from './AppInstrumentationImpl';\nimport { AutomaticClickTracker } from './AutomaticClickTracker';\nimport { InstrumentationImpl } from './InstrumentationImpl';\nimport { Tracing } from './Tracing';\nimport { LogPromptListener, SchematizedData, schemaUtil, utility } from 'o11y/shared';\n\nconst maxInstrumentationLength = 80;\nconst truncatedText = '_CUT';\nconst maxInstrumentationLengthBeforeTruncated = maxInstrumentationLength - truncatedText.length;\n\nexport class NextgenImpl implements Nextgen {\n private readonly _logCollectors = new Set<LogCollector>();\n private readonly _instruments = new Map<string, InstrumentationImpl | AppInstrumentationImpl>();\n private readonly _seqBySchema = new Map<string, number>();\n private _sequence = 0;\n private _appInstr: AppInstrumentationImpl;\n private _autoClickTracker: AutomaticClickTracker;\n private _metricsCollector: MetricsCollector;\n private _appPayloadProvider: PayloadProvider;\n private _pagePayloadProvider: PayloadProvider;\n private _forceDisabledLogCollectors = new Set<LogCollector>();\n private _logCollectorFailures = new Map<LogCollector, number>();\n private static _collectorFailureLimit = 5;\n private _isBufferingEnabled = false;\n private _buffer: BufferedLog[] = [];\n private readonly _logCollectionListeners = new Set<LogPromptListener>();\n\n get pagePayloadProvider(): PayloadProvider {\n return this._pagePayloadProvider;\n }\n set pagePayloadProvider(provider: PayloadProvider) {\n this._pagePayloadProvider = provider;\n }\n\n get appPayloadProvider(): PayloadProvider {\n return this._appPayloadProvider;\n }\n set appPayloadProvider(provider: PayloadProvider) {\n this._appPayloadProvider = provider;\n }\n\n registerApp(name: string, options?: InstrumentedAppOptions): InstrumentedAppMethods {\n utility.requireArgument(name, 'name', 'string');\n if (this._appInstr) {\n throw new Error('An app has already been registered with instrumentation.');\n }\n const instr = this._instruments.get(name);\n if (instr) {\n throw new Error(`The instrumentation name ${name} is already taken`);\n }\n this._appInstr = new AppInstrumentationImpl(\n this,\n name,\n options && options.allowMultipleRootActivities\n );\n this._instruments.set(name, this._appInstr);\n this._isBufferingEnabled = options && options.enableBuffering;\n\n const tracing = new Tracing(this._appInstr);\n\n return {\n log: this._appInstr.log.bind(this._appInstr),\n error: this._appInstr.error.bind(this._appInstr),\n startActivity: this._appInstr.startActivity.bind(this._appInstr),\n domEvent: this._appInstr.domEvent.bind(this._appInstr),\n incrementCounter: this._appInstr.incrementCounter.bind(this._appInstr),\n trackValue: this._appInstr.trackValue.bind(this._appInstr),\n bucketValue: this._appInstr.bucketValue.bind(this._appInstr),\n networkInstrumentation: tracing.networkInstrumentation.bind(tracing),\n registerForLogPrompt: this._appInstr.registerForLogPrompt.bind(this._appInstr),\n activity: this._appInstr.activity.bind(this._appInstr),\n activityAsync: this._appInstr.activityAsync.bind(this._appInstr),\n\n startRootActivity: this._appInstr.startRootActivity.bind(this._appInstr),\n registerLogCollector: this.registerLogCollector.bind(this),\n registerMetricsCollector: this.registerMetricsCollector.bind(this),\n activateClickTracker: this.activateClickTracker.bind(this),\n deactivateClickTracker: this.deactivateClickTracker.bind(this),\n disableBuffering: this.disableBuffering.bind(this),\n promptLogCollection: this.promptLogCollection.bind(this)\n };\n }\n\n getInstrumentation(name: string): Instrumentation {\n utility.requireArgument(name, 'name', 'string');\n if (name.length > maxInstrumentationLength) {\n // don't throw if it's too long. just add truncated suffix, but stay within max length\n name = name.substr(0, maxInstrumentationLengthBeforeTruncated) + truncatedText;\n }\n let instr: InstrumentationImpl | AppInstrumentationImpl = this._instruments.get(name);\n if (!instr) {\n instr = new InstrumentationImpl(this, name);\n this._instruments.set(name, instr);\n } else if (instr === this._appInstr) {\n throw new Error(`The instrumentation name ${name} is being used by the app.`);\n }\n return instr;\n }\n\n get appName(): string {\n return this._appInstr && this._appInstr.name;\n }\n\n // This is an internal method that needs to be public\n addLog(\n loggerName: string,\n schema: Schema,\n data: SchematizedData,\n timestamp: number,\n rootId: string,\n pagePayload: SchematizedPayload,\n appPayload: SchematizedPayload\n ): number {\n this._sequence += 1;\n\n const schemaId = schemaUtil.getSchemaId(schema);\n let schemaSequence = this._seqBySchema.get(schemaId) || 0;\n schemaSequence += 1;\n this._seqBySchema.set(schemaId, schemaSequence);\n\n const logMeta: LogMeta = {\n timestamp,\n rootId,\n sequence: this._sequence,\n schemaSequence,\n loggerName,\n pagePayload: pagePayload ? utility.clone(pagePayload) : undefined,\n appPayload: appPayload ? utility.clone(appPayload) : undefined,\n loggerAppName: this.appName,\n connectionType: utility.getConnectionType()\n };\n\n if (this._isBufferingEnabled) {\n // Always push to the buffer, even if no eligible collectors\n this._buffer.push({ schema, data: utility.clone(data), logMeta });\n }\n\n const eligibleCollectors: LogCollector[] = Array.from(this._logCollectors).filter(\n (collector: LogCollector) =>\n !this._forceDisabledLogCollectors.has(collector) &&\n !(collector.getIsCollectDisabled && collector.getIsCollectDisabled())\n );\n\n if (eligibleCollectors.length > 0) {\n for (const collector of eligibleCollectors) {\n // Make a copy of the aguments passed to the collectors lest they change them.\n const dataClone: SchematizedData = utility.clone(data);\n let failures: number = this._logCollectorFailures.get(collector) || 0;\n\n try {\n collector.collect(schema, dataClone, logMeta);\n // if it got here it means it succeeded/didn't throw so we want to decrement the failure count\n if (failures > 0) {\n this._logCollectorFailures.set(collector, failures - 1);\n }\n } catch (err) {\n failures += 1;\n // If a collector fails too much we just disable it\n if (failures >= NextgenImpl._collectorFailureLimit) {\n this._forceDisabledLogCollectors.add(collector);\n if (this._appInstr && (typeof err === 'string' || err instanceof Error)) {\n this._appInstr.error(err);\n }\n } else {\n this._logCollectorFailures.set(collector, failures);\n // We can't log an error here, or the same collector will immediately be called\n // again, likely resulting in repeat exceptions until the collector gets disabled.\n }\n }\n }\n }\n return this._sequence;\n }\n\n getBuffer(): BufferedLog[] {\n return this._buffer;\n }\n\n disableBuffering(): void {\n this._isBufferingEnabled = false;\n this._buffer = [];\n }\n\n getClickTracker(): AutomaticClickTracker {\n return this._autoClickTracker;\n }\n\n getDefaultInstrumentationContext(): InstrumentationContext {\n return {\n rootId: this._appInstr?.getSingleRootActivityId(),\n isRootActivitySampled: this._appInstr?.isSingleRootActivitySampled()\n };\n }\n\n activateClickTracker(): void {\n if (!this._autoClickTracker) {\n this._autoClickTracker = new AutomaticClickTracker(this._appInstr, window.document);\n }\n this._autoClickTracker.activate();\n }\n\n deactivateClickTracker(): void {\n if (this._autoClickTracker) {\n this._autoClickTracker.deactivate();\n // In case activateClickTracker is called later with a different instrumentation\n this._autoClickTracker = undefined;\n }\n }\n\n registerLogCollector(collector: LogCollector, options?: LogCollectorOptions): void {\n utility.requireArgument(collector, 'collector');\n if (this._logCollectors.has(collector)) {\n return;\n }\n this._logCollectors.add(collector);\n this._logCollectorFailures.set(collector, 0);\n if (\n (!collector.getIsCollectDisabled || !collector.getIsCollectDisabled()) &&\n options &&\n options.retroactive\n ) {\n for (const log of this._buffer) {\n collector.collect(log.schema, log.data, log.logMeta);\n }\n }\n }\n\n registerMetricsCollector(collector: MetricsCollector): void {\n utility.requireArgument(collector, 'collector');\n if (this._metricsCollector) {\n throw new Error('A metrics Collector is already registered.');\n }\n this._metricsCollector = collector;\n this._metricsCollector.receiveMetricsExtractors({\n getAllUpCounters: this.getAllUpCounters.bind(this),\n getAllValueRecorders: this.getAllValueRecorders.bind(this),\n getAllBucketHistograms: this.getAllBucketHistograms.bind(this)\n });\n }\n\n private getAllUpCounters(): Metric<number>[] {\n const arrOfArrs = Array.from(this._instruments.values()).map((instr) =>\n instr.getUpCounters()\n );\n return arrOfArrs.reduce((pv, cv) => pv.concat(cv), []);\n }\n\n private getAllValueRecorders(): Metric<number[]>[] {\n const arrOfArrs = Array.from(this._instruments.values()).map((instr) =>\n instr.getValueRecorders()\n );\n return arrOfArrs.reduce((pv, cv) => pv.concat(cv), []);\n }\n\n private getAllBucketHistograms(): BucketMetric<number[]>[] {\n const arrOfArrs = Array.from(this._instruments.values()).map((instr) =>\n instr.getBucketHistograms()\n );\n return arrOfArrs.reduce((pv, cv) => pv.concat(cv), []);\n }\n\n registerForLogPrompt(listener: LogPromptListener): void {\n this._logCollectionListeners.add(listener);\n }\n\n promptLogCollection(reason: string): void {\n for (const listener of this._logCollectionListeners.keys()) {\n try {\n listener(reason);\n } catch (err) {\n if (!utility.isProduction) {\n throw err;\n }\n }\n }\n }\n}\n","import { Instrumentation, InstrumentedAppMethods, InstrumentedAppOptions } from './interfaces';\nimport { NextgenImpl } from './library/NextgenImpl';\nimport { utility } from 'o11y/shared';\n\nclass Index {\n private _nextgen: NextgenImpl;\n // We are lazily initializing the singleton to allow any options to be processed\n // before the instantiation.\n private get _lazyNextGen(): NextgenImpl {\n if (!this._nextgen) {\n this._nextgen = new NextgenImpl();\n }\n return this._nextgen;\n }\n\n public registerInstrumentedApp(\n name: string,\n options?: InstrumentedAppOptions\n ): InstrumentedAppMethods {\n if (!options || options.isProduction !== false) {\n // Do this before construction\n // Production by default\n utility.markProduction();\n }\n const retVal: InstrumentedAppMethods = this._lazyNextGen.registerApp(name, options);\n if (options) {\n this._nextgen.appPayloadProvider = options.appPayloadProvider;\n this._nextgen.pagePayloadProvider = options.pagePayloadProvider;\n }\n return retVal;\n }\n\n public getInstrumentation(name?: string): Instrumentation {\n return this._lazyNextGen.getInstrumentation(name);\n }\n}\nconst index = new Index(); // singleton\nconst registerInstrumentedApp = index.registerInstrumentedApp.bind(index);\nconst getInstrumentation = index.getInstrumentation.bind(index);\nconst time = utility.time.bind(utility);\n\nexport { registerInstrumentedApp, getInstrumentation, time };\n","import { TaskerMulti, TaskerSingle } from '../interfaces/IdleDetector';\n\nexport type TaskDoneNotifier = () => void;\n\nexport class TaskerImpl implements TaskerSingle, TaskerMulti {\n private _busyCount = 0;\n private _isOk = true; // Once an error occurs, make operations no-op\n\n get isBusy(): boolean {\n return this._isOk ? this._busyCount > 0 : undefined;\n }\n\n constructor(\n public readonly name: string,\n initialCount: number,\n private readonly _doneCallback: TaskDoneNotifier,\n private readonly _overDoneCallback: TaskDoneNotifier\n ) {\n this._busyCount = initialCount;\n }\n\n add(): void {\n if (this._isOk) {\n this._busyCount += 1;\n }\n }\n done(): void {\n if (this._isOk) {\n if (this._busyCount > 0) {\n this._busyCount -= 1;\n if (!this._busyCount) {\n this._doneCallback();\n }\n } else {\n this._isOk = false;\n this._overDoneCallback();\n }\n }\n }\n}\n","import { getInstrumentation } from '../index';\nimport {\n IdleDetector,\n IdleDetectorOptions,\n IdleDetectorReport,\n Instrumentation\n} from '../interfaces';\nimport {\n IdleDetectedListener,\n IsBusyChecker,\n TaskerMulti,\n TaskerSingle\n} from '../interfaces/IdleDetector';\nimport { TaskerImpl } from './TaskerImpl';\nimport { utility } from 'o11y/shared';\nimport { idleDetectorReportSchema } from 'o11y_schema/sf_instrumentation';\n\nconst defaultLogThreshold = 300;\n\ntype TaskReportEntry = {\n name: string;\n start: number;\n end: number;\n};\n\ntype PollableReportEntry = {\n name: string;\n count: number;\n};\n\nexport class IdleDetectorImpl implements IdleDetector {\n private readonly _instr: Instrumentation = getInstrumentation('IdleDetector');\n private readonly _taskers = new Map<TaskerImpl, TaskReportEntry>();\n private readonly _listeners = new Set<IdleDetectedListener>();\n private readonly _busyCheckers = new Map<IsBusyChecker, string>();\n private readonly _logThreshold: number = defaultLogThreshold;\n private readonly _endedTasks = new Array<TaskReportEntry>();\n private readonly _pollableReport = new Array<PollableReportEntry>();\n private _firstCallbackTime: number;\n private _timerCheckQueued = 0; // timerIds are always positive integers. 0 means nothing is queued\n\n constructor(options?: IdleDetectorOptions) {\n if (\n utility.requireArgumentIfDefined(\n options?.logThreshold,\n 'options.logThreshold',\n 'number'\n )\n ) {\n this._logThreshold = options.logThreshold;\n }\n }\n\n requestIdleDetectedCallback(callback: IdleDetectedListener): void {\n utility.requireArgument(callback, 'callback', 'function');\n if (this._listeners.size === 0) {\n this._firstCallbackTime = utility.time().perfNow;\n }\n this._listeners.add(callback);\n this.checkIfLoaded();\n }\n\n private reportTaskEnded(tasker: TaskerImpl): void {\n // Report only if we have any listeners\n if (this._listeners.size) {\n const snapshot = Object.assign({}, this._taskers.get(tasker));\n this._endedTasks.push(snapshot);\n }\n }\n\n declareNotifierTaskSingle(name: string): TaskerSingle {\n utility.requireArgument(name, 'name', 'string');\n const tasker = this.addTasker(name, 1);\n\n const retVal: TaskerSingle = {\n get isBusy() {\n return tasker.isBusy;\n },\n done: () => {\n tasker.done();\n this._taskers.delete(tasker);\n }\n };\n\n return retVal;\n }\n\n declareNotifierTaskMulti(name: string, existingBusyCount = 0): TaskerMulti {\n utility.requireArgument(name, 'name', 'string');\n if (existingBusyCount !== undefined) {\n utility.requireArgument(existingBusyCount, 'existingBusyCount', 'number');\n\n if (\n existingBusyCount < 0 ||\n parseInt(existingBusyCount.toString(), 10) !== existingBusyCount\n ) {\n // Remove decimal points to make sure it's an integer\n throw new Error('existingBusyCount accepts only non-negative integers');\n }\n }\n const tasker = this.addTasker(name, existingBusyCount);\n\n const retVal: TaskerMulti = {\n get isBusy() {\n return tasker.isBusy;\n },\n add: () => {\n if (!tasker.isBusy) {\n const meta = this._taskers.get(tasker);\n meta.start = utility.time().perfNow;\n meta.end = undefined;\n }\n tasker.add();\n },\n done: tasker.done.bind(tasker) // Note: don't delete multi tasker\n };\n return retVal;\n }\n\n declarePollableTaskMulti(name: string, isBusyChecker: IsBusyChecker): void {\n utility.requireArgument(name, 'name', 'string');\n utility.requireArgument(isBusyChecker, 'isBusyChecker', 'function');\n\n this._busyCheckers.set(isBusyChecker, name);\n }\n\n private addTasker(name: string, existingBusyCount: number): TaskerImpl {\n const tasker = new TaskerImpl(\n name,\n existingBusyCount,\n () => {\n // Done callback\n this._taskers.get(tasker).end = utility.time().perfNow;\n this.reportTaskEnded(tasker);\n this.checkIfLoaded();\n },\n () => {\n // Overdone callback\n this._instr.error(`Overdone: ${tasker.name}`);\n utility.noProdThrow(`Tasker '${tasker.name}' is done too many times.`);\n }\n );\n this._taskers.set(tasker, {\n name,\n start: existingBusyCount > 0 ? utility.time().perfNow : undefined,\n end: undefined\n });\n return tasker;\n }\n\n private areAllNotifiersIdle(): boolean {\n return !Array.from(this._taskers.keys()).some((t) => t.isBusy);\n }\n\n private getFirstBusyPollable(): string {\n const entry = Array.from(this._busyCheckers).find((entry) => {\n const isBusyChecker = entry[0];\n const name = entry[1];\n try {\n return isBusyChecker();\n } catch (e) {\n this._instr.error(e, `BusyChecker ${name}`);\n utility.noProdThrow(e);\n return false; // Not busy\n }\n });\n\n return entry ? entry[1] : undefined;\n }\n\n private checkIfLoaded(): void {\n if (!this._listeners.size) {\n // bail out early. We don't have any callbacks queued\n return;\n }\n\n // We restart the idle timer check logic whenever we get an external\n // trigger that a resource was loaded since that would imply that more\n // work could be queued up and we want to be aware of that\n if (this._timerCheckQueued) {\n window.clearTimeout(this._timerCheckQueued);\n }\n\n if (this.areAllNotifiersIdle()) {\n // Enqueue two RAF to make sure nothing got queued in this js cycle\n // note the use of double setTimeout. We want our setTimeout to queue up after\n // any set timeouts queued within micro tasks that may run after processing this\n // xhr response.\n // Here's a sample timeline\n // .....[ Single Event Loop ].....................................\n // .....[XHR callback][checkIfLoaded][microtasks]-[1st setTimeout]....[2nd setTimeout]\n // ^\n // queue settimeout at the end of event loop --->|\n this._timerCheckQueued = window.setTimeout(() => {\n this._timerCheckQueued = window.setTimeout(() => {\n this.doubleCheck();\n }, 40);\n }, 0);\n }\n }\n\n private doubleCheck(): void {\n this._timerCheckQueued = 0;\n\n if (this.areAllNotifiersIdle()) {\n const pollableName: string = this.getFirstBusyPollable();\n if (pollableName !== undefined) {\n // we'll have to keep polling until polled operations finish\n this.addToPollableReport(pollableName);\n this._timerCheckQueued = window.setTimeout(() => {\n this.doubleCheck();\n }, 15);\n } else {\n // OK!! We are certified idle.\n const maxDuration = utility.time().perfNow - this._firstCallbackTime;\n\n // Take a snapshot of internal variables so that we don't get confused\n // if tasks are created or listeners or worse, get into an infinite loop\n // if idle is requested\n const listeners = Array.from(this._listeners.values());\n this._listeners.clear();\n\n this._firstCallbackTime = undefined;\n const endedTasks = this._endedTasks.splice(0);\n const pollableReport = this._pollableReport.splice(0);\n\n this.notify(listeners, maxDuration, endedTasks, pollableReport);\n }\n }\n }\n\n private addToPollableReport(name: string): void {\n const lastEntry: PollableReportEntry = this._pollableReport.length\n ? this._pollableReport[this._pollableReport.length - 1]\n : undefined;\n\n if (lastEntry?.name === name) {\n lastEntry.count += 1;\n } else {\n this._pollableReport.push({\n name,\n count: 1\n });\n }\n }\n\n private notify(\n listeners: IdleDetectedListener[],\n maxDuration: number,\n taskReport: Array<TaskReportEntry>,\n pollableReport: Array<PollableReportEntry>\n ): void {\n if (maxDuration >= this._logThreshold) {\n const logData: IdleDetectorReport = this._getReport(\n maxDuration,\n listeners.length,\n taskReport,\n pollableReport\n );\n this._instr.log(idleDetectorReportSchema, logData);\n }\n\n const tsNow = utility.time().tsNow;\n for (const [index, listener] of listeners.entries()) {\n try {\n listener(tsNow);\n } catch (e) {\n this._instr.error(e, `Listener #${index}`);\n utility.noProdThrow(e);\n }\n }\n }\n\n getReport(): IdleDetectorReport {\n const perfNow = utility.time().perfNow;\n const maxDuration =\n this._firstCallbackTime > 0 ? perfNow - this._firstCallbackTime : undefined;\n\n const onGoingTasks: Array<TaskReportEntry> = Array.from(this._taskers.entries())\n .filter((e) => e[0].isBusy)\n .map((e) => ({\n name: e[1].name,\n start: e[1].start,\n end: perfNow\n }));\n return this._getReport(\n maxDuration,\n this._listeners.size,\n this._endedTasks.concat(onGoingTasks),\n this._pollableReport\n );\n }\n\n private _getReport(\n maxDuration: number,\n listenerCount: number,\n taskReport: Array<TaskReportEntry>,\n pollableReport: Array<PollableReportEntry>\n ): IdleDetectorReport {\n const sortedTaskers = taskReport\n .map((t) => ({\n name: t.name,\n duration: t.end - t.start\n }))\n .sort((a, b) => b.duration - a.duration);\n return {\n logThreshold: this._logThreshold,\n maxDuration,\n listenerCount,\n pollableCount: this._busyCheckers.size,\n busyTasks: sortedTaskers.map((t) => t.name),\n busyDurations: sortedTaskers.map((t) => t.duration),\n pollables: pollableReport.map((p) => p.name),\n pollCounts: pollableReport.map((p) => p.count)\n };\n }\n}\n","import { Environment, LogCollector, LogMeta, Schema } from '../interfaces';\nimport { SchematizedData, schemaUtil } from 'o11y/shared';\n\ntype ColorMap = Record<string, string>;\n\nconst bgColorMap: ColorMap = {\n Error: 'Crimson',\n Activity: 'CadetBlue',\n InstrumentedEvent: 'DarkOliveGreen',\n O11ySample: 'BlueViolet'\n};\nconst colorMap: ColorMap = {\n Error: 'white',\n Activity: 'white',\n InstrumentedEvent: 'white',\n O11ySample: 'white'\n};\nconst defaultColor = 'black';\nconst defaultBgColor = 'Gainsboro';\n\nexport class ConsoleCollector implements LogCollector {\n constructor(environment?: Environment) {\n if (environment) {\n this._log('ConsoleCollector', environment);\n }\n }\n\n collect(schema: Schema, data: SchematizedData, logMeta: LogMeta): void {\n let label, color, bgColor;\n if (schema.namespace === 'sf.instrumentation') {\n label = schema.name;\n color = colorMap[schema.name] || defaultColor;\n bgColor = bgColorMap[schema.name] || defaultBgColor;\n } else {\n label = schemaUtil.getSchemaId(schema);\n }\n\n this._log(label, data, logMeta, color, bgColor);\n }\n\n private _log(\n label: string,\n first: unknown,\n second?: unknown,\n color: string = defaultColor,\n bgColor: string = defaultBgColor\n ): void {\n const css = `color:${color};background-color:${bgColor}`;\n // eslint-disable-next-line no-console\n console.log(\n `%cO11Y%c ${label}`,\n 'color:white;background-color:#FF6600;font-weight:bold',\n css,\n first || '',\n second || ''\n );\n }\n}\n","// This is the file that exports all `o11y` module level exports.\nimport { IdleDetector } from './interfaces';\nimport { IdleDetectorImpl } from './library/IdleDetectorImpl';\n\nexport const idleDetector: IdleDetector = new IdleDetectorImpl({\n logThreshold: 300\n});\n\nexport * from './index';\nexport { ConsoleCollector } from './console-collector/ConsoleCollector';\n"],"names":["simpleSchema","error","errorSchema","activitySchema","instrumentedEventSchema","idleDetectorReportSchema"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sources":["../../../../src/library/Tracing.ts","../../../../src/library/TimerOverride.ts","../../../../src/library/ActivityImpl.ts","../../../../../../node_modules/o11y_schema/sf_instrumentation/activity.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/error.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/idle_detector_report.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/instrumented_event.js","../../../../../../node_modules/o11y_schema/sf_instrumentation/simple.js","../../../../src/library/ActivityNoOp.ts","../../../../src/library/DomEventHelpers.ts","../../../../src/library/LogValidator.ts","../../../../src/library/BucketHistogramImpl.ts","../../../../src/library/UpCounterImpl.ts","../../../../src/library/ValueRecorderImpl.ts","../../../../src/library/SizeLimitedMap.ts","../../../../src/library/MetricsImpl.ts","../../../../src/library/MockEvent.ts","../../../../src/library/InstrumentationImpl.ts","../../../../src/library/RootActivityImpl.ts","../../../../src/library/RootActivityNoOp.ts","../../../../src/library/AppInstrumentationImpl.ts","../../../../src/library/AutomaticClickTracker.ts","../../../../src/library/NextgenImpl.ts","../../../../src/index.ts","../../../../src/library/TaskerImpl.ts","../../../../src/library/IdleDetectorImpl.ts","../../../../src/console-collector/ConsoleCollector.ts","../../../../src/client.ts"],"sourcesContent":["import {\n Instrumentation,\n TracingHeadersOptions,\n NetworkInstrumentationOptions,\n Activity\n} from '../interfaces';\nimport { utility } from 'o11y/shared';\n\ntype FetchType = (input: RequestInfo, init?: RequestInit) => Promise<Response>;\ntype XhrType = {\n prototype: XMLHttpRequest;\n new (): XMLHttpRequest;\n readonly DONE: number;\n readonly HEADERS_RECEIVED: number;\n readonly LOADING: number;\n readonly OPENED: number;\n readonly UNSENT: number;\n};\ntype XhrSendType = (body?: Document | BodyInit | null) => void;\ninterface O11yXhr extends XMLHttpRequest {\n _o11yActivity: Activity;\n}\n\nconst defaultTraceIdLengthW3 = 32; // 32 Characters = 128 bits\nconst defaultTraceIdLengthB3 = 16; // 16 Characters = 64 bits\nconst defaultSpanIdLength = 16; // 16 Characters = 64 bits\n\n// Headers for W3 tracing (https://www.w3.org/TR/trace-context/#traceparent-header)\nconst headerTraceParent = 'traceparent';\n\n// Headers for B3 tracing (https://github.com/openzipkin/b3-propagation)\nconst headerB3 = 'b3';\nconst headerTraceId = 'X-B3-TraceId';\nconst headerSpanId = 'X-B3-SpanId';\nconst headerSampled = 'X-B3-Sampled';\nconst headerParentSpanId = 'X-B3-ParentSpanId';\n\nconst defaultActivityNameForFetch = 'fetch';\nconst defaultActivityNameForXhrSend = 'xhr_send';\n\nexport class Tracing {\n private static _global = utility.getGlobal();\n private static _originalFetch: FetchType;\n private static _originalXhr: XhrType;\n private static _originalXhrSend: XhrSendType;\n private static _isNetworkInstrumentationEnabled = false;\n\n constructor(private readonly instr: Instrumentation) {\n utility.requireArgument(instr, 'instr', 'object');\n }\n\n private static _getB3CompactFormat(\n traceId: string,\n spanId: string,\n isSampled?: boolean,\n parentSpanId?: string\n ): string {\n // b3={TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}\n // Note: last two fields are optional\n\n let b3 = `${traceId}-${spanId}`;\n\n if (isSampled !== undefined || parentSpanId !== undefined) {\n b3 += isSampled ? '-1' : '-0';\n if (parentSpanId !== undefined) {\n b3 += `-${parentSpanId}`;\n }\n }\n return b3;\n }\n\n private static _getW3CompactFormat(\n traceId: string,\n spanId: string,\n isSampled: boolean\n ): string {\n // traceparent={version}-{trace-id}-{parent-id}-{trace-flags}\n // \"in some tracing systems, parent-id is known as the span-id, where a span is the execution of a client request\"\n return `00-${traceId}-${spanId}-${isSampled ? '01' : '00'}`;\n }\n\n private static _conformTextAsId(text: string, numChars: number): string {\n // First validate\n text = text.toLowerCase();\n const len: number = text.length;\n for (let i = 0; i < len; i += 1) {\n const c = text[i];\n if (!(c >= 'a' && c <= 'f') && !(c >= '0' && c <= '9')) {\n throw new Error(`The text '${text}' has an invalid character at index #${i}`);\n }\n }\n\n if (len > numChars) {\n // Use the right-most characters per spec\n return text.substr(len - numChars);\n }\n if (len < numChars) {\n // Pad left with 0s per spec\n return text.padStart(numChars, '0');\n }\n return text;\n }\n\n public static getHeaders(\n traceId: string,\n spanId: string,\n isSampled?: boolean,\n options?: TracingHeadersOptions\n ): Record<string, string> {\n utility.requireArgument(traceId, 'traceId', 'string');\n utility.requireArgument(spanId, 'spanId', 'string');\n\n const useB3Headers: boolean = options && options.useB3Headers;\n\n traceId = this._conformTextAsId(\n traceId,\n options && options.traceIdEffectiveLength !== undefined\n ? options.traceIdEffectiveLength\n : useB3Headers\n ? defaultTraceIdLengthB3\n : defaultTraceIdLengthW3\n );\n spanId = this._conformTextAsId(spanId, defaultSpanIdLength);\n\n const parentSpanId =\n (options &&\n options.parentSpanId !== undefined &&\n this._conformTextAsId(options.parentSpanId, defaultSpanIdLength)) ||\n undefined;\n\n const headers: Record<string, string> = {};\n\n if (useB3Headers) {\n // By default, use non-compact\n const isCompact: boolean = options && options.useCompactHeader;\n if (isCompact) {\n headers[headerB3] = this._getB3CompactFormat(\n traceId,\n spanId,\n isSampled,\n parentSpanId\n );\n } else {\n headers[headerTraceId] = traceId;\n headers[headerSpanId] = spanId;\n if (parentSpanId !== undefined) {\n headers[headerParentSpanId] = parentSpanId;\n }\n if (isSampled !== undefined) {\n headers[headerSampled] = isSampled ? '1' : '0';\n }\n }\n } else {\n headers[headerTraceParent] = this._getW3CompactFormat(traceId, spanId, isSampled);\n }\n\n return headers;\n }\n\n private _disableNetworkInstrumentation(): void {\n if (Tracing._isNetworkInstrumentationEnabled) {\n if (Tracing._originalFetch) {\n Tracing._global.fetch = Tracing._originalFetch;\n Tracing._originalFetch = undefined;\n }\n if (Tracing._originalXhr) {\n Tracing._global.XMLHttpRequest = Tracing._originalXhr;\n Tracing._originalXhr = undefined;\n }\n if (Tracing._originalXhrSend) {\n Tracing._global.XMLHttpRequest.prototype.send = Tracing._originalXhrSend;\n Tracing._originalXhrSend = undefined;\n }\n Tracing._isNetworkInstrumentationEnabled = false;\n }\n }\n\n private _enableNetworkInstrumentation(\n instr: Instrumentation,\n logErrors: boolean,\n activityName: string,\n useTracing: boolean,\n options: TracingHeadersOptions\n ): void {\n if (typeof Tracing._global.fetch === 'function') {\n this._overrideFetch(instr, logErrors, activityName, useTracing, options);\n Tracing._isNetworkInstrumentationEnabled = true;\n }\n\n if (typeof Tracing._global.XMLHttpRequest === 'function') {\n this._overrideXhr(instr, logErrors, activityName, useTracing, options);\n Tracing._isNetworkInstrumentationEnabled = true;\n }\n }\n\n private _overrideFetch(\n instr: Instrumentation,\n logErrors: boolean,\n activityName: string,\n useTracing: boolean,\n options: TracingHeadersOptions\n ): void {\n Tracing._originalFetch = Tracing._global.fetch;\n const o11yFetch: FetchType = async (url, reqOptions, ...restArgs) => {\n let activity: Activity;\n try {\n activity = instr.startActivity(activityName || defaultActivityNameForFetch);\n\n if (useTracing) {\n reqOptions = reqOptions || {};\n const traceHeaders = activity.getTraceHeaders(options);\n reqOptions.headers = Object.assign(reqOptions.headers || {}, traceHeaders);\n }\n return await Tracing._originalFetch.call(\n Tracing._global,\n url,\n reqOptions,\n ...restArgs\n );\n } catch (ex) {\n if (logErrors) {\n if (activity) {\n activity.error(ex);\n } else {\n instr.error(ex);\n }\n }\n throw ex;\n } finally {\n if (activity) {\n activity.stop();\n }\n }\n };\n Tracing._global.fetch = o11yFetch;\n }\n\n private _overrideXhr(\n instr: Instrumentation,\n logErrors: boolean,\n activityName: string,\n useTracing: boolean,\n options: TracingHeadersOptions\n ): void {\n Tracing._originalXhr = Tracing._global.XMLHttpRequest;\n Tracing._originalXhrSend = Tracing._originalXhr.prototype.send;\n\n Tracing._originalXhr.prototype.send = function (this: O11yXhr, ...args) {\n let activity: Activity;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr: O11yXhr = this;\n try {\n xhr._o11yActivity = activity = instr.startActivity(\n activityName || defaultActivityNameForXhrSend\n );\n if (useTracing) {\n const headers = activity.getTraceHeaders(options);\n\n Object.entries(headers).forEach((entry) => {\n xhr.setRequestHeader(entry[0], entry[1]);\n });\n }\n Tracing._originalXhrSend.call(this, ...args);\n } catch (ex) {\n if (logErrors) {\n if (activity) {\n activity.error(ex);\n } else {\n instr.error(ex);\n }\n }\n if (activity) {\n activity.stop();\n }\n throw ex;\n }\n };\n\n const xhrProxy = new Proxy<XhrType>(Tracing._originalXhr, {\n construct(target: XhrType) {\n const newXhr = new target() as O11yXhr;\n\n // Be the first in the event chain\n newXhr.addEventListener('load', () => {\n const activity = newXhr._o11yActivity;\n if (activity) {\n activity.stop();\n }\n });\n newXhr.addEventListener(\n 'error',\n (__err: ProgressEvent<XMLHttpRequestEventTarget>) => {\n const error = new Error('XHR Network-Level Error');\n const activity = newXhr._o11yActivity;\n if (activity) {\n if (logErrors) {\n activity.error(error);\n }\n activity.stop();\n } else if (logErrors) {\n instr.error(error);\n }\n }\n );\n newXhr.addEventListener('abort', () => {\n const activity = newXhr._o11yActivity;\n if (activity) {\n activity.discard();\n }\n });\n return newXhr;\n }\n });\n\n Tracing._global.XMLHttpRequest = xhrProxy;\n }\n\n networkInstrumentation(options: boolean | NetworkInstrumentationOptions): void {\n utility.requireArgument(options, 'options', ['boolean', 'object']);\n\n if (options) {\n // First disable it if necessary, so we can use the new options if it was already enabled\n this._disableNetworkInstrumentation();\n\n const tracingOptions: NetworkInstrumentationOptions =\n typeof options === 'object' ? options : {};\n\n this._enableNetworkInstrumentation(\n utility.definedValueOrDefault(tracingOptions.instrumentation, this.instr),\n utility.definedValueOrDefault(tracingOptions.logErrors, true),\n tracingOptions.activityName,\n utility.definedValueOrDefault(tracingOptions.useTracing, true),\n tracingOptions.tracingHeadersOptions\n );\n } else {\n // Options is falsy, disable.\n this._disableNetworkInstrumentation();\n }\n }\n}\n","export enum TimerOverride {\n none,\n start,\n stop,\n both\n}\n","import { PublicSafety, SchematizedData, utility } from 'o11y/shared';\n\nimport {\n Activity,\n ActivityDetail,\n ActivityStopOptions,\n Schema,\n TracingHeadersOptions\n} from '../interfaces';\nimport { Tracing } from './Tracing';\nimport { TimerOverride } from './TimerOverride';\nexport const timedout = 'timedout';\nexport const terminated = 'terminated';\nexport const discarded = 'discarded';\n\nconst stopReason = {\n timedout,\n terminated,\n discarded\n};\n\nexport type onActivityStop = (detail: ActivityDetail) => void;\nexport type onActivityError = (error: unknown, detail: ActivityDetail) => void;\n\nexport class ActivityImpl implements Activity {\n protected readonly _id: string;\n private readonly _safety: PublicSafety;\n private readonly _usePerf: boolean;\n protected static _count = 0;\n private readonly _perfId: string;\n private readonly _perfName: string;\n private _startTimestamp: number;\n private _startPerfTime: number;\n private _stopPerfTime: number;\n private _stopReason: string;\n private _timer: NodeJS.Timer;\n private _errorCount = 0;\n private _timerOverridden: TimerOverride = TimerOverride.none;\n\n constructor(\n protected readonly _name: string,\n protected readonly _rootId: string,\n private readonly _onStopped: onActivityStop,\n private readonly _onError: onActivityError,\n timeout?: number,\n id?: string,\n protected readonly _isSampled?: boolean\n ) {\n const { tsNow, perfNow } = utility.time();\n\n ActivityImpl._count += 1;\n this._id = id || utility.generateUniqueId();\n\n this._usePerf =\n typeof performance !== 'undefined' &&\n typeof performance.mark === 'function' &&\n typeof performance.measure === 'function';\n if (this._usePerf) {\n this._perfName = `${this._name}__${ActivityImpl._count}`;\n this._perfId = `${this._name}__${this.id}`;\n try {\n performance.mark(this._perfId);\n } catch {\n this._usePerf = false;\n }\n }\n\n this._startTimestamp = tsNow;\n this._startPerfTime = perfNow;\n\n if (timeout > 0) {\n this._timer = setTimeout(() => {\n this._stopReason = this._stopReason || stopReason.timedout;\n this.stop();\n }, timeout);\n }\n this._safety = new PublicSafety();\n }\n\n get id(): string {\n return this._id;\n }\n\n getId(): string {\n return this.id;\n }\n\n getRootId(): string {\n return this._rootId;\n }\n\n get stopReason(): string {\n return this._stopReason;\n }\n\n error(error: unknown, userSchemaOrText?: Schema | string, userData?: SchematizedData): void {\n this._safety.tryCatch(() => {\n this._errorCount += 1;\n if (typeof error === 'string') {\n error = new Error(error);\n }\n this._onError(error, this._getDetail(userSchemaOrText, userData));\n });\n }\n\n stop(\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n options?: ActivityStopOptions\n ): void {\n this._safety.tryCatch(() => {\n utility.requireArgumentIfDefined(userSchemaOrText, 'userSchemaOrText', [\n 'object',\n 'string'\n ]);\n utility.requireArgumentIfDefined(userData, 'userData', 'object');\n\n if (options) {\n const perfStart: number = options.perfStartOverride;\n const isStartTimeDefined = utility.requireArgumentIfDefined(\n perfStart,\n 'options.perfStartOverride',\n 'number'\n );\n\n const perfStop: number = options.perfStopOverride;\n const isStopTimeDefined = utility.requireArgumentIfDefined(\n perfStop,\n 'options.perfStopOverride',\n 'number'\n );\n\n if (isStartTimeDefined && perfStart < 0) {\n throw new Error('perfStartOverride, if defined, must be >= 0');\n }\n\n if (\n isStopTimeDefined &&\n (perfStop < 0 ||\n perfStop < (isStartTimeDefined ? perfStart : this._startPerfTime))\n ) {\n throw new Error('perfStopOverride, if defined, must be >= 0 and >= startTime');\n }\n }\n\n this._stopInternal(userSchemaOrText, userData, options);\n });\n }\n\n private _overrideTimer(perfStartTime?: number, perfStopTime?: number): void {\n if (perfStartTime !== undefined) {\n this._startTimestamp = Math.round(\n this._startTimestamp - (this._startPerfTime - perfStartTime)\n );\n this._startPerfTime = perfStartTime;\n this._setTimerOverride(TimerOverride.start);\n }\n\n if (perfStopTime !== undefined) {\n this._stopPerfTime = perfStopTime;\n this._setTimerOverride(TimerOverride.stop);\n }\n }\n\n private _setTimerOverride(value: TimerOverride): void {\n if (\n this._timerOverridden === TimerOverride.both ||\n this._timerOverridden === value ||\n value === TimerOverride.none\n ) {\n return;\n }\n this._timerOverridden =\n this._timerOverridden === TimerOverride.none ? value : TimerOverride.both;\n }\n\n private _stopInternal(\n userSchemaOrText: Schema | string,\n userData: SchematizedData,\n options?: ActivityStopOptions\n ): void {\n // First things first.\n const stopPerfTime = utility.perfNow();\n if (this._usePerf) {\n try {\n // Use a more user-friendly name for measure.\n if (this._stopReason !== stopReason.discarded) {\n performance.measure(this._perfName, this._perfId);\n }\n performance.clearMarks(this._perfId);\n performance.clearMeasures(this._perfName);\n } catch {}\n }\n\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = undefined;\n }\n if (this.isStopped) {\n // Already stopped\n return;\n }\n\n if (options) {\n this._overrideTimer(options.perfStartOverride, options.perfStopOverride);\n }\n\n // We may set this already in override so check that here\n this._stopPerfTime =\n this._timerOverridden === TimerOverride.none ||\n this._timerOverridden === TimerOverride.start\n ? stopPerfTime\n : this._stopPerfTime;\n\n const activityDetail: ActivityDetail = this._getDetail(userSchemaOrText, userData);\n this._onStopped(activityDetail);\n }\n\n get isStopped(): boolean {\n return this._stopPerfTime !== undefined;\n }\n\n discard(): void {\n this._safety.tryCatch(() => {\n this._stopReason = this._stopReason || stopReason.discarded;\n this.stop();\n });\n }\n\n terminate(): void {\n this._safety.tryCatch(() => {\n this._stopReason = this._stopReason || stopReason.terminated;\n this.stop();\n });\n }\n\n getIsSampled(): boolean {\n return this._isSampled || false;\n }\n\n protected _getDetail(\n userSchemaOrText: Schema | string,\n userData: SchematizedData\n ): ActivityDetail {\n return {\n id: this._id,\n rootId: this._rootId,\n name: this._name,\n userSchemaOrText: userSchemaOrText,\n userData,\n stopReason: this._stopReason,\n startTimestamp: this._startTimestamp,\n startPerfTime: this._startPerfTime,\n stopPerfTime: this._stopPerfTime,\n errorCount: this._errorCount,\n isSampled: this.getIsSampled(),\n timerOverridden: this._timerOverridden\n };\n }\n\n public getTraceHeaders(options: TracingHeadersOptions): Record<string, string> {\n // Normally, the root activity ID is the traceId.\n // If the activity is root, it's ID is (also) the traceId.\n // If the activity has no root, it's ID is (also) the traceId. i.e. It creates its own trace.\n const spanId = this.id;\n const traceId = this._rootId || spanId;\n\n return Tracing.getHeaders(traceId, spanId, this.getIsSampled(), options);\n }\n\n getStartTimestamp(): number {\n return this._startTimestamp;\n }\n\n getStartPerfTime(): number {\n return this._startPerfTime;\n }\n\n getStopPerfTime(): number {\n return this._stopPerfTime;\n }\n}\n","export const activity={namespace:\"sf.instrumentation\",name:\"Activity\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"Activity\":{\"reserved\":[[5,5],[7,7]],\"fields\":{\"duration\":{\"options\":{},\"id\":3,\"type\":\"double\"},\"stopReason\":{\"options\":{},\"id\":6,\"type\":\"string\"},\"isRoot\":{\"options\":{},\"id\":8,\"type\":\"bool\"},\"timerOverridden\":{\"options\":{},\"id\":12,\"type\":\"uint32\"},\"name\":{\"options\":{\"(meta.max_length)\":25},\"id\":2,\"type\":\"string\"},\"isSampled\":{\"options\":{},\"id\":11,\"type\":\"bool\"},\n\"preRootId\":{\"options\":{},\"id\":9,\"type\":\"string\"},\"id\":{\"options\":{},\"id\":1,\"type\":\"string\"},\"userPayload\":{\"options\":{},\"id\":4,\"type\":\"Payload\"},\"errorCount\":{\"options\":{},\"id\":10,\"type\":\"uint32\"}}},\"Payload\":{\"fields\":{\"payload\":{\"options\":{},\"id\":2,\"type\":\"bytes\"},\"schemaName\":{\"options\":{},\"id\":1,\"type\":\"string\"}}}}}}}}}};","export const error={namespace:\"sf.instrumentation\",name:\"Error\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"Error\":{\"reserved\":[[5,5],[7,7]],\"fields\":{\"activityId\":{\"options\":{},\"id\":6,\"type\":\"string\"},\"stack\":{\"options\":{},\"id\":3,\"type\":\"string\"},\"name\":{\"options\":{},\"id\":1,\"type\":\"string\"},\"message\":{\"options\":{\"(meta.max_length)\":200},\"id\":2,\"type\":\"string\"},\"userPayload\":{\"options\":{},\"id\":4,\"type\":\"Payload\"}}},\"Payload\":{\"fields\":{\"payload\":{\"options\":{},\"id\":2,\"type\":\"bytes\"},\n\"schemaName\":{\"options\":{},\"id\":1,\"type\":\"string\"}}}}}}}}}};","export const idle_detector_report={namespace:\"sf.instrumentation\",name:\"IdleDetectorReport\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"IdleDetectorReport\":{\"options\":{\"(meta.msg.desc)\":\"This is used by the Idle Detector in o11y\"},\"fields\":{\"listenerCount\":{\"options\":{},\"id\":3,\"type\":\"uint32\"},\"busyTasks\":{\"options\":{},\"rule\":\"repeated\",\"id\":5,\"type\":\"string\"},\"busyDurations\":{\"options\":{},\"rule\":\"repeated\",\"id\":6,\"type\":\"double\"},\"pollableCount\":{\"options\":{},\"id\":4,\"type\":\"uint32\"},\n\"pollCounts\":{\"options\":{},\"rule\":\"repeated\",\"id\":8,\"type\":\"double\"},\"logThreshold\":{\"options\":{},\"id\":2,\"type\":\"double\"},\"maxDuration\":{\"options\":{},\"id\":1,\"type\":\"double\"},\"pollables\":{\"options\":{},\"rule\":\"repeated\",\"id\":7,\"type\":\"string\"}}}}}}}}}};","export const instrumented_event={namespace:\"sf.instrumentation\",name:\"InstrumentedEvent\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"MouseEvent\":{\"fields\":{\"cancelable\":{\"options\":{},\"id\":5,\"type\":\"bool\"},\"ctrlKey\":{\"options\":{},\"id\":9,\"type\":\"bool\"},\"type\":{\"options\":{},\"id\":25,\"type\":\"string\"},\"button\":{\"options\":{},\"id\":3,\"type\":\"uint32\"},\"offsetX\":{\"options\":{},\"id\":17,\"type\":\"uint32\"},\"eventPhase\":{\"options\":{},\"id\":12,\"type\":\"uint32\"},\"shiftKey\":{\"options\":{},\"id\":23,\n\"type\":\"bool\"},\"offsetY\":{\"options\":{},\"id\":18,\"type\":\"uint32\"},\"composed\":{\"options\":{},\"id\":8,\"type\":\"bool\"},\"altKey\":{\"options\":{},\"id\":1,\"type\":\"bool\"},\"isTrusted\":{\"options\":{},\"id\":13,\"type\":\"bool\"},\"buttons\":{\"options\":{},\"id\":4,\"type\":\"uint32\"},\"movementY\":{\"options\":{},\"id\":16,\"type\":\"uint32\"},\"clientY\":{\"options\":{},\"id\":7,\"type\":\"uint32\"},\"clientX\":{\"options\":{},\"id\":6,\"type\":\"uint32\"},\"movementX\":{\"options\":{},\"id\":15,\"type\":\"uint32\"},\"defaultPrevented\":{\"options\":{},\"id\":10,\"type\":\"bool\"},\n\"metaKey\":{\"options\":{},\"id\":14,\"type\":\"bool\"},\"timeStamp\":{\"options\":{},\"id\":24,\"type\":\"double\"},\"bubbles\":{\"options\":{},\"id\":2,\"type\":\"bool\"},\"detail\":{\"options\":{},\"id\":11,\"type\":\"int64\"},\"pageY\":{\"options\":{},\"id\":20,\"type\":\"uint32\"},\"pageX\":{\"options\":{},\"id\":19,\"type\":\"uint32\"},\"screenX\":{\"options\":{},\"id\":21,\"type\":\"uint32\"},\"screenY\":{\"options\":{},\"id\":22,\"type\":\"uint32\"}}},\"InstrumentedEvent\":{\"oneofs\":{\"event\":{\"oneof\":[\"mouseEvent\"]}},\"reserved\":[[4,4],\"xpath\",[6,6],[8,8]],\"fields\":{\"mouseEvent\":{\"options\":{},\n\"id\":7,\"type\":\"MouseEvent\"},\"auto\":{\"options\":{},\"id\":3,\"type\":\"bool\"},\"parentComponent\":{\"options\":{},\"id\":2,\"type\":\"string\"},\"ownerComponent\":{\"options\":{},\"id\":1,\"type\":\"string\"},\"userPayload\":{\"options\":{},\"id\":5,\"type\":\"Payload\"},\"simplePath\":{\"options\":{},\"id\":9,\"type\":\"string\"}}},\"Payload\":{\"fields\":{\"payload\":{\"options\":{},\"id\":2,\"type\":\"bytes\"},\"schemaName\":{\"options\":{},\"id\":1,\"type\":\"string\"}}}}}}}}}};","export const simple={namespace:\"sf.instrumentation\",name:\"Simple\",pbjsSchema:{\"nested\":{\"sf\":{\"nested\":{\"instrumentation\":{\"nested\":{\"Simple\":{\"options\":{\"(meta.msg.desc)\":\"This message is used internally to allow convenient logging of simple text via the API without requiring a schema.\"},\"fields\":{\"text\":{\"options\":{\"(meta.max_length)\":25},\"id\":1,\"type\":\"string\"}}}}}}}}}};","import { Activity, TracingHeadersOptions } from '../interfaces';\n\nconst id: string = new Array(16).fill(0).join('');\nclass ActivityNoOp implements Activity {\n getId(): string {\n return id;\n }\n getRootId(): string {\n return undefined;\n }\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n error(): void {}\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n stop(): void {}\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n discard(): void {}\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n terminate(): void {}\n\n getIsSampled(): boolean {\n return false;\n }\n getTraceHeaders(__options: TracingHeadersOptions): Record<string, string> {\n return {};\n }\n getStartTimestamp(): number {\n return undefined;\n }\n getStartPerfTime(): number {\n return undefined;\n }\n getStopPerfTime(): number {\n return undefined;\n }\n}\n\nexport const activityNoOp = Object.freeze(new ActivityNoOp());\n","import { SchematizedPayload } from '../interfaces';\nimport { InstrumentedEventData, MouseEventData } from '../interfaces-private';\nimport { DomEventData } from '../types/TypeDefinitions-Private';\nimport { schemaUtil, utility } from 'o11y/shared';\n\nexport class DomEventHelpers {\n getInstrumentedEventData(\n eventData: DomEventData,\n handledBy: HTMLElement,\n userPayload: SchematizedPayload\n ): InstrumentedEventData {\n const instrumentedEvent: InstrumentedEventData = {\n ownerComponent: handledBy.tagName,\n parentComponent:\n (handledBy.parentElement && handledBy.parentElement.tagName) || undefined,\n event: eventData,\n simplePath: utility.getXpath(handledBy)\n };\n\n if (userPayload) {\n instrumentedEvent.userPayload = schemaUtil.makePayload(\n userPayload.schema,\n userPayload.payload,\n true\n );\n }\n\n return instrumentedEvent;\n }\n\n getMouseEventData(e: MouseEvent): MouseEventData {\n return {\n altKey: e.altKey,\n bubbles: e.bubbles,\n button: e.button,\n buttons: e.buttons,\n cancelable: e.cancelable,\n clientX: e.clientX,\n clientY: e.clientY,\n composed: e.composed,\n defaultPrevented: e.defaultPrevented,\n detail: e.detail,\n eventPhase: e.eventPhase,\n isTrusted: e.isTrusted,\n timeStamp: e.timeStamp,\n type: e.type,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n movementX: e.movementX,\n movementY: e.movementY,\n offsetX: e.offsetX,\n offsetY: e.offsetY,\n pageX: e.pageX,\n pageY: e.pageY,\n screenX: e.screenX,\n screenY: e.screenY,\n shiftKey: e.shiftKey\n };\n }\n}\n\nconst singleton = new DomEventHelpers();\nexport const domEventHelpers = singleton;\n","import { IType, Schema, SchemaTokens } from '../interfaces';\nimport {\n PbjsNestedObjectDescriptor,\n SchematizedData,\n SchematizedDataValue,\n schemaUtil,\n utility\n} from 'o11y/shared';\n\n// These are hard-coded limits at the app-level. They may be overridden with a corresponding\n// option at the field level in the schema metadata.\nexport const maxStringLengthAppLimit = 10000; // For strings\nexport const maxItemCountAppLimit = 10000; // For arrays\n\nconst minUnsigned = 0;\nconst maxFourBytes = 2147483647;\nconst minFourBytes = -2147483648;\nconst maxFourBytesUnsigned = 4294967295;\nconst maxEightBytes = 9223372036854776000;\nconst minEightBytes = -9223372036854776001;\nconst maxEightBytesUnsigned = 18446744073709552000;\n\nexport const enum ErrorCode {\n notAnError = 0, // To ensure truthy-checks work for proper error codes.\n arrayExpected,\n incorrectType,\n infiniteNumber,\n numberOutOfRange,\n malformedBytesArray,\n stringLengthOverflowAppLimit,\n itemCountOverflowAppLimit,\n stringLengthOverflow,\n stringLengthUnderflow,\n itemCountOverflow,\n itemCountUnderflow\n}\n\nexport class ValidationEntry {\n constructor(\n public errorCode: ErrorCode,\n public fields: string[],\n public expected?: string,\n public received?: string\n ) {}\n\n asMessage(schemaId: string): string {\n const key: string =\n this.fields[0] +\n this.fields\n .slice(1)\n .reduce(\n (prev, current) =>\n Number(current) >= 0 ? `${prev}[${current}]` : `${prev}.${current}`,\n ''\n );\n let msg: string;\n\n switch (this.errorCode) {\n case ErrorCode.arrayExpected:\n msg = 'Repeated field must be an array';\n break;\n case ErrorCode.incorrectType:\n msg = `Expected type ${this.expected} but received type ${this.received}`;\n break;\n case ErrorCode.infiniteNumber:\n msg = 'Value must be finite';\n break;\n case ErrorCode.numberOutOfRange:\n msg = 'Value is out of range for its type';\n break;\n case ErrorCode.malformedBytesArray:\n msg = 'Bytes array is malformed';\n break;\n case ErrorCode.stringLengthOverflowAppLimit:\n msg = 'Exceeded app limit for maximum string length';\n break;\n case ErrorCode.itemCountOverflowAppLimit:\n msg = 'Exceeded app limit for item count';\n break;\n // TODO: The following should be used when we start validating against schema metadata\n // case ErrorCode.stringLengthOverflow:\n // msg = 'Exceeded maximum string length';\n // break;\n // case ErrorCode.stringLengthUnderflow:\n // msg = 'Failed minimum string length';\n // break;\n // case ErrorCode.itemCountOverflow:\n // msg = 'Exceeded maximum item count';\n // break;\n // case ErrorCode.itemCountUnderflow:\n // msg = 'Failed minimum item count';\n // break;\n default:\n msg = `Unknown error code: ${this.errorCode}`;\n break;\n }\n\n return `Schema ${schemaId} on field \"${key}\": ${msg}`;\n }\n}\n\nclass LogValidator {\n public validate(schema: Schema, data: SchematizedData, noThrow = false): ValidationEntry[] {\n const schemaTokens: SchemaTokens = schemaUtil.checkSchema(schema);\n utility.requireArgument(data, 'data', 'object');\n\n const schemaId: string = schemaUtil.getSchemaId(schema);\n\n const errorInfos = new Array<ValidationEntry>();\n\n const nestedSchema: PbjsNestedObjectDescriptor = schemaUtil.getTypes(schema);\n this.validateFields(\n errorInfos,\n [],\n data,\n nestedSchema[schemaTokens.message] as IType,\n nestedSchema,\n schemaId\n );\n\n if (errorInfos.length && !noThrow) {\n throw new Error(errorInfos[0].asMessage(schemaId));\n }\n\n return errorInfos;\n }\n\n private validateFields(\n errorInfos: ValidationEntry[],\n fieldNames: string[],\n data: SchematizedData,\n message: IType,\n descriptor: PbjsNestedObjectDescriptor,\n schemaId: string\n ): void {\n const oneofs = message.oneofs || {};\n const fields = message.fields || {};\n for (const key in data) {\n const value = data[key];\n // if it's null or undefined we don't need to match\n if (!this.isNullOrUndefinedOrEmpty(value)) {\n const mft: (fieldType: string, rule?: string) => void = (fieldType, rule?) =>\n this.matchFieldTypes(\n errorInfos,\n [...fieldNames, key],\n value,\n fieldType,\n descriptor,\n schemaId,\n key,\n rule\n );\n\n if (oneofs[key]) {\n mft(fields[oneofs[key].oneof[0]].type);\n } else if (fields[key]) {\n mft(fields[key].type, fields[key].rule);\n }\n // if the field is not present in the schema then we ignore it and will drop it later\n }\n }\n }\n\n private isNullOrUndefinedOrEmpty(val: SchematizedDataValue): boolean {\n return val === undefined || val === null || val === '';\n }\n\n private matchFieldTypes(\n errorInfos: ValidationEntry[],\n fieldNames: string[],\n fieldDataValue: SchematizedDataValue,\n protobufType: string,\n descriptor: PbjsNestedObjectDescriptor,\n schemaId: string,\n key: string,\n rule?: string\n ): void {\n let errorCode: ErrorCode;\n\n if (rule === 'repeated') {\n if (Array.isArray(fieldDataValue)) {\n if (fieldDataValue.length > maxItemCountAppLimit) {\n errorCode = ErrorCode.itemCountOverflowAppLimit;\n }\n\n fieldDataValue.forEach((value, index: number) => {\n // if it's repeated they should all be the same type so we can just run it as is\n this.matchFieldTypes(\n errorInfos,\n [...fieldNames, index.toString()],\n value,\n protobufType,\n descriptor,\n schemaId,\n key\n );\n });\n } else {\n errorCode = ErrorCode.arrayExpected;\n }\n\n if (errorCode) {\n errorInfos.push(new ValidationEntry(errorCode, fieldNames));\n }\n\n // this means that every value in the array was validated and we can finish\n return;\n }\n\n let javaScriptType: string;\n switch (protobufType) {\n case 'string':\n javaScriptType = 'string';\n if (fieldDataValue.length > maxStringLengthAppLimit) {\n errorCode = ErrorCode.stringLengthOverflowAppLimit;\n }\n break;\n case 'bytes':\n javaScriptType = 'object';\n if (!(fieldDataValue instanceof Uint8Array)) {\n errorCode = ErrorCode.malformedBytesArray;\n }\n break;\n case 'bool':\n javaScriptType = 'boolean';\n break;\n case 'uint32':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(\n fieldDataValue,\n minUnsigned,\n maxFourBytesUnsigned\n );\n break;\n case 'int32':\n case 'sint32':\n case 'fixed32':\n case 'sfixed32':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(fieldDataValue, minFourBytes, maxFourBytes);\n break;\n case 'uint64':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(\n fieldDataValue,\n minUnsigned,\n maxEightBytesUnsigned\n );\n break;\n case 'fixed64':\n case 'sfixed64':\n case 'int64':\n case 'sint64':\n javaScriptType = 'number';\n errorCode = this.checkNumberRange(fieldDataValue, minEightBytes, maxEightBytes);\n break;\n case 'double':\n case 'float':\n javaScriptType = 'number';\n if (!Number.isFinite(fieldDataValue)) {\n errorCode = ErrorCode.infiniteNumber;\n }\n break;\n default:\n if (new Set(Object.keys(descriptor)).has(protobufType)) {\n //now we check this schema\n this.validateFields(\n errorInfos,\n fieldNames,\n fieldDataValue,\n descriptor[protobufType] as IType,\n descriptor,\n schemaId\n );\n javaScriptType = 'object';\n }\n break;\n }\n\n if (typeof fieldDataValue !== javaScriptType) {\n errorInfos.push(\n new ValidationEntry(\n ErrorCode.incorrectType,\n fieldNames,\n protobufType,\n typeof fieldDataValue\n )\n );\n }\n\n if (errorCode) {\n errorInfos.push(new ValidationEntry(errorCode, fieldNames));\n }\n }\n\n private checkNumberRange(value: number, min: number, max: number): ErrorCode {\n return value > max || value < min ? ErrorCode.numberOutOfRange : undefined;\n }\n}\n\nexport const logValidator = new LogValidator();\n","import { BucketHistogram } from '../interfaces/BucketHistogram';\nimport { MetricsTags, utility } from 'o11y/shared';\nimport { BucketMetric } from 'src/interfaces';\n\nexport class BucketHistogramImpl implements BucketMetric<number[]>, BucketHistogram {\n private readonly _createdOn: number;\n private _lastUpdatedOn: number;\n private _values = new Array<number>();\n\n constructor(\n private readonly _name: string,\n private readonly _ownerName: string,\n private readonly _ownerAppName: string,\n private readonly _tags: MetricsTags,\n private readonly _buckets: number[]\n ) {\n this._createdOn = utility.time().tsNow;\n }\n\n getName(): string {\n return this._name;\n }\n\n getCreatedOn(): number {\n return this._createdOn;\n }\n\n getLastUpdatedOn(): number {\n return this._lastUpdatedOn;\n }\n\n getData(): number[] {\n return this.values;\n }\n\n getBuckets(): number[] {\n return this.buckets;\n }\n\n get buckets(): number[] {\n return this._buckets.slice(0, this._buckets.length);\n }\n\n get values(): number[] {\n return this._values.slice(0, this._values.length);\n }\n\n record(value: number): void {\n if (typeof value === 'number') {\n this._values.push(value);\n this._lastUpdatedOn = utility.time().tsNow;\n return;\n }\n\n throw new Error('BucketHistogram can only record numbers.');\n }\n\n reset(): void {\n this._lastUpdatedOn = undefined;\n this._values = [];\n }\n\n getOwnerName(): string {\n return this._ownerName;\n }\n\n getOwnerAppName(): string {\n return this._ownerAppName;\n }\n\n getTags(): MetricsTags {\n return this._tags;\n }\n}\n","import { Metric } from '../interfaces/Metric';\nimport { UpCounter } from '../interfaces/UpCounter';\nimport { MetricsTags, utility } from 'o11y/shared';\n\nexport class UpCounterImpl implements Metric<number>, UpCounter {\n private readonly _createdOn: number;\n private _lastUpdatedOn: number;\n private _value = 0;\n\n constructor(\n private readonly _name: string,\n private readonly _ownerName: string,\n private readonly _ownerAppName: string,\n private readonly _tags: MetricsTags\n ) {\n this._createdOn = utility.time().tsNow;\n }\n\n getName(): string {\n return this._name;\n }\n\n getCreatedOn(): number {\n return this._createdOn;\n }\n\n getLastUpdatedOn(): number {\n return this._lastUpdatedOn;\n }\n\n getData(): number {\n return this._value;\n }\n\n increment(value = 1): void {\n if (typeof value === 'number' && value > 0) {\n this._value += Math.round(value);\n this._lastUpdatedOn = utility.time().tsNow;\n return;\n }\n\n throw new Error('UpCounter can only increment positive numbers.');\n }\n\n reset(): void {\n this._lastUpdatedOn = undefined;\n this._value = 0;\n }\n\n getOwnerName(): string {\n return this._ownerName;\n }\n\n getOwnerAppName(): string {\n return this._ownerAppName;\n }\n\n getTags(): Readonly<MetricsTags> {\n return this._tags;\n }\n}\n","import { Metric } from '../interfaces/Metric';\nimport { ValueRecorder } from '../interfaces/ValueRecorder';\nimport { MetricsTags, utility } from 'o11y/shared';\n\nexport class ValueRecorderImpl implements Metric<number[]>, ValueRecorder {\n private readonly _createdOn: number;\n private _lastUpdatedOn: number;\n private _values = new Array<number>();\n\n constructor(\n private readonly _name: string,\n private readonly _ownerName: string,\n private readonly _ownerAppName: string,\n private readonly _tags: MetricsTags\n ) {\n this._createdOn = utility.time().tsNow;\n // TODO: Add sampling/throttling to put a cap on the size of the array\n }\n\n getName(): string {\n return this._name;\n }\n\n getCreatedOn(): number {\n return this._createdOn;\n }\n\n getLastUpdatedOn(): number {\n return this._lastUpdatedOn;\n }\n\n getData(): number[] {\n return this.values;\n }\n\n get values(): number[] {\n return this._values.slice(0, this._values.length);\n }\n\n record(value: number): void {\n if (typeof value === 'number') {\n this._values.push(value);\n this._lastUpdatedOn = utility.time().tsNow;\n return;\n }\n\n throw new Error('ValueRecorder can only record numbers.');\n }\n\n reset(): void {\n this._lastUpdatedOn = undefined;\n this._values = [];\n }\n\n getOwnerName(): string {\n return this._ownerName;\n }\n\n getOwnerAppName(): string {\n return this._ownerAppName;\n }\n\n getTags(): MetricsTags {\n return this._tags;\n }\n}\n","export class SizeLimitedMap<K, V> {\n private readonly _map = new Map<K, V>();\n\n private _maxSize: number;\n constructor(maxSize: number) {\n if (typeof maxSize === 'number' && maxSize > 0) {\n this._maxSize = Math.ceil(maxSize);\n return;\n }\n throw new Error('maxSize must be a positive number');\n }\n\n get maxSize(): number {\n return this._maxSize;\n }\n\n get(key: K): V {\n return this._map.get(key);\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): boolean {\n if (this.has(key) || this._map.size < this.maxSize) {\n this._map.set(key, value);\n return true;\n }\n return false;\n }\n\n getElements(): V[] {\n return Array.from(this._map.values());\n }\n\n clear(): void {\n this._map.clear();\n }\n}\n","import { MetricsReporter, UpCounter, ValueRecorder } from '../interfaces';\n\nimport { BucketHistogramImpl } from './BucketHistogramImpl';\nimport { UpCounterImpl } from './UpCounterImpl';\nimport { ValueRecorderImpl } from './ValueRecorderImpl';\nimport { SizeLimitedMap } from './SizeLimitedMap';\nimport { MetricsTags } from 'o11y/shared';\n\nconst maxCounters = 1000;\nconst maxValueRecorders = 500;\nconst maxBucketHistograms = 500;\n\nenum MetricType {\n Counter,\n Percentile,\n BucketHistogram\n}\n\nexport class MetricsImpl implements MetricsReporter {\n private readonly _upCounters = new SizeLimitedMap<string, UpCounterImpl>(maxCounters);\n private readonly _valueRecorders = new SizeLimitedMap<string, ValueRecorderImpl>(\n maxValueRecorders\n );\n private readonly _bucketHistograms = new SizeLimitedMap<string, BucketHistogramImpl>(\n maxBucketHistograms\n );\n\n constructor(\n private readonly _ownerName: string,\n private readonly _getOwnerAppName: () => string\n ) {}\n\n incrementCounter(\n operation: string,\n increment: number,\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._tagError(tags, hasError);\n this._upCounter(operation, tags).increment(increment);\n }\n\n trackValue(operation: string, value: number, hasError = false, tags: MetricsTags = {}): void {\n this._tagError(tags, hasError);\n this._valueRecorder(operation, tags).record(value);\n }\n\n bucketValue(\n operation: string,\n value: number,\n buckets: number[],\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._tagError(tags, hasError);\n this._bucketHistogram(operation, tags, buckets).record(value);\n }\n\n private _bucketHistogram(name: string, tags: MetricsTags, buckets: number[]): ValueRecorder {\n const { key, sortedTags } = this._getKeyAndSortedTags(\n name,\n tags,\n MetricType.BucketHistogram\n );\n let instrument = this._bucketHistograms.get(key);\n if (!instrument) {\n instrument = new BucketHistogramImpl(\n name,\n this._ownerName,\n this._getOwnerAppName(),\n sortedTags,\n buckets\n );\n if (!this._bucketHistograms.set(key, instrument)) {\n throw new Error(`Max size of ${maxBucketHistograms} exceeded for BucketHistograms`);\n }\n }\n return instrument;\n }\n\n private _upCounter(name: string, tags: MetricsTags): UpCounter {\n const { key, sortedTags } = this._getKeyAndSortedTags(name, tags, MetricType.Counter);\n let instrument = this._upCounters.get(key);\n if (!instrument) {\n instrument = new UpCounterImpl(\n name,\n this._ownerName,\n this._getOwnerAppName(),\n sortedTags\n );\n if (!this._upCounters.set(key, instrument)) {\n throw new Error(`Max size of ${maxCounters} exceeded for UpCounters`);\n }\n }\n return instrument;\n }\n\n private _valueRecorder(name: string, tags: MetricsTags): ValueRecorder {\n const { key, sortedTags } = this._getKeyAndSortedTags(name, tags, MetricType.Percentile);\n let instrument = this._valueRecorders.get(key);\n if (!instrument) {\n instrument = new ValueRecorderImpl(\n name,\n this._ownerName,\n this._getOwnerAppName(),\n sortedTags\n );\n if (!this._valueRecorders.set(key, instrument)) {\n throw new Error(`Max size of ${maxValueRecorders} exceeded for ValueRecorders`);\n }\n }\n return instrument;\n }\n\n getUpCounters(): UpCounterImpl[] {\n return this._upCounters.getElements();\n }\n\n getValueRecorders(): ValueRecorderImpl[] {\n return this._valueRecorders.getElements();\n }\n\n getBucketHistograms(): BucketHistogramImpl[] {\n return this._bucketHistograms.getElements();\n }\n\n private _tagError(tags: MetricsTags, hasError: boolean): void {\n tags.status = hasError === true ? 'error' : 'success';\n }\n\n private _getKeyAndSortedTags(\n operation: string,\n tags: MetricsTags,\n metricType: MetricType\n ): { key: string; sortedTags: MetricsTags } {\n // This method should be called after any manipulation of tags\n const sortedTags = Object.keys(tags)\n .sort()\n .reduce((prev: MetricsTags, curr: string) => {\n prev[curr] = tags[curr];\n return prev;\n }, {});\n const key = `${MetricType[metricType]}:${operation}${JSON.stringify(sortedTags)}`;\n return {\n key,\n sortedTags\n };\n }\n}\n","export class MockEvent {\n constructor(\n public readonly type: string,\n public readonly composed: boolean,\n private readonly _composedPaths: unknown[]\n ) {}\n composedPath(): unknown[] {\n return this._composedPaths;\n }\n}\n","import {\n activitySchema,\n errorSchema,\n instrumentedEventSchema,\n simpleSchema\n} from 'o11y_schema/sf_instrumentation';\n\nimport {\n LightningElement,\n LogPromptListener,\n MetricsTags,\n PublicSafety,\n SchematizedData,\n schemaUtil,\n utility\n} from 'o11y/shared';\n\nimport {\n Activity,\n ActivityApiOptions,\n ActivityDetail,\n ApiOptions,\n BucketMetric,\n DomEventApiOptions,\n Instrumentation,\n InstrumentationContext,\n Metric,\n MetricsReporter,\n PayloadProvider,\n Schema,\n SchematizedPayload\n} from '../interfaces';\nimport { ActivityData, ErrorData, InstrumentedEventData } from '../interfaces-private';\n\nimport { ActivityImpl, discarded, onActivityError, onActivityStop } from './ActivityImpl';\nimport { activityNoOp } from './ActivityNoOp';\nimport { AutomaticClickTracker } from './AutomaticClickTracker';\nimport { domEventHelpers } from './DomEventHelpers';\nimport {\n ErrorCode,\n ValidationEntry,\n logValidator,\n maxItemCountAppLimit,\n maxStringLengthAppLimit\n} from './LogValidator';\nimport { MetricsImpl } from './MetricsImpl';\nimport { MockEvent } from './MockEvent';\nimport { NextgenImpl } from './NextgenImpl';\n\n// @W-10241440, disable timeouts\nconst maxActivityDurationMsecs: number = undefined;\nconst reservedMetricCharacters = ['`'];\nconst reservedMetricNames = {\n internalError: 'o11y-error'\n};\nconst denyListMetricNames = Object.freeze(Array.from(Object.values(reservedMetricNames)));\n\nexport class InstrumentationImpl implements Instrumentation, MetricsReporter {\n protected static readonly defaultAppName = 'APP_NOT_REGISTERED';\n private readonly _metrics: MetricsImpl;\n private readonly _onActivityStoppedCallback: onActivityStop =\n this._handleActivityStop.bind(this);\n protected readonly _onActivityErrorCallback: onActivityError =\n this._handleActivityError.bind(this);\n protected readonly _safety: PublicSafety;\n private readonly _simpleTextMaxLength: number;\n\n constructor(private readonly _nextGen: NextgenImpl, private readonly _name: string) {\n for (const reservedChar of reservedMetricCharacters) {\n if (this._name.indexOf(reservedChar) >= 0) {\n throw new Error(`Name cannot include the reserved character \"${reservedChar}\"`);\n }\n }\n\n this._safety = new PublicSafety({\n increment: (increment) => this._incrementError(increment)\n });\n\n this._metrics = this._initMetrics();\n\n const simpleTextOptions = schemaUtil.getOptions(simpleSchema, 'Simple', 'text');\n this._simpleTextMaxLength = simpleTextOptions\n ? simpleTextOptions['(meta.max_length)']\n : maxStringLengthAppLimit;\n }\n\n protected _initMetrics(): MetricsImpl {\n return new MetricsImpl(\n this.name,\n () => this._nextGen.appName || InstrumentationImpl.defaultAppName\n );\n }\n\n private _incrementError(increment = 1): void {\n this._metrics.incrementCounter(reservedMetricNames.internalError, increment, false);\n }\n\n get name(): string {\n return this._name;\n }\n\n /**\n * This function is to allow for convenience calls to our API, where a string can\n * be provided instead of an actual Schema. In that case, we wrap the text in\n * a built-in simple schema.\n * @param userSchemaOrText Schema or string.\n * @param userData\n * @param onlyIfBoth If true, then both the schema and the data must be specified.\n * @returns\n */\n protected _wrapUserPayload(\n userSchemaOrText: Schema | string,\n userData: SchematizedData,\n onlyIfBoth = false\n ): SchematizedPayload {\n let userSchema: Schema;\n if (typeof userSchemaOrText === 'string') {\n userSchema = simpleSchema;\n if (userSchemaOrText) {\n userData = {\n text: userSchemaOrText.substring(0, this._simpleTextMaxLength)\n };\n } else {\n userData = undefined;\n }\n } else {\n userSchema = userSchemaOrText;\n }\n\n return schemaUtil.makePayload(userSchema, userData, onlyIfBoth);\n }\n\n private getEffectiveRootId(options?: ApiOptions): string {\n return (\n options?.instrumentationContext?.rootId ??\n this._nextGen.getDefaultInstrumentationContext().rootId\n );\n }\n\n /**\n *\n * @param userSchema The schema of the second argument. Also used as the basis for auto-generated\n * counters for log calls using the same schema.\n * @param userData Optional data that complies with the provided schema\n */\n log(userSchemaOrText: Schema | string, userData?: SchematizedData, options?: ApiOptions): void {\n this._safety.tryCatch(() => {\n const timestamp = utility.time().tsNow;\n utility.requireArgument(userSchemaOrText, 'userSchemaOrText', ['object', 'string']);\n utility.requireArgumentIfDefined(userData, 'userData', 'object');\n utility.requireArgumentIfDefined(options, 'options', 'object');\n\n const userPayload = this._wrapUserPayload(userSchemaOrText, userData);\n\n if (userPayload?.payload) {\n this._logInternal(\n this.name,\n userPayload.schema,\n userPayload.payload,\n timestamp,\n this.getEffectiveRootId(options)\n );\n }\n });\n }\n\n protected _logInternal(\n loggerName: string,\n schema: Schema,\n data: SchematizedData,\n timestamp: number,\n rootId?: string\n ): number {\n this._checkInputs(schema, data);\n const appPayload: SchematizedPayload = this._getPayloadFromProvider(\n this._nextGen.appPayloadProvider\n );\n const pagePayload: SchematizedPayload = this._getPayloadFromProvider(\n this._nextGen.pagePayloadProvider\n );\n\n return this._nextGen.addLog(\n loggerName,\n schema,\n data,\n timestamp,\n rootId,\n pagePayload,\n appPayload\n );\n }\n\n error(\n error: unknown,\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n options?: ApiOptions\n ): void {\n return this._safety.tryCatch(() => {\n utility.requireArgumentIfDefined(userSchemaOrText, 'userSchemaOrText', [\n 'object',\n 'string'\n ]);\n utility.requireArgumentIfDefined(userData, 'userData', 'object');\n utility.requireArgumentIfDefined(options, 'options', 'object');\n\n const rootId: string = this.getEffectiveRootId(options);\n this._errorInternal(error, userSchemaOrText, userData, undefined, rootId);\n });\n }\n\n protected _errorInternal(\n err: unknown,\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n activityId?: string,\n rootActivityId?: string\n ): number {\n const loggedTimestamp = utility.time().tsNow;\n\n let error: Error;\n if (err instanceof Error) {\n error = err;\n } else {\n let msg: string;\n if (err === undefined || err === null || typeof err.toString !== 'function') {\n msg = 'UNKNOWN';\n } else {\n msg = err.toString();\n }\n error = new Error(msg);\n }\n\n const userPayload = this._wrapUserPayload(userSchemaOrText, userData, true);\n\n const errorData: ErrorData = {\n name: error.name,\n message: error.message,\n stack: error.stack,\n userPayload,\n activityId\n };\n\n return this._logInternal(\n this.name,\n errorSchema,\n errorData,\n loggedTimestamp,\n rootActivityId\n );\n }\n\n startActivity(name: string, options?: ApiOptions): Activity {\n return this._safety.tryCatchReturn(() => {\n utility.requireArgument(name, 'name');\n utility.requireArgumentIfDefined(options, 'options', 'object');\n\n let context: InstrumentationContext;\n\n const rootId: string = options?.instrumentationContext?.rootId;\n if (rootId) {\n context = {\n rootId,\n isRootActivitySampled: options.instrumentationContext.isRootActivitySampled\n };\n } else {\n // By definition, an activity is sampled if root activity is sampled\n context = this._nextGen.getDefaultInstrumentationContext();\n }\n const activity: Activity = new ActivityImpl(\n name,\n context.rootId,\n this._onActivityStoppedCallback,\n this._onActivityErrorCallback,\n maxActivityDurationMsecs,\n undefined,\n context.isRootActivitySampled\n );\n return activity;\n }, activityNoOp);\n }\n\n protected _getActivityData(detail: ActivityDetail): ActivityData {\n const userPayload = this._wrapUserPayload(detail.userSchemaOrText, detail.userData, true);\n\n return {\n id: detail.id,\n name: detail.name,\n duration: detail.stopPerfTime - detail.startPerfTime,\n stopReason: detail.stopReason,\n userPayload,\n errorCount: detail.errorCount,\n isSampled: detail.isSampled,\n timerOverridden: detail.timerOverridden\n };\n }\n\n private _handleActivityStop(detail: ActivityDetail): void {\n if (detail.stopReason === discarded) {\n return;\n }\n const activityData: ActivityData = this._getActivityData(detail);\n\n this._logActivity(activityData, detail.startTimestamp, detail.rootId);\n }\n\n protected _logActivity(\n activityData: ActivityData,\n startTimestamp: number,\n rootId?: string\n ): void {\n this._logInternal(this.name, activitySchema, activityData, startTimestamp, rootId);\n }\n\n private _handleActivityError(error: unknown, detail: ActivityDetail): void {\n this._errorInternal(\n error,\n detail.userSchemaOrText,\n detail.userData,\n detail.id,\n detail.rootId\n );\n }\n\n private _getPayloadFromProvider(provider: PayloadProvider): SchematizedPayload {\n const payload: SchematizedPayload = provider?.getPayload() || undefined;\n if (payload) {\n this._checkInputs(payload.schema, payload.payload);\n }\n return payload;\n }\n\n domEvent(\n event: Event,\n handledBy: HTMLElement | LightningElement,\n userSchemaOrText?: Schema | string,\n userData?: SchematizedData,\n options?: DomEventApiOptions\n ): void {\n this._safety.tryCatch(() => {\n const tsNow = utility.time().tsNow;\n\n utility.requireArgument(event, 'event', [Event, MockEvent]);\n // TODO: Using 'object' instead of 'LightningElement' for now (no imports)\n utility.requireArgument(handledBy, 'handledBy', [HTMLElement, 'object']);\n\n let htmlElement;\n if (handledBy instanceof HTMLElement) {\n htmlElement = handledBy;\n } else {\n handledBy = handledBy as LightningElement;\n // Convenience for LightningElement developers who pass \"this\" in handledBy.\n // Get the underlying HTML element\n if (handledBy.template && handledBy.template.host instanceof HTMLElement) {\n htmlElement = handledBy.template.host;\n } else {\n utility.requireArgument(undefined, 'handledBy');\n }\n }\n\n const userPayload: SchematizedPayload = this._wrapUserPayload(\n userSchemaOrText,\n userData,\n true\n );\n\n const rootId: string = this.getEffectiveRootId(options);\n\n switch (event.type) {\n case 'click': {\n const mouseEvent = event as MouseEvent;\n\n // If the user has called domEvent API on this event explicitly,\n // then we don't need to log it by default.\n const acd: AutomaticClickTracker = this._nextGen.getClickTracker();\n if (acd) {\n acd.markEventHandled(mouseEvent);\n }\n\n const mouseEventData = domEventHelpers.getMouseEventData(mouseEvent);\n\n const instrumentedEvent: InstrumentedEventData =\n domEventHelpers.getInstrumentedEventData(\n mouseEventData,\n htmlElement,\n userPayload\n );\n instrumentedEvent.auto = options && options._auto;\n\n this._logInternal(\n this.name,\n instrumentedEventSchema,\n instrumentedEvent,\n tsNow,\n rootId\n );\n break;\n }\n default:\n throw new Error(utility.notImplemented);\n }\n });\n }\n\n incrementCounter(\n operation: string,\n increment = 1,\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._safety.tryCatch(() => {\n utility.requireArgument(operation, 'operation', 'string');\n utility.checkForDenyListedValues(operation, 'operation', denyListMetricNames);\n utility.checkForReservedCharacters(operation, 'operation', reservedMetricCharacters);\n utility.requireArgument(increment, 'increment', 'number');\n utility.requireArgument(hasError, 'hasError', 'boolean');\n utility.requireArgument(tags, 'tags', 'object');\n Object.entries(tags).forEach((entry) => {\n utility.requireArgument(entry[1], `Tag value for '${entry[0]}'`, [\n 'string',\n 'number',\n 'boolean'\n ]);\n });\n this._metrics.incrementCounter(operation, increment, hasError, tags);\n });\n }\n\n trackValue(operation: string, value: number, hasError = false, tags: MetricsTags = {}): void {\n this._safety.tryCatch(() => {\n utility.requireArgument(operation, 'operation', 'string');\n utility.checkForDenyListedValues(operation, 'operation', denyListMetricNames);\n utility.checkForReservedCharacters(operation, 'operation', reservedMetricCharacters);\n utility.requireArgument(value, 'value', 'number');\n utility.requireArgument(hasError, 'hasError', 'boolean');\n utility.requireArgument(tags, 'tags', 'object');\n Object.entries(tags).forEach((entry) => {\n utility.requireArgument(entry[1], `Tag value for '${entry[0]}'`, [\n 'string',\n 'number',\n 'boolean'\n ]);\n });\n\n this._metrics.trackValue(operation, value, hasError, tags);\n });\n }\n\n bucketValue(\n operation: string,\n value: number,\n buckets: number[] = [],\n hasError = false,\n tags: MetricsTags = {}\n ): void {\n this._safety.tryCatch(() => {\n utility.requireArgument(operation, 'operation', 'string');\n utility.checkForDenyListedValues(operation, 'operation', denyListMetricNames);\n utility.checkForReservedCharacters(operation, 'operation', reservedMetricCharacters);\n utility.requireArgument(value, 'value', 'number');\n utility.requireArgument(buckets, 'buckets', Array);\n Object.entries(buckets).forEach((entry) => {\n utility.requireArgument(entry[1], `Bucket value for '${entry[0]}'`, 'number');\n });\n utility.requireArgument(hasError, 'hasError', 'boolean');\n utility.requireArgument(tags, 'tags', 'object');\n Object.entries(tags).forEach((entry) => {\n utility.requireArgument(entry[1], `Tag value for '${entry[0]}'`, [\n 'string',\n 'number',\n 'boolean'\n ]);\n });\n\n this._metrics.bucketValue(operation, value, buckets, hasError, tags);\n });\n }\n\n private _checkInputs(schema: Schema, data: SchematizedData): void {\n schemaUtil.checkSchema(schema);\n utility.requireArgument(data, 'data', 'object');\n\n let vEntries: ValidationEntry[];\n let savedUserPayload: SchematizedPayload;\n if (data.userPayload !== undefined && schemaUtil.isInternal(schema)) {\n // For internal schemas where we have nested messages, we need to temporarily\n // remove userPayload, since it's not yet encoded. (If left in place, it would fail\n // validation since it's not UInt8Array). We validate it separately here.\n savedUserPayload = data.userPayload;\n vEntries = logValidator.validate(\n savedUserPayload.schema,\n savedUserPayload.payload,\n true\n );\n this._processValidationResults(\n schemaUtil.getSchemaId(savedUserPayload.schema),\n savedUserPayload.payload,\n vEntries\n );\n data.userPayload = undefined;\n }\n\n vEntries = logValidator.validate(schema, data, true);\n this._processValidationResults(schemaUtil.getSchemaId(schema), data, vEntries);\n\n if (savedUserPayload !== undefined) {\n // Restore userPayload\n data.userPayload = savedUserPayload;\n }\n }\n\n private _processValidationResults(\n schemaId: string,\n data: SchematizedData,\n ventries: ValidationEntry[]\n ): void {\n for (let i = 0; i < ventries.length; i += 1) {\n const ei = ventries[i];\n\n if (\n ei.errorCode == ErrorCode.stringLengthOverflowAppLimit ||\n ei.errorCode == ErrorCode.itemCountOverflowAppLimit\n ) {\n const lfi = ei.fields.length - 1;\n const obj = this._traverseFields(data, ei.fields.slice(0, lfi));\n const field = ei.fields[lfi];\n if (ei.errorCode == ErrorCode.stringLengthOverflowAppLimit) {\n obj[field] = obj[field].substring(0, maxStringLengthAppLimit);\n } else {\n obj[field].splice(maxItemCountAppLimit);\n }\n } else {\n throw new Error(ei.asMessage(schemaId));\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _traverseFields(data: SchematizedData, fields: string[]): any {\n if (!fields.length) {\n return data;\n }\n return this._traverseFields(data[fields[0]], fields.slice(1));\n }\n\n getUpCounters(): Metric<number>[] {\n return this._metrics.getUpCounters().filter((m) => m.getLastUpdatedOn());\n }\n\n getValueRecorders(): Metric<number[]>[] {\n return this._metrics.getValueRecorders().filter((m) => m.getLastUpdatedOn());\n }\n\n getBucketHistograms(): BucketMetric<number[]>[] {\n return this._metrics.getBucketHistograms().filter((m) => m.getLastUpdatedOn());\n }\n\n registerForLogPrompt(listener: LogPromptListener): void {\n utility.requireArgument(listener, 'listener', 'function');\n this._nextGen.registerForLogPrompt(listener);\n }\n\n activity<T>(name: string, execute: (act: Activity) => T, options?: ActivityApiOptions): T {\n const act = this.startActivity(name, options);\n try {\n return execute(act);\n } catch (err) {\n act.error(err, options?.errorPayload?.schema, options?.errorPayload?.payload);\n throw err;\n } finally {\n act.stop(options?.stopPayload?.schema, options?.stopPayload?.payload);\n }\n }\n\n async activityAsync<T>(\n name: string,\n execute: (act: Activity) => Promise<T>,\n options?: ActivityApiOptions\n ): Promise<T> {\n const act = this.startActivity(name, options);\n try {\n return await execute(act);\n } catch (err) {\n act.error(err, options?.errorPayload?.schema, options?.errorPayload?.payload);\n throw err;\n } finally {\n act.stop(options?.stopPayload?.schema, options?.stopPayload?.payload);\n }\n }\n}\n","import { RootActivity, Schema } from '../interfaces';\nimport { ActivityDetail } from '../interfaces/ActivityDetail';\nimport { ActivityImpl, onActivityError, onActivityStop } from './ActivityImpl';\nimport { SchematizedData, utility } from 'o11y/shared';\n\nexport class RootActivityImpl extends ActivityImpl implements RootActivity {\n constructor(\n name: string,\n onStopped: onActivityStop,\n onError: onActivityError,\n rootId?: string,\n _isSampled?: boolean\n ) {\n super(\n name,\n undefined,\n onStopped,\n onError,\n undefined,\n rootId || utility.generateUniqueId(32),\n _isSampled\n );\n }\n\n private _preRootId: string;\n get preRootId(): string {\n return this._preRootId;\n }\n set preRootId(value: string) {\n this._preRootId = value;\n }\n\n protected _getDetail(userSchema: Schema, userData: SchematizedData): ActivityDetail {\n const detail = super._getDetail(userSchema, userData);\n detail.isRoot = true;\n detail.preRootId = this.preRootId;\n return detail;\n }\n}\n","import { RootActivity, TracingHeadersOptions } from '../interfaces';\n\nconst rootId: string = new Array(32).fill(0).join('');\nclass RootActivityNoOp implements RootActivity {\n getId(): string {\n return rootId;\n }\n getRootId(): string {\n return undefined;\n }\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n error(): void {}\n\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n stop(): void {}\n\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n discard(): void {}\n\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\n terminate(): void {}\n\n getIsSampled(): boolean {\n return false;\n }\n getTraceHeaders(__options: TracingHeadersOptions): Record<string, string> {\n return {};\n }\n getStartTimestamp(): number {\n return undefined;\n }\n getStartPerfTime(): number {\n return undefined;\n }\n getStopPerfTime(): number {\n return undefined;\n }\n}\n\nexport const rootActivityNoOp = Object.freeze(new RootActivityNoOp());\n","import { ActivityDetail, RootActivity } from '../interfaces';\nimport { ActivityData } from '../interfaces-private';\nimport { discarded, onActivityStop } from './ActivityImpl';\nimport { InstrumentationImpl } from './InstrumentationImpl';\nimport { RootActivityImpl } from './RootActivityImpl';\nimport { rootActivityNoOp } from './RootActivityNoOp';\nimport { utility } from 'o11y/shared';\nimport { MetricsImpl } from './MetricsImpl';\nimport { NextgenImpl } from './NextgenImpl';\n\nexport class AppInstrumentationImpl extends InstrumentationImpl {\n private _singleRootActivity: RootActivityImpl; // Not used when _allowMulti = true\n\n private readonly _onRootActivityStoppedCallback: onActivityStop =\n this.handleRootActivityStop.bind(this);\n\n constructor(_nextGen: NextgenImpl, _name: string, private readonly _allowMulti: boolean) {\n super(_nextGen, _name);\n }\n\n startRootActivity(name: string, rootId?: string, isSampled?: boolean): RootActivity {\n return this._safety.tryCatchReturn(() => {\n utility.requireArgument(name, 'name');\n\n const newRootActivity = new RootActivityImpl(\n name,\n this._onRootActivityStoppedCallback,\n this._onActivityErrorCallback,\n rootId,\n isSampled\n );\n\n if (!this._allowMulti) {\n if (this._singleRootActivity && !this._singleRootActivity.isStopped) {\n const preRootId = this._singleRootActivity.getId();\n this._singleRootActivity.terminate();\n newRootActivity.preRootId = preRootId;\n }\n this._singleRootActivity = newRootActivity;\n }\n\n return newRootActivity as RootActivity;\n }, rootActivityNoOp);\n }\n\n private handleRootActivityStop(detail: ActivityDetail): void {\n if (detail.stopReason === discarded) {\n return;\n }\n\n const activityData: ActivityData = this._getActivityData(detail);\n\n this._logActivity(activityData, detail.startTimestamp);\n this._singleRootActivity = undefined;\n }\n\n protected _getActivityData(detail: ActivityDetail): ActivityData {\n const activityData: ActivityData = super._getActivityData(detail);\n activityData.isRoot = detail.isRoot;\n activityData.preRootId = detail.preRootId;\n return activityData;\n }\n\n getSingleRootActivityId(): string {\n return this._singleRootActivity?.getId();\n }\n\n isSingleRootActivitySampled(): boolean {\n return this._singleRootActivity?.getIsSampled();\n }\n\n protected _initMetrics(): MetricsImpl {\n return new MetricsImpl(this.name, () => this.name);\n }\n}\n","import { Instrumentation } from '../interfaces';\nimport { utility } from 'o11y/shared';\n\nconst pathLimit = 5;\n\nexport class AutomaticClickTracker {\n private instr: Instrumentation;\n private ignoredEvent: Event;\n private isActive = false;\n private document: Document;\n private readonly _boundClickListener = this.clickListener.bind(this);\n\n constructor(instrumentation: Instrumentation, document: Document) {\n utility.requireArgument(instrumentation, 'instrumentation');\n utility.requireArgument(document, 'document');\n\n this.instr = instrumentation;\n this.document = document;\n }\n\n activate(): void {\n if (!this.isActive) {\n this.document.addEventListener('click', this._boundClickListener, true);\n this.isActive = true;\n }\n }\n\n deactivate(): void {\n if (this.isActive) {\n this.document.removeEventListener('click', this._boundClickListener, true);\n this.isActive = false;\n }\n }\n\n markEventHandled(event: MouseEvent): void {\n this.ignoredEvent = event;\n }\n\n private clickListener(event: MouseEvent): void {\n let eventTargets: EventTarget[] = event.composedPath && event.composedPath();\n if (!eventTargets || !eventTargets.length) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n eventTargets = (event as any).path;\n }\n const handledBy: HTMLElement = this.getClickableElement(eventTargets);\n\n if (handledBy) {\n // Immediate\n setTimeout(() => {\n if (event !== this.ignoredEvent) {\n this.instr.domEvent(event, handledBy, undefined, undefined, {\n _auto: true\n });\n }\n });\n }\n }\n\n private getClickableElement(path: EventTarget[]): HTMLElement {\n const limit = path ? Math.min(path.length, pathLimit) : 0;\n for (let x = 0; x < limit; x += 1) {\n const currentElement = path[x] as HTMLElement;\n const tagName = currentElement.tagName && currentElement.tagName.toLowerCase();\n if (tagName === 'a' || tagName === 'button') {\n return currentElement;\n }\n if (tagName === 'input') {\n const inputElement = currentElement as HTMLInputElement;\n if (inputElement.type && inputElement.type.toLowerCase() === 'button') {\n return inputElement;\n }\n }\n }\n return undefined;\n }\n}\n","import {\n BucketMetric,\n BufferedLog,\n Instrumentation,\n InstrumentationContext,\n InstrumentedAppMethods,\n InstrumentedAppOptions,\n LogCollector,\n LogCollectorOptions,\n LogMeta,\n Metric,\n MetricsCollector,\n Nextgen,\n PayloadProvider,\n Schema,\n SchematizedPayload\n} from '../interfaces';\nimport { AppInstrumentationImpl } from './AppInstrumentationImpl';\nimport { AutomaticClickTracker } from './AutomaticClickTracker';\nimport { InstrumentationImpl } from './InstrumentationImpl';\nimport { Tracing } from './Tracing';\nimport { LogPromptListener, SchematizedData, schemaUtil, utility } from 'o11y/shared';\n\nconst maxInstrumentationLength = 80;\nconst truncatedText = '_CUT';\nconst maxInstrumentationLengthBeforeTruncated = maxInstrumentationLength - truncatedText.length;\n\nexport class NextgenImpl implements Nextgen {\n private readonly _logCollectors = new Set<LogCollector>();\n private readonly _instruments = new Map<string, InstrumentationImpl | AppInstrumentationImpl>();\n private readonly _seqBySchema = new Map<string, number>();\n private _sequence = 0;\n private _appInstr: AppInstrumentationImpl;\n private _autoClickTracker: AutomaticClickTracker;\n private _metricsCollector: MetricsCollector;\n private _appPayloadProvider: PayloadProvider;\n private _pagePayloadProvider: PayloadProvider;\n private _forceDisabledLogCollectors = new Set<LogCollector>();\n private _logCollectorFailures = new Map<LogCollector, number>();\n private static _collectorFailureLimit = 5;\n private _isBufferingEnabled = false;\n private _buffer: BufferedLog[] = [];\n private readonly _logCollectionListeners = new Set<LogPromptListener>();\n\n get pagePayloadProvider(): PayloadProvider {\n return this._pagePayloadProvider;\n }\n set pagePayloadProvider(provider: PayloadProvider) {\n this._pagePayloadProvider = provider;\n }\n\n get appPayloadProvider(): PayloadProvider {\n return this._appPayloadProvider;\n }\n set appPayloadProvider(provider: PayloadProvider) {\n this._appPayloadProvider = provider;\n }\n\n registerApp(name: string, options?: InstrumentedAppOptions): InstrumentedAppMethods {\n utility.requireArgument(name, 'name', 'string');\n if (this._appInstr) {\n throw new Error('An app has already been registered with instrumentation.');\n }\n const instr = this._instruments.get(name);\n if (instr) {\n throw new Error(`The instrumentation name ${name} is already taken`);\n }\n this._appInstr = new AppInstrumentationImpl(\n this,\n name,\n options && options.allowMultipleRootActivities\n );\n this._instruments.set(name, this._appInstr);\n this._isBufferingEnabled = options && options.enableBuffering;\n\n const tracing = new Tracing(this._appInstr);\n\n return {\n log: this._appInstr.log.bind(this._appInstr),\n error: this._appInstr.error.bind(this._appInstr),\n startActivity: this._appInstr.startActivity.bind(this._appInstr),\n domEvent: this._appInstr.domEvent.bind(this._appInstr),\n incrementCounter: this._appInstr.incrementCounter.bind(this._appInstr),\n trackValue: this._appInstr.trackValue.bind(this._appInstr),\n bucketValue: this._appInstr.bucketValue.bind(this._appInstr),\n networkInstrumentation: tracing.networkInstrumentation.bind(tracing),\n registerForLogPrompt: this._appInstr.registerForLogPrompt.bind(this._appInstr),\n activity: this._appInstr.activity.bind(this._appInstr),\n activityAsync: this._appInstr.activityAsync.bind(this._appInstr),\n\n startRootActivity: this._appInstr.startRootActivity.bind(this._appInstr),\n registerLogCollector: this.registerLogCollector.bind(this),\n registerMetricsCollector: this.registerMetricsCollector.bind(this),\n activateClickTracker: this.activateClickTracker.bind(this),\n deactivateClickTracker: this.deactivateClickTracker.bind(this),\n disableBuffering: this.disableBuffering.bind(this),\n promptLogCollection: this.promptLogCollection.bind(this)\n };\n }\n\n getInstrumentation(name: string): Instrumentation {\n utility.requireArgument(name, 'name', 'string');\n if (name.length > maxInstrumentationLength) {\n // don't throw if it's too long. just add truncated suffix, but stay within max length\n name = name.substr(0, maxInstrumentationLengthBeforeTruncated) + truncatedText;\n }\n let instr: InstrumentationImpl | AppInstrumentationImpl = this._instruments.get(name);\n if (!instr) {\n instr = new InstrumentationImpl(this, name);\n this._instruments.set(name, instr);\n } else if (instr === this._appInstr) {\n throw new Error(`The instrumentation name ${name} is being used by the app.`);\n }\n return instr;\n }\n\n get appName(): string {\n return this._appInstr && this._appInstr.name;\n }\n\n // This is an internal method that needs to be public\n addLog(\n loggerName: string,\n schema: Schema,\n data: SchematizedData,\n timestamp: number,\n rootId: string,\n pagePayload: SchematizedPayload,\n appPayload: SchematizedPayload\n ): number {\n this._sequence += 1;\n\n const schemaId = schemaUtil.getSchemaId(schema);\n let schemaSequence = this._seqBySchema.get(schemaId) || 0;\n schemaSequence += 1;\n this._seqBySchema.set(schemaId, schemaSequence);\n\n const logMeta: LogMeta = {\n timestamp,\n rootId,\n sequence: this._sequence,\n schemaSequence,\n loggerName,\n pagePayload: pagePayload ? utility.clone(pagePayload) : undefined,\n appPayload: appPayload ? utility.clone(appPayload) : undefined,\n loggerAppName: this.appName,\n connectionType: utility.getConnectionType()\n };\n\n if (this._isBufferingEnabled) {\n // Always push to the buffer, even if no eligible collectors\n this._buffer.push({ schema, data: utility.clone(data), logMeta });\n }\n\n const eligibleCollectors: LogCollector[] = Array.from(this._logCollectors).filter(\n (collector: LogCollector) =>\n !this._forceDisabledLogCollectors.has(collector) &&\n !(collector.getIsCollectDisabled && collector.getIsCollectDisabled())\n );\n\n if (eligibleCollectors.length > 0) {\n for (const collector of eligibleCollectors) {\n // Make a copy of the aguments passed to the collectors lest they change them.\n const dataClone: SchematizedData = utility.clone(data);\n let failures: number = this._logCollectorFailures.get(collector) || 0;\n\n try {\n collector.collect(schema, dataClone, logMeta);\n // if it got here it means it succeeded/didn't throw so we want to decrement the failure count\n if (failures > 0) {\n this._logCollectorFailures.set(collector, failures - 1);\n }\n } catch (err) {\n failures += 1;\n // If a collector fails too much we just disable it\n if (failures >= NextgenImpl._collectorFailureLimit) {\n this._forceDisabledLogCollectors.add(collector);\n if (this._appInstr && (typeof err === 'string' || err instanceof Error)) {\n this._appInstr.error(err);\n }\n } else {\n this._logCollectorFailures.set(collector, failures);\n // We can't log an error here, or the same collector will immediately be called\n // again, likely resulting in repeat exceptions until the collector gets disabled.\n }\n }\n }\n }\n return this._sequence;\n }\n\n getBuffer(): BufferedLog[] {\n return this._buffer;\n }\n\n disableBuffering(): void {\n this._isBufferingEnabled = false;\n this._buffer = [];\n }\n\n getClickTracker(): AutomaticClickTracker {\n return this._autoClickTracker;\n }\n\n getDefaultInstrumentationContext(): InstrumentationContext {\n return {\n rootId: this._appInstr?.getSingleRootActivityId(),\n isRootActivitySampled: this._appInstr?.isSingleRootActivitySampled()\n };\n }\n\n activateClickTracker(): void {\n if (!this._autoClickTracker) {\n this._autoClickTracker = new AutomaticClickTracker(this._appInstr, window.document);\n }\n this._autoClickTracker.activate();\n }\n\n deactivateClickTracker(): void {\n if (this._autoClickTracker) {\n this._autoClickTracker.deactivate();\n // In case activateClickTracker is called later with a different instrumentation\n this._autoClickTracker = undefined;\n }\n }\n\n registerLogCollector(collector: LogCollector, options?: LogCollectorOptions): void {\n utility.requireArgument(collector, 'collector');\n if (this._logCollectors.has(collector)) {\n return;\n }\n this._logCollectors.add(collector);\n this._logCollectorFailures.set(collector, 0);\n if (\n (!collector.getIsCollectDisabled || !collector.getIsCollectDisabled()) &&\n options &&\n options.retroactive\n ) {\n for (const log of this._buffer) {\n collector.collect(log.schema, log.data, log.logMeta);\n }\n }\n }\n\n registerMetricsCollector(collector: MetricsCollector): void {\n utility.requireArgument(collector, 'collector');\n if (this._metricsCollector) {\n throw new Error('A metrics Collector is already registered.');\n }\n this._metricsCollector = collector;\n this._metricsCollector.receiveMetricsExtractors({\n getAllUpCounters: this.getAllUpCounters.bind(this),\n getAllValueRecorders: this.getAllValueRecorders.bind(this),\n getAllBucketHistograms: this.getAllBucketHistograms.bind(this)\n });\n }\n\n private getAllUpCounters(): Metric<number>[] {\n const arrOfArrs = Array.from(this._instruments.values()).map((instr) =>\n instr.getUpCounters()\n );\n return arrOfArrs.reduce((pv, cv) => pv.concat(cv), []);\n }\n\n private getAllValueRecorders(): Metric<number[]>[] {\n const arrOfArrs = Array.from(this._instruments.values()).map((instr) =>\n instr.getValueRecorders()\n );\n return arrOfArrs.reduce((pv, cv) => pv.concat(cv), []);\n }\n\n private getAllBucketHistograms(): BucketMetric<number[]>[] {\n const arrOfArrs = Array.from(this._instruments.values()).map((instr) =>\n instr.getBucketHistograms()\n );\n return arrOfArrs.reduce((pv, cv) => pv.concat(cv), []);\n }\n\n registerForLogPrompt(listener: LogPromptListener): void {\n this._logCollectionListeners.add(listener);\n }\n\n promptLogCollection(reason: string): void {\n for (const listener of this._logCollectionListeners.keys()) {\n try {\n listener(reason);\n } catch (err) {\n if (!utility.isProduction) {\n throw err;\n }\n }\n }\n }\n}\n","import { Instrumentation, InstrumentedAppMethods, InstrumentedAppOptions } from './interfaces';\nimport { NextgenImpl } from './library/NextgenImpl';\nimport { utility } from 'o11y/shared';\n\nclass Index {\n private _nextgen: NextgenImpl;\n // We are lazily initializing the singleton to allow any options to be processed\n // before the instantiation.\n private get _lazyNextGen(): NextgenImpl {\n if (!this._nextgen) {\n this._nextgen = new NextgenImpl();\n }\n return this._nextgen;\n }\n\n public registerInstrumentedApp(\n name: string,\n options?: InstrumentedAppOptions\n ): InstrumentedAppMethods {\n if (!options || options.isProduction !== false) {\n // Do this before construction\n // Production by default\n utility.markProduction();\n }\n const retVal: InstrumentedAppMethods = this._lazyNextGen.registerApp(name, options);\n if (options) {\n this._nextgen.appPayloadProvider = options.appPayloadProvider;\n this._nextgen.pagePayloadProvider = options.pagePayloadProvider;\n }\n return retVal;\n }\n\n public getInstrumentation(name?: string): Instrumentation {\n return this._lazyNextGen.getInstrumentation(name);\n }\n}\nconst index = new Index(); // singleton\nconst registerInstrumentedApp = index.registerInstrumentedApp.bind(index);\nconst getInstrumentation = index.getInstrumentation.bind(index);\nconst time = utility.time.bind(utility);\n\nexport { registerInstrumentedApp, getInstrumentation, time };\n","import { TaskerMulti, TaskerSingle } from '../interfaces/IdleDetector';\n\nexport type TaskDoneNotifier = () => void;\n\nexport class TaskerImpl implements TaskerSingle, TaskerMulti {\n private _busyCount = 0;\n private _isOk = true; // Once an error occurs, make operations no-op\n\n get isBusy(): boolean {\n return this._isOk ? this._busyCount > 0 : undefined;\n }\n\n constructor(\n public readonly name: string,\n initialCount: number,\n private readonly _doneCallback: TaskDoneNotifier,\n private readonly _overDoneCallback: TaskDoneNotifier\n ) {\n this._busyCount = initialCount;\n }\n\n add(): void {\n if (this._isOk) {\n this._busyCount += 1;\n }\n }\n done(): void {\n if (this._isOk) {\n if (this._busyCount > 0) {\n this._busyCount -= 1;\n if (!this._busyCount) {\n this._doneCallback();\n }\n } else {\n this._isOk = false;\n this._overDoneCallback();\n }\n }\n }\n}\n","import { getInstrumentation } from '../index';\nimport {\n IdleDetector,\n IdleDetectorOptions,\n IdleDetectorReport,\n Instrumentation\n} from '../interfaces';\nimport {\n IdleDetectedListener,\n IsBusyChecker,\n TaskerMulti,\n TaskerSingle\n} from '../interfaces/IdleDetector';\nimport { TaskerImpl } from './TaskerImpl';\nimport { utility } from 'o11y/shared';\nimport { idleDetectorReportSchema } from 'o11y_schema/sf_instrumentation';\n\nconst defaultLogThreshold = 300;\n\ntype TaskReportEntry = {\n name: string;\n start: number;\n end: number;\n};\n\ntype PollableReportEntry = {\n name: string;\n count: number;\n};\n\nexport class IdleDetectorImpl implements IdleDetector {\n private readonly _instr: Instrumentation = getInstrumentation('IdleDetector');\n private readonly _taskers = new Map<TaskerImpl, TaskReportEntry>();\n private readonly _listeners = new Set<IdleDetectedListener>();\n private readonly _busyCheckers = new Map<IsBusyChecker, string>();\n private readonly _logThreshold: number = defaultLogThreshold;\n private readonly _endedTasks = new Array<TaskReportEntry>();\n private readonly _pollableReport = new Array<PollableReportEntry>();\n private _firstCallbackTime: number;\n private _timerCheckQueued = 0; // timerIds are always positive integers. 0 means nothing is queued\n\n constructor(options?: IdleDetectorOptions) {\n if (\n utility.requireArgumentIfDefined(\n options?.logThreshold,\n 'options.logThreshold',\n 'number'\n )\n ) {\n this._logThreshold = options.logThreshold;\n }\n }\n\n requestIdleDetectedCallback(callback: IdleDetectedListener): void {\n utility.requireArgument(callback, 'callback', 'function');\n if (this._listeners.size === 0) {\n this._firstCallbackTime = utility.time().perfNow;\n }\n this._listeners.add(callback);\n this.checkIfLoaded();\n }\n\n private reportTaskEnded(tasker: TaskerImpl): void {\n // Report only if we have any listeners\n if (this._listeners.size) {\n const snapshot = Object.assign({}, this._taskers.get(tasker));\n this._endedTasks.push(snapshot);\n }\n }\n\n declareNotifierTaskSingle(name: string): TaskerSingle {\n utility.requireArgument(name, 'name', 'string');\n const tasker = this.addTasker(name, 1);\n\n const retVal: TaskerSingle = {\n get isBusy() {\n return tasker.isBusy;\n },\n done: () => {\n tasker.done();\n this._taskers.delete(tasker);\n }\n };\n\n return retVal;\n }\n\n declareNotifierTaskMulti(name: string, existingBusyCount = 0): TaskerMulti {\n utility.requireArgument(name, 'name', 'string');\n if (existingBusyCount !== undefined) {\n utility.requireArgument(existingBusyCount, 'existingBusyCount', 'number');\n\n if (\n existingBusyCount < 0 ||\n parseInt(existingBusyCount.toString(), 10) !== existingBusyCount\n ) {\n // Remove decimal points to make sure it's an integer\n throw new Error('existingBusyCount accepts only non-negative integers');\n }\n }\n const tasker = this.addTasker(name, existingBusyCount);\n\n const retVal: TaskerMulti = {\n get isBusy() {\n return tasker.isBusy;\n },\n add: () => {\n if (!tasker.isBusy) {\n const meta = this._taskers.get(tasker);\n meta.start = utility.time().perfNow;\n meta.end = undefined;\n }\n tasker.add();\n },\n done: tasker.done.bind(tasker) // Note: don't delete multi tasker\n };\n return retVal;\n }\n\n declarePollableTaskMulti(name: string, isBusyChecker: IsBusyChecker): void {\n utility.requireArgument(name, 'name', 'string');\n utility.requireArgument(isBusyChecker, 'isBusyChecker', 'function');\n\n this._busyCheckers.set(isBusyChecker, name);\n }\n\n private addTasker(name: string, existingBusyCount: number): TaskerImpl {\n const tasker = new TaskerImpl(\n name,\n existingBusyCount,\n () => {\n // Done callback\n this._taskers.get(tasker).end = utility.time().perfNow;\n this.reportTaskEnded(tasker);\n this.checkIfLoaded();\n },\n () => {\n // Overdone callback\n this._instr.error(`Overdone: ${tasker.name}`);\n utility.noProdThrow(`Tasker '${tasker.name}' is done too many times.`);\n }\n );\n this._taskers.set(tasker, {\n name,\n start: existingBusyCount > 0 ? utility.time().perfNow : undefined,\n end: undefined\n });\n return tasker;\n }\n\n private areAllNotifiersIdle(): boolean {\n return !Array.from(this._taskers.keys()).some((t) => t.isBusy);\n }\n\n private getFirstBusyPollable(): string {\n const entry = Array.from(this._busyCheckers).find((entry) => {\n const isBusyChecker = entry[0];\n const name = entry[1];\n try {\n return isBusyChecker();\n } catch (e) {\n this._instr.error(e, `BusyChecker ${name}`);\n utility.noProdThrow(e);\n return false; // Not busy\n }\n });\n\n return entry ? entry[1] : undefined;\n }\n\n private checkIfLoaded(): void {\n if (!this._listeners.size) {\n // bail out early. We don't have any callbacks queued\n return;\n }\n\n // We restart the idle timer check logic whenever we get an external\n // trigger that a resource was loaded since that would imply that more\n // work could be queued up and we want to be aware of that\n if (this._timerCheckQueued) {\n window.clearTimeout(this._timerCheckQueued);\n }\n\n if (this.areAllNotifiersIdle()) {\n // Enqueue two RAF to make sure nothing got queued in this js cycle\n // note the use of double setTimeout. We want our setTimeout to queue up after\n // any set timeouts queued within micro tasks that may run after processing this\n // xhr response.\n // Here's a sample timeline\n // .....[ Single Event Loop ].....................................\n // .....[XHR callback][checkIfLoaded][microtasks]-[1st setTimeout]....[2nd setTimeout]\n // ^\n // queue settimeout at the end of event loop --->|\n this._timerCheckQueued = window.setTimeout(() => {\n this._timerCheckQueued = window.setTimeout(() => {\n this.doubleCheck();\n }, 40);\n }, 0);\n }\n }\n\n private doubleCheck(): void {\n this._timerCheckQueued = 0;\n\n if (this.areAllNotifiersIdle()) {\n const pollableName: string = this.getFirstBusyPollable();\n if (pollableName !== undefined) {\n // we'll have to keep polling until polled operations finish\n this.addToPollableReport(pollableName);\n this._timerCheckQueued = window.setTimeout(() => {\n this.doubleCheck();\n }, 15);\n } else {\n // OK!! We are certified idle.\n const maxDuration = utility.time().perfNow - this._firstCallbackTime;\n\n // Take a snapshot of internal variables so that we don't get confused\n // if tasks are created or listeners or worse, get into an infinite loop\n // if idle is requested\n const listeners = Array.from(this._listeners.values());\n this._listeners.clear();\n\n this._firstCallbackTime = undefined;\n const endedTasks = this._endedTasks.splice(0);\n const pollableReport = this._pollableReport.splice(0);\n\n this.notify(listeners, maxDuration, endedTasks, pollableReport);\n }\n }\n }\n\n private addToPollableReport(name: string): void {\n const lastEntry: PollableReportEntry = this._pollableReport.length\n ? this._pollableReport[this._pollableReport.length - 1]\n : undefined;\n\n if (lastEntry?.name === name) {\n lastEntry.count += 1;\n } else {\n this._pollableReport.push({\n name,\n count: 1\n });\n }\n }\n\n private notify(\n listeners: IdleDetectedListener[],\n maxDuration: number,\n taskReport: Array<TaskReportEntry>,\n pollableReport: Array<PollableReportEntry>\n ): void {\n if (maxDuration >= this._logThreshold) {\n const logData: IdleDetectorReport = this._getReport(\n maxDuration,\n listeners.length,\n taskReport,\n pollableReport\n );\n this._instr.log(idleDetectorReportSchema, logData);\n }\n\n const tsNow = utility.time().tsNow;\n for (const [index, listener] of listeners.entries()) {\n try {\n listener(tsNow);\n } catch (e) {\n this._instr.error(e, `Listener #${index}`);\n utility.noProdThrow(e);\n }\n }\n }\n\n getReport(): IdleDetectorReport {\n const perfNow = utility.time().perfNow;\n const maxDuration =\n this._firstCallbackTime > 0 ? perfNow - this._firstCallbackTime : undefined;\n\n const onGoingTasks: Array<TaskReportEntry> = Array.from(this._taskers.entries())\n .filter((e) => e[0].isBusy)\n .map((e) => ({\n name: e[1].name,\n start: e[1].start,\n end: perfNow\n }));\n return this._getReport(\n maxDuration,\n this._listeners.size,\n this._endedTasks.concat(onGoingTasks),\n this._pollableReport\n );\n }\n\n private _getReport(\n maxDuration: number,\n listenerCount: number,\n taskReport: Array<TaskReportEntry>,\n pollableReport: Array<PollableReportEntry>\n ): IdleDetectorReport {\n const sortedTaskers = taskReport\n .map((t) => ({\n name: t.name,\n duration: t.end - t.start\n }))\n .sort((a, b) => b.duration - a.duration);\n return {\n logThreshold: this._logThreshold,\n maxDuration,\n listenerCount,\n pollableCount: this._busyCheckers.size,\n busyTasks: sortedTaskers.map((t) => t.name),\n busyDurations: sortedTaskers.map((t) => t.duration),\n pollables: pollableReport.map((p) => p.name),\n pollCounts: pollableReport.map((p) => p.count)\n };\n }\n}\n","import { Environment, LogCollector, LogMeta, Schema } from '../interfaces';\nimport { SchematizedData, schemaUtil } from 'o11y/shared';\n\ntype ColorMap = Record<string, string>;\n\nconst bgColorMap: ColorMap = {\n Error: 'Crimson',\n Activity: 'CadetBlue',\n InstrumentedEvent: 'DarkOliveGreen',\n O11ySample: 'BlueViolet'\n};\nconst colorMap: ColorMap = {\n Error: 'white',\n Activity: 'white',\n InstrumentedEvent: 'white',\n O11ySample: 'white'\n};\nconst defaultColor = 'black';\nconst defaultBgColor = 'Gainsboro';\n\nexport class ConsoleCollector implements LogCollector {\n constructor(environment?: Environment) {\n if (environment) {\n this._log('ConsoleCollector', environment);\n }\n }\n\n collect(schema: Schema, data: SchematizedData, logMeta: LogMeta): void {\n let label, color, bgColor;\n if (schema.namespace === 'sf.instrumentation') {\n label = schema.name;\n color = colorMap[schema.name] || defaultColor;\n bgColor = bgColorMap[schema.name] || defaultBgColor;\n } else {\n label = schemaUtil.getSchemaId(schema);\n }\n\n this._log(label, data, logMeta, color, bgColor);\n }\n\n private _log(\n label: string,\n first: unknown,\n second?: unknown,\n color: string = defaultColor,\n bgColor: string = defaultBgColor\n ): void {\n const css = `color:${color};background-color:${bgColor}`;\n // eslint-disable-next-line no-console\n console.log(\n `%cO11Y%c ${label}`,\n 'color:white;background-color:#FF6600;font-weight:bold',\n css,\n first || '',\n second || ''\n );\n }\n}\n","// This is the file that exports all `o11y` module level exports.\nimport { IdleDetector } from './interfaces';\nimport { IdleDetectorImpl } from './library/IdleDetectorImpl';\n\nexport const idleDetector: IdleDetector = new IdleDetectorImpl({\n logThreshold: 300\n});\n\nexport * from './index';\nexport { ConsoleCollector } from './console-collector/ConsoleCollector';\n"],"names":["simpleSchema","error","errorSchema","activitySchema","instrumentedEventSchema","idleDetectorReportSchema"],"mappings":"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"}
@@ -76,7 +76,7 @@ var UploadMode;
76
76
  UploadMode[UploadMode["noUpload"] = 2] = "noUpload";
77
77
  })(UploadMode || (UploadMode = {}));
78
78
 
79
- const version='240.11.0';
79
+ const version='242.0.0';
80
80
 
81
81
  const coreEnvelopeKey = 'o11y';
82
82
  class CoreEnvelopeBuilder {
@@ -1 +1 @@
1
- {"version":3,"file":"collectors.js","sources":["../../../../src/collectors/protobuf-util.ts","../../../../src/collectors/core-collector/UploadMode.ts","../../../../../../node_modules/o11y_schema/version/version.js","../../../../src/collectors/core-collector/CoreEnvelopeBuilder.ts","../../../../src/collectors/core-collector/CoreCollector.ts","../../../../src/collectors/hybrid-collector/HybridCollector.ts"],"sourcesContent":["import { Message, Root, Type } from 'protobufjs';\n\nimport { LogMeta, Schema, SchematizedPayload } from '../interfaces';\nimport { EncodedSchematizedPayload } from './EncodedSchematizedPayload';\nimport { SchematizedData, schemaUtil, utility } from 'o11y/shared';\nimport { LogMessage } from './core-collector/interfaces/LogMessage';\n\nclass ProtobufUtil {\n private readonly _typeStore = new Map<string, Type>();\n\n public getSchemaType(schema: Schema): Type {\n utility.requireArgument(schema, 'schema');\n const schemaPath = schemaUtil.getSchemaId(schema);\n let type = this._typeStore.get(schemaPath);\n\n if (!type) {\n // Lazy add to the type store\n const schemaInstance = Root.fromJSON(schema.pbjsSchema);\n // this will throw if it can't find it\n type = schemaInstance.lookupType(schemaPath);\n this._typeStore.set(schemaPath, type);\n }\n\n return type;\n }\n\n public validate(schema: Schema, data: SchematizedData): Type {\n utility.requireArgument(schema, 'schema');\n utility.requireArgument(data, 'data');\n const type: Type = this.getSchemaType(schema);\n\n const errorText = type.verify(data);\n if (errorText) {\n throw new Error(`Data is invalid for ${type.fullName}: ${errorText}`);\n }\n return type;\n }\n\n public encode(schema: Schema, data: SchematizedData): Uint8Array {\n const type: Type = this.validate(schema, data);\n const message: Message = type.fromObject(data);\n const encoded: Uint8Array = type.encode(message).finish();\n return encoded;\n }\n\n public encodePayload(rawPayload: SchematizedPayload): EncodedSchematizedPayload {\n if (rawPayload && rawPayload.schema && rawPayload.payload) {\n return {\n schemaName: schemaUtil.getSchemaId(rawPayload.schema),\n payload: this.encode(rawPayload.schema, rawPayload.payload)\n };\n }\n return undefined;\n }\n\n // This method generates a LogMessage (used in the CoreEnvelope) from the provided arguments.\n public getLogMessage(schema: Schema, data: SchematizedData, logMeta: LogMeta): LogMessage {\n return {\n timestamp: logMeta.timestamp,\n data: this.encode(schema, data),\n age: utility.getAge(logMeta.timestamp),\n rootId: logMeta.rootId,\n seq: logMeta.sequence,\n sseq: logMeta.schemaSequence,\n loggerName: logMeta.loggerName,\n pagePayload: this.encodePayload(logMeta.pagePayload),\n loggerAppName: logMeta.loggerAppName,\n connectionType: logMeta.connectionType,\n appPayload: this.encodePayload(logMeta.appPayload)\n };\n }\n}\n\nexport const protobufUtil = new ProtobufUtil();\n","export enum UploadMode {\n fetchBinary, // application/octet-stream\n fetchFile, // multipart/form-data\n noUpload\n}\n","export const version='240.11.0'","import { BucketMetric, Metric } from '../../interfaces';\nimport { MetricsTags, utility } from 'o11y/shared';\nimport { CoreEnvelope } from './interfaces/CoreEnvelope';\nimport { LogMessage } from './interfaces/LogMessage';\nimport { MessageBundle } from './interfaces/MessageBundle';\nimport { StaticAttributes } from './interfaces/StaticAttributes';\nimport { BucketHistogram } from '../metrics/BucketHistogram';\nimport { UpCounter } from '../metrics/UpCounter';\nimport { ValueRecorder } from '../metrics/ValueRecorder';\nimport { version as schemaVersion } from 'o11y_schema/version';\nimport { MetricTag } from '../metrics/MetricTag';\n\nexport const coreEnvelopeKey = 'o11y';\nexport class CoreEnvelopeBuilder {\n private _envelope: CoreEnvelope;\n\n constructor() {\n this._envelope = {\n diagnostics: {\n key: coreEnvelopeKey,\n generatedTimestamp: undefined,\n bundleCount: 0,\n bucketHistogramCount: 0,\n upCounterCount: 0,\n valueRecorderCount: 0,\n schemaVersion\n },\n bundles: [] as MessageBundle[],\n metrics: {\n bucketHistograms: [] as BucketHistogram[],\n upCounters: [] as UpCounter[],\n valueRecorders: [] as ValueRecorder[]\n },\n staticAttributes: {}\n };\n }\n\n withStaticAttributes(staticAttributes: StaticAttributes): CoreEnvelopeBuilder {\n this._envelope.staticAttributes = staticAttributes;\n return this;\n }\n\n withLogs(schemaName: string, logs: LogMessage[]): CoreEnvelopeBuilder {\n let msgBundle: MessageBundle = this._envelope.bundles.find(\n (bundle) => bundle.schemaName === schemaName\n );\n\n if (msgBundle) {\n for (const log of logs) {\n msgBundle.messages.push(log);\n }\n } else {\n msgBundle = {\n schemaName: schemaName,\n messages: logs\n };\n this._envelope.bundles.push(msgBundle);\n }\n this._envelope.diagnostics.bundleCount = this._envelope.bundles.length;\n return this;\n }\n\n private static _getMetricTags<T>(metric: Metric<T>): MetricTag[] {\n const tags: MetricsTags = metric.getTags();\n if (tags) {\n return Object.entries(tags).map((entry) => {\n const mt: MetricTag = {\n name: entry[0],\n value: entry[1].toString()\n };\n return mt;\n });\n }\n return undefined;\n }\n\n static getUpCounters(metrics: Metric<number>[], reset = true): UpCounter[] {\n return metrics.map((metric) => {\n const data: UpCounter = {\n name: metric.getName(),\n createdTimestamp: metric.getCreatedOn(),\n lastUpdatedTimestamp: metric.getLastUpdatedOn(),\n value: metric.getData(),\n ownerName: metric.getOwnerName(),\n ownerAppName: metric.getOwnerAppName(),\n tags: this._getMetricTags(metric)\n };\n if (reset) {\n metric.reset();\n }\n return data;\n });\n }\n\n static getValueRecorders(metrics: Metric<number[]>[], reset = true): ValueRecorder[] {\n return metrics.map((metric) => {\n const data: ValueRecorder = {\n name: metric.getName(),\n createdTimestamp: metric.getCreatedOn(),\n lastUpdatedTimestamp: metric.getLastUpdatedOn(),\n values: metric.getData(),\n ownerName: metric.getOwnerName(),\n ownerAppName: metric.getOwnerAppName(),\n tags: this._getMetricTags(metric)\n };\n if (reset) {\n metric.reset();\n }\n return data;\n });\n }\n\n static getBucketHistograms(metrics: BucketMetric<number[]>[], reset = true): BucketHistogram[] {\n return metrics.map((metric) => {\n const data: BucketHistogram = {\n name: metric.getName(),\n createdTimestamp: metric.getCreatedOn(),\n lastUpdatedTimestamp: metric.getLastUpdatedOn(),\n values: metric.getData(),\n buckets: metric.getBuckets(),\n ownerName: metric.getOwnerName(),\n ownerAppName: metric.getOwnerAppName(),\n tags: this._getMetricTags(metric)\n };\n if (reset) {\n metric.reset();\n }\n return data;\n });\n }\n\n withUpCounters(upCounters: UpCounter[]): CoreEnvelopeBuilder {\n for (const upCounter of upCounters) {\n this._envelope.metrics.upCounters.push(upCounter);\n }\n this._envelope.diagnostics.upCounterCount = this._envelope.metrics.upCounters.length;\n return this;\n }\n\n withValueRecorders(valueRecorders: ValueRecorder[]): CoreEnvelopeBuilder {\n for (const valueRecorder of valueRecorders) {\n this._envelope.metrics.valueRecorders.push(valueRecorder);\n }\n this._envelope.diagnostics.valueRecorderCount =\n this._envelope.metrics.valueRecorders.length;\n return this;\n }\n\n withBucketHistograms(bucketHistograms: BucketHistogram[]): CoreEnvelopeBuilder {\n for (const bucketHistogram of bucketHistograms) {\n this._envelope.metrics.bucketHistograms.push(bucketHistogram);\n }\n this._envelope.diagnostics.bucketHistogramCount =\n this._envelope.metrics.bucketHistograms.length;\n return this;\n }\n\n build(): CoreEnvelope {\n this._envelope.diagnostics.generatedTimestamp = utility.time().tsNow;\n return this._envelope;\n }\n}\n","import { Root, Type } from 'protobufjs';\nimport { coreEnvelopeSchema } from 'o11y_schema/sf_instrumentation';\n\nimport {\n Environment,\n LogCollector,\n LogMeta,\n MetricsCollector,\n MetricsExtractorMethods,\n Schema\n} from '../../interfaces';\nimport { LazyMapToList, SchematizedData, schemaUtil, utility } from 'o11y/shared';\n\nimport { protobufUtil } from '../protobuf-util';\nimport { UploadMode } from './UploadMode';\nimport { CoreCollectorOptions } from './interfaces/CoreCollectorOptions';\nimport { CoreEnvelope } from './interfaces/CoreEnvelope';\nimport { CoreEnvelopeBuilder } from './CoreEnvelopeBuilder';\nimport { LogMessage } from './interfaces/LogMessage';\nimport { StaticAttributes } from './interfaces/StaticAttributes';\nimport { CoreEnvelopeContents } from './interfaces/CoreEnvelopeContents';\nimport { UploadResult } from './interfaces/UploadResult';\n\nconst defaultMaxUniqueSchemas = 10000;\nconst defaultMaxDelayBeforeUpload = 10000;\nconst defaultMessagesLimit = 10;\nconst defaultMetricsLimit = 10;\nconst defaultFormDataKey = 'telemetry';\nconst defaultUploadMode = UploadMode.fetchBinary;\n\nexport type UploadOptionsCallback = () => RequestInit;\n\nexport class CoreCollector implements LogCollector, MetricsCollector {\n private readonly _messageBuffers: LazyMapToList<Schema, LogMessage>;\n private readonly _coreEnvelopeType: Type;\n private _intervalHandle: NodeJS.Timeout;\n private _metricsExtractors: MetricsExtractorMethods;\n private readonly _staticAttributes: StaticAttributes;\n private _immediateUpload: boolean;\n private readonly _messagesLimit: number = defaultMessagesLimit;\n /*\n Known limitation:\n Unlike _messagesLimit, _metricsLimit is not a strict limit in all cases, as the CoreCollector\n doesn't get notified every time a new metric is added. Instead, it takes metrics into account\n when a message is logged or the upload timer is elapsed. If the _metricsLimit is exceeded \n with no messages logged and upload time not yet elapsed, upload will not occur.\n */\n private readonly _metricsLimit: number = defaultMetricsLimit;\n private readonly _formDataKey: string = defaultFormDataKey;\n private readonly _uploadFailedListener: (ur: UploadResult) => unknown;\n private _uploadInterval: number = defaultMaxDelayBeforeUpload;\n private _uploadEndpoint: string;\n private _uploadMode: UploadMode;\n private readonly _emptySize: number;\n private _messageSize = 0;\n private _uploadOptionsCallback: UploadOptionsCallback;\n\n constructor(\n uploadEndpoint?: string,\n uploadMode?: UploadMode,\n environment?: Environment,\n options?: CoreCollectorOptions\n ) {\n this.uploadEndpoint = uploadEndpoint;\n this.uploadMode = uploadMode == undefined ? defaultUploadMode : uploadMode;\n\n const root = Root.fromJSON(coreEnvelopeSchema.pbjsSchema);\n this._coreEnvelopeType = root.lookupType('CoreEnvelope');\n\n if (environment) {\n this._staticAttributes = {\n appName: environment.appName,\n appVersion: environment.appVersion,\n appExperience: environment.appExperience,\n deviceId: environment.deviceId,\n deviceModel: environment.deviceModel,\n sdkVersion: environment.sdkVersion\n };\n }\n\n let maxUniqueSchemas = defaultMaxUniqueSchemas;\n if (options) {\n const mus: number = options.maxUniqueSchemas;\n if (mus !== undefined) {\n if (typeof mus !== 'number' || !(mus > 0)) {\n throw new Error('options.maxUniqueSchemas, if defined, must be > 0');\n }\n maxUniqueSchemas = mus;\n }\n\n const msglim: number = options.messagesLimit;\n if (msglim !== undefined) {\n if (typeof msglim !== 'number' || !(msglim > 0)) {\n throw new Error('options.messagesLimit, if defined, must be > 0');\n }\n this._messagesLimit = msglim;\n }\n\n const metlim: number = options.metricsLimit;\n if (metlim !== undefined) {\n if (typeof metlim !== 'number' || !(metlim > 0)) {\n throw new Error('options.metricsLimit, if defined, must be > 0');\n }\n this._metricsLimit = metlim;\n }\n\n if (\n utility.requireArgumentIfDefined(\n options.formDataKeyName,\n 'options.formDataKeyName',\n 'string'\n )\n ) {\n this._formDataKey = options.formDataKeyName;\n }\n\n if (\n utility.requireArgumentIfDefined(\n options.uploadFailedListener,\n 'options.uploadFailedListener',\n 'function'\n )\n ) {\n this._uploadFailedListener = options.uploadFailedListener;\n }\n }\n this._messageBuffers = new LazyMapToList<Schema, LogMessage>(maxUniqueSchemas);\n\n this._emptySize = this.getByteSize(1);\n this._restartTimer();\n }\n\n get uploadInterval(): number {\n return this._uploadInterval;\n }\n set uploadInterval(uploadInterval: number) {\n if (uploadInterval === undefined) {\n uploadInterval = defaultMaxDelayBeforeUpload;\n }\n if (typeof uploadInterval !== 'number' || !(uploadInterval > 0)) {\n throw new Error('uploadInterval, if defined, must be > 0');\n }\n if (uploadInterval !== this._uploadInterval) {\n this._uploadInterval = uploadInterval;\n // Now that the interval has changed, restart the timer\n this._restartTimer();\n }\n }\n\n get uploadEndpoint(): string {\n return this._uploadEndpoint;\n }\n set uploadEndpoint(uploadEndpoint: string) {\n utility.requireArgumentIfDefined(uploadEndpoint, 'uploadEndpoint', 'string');\n this._uploadEndpoint = uploadEndpoint;\n }\n\n get uploadOptionsCallback(): UploadOptionsCallback {\n return this._uploadOptionsCallback;\n }\n set uploadOptionsCallback(uploadOptionsCallback: UploadOptionsCallback) {\n utility.requireArgumentIfDefined(\n uploadOptionsCallback,\n 'uploadOptionsCallback',\n 'function'\n );\n\n this._uploadOptionsCallback = uploadOptionsCallback;\n }\n\n get uploadMode(): UploadMode {\n return this._uploadMode;\n }\n set uploadMode(uploadMode: UploadMode) {\n utility.requireArgumentIfDefined(uploadMode, 'uploadMode', 'number');\n if (uploadMode === undefined) {\n uploadMode = defaultUploadMode;\n }\n if (!(uploadMode in UploadMode)) {\n throw new Error(`Unsupported upload mode: ${uploadMode}`);\n }\n this._uploadMode = uploadMode;\n }\n\n // Note: If making changes to this method, please locally test using SizeEstimation.test.js\n getByteSize(accuracy?: number): number {\n // This method provides an estimate.\n // Accuracy is specified as 1 = most accurate\n return accuracy >= 1\n ? this._buildProtoEncodedCoreEnvelope(false).byteLength\n : accuracy >= 0.5\n ? this._emptySize + this._messageSize + this.metricsCount * 8\n : this._emptySize + this._messageSize;\n }\n\n private _stopTimer(): void {\n if (this._intervalHandle !== undefined) {\n clearInterval(this._intervalHandle);\n this._intervalHandle = undefined;\n }\n }\n\n private _restartTimer(): void {\n this._stopTimer();\n this._intervalHandle = setInterval(() => {\n if (this.hasData) {\n this._upload();\n }\n }, this._uploadInterval);\n }\n\n // This method is implementing the LogCollector interface, but needs to return (not swallow)\n // the async result in order for direct call to it from test to handle failure cases properly.\n async collect(schema: Schema, data: SchematizedData, logMeta: LogMeta): Promise<UploadResult> {\n if (schemaUtil.isInternal(schema) && data.userPayload) {\n data.userPayload = protobufUtil.encodePayload(data.userPayload);\n }\n const msg: LogMessage = protobufUtil.getLogMessage(schema, data, logMeta);\n\n if (!this._messageBuffers.push(schema, msg)) {\n throw new Error(`Buffer is full. Refusing schemaId ${schemaUtil.getSchemaId(schema)}`);\n }\n // Get an estimate\n this._messageSize += utility.estimateObjectSize(msg);\n if (this._shouldUpload()) {\n return this._upload();\n }\n return undefined;\n }\n\n private _shouldUpload(): boolean {\n return (\n (this._immediateUpload && this.hasData) ||\n this.messagesCount >= this._messagesLimit ||\n this.metricsCount >= this._metricsLimit\n );\n }\n\n private async _upload(userInitiated?: boolean): Promise<UploadResult> {\n this._restartTimer();\n if (!this._uploadEndpoint || this._uploadMode === UploadMode.noUpload) {\n return undefined;\n }\n\n const contents: CoreEnvelopeContents = this._getContentsOfCoreEnvelope(true);\n return this._uploadContents(contents, userInitiated);\n }\n\n private async _uploadContents(\n contents: CoreEnvelopeContents,\n userInitiated: boolean\n ): Promise<UploadResult> {\n const coreEnvelope: Uint8Array = this._buildProtoEncodedCoreEnvelopeFrom(contents);\n\n let requestInit: RequestInit;\n switch (this._uploadMode) {\n case UploadMode.fetchBinary:\n requestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/octet-stream'\n },\n body: coreEnvelope\n };\n break;\n case UploadMode.fetchFile:\n const formData = new FormData();\n formData.append(this._formDataKey, new Blob([coreEnvelope]));\n // Per [this article](https://muffinman.io/uploading-files-using-fetch-multipart-form-data/)\n // make sure not to set the Content-Type header.\n // The browser will set it for you, including the boundary parameter.\n requestInit = {\n method: 'POST',\n body: formData\n };\n break;\n }\n\n const ur: UploadResult = {\n envelopeContents: contents\n };\n try {\n if (this._uploadOptionsCallback) {\n const options: RequestInit = this._uploadOptionsCallback() || {};\n if (options) {\n if (options.headers && requestInit.headers) {\n // According to lim.dom.d.ts:\n // type HeadersInit = string[][] | Record<string, string> | Headers;\n if (options.headers instanceof Headers) {\n for (const key in requestInit.headers) {\n if (\n Object.prototype.hasOwnProperty.call(requestInit.headers, key)\n ) {\n options.headers.set(\n key,\n (requestInit.headers as Record<string, string>)[key]\n );\n }\n }\n } else if (Array.isArray(options.headers)) {\n // This doesn't seem valid according to https://developer.mozilla.org/en-US/docs/Web/API/fetch\n throw new Error('Headers as array is not supported.');\n } else {\n Object.assign(options.headers, requestInit.headers);\n }\n }\n options.method = requestInit.method;\n options.body = requestInit.body;\n requestInit = options;\n }\n }\n\n ur.response = await fetch(this._uploadEndpoint, requestInit);\n // fetch only throws on network errors, not HTTP errors, so handle that here\n if (!ur.response.ok) {\n throw new Error('HTTP Not OK');\n }\n return ur;\n } catch (err) {\n ur.error = err;\n if (!userInitiated && this._uploadFailedListener) {\n try {\n this._uploadFailedListener(ur);\n } catch {}\n }\n throw ur;\n }\n }\n\n private _checkUploadState(): void {\n if (this._uploadEndpoint === undefined) {\n throw new Error('Upload endpoint is unset');\n }\n if (this._uploadMode === UploadMode.noUpload) {\n throw new Error('Upload mode is unset');\n }\n }\n\n // User initiated method\n public async upload(contents?: CoreEnvelopeContents): Promise<UploadResult> {\n this._checkUploadState();\n if (utility.requireArgumentIfDefined(contents, 'contents', 'object')) {\n return this._uploadContents(contents, true);\n }\n\n return this.hasData ? this._upload(true) : undefined;\n }\n\n get hasData(): boolean {\n return this.messagesCount > 0 || this.metricsCount > 0;\n }\n\n get messagesCount(): number {\n return this._messageBuffers.totalItemCount;\n }\n\n get metricsCount(): number {\n let count = 0;\n\n if (this._metricsExtractors) {\n let metrics: unknown[] = this._metricsExtractors.getAllUpCounters();\n count += (metrics && metrics.length) || 0;\n metrics = this._metricsExtractors.getAllValueRecorders();\n count += (metrics && metrics.length) || 0;\n metrics = this._metricsExtractors.getAllBucketHistograms();\n count += (metrics && metrics.length) || 0;\n }\n\n return count;\n }\n\n getProtoEncodedCoreEnvelope(): Uint8Array {\n return this._buildProtoEncodedCoreEnvelope(true);\n }\n\n getContentsOfCoreEnvelope(): CoreEnvelopeContents {\n return this._getContentsOfCoreEnvelope(true);\n }\n\n private _getContentsOfCoreEnvelope(extract: boolean): CoreEnvelopeContents {\n // 1. extract=true is for most use cases.\n // 2. extract=false is for peeking into the contents without affecting them\n // (i.e. messages are kept in the buffers and metrics are not reset.)\n // Message arrays are references to the originals and should be handled carefully.\n\n const contents: CoreEnvelopeContents = {\n staticAttributes: this._staticAttributes,\n messages: this._messageBuffers.getAllMessages(extract)\n };\n\n if (this._metricsExtractors) {\n contents.upCounters = CoreEnvelopeBuilder.getUpCounters(\n this._metricsExtractors.getAllUpCounters(),\n extract\n );\n contents.valueRecorders = CoreEnvelopeBuilder.getValueRecorders(\n this._metricsExtractors.getAllValueRecorders(),\n extract\n );\n contents.bucketHistograms = CoreEnvelopeBuilder.getBucketHistograms(\n this._metricsExtractors.getAllBucketHistograms(),\n extract\n );\n }\n\n if (extract) {\n this._messageSize = 0;\n }\n return contents;\n }\n\n private _buildProtoEncodedCoreEnvelope(extract: boolean): Uint8Array {\n const contents: CoreEnvelopeContents = this._getContentsOfCoreEnvelope(extract);\n return this._buildProtoEncodedCoreEnvelopeFrom(contents);\n }\n\n private _buildProtoEncodedCoreEnvelopeFrom(contents?: CoreEnvelopeContents): Uint8Array {\n const builder = new CoreEnvelopeBuilder();\n\n if (contents.staticAttributes) {\n builder.withStaticAttributes(contents.staticAttributes);\n }\n if (contents.messages) {\n contents.messages.forEach((logs: LogMessage[], schema: Schema) => {\n builder.withLogs(schemaUtil.getSchemaId(schema), logs);\n });\n }\n if (contents.upCounters) {\n builder.withUpCounters(contents.upCounters);\n }\n if (contents.valueRecorders) {\n builder.withValueRecorders(contents.valueRecorders);\n }\n if (contents.bucketHistograms) {\n builder.withBucketHistograms(contents.bucketHistograms);\n }\n\n return this._encodeCoreEnvelope(builder.build());\n }\n\n private _encodeCoreEnvelope(coreEnvelope: CoreEnvelope): Uint8Array {\n const errorMessage = this._coreEnvelopeType.verify(coreEnvelope);\n if (errorMessage) {\n throw new Error(`Invalid CoreEnvelope: ${errorMessage}`);\n }\n\n const encodedCoreEnvelope = this._coreEnvelopeType.encode(coreEnvelope).finish();\n return encodedCoreEnvelope;\n }\n\n receiveMetricsExtractors(metricsExtractors: MetricsExtractorMethods): void {\n this._metricsExtractors = metricsExtractors;\n }\n}\n","import {\n BucketMetric,\n LogCollector,\n LogMeta,\n Metric,\n MetricsCollector,\n MetricsExtractorMethods,\n Schema\n} from '../../interfaces';\nimport { SchematizedData, MetricsTags, schemaUtil, utility } from 'o11y/shared';\nimport { protobufUtil } from '../protobuf-util';\nimport { LogMessage } from '../core-collector/interfaces/LogMessage';\nimport { EncodedSchematizedPayload } from '../EncodedSchematizedPayload';\nimport { MetricTag } from '../metrics/MetricTag';\nimport { UpCounter } from '../metrics/UpCounter';\nimport { ValueRecorder } from '../metrics/ValueRecorder';\nimport { BucketHistogram } from '../metrics/BucketHistogram';\nimport { Metrics } from '../metrics/Metrics';\n\nconst metricsCollectionMilliseconds = 30000;\n\n// The observability plugin expects encoded payloads, so can't use LogMeta as-is.\ninterface LogMetaObservability {\n timestamp: number;\n rootId: string;\n sequence: number;\n loggerName: string;\n pagePayload: EncodedSchematizedPayload;\n loggerAppName: string;\n connectionType: string;\n appPayload: EncodedSchematizedPayload;\n}\n\n// The following interface is expected to be fulfilled by the\n// observability plugin in Lightning SDK.\ndeclare type NimbusObservabilityPlugin = {\n // Called to send a collected message to native for handling\n log: (schema: string, encodedMessage: Uint8Array, logMeta: LogMetaObservability) => void;\n\n // Called to send metrics to native for handling\n logMetrics: (metrics: Metrics) => void;\n\n // Called to listen for root activity changes in native.\n //\n // The startListener is called with the id of the root activity when an activity is started\n // The stopListener is called when a root activity is stopped\n addRootActivityListeners: (\n startListener: (activityInfo: { id: string }) => void,\n stopListener: () => void\n ) => void;\n\n // Called to inform native that the web view has detected an idle state.\n idleDetected: (timestamp: number) => void;\n};\n\n// The `HybridCollector` uses nimbus to send log data immediately across\n// to be handled by the native observability library.\nexport class HybridCollector implements LogCollector, MetricsCollector {\n private readonly _observability: NimbusObservabilityPlugin;\n private _metricsExtractors: MetricsExtractorMethods;\n\n constructor() {\n if (typeof __nimbus === 'undefined') {\n throw new Error('Nimbus is unavailable');\n }\n if (!__nimbus.plugins || !__nimbus.plugins.observability) {\n throw new Error('Observability plugin not found in Nimbus plugins');\n }\n this._observability = __nimbus.plugins.observability as NimbusObservabilityPlugin;\n setInterval(() => {\n this._collectMetrics();\n }, metricsCollectionMilliseconds);\n }\n\n collect(schema: Schema, data: SchematizedData, logMeta: LogMeta): void {\n if (schemaUtil.isInternal(schema) && data.userPayload) {\n data.userPayload = protobufUtil.encodePayload(data.userPayload);\n }\n const logMessage: LogMessage = protobufUtil.getLogMessage(schema, data, logMeta);\n const logMetaObs: LogMetaObservability = {\n timestamp: logMeta.timestamp,\n rootId: logMeta.rootId,\n sequence: logMeta.sequence,\n loggerName: logMeta.loggerName,\n pagePayload: logMessage.pagePayload,\n loggerAppName: logMeta.loggerAppName,\n connectionType: logMeta.connectionType,\n appPayload: logMessage.appPayload\n };\n this._observability.log(schemaUtil.getSchemaId(schema), logMessage.data, logMetaObs);\n }\n\n receiveMetricsExtractors(metricsExtractors: MetricsExtractorMethods): void {\n this._metricsExtractors = metricsExtractors;\n }\n\n // An app can call this method to listen for root activities that start and stop\n // on the native side, in order to associate web activities with the same root id.\n addRootActivityListeners(\n activityStarted: (info: { id: string }) => void,\n activityEnded: () => void\n ): void {\n utility.requireArgument(activityStarted, 'activityStarted', 'function');\n utility.requireArgument(activityEnded, 'activityEnded', 'function');\n\n this._observability.addRootActivityListeners(activityStarted, activityEnded);\n }\n\n // An app should call this method when it detects idle in the web view in order\n // to inform the native app of the idle state.\n notifyIdleDetected(timestamp: number): void {\n this._observability.idleDetected(timestamp);\n }\n\n private _collectMetrics(): void {\n if (this._metricsExtractors) {\n const upCounters: Metric<number>[] = this._metricsExtractors.getAllUpCounters();\n const valueRecorders: Metric<number[]>[] =\n this._metricsExtractors.getAllValueRecorders();\n const bucketHistograms: BucketMetric<number[]>[] =\n this._metricsExtractors.getAllBucketHistograms();\n const recorders: ValueRecorder[] = [];\n const counters: UpCounter[] = [];\n const histograms: BucketHistogram[] = [];\n\n for (const valueRecorder of valueRecorders) {\n const vr: ValueRecorder = {\n name: valueRecorder.getName(),\n createdTimestamp: valueRecorder.getCreatedOn(),\n lastUpdatedTimestamp: valueRecorder.getLastUpdatedOn(),\n values: valueRecorder.getData(),\n ownerName: valueRecorder.getOwnerName(),\n ownerAppName: valueRecorder.getOwnerAppName(),\n tags: this._getMetricTags(valueRecorder)\n };\n recorders.push(vr);\n valueRecorder.reset();\n }\n\n for (const upCounter of upCounters) {\n const uc: UpCounter = {\n name: upCounter.getName(),\n createdTimestamp: upCounter.getCreatedOn(),\n lastUpdatedTimestamp: upCounter.getLastUpdatedOn(),\n value: upCounter.getData(),\n ownerName: upCounter.getOwnerName(),\n ownerAppName: upCounter.getOwnerAppName(),\n tags: this._getMetricTags(upCounter)\n };\n counters.push(uc);\n upCounter.reset();\n }\n\n for (const bucketHistogram of bucketHistograms) {\n const bh: BucketHistogram = {\n name: bucketHistogram.getName(),\n createdTimestamp: bucketHistogram.getCreatedOn(),\n lastUpdatedTimestamp: bucketHistogram.getLastUpdatedOn(),\n values: bucketHistogram.getData(),\n buckets: bucketHistogram.getBuckets(),\n ownerName: bucketHistogram.getOwnerName(),\n ownerAppName: bucketHistogram.getOwnerAppName(),\n tags: this._getMetricTags(bucketHistogram)\n };\n histograms.push(bh);\n bucketHistogram.reset();\n }\n\n if (recorders.length > 0 || counters.length > 0) {\n const metrics: Metrics = {\n upCounters: counters,\n valueRecorders: recorders,\n bucketHistograms: histograms\n };\n this._observability.logMetrics(metrics);\n }\n }\n }\n\n private _getMetricTags<T>(metric: Metric<T>): MetricTag[] {\n const metricsTags: MetricsTags = metric.getTags();\n\n if (metricsTags) {\n return Object.entries(metricsTags).map((entry) => {\n const mt: MetricTag = {\n name: entry[0],\n value: entry[1].toString()\n };\n return mt;\n });\n }\n return [];\n }\n}\n"],"names":["schemaVersion"],"mappings":"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"}
1
+ {"version":3,"file":"collectors.js","sources":["../../../../src/collectors/protobuf-util.ts","../../../../src/collectors/core-collector/UploadMode.ts","../../../../../../node_modules/o11y_schema/version/version.js","../../../../src/collectors/core-collector/CoreEnvelopeBuilder.ts","../../../../src/collectors/core-collector/CoreCollector.ts","../../../../src/collectors/hybrid-collector/HybridCollector.ts"],"sourcesContent":["import { Message, Root, Type } from 'protobufjs';\n\nimport { LogMeta, Schema, SchematizedPayload } from '../interfaces';\nimport { EncodedSchematizedPayload } from './EncodedSchematizedPayload';\nimport { SchematizedData, schemaUtil, utility } from 'o11y/shared';\nimport { LogMessage } from './core-collector/interfaces/LogMessage';\n\nclass ProtobufUtil {\n private readonly _typeStore = new Map<string, Type>();\n\n public getSchemaType(schema: Schema): Type {\n utility.requireArgument(schema, 'schema');\n const schemaPath = schemaUtil.getSchemaId(schema);\n let type = this._typeStore.get(schemaPath);\n\n if (!type) {\n // Lazy add to the type store\n const schemaInstance = Root.fromJSON(schema.pbjsSchema);\n // this will throw if it can't find it\n type = schemaInstance.lookupType(schemaPath);\n this._typeStore.set(schemaPath, type);\n }\n\n return type;\n }\n\n public validate(schema: Schema, data: SchematizedData): Type {\n utility.requireArgument(schema, 'schema');\n utility.requireArgument(data, 'data');\n const type: Type = this.getSchemaType(schema);\n\n const errorText = type.verify(data);\n if (errorText) {\n throw new Error(`Data is invalid for ${type.fullName}: ${errorText}`);\n }\n return type;\n }\n\n public encode(schema: Schema, data: SchematizedData): Uint8Array {\n const type: Type = this.validate(schema, data);\n const message: Message = type.fromObject(data);\n const encoded: Uint8Array = type.encode(message).finish();\n return encoded;\n }\n\n public encodePayload(rawPayload: SchematizedPayload): EncodedSchematizedPayload {\n if (rawPayload && rawPayload.schema && rawPayload.payload) {\n return {\n schemaName: schemaUtil.getSchemaId(rawPayload.schema),\n payload: this.encode(rawPayload.schema, rawPayload.payload)\n };\n }\n return undefined;\n }\n\n // This method generates a LogMessage (used in the CoreEnvelope) from the provided arguments.\n public getLogMessage(schema: Schema, data: SchematizedData, logMeta: LogMeta): LogMessage {\n return {\n timestamp: logMeta.timestamp,\n data: this.encode(schema, data),\n age: utility.getAge(logMeta.timestamp),\n rootId: logMeta.rootId,\n seq: logMeta.sequence,\n sseq: logMeta.schemaSequence,\n loggerName: logMeta.loggerName,\n pagePayload: this.encodePayload(logMeta.pagePayload),\n loggerAppName: logMeta.loggerAppName,\n connectionType: logMeta.connectionType,\n appPayload: this.encodePayload(logMeta.appPayload)\n };\n }\n}\n\nexport const protobufUtil = new ProtobufUtil();\n","export enum UploadMode {\n fetchBinary, // application/octet-stream\n fetchFile, // multipart/form-data\n noUpload\n}\n","export const version='242.0.0'","import { BucketMetric, Metric } from '../../interfaces';\nimport { MetricsTags, utility } from 'o11y/shared';\nimport { CoreEnvelope } from './interfaces/CoreEnvelope';\nimport { LogMessage } from './interfaces/LogMessage';\nimport { MessageBundle } from './interfaces/MessageBundle';\nimport { StaticAttributes } from './interfaces/StaticAttributes';\nimport { BucketHistogram } from '../metrics/BucketHistogram';\nimport { UpCounter } from '../metrics/UpCounter';\nimport { ValueRecorder } from '../metrics/ValueRecorder';\nimport { version as schemaVersion } from 'o11y_schema/version';\nimport { MetricTag } from '../metrics/MetricTag';\n\nexport const coreEnvelopeKey = 'o11y';\nexport class CoreEnvelopeBuilder {\n private _envelope: CoreEnvelope;\n\n constructor() {\n this._envelope = {\n diagnostics: {\n key: coreEnvelopeKey,\n generatedTimestamp: undefined,\n bundleCount: 0,\n bucketHistogramCount: 0,\n upCounterCount: 0,\n valueRecorderCount: 0,\n schemaVersion\n },\n bundles: [] as MessageBundle[],\n metrics: {\n bucketHistograms: [] as BucketHistogram[],\n upCounters: [] as UpCounter[],\n valueRecorders: [] as ValueRecorder[]\n },\n staticAttributes: {}\n };\n }\n\n withStaticAttributes(staticAttributes: StaticAttributes): CoreEnvelopeBuilder {\n this._envelope.staticAttributes = staticAttributes;\n return this;\n }\n\n withLogs(schemaName: string, logs: LogMessage[]): CoreEnvelopeBuilder {\n let msgBundle: MessageBundle = this._envelope.bundles.find(\n (bundle) => bundle.schemaName === schemaName\n );\n\n if (msgBundle) {\n for (const log of logs) {\n msgBundle.messages.push(log);\n }\n } else {\n msgBundle = {\n schemaName: schemaName,\n messages: logs\n };\n this._envelope.bundles.push(msgBundle);\n }\n this._envelope.diagnostics.bundleCount = this._envelope.bundles.length;\n return this;\n }\n\n private static _getMetricTags<T>(metric: Metric<T>): MetricTag[] {\n const tags: MetricsTags = metric.getTags();\n if (tags) {\n return Object.entries(tags).map((entry) => {\n const mt: MetricTag = {\n name: entry[0],\n value: entry[1].toString()\n };\n return mt;\n });\n }\n return undefined;\n }\n\n static getUpCounters(metrics: Metric<number>[], reset = true): UpCounter[] {\n return metrics.map((metric) => {\n const data: UpCounter = {\n name: metric.getName(),\n createdTimestamp: metric.getCreatedOn(),\n lastUpdatedTimestamp: metric.getLastUpdatedOn(),\n value: metric.getData(),\n ownerName: metric.getOwnerName(),\n ownerAppName: metric.getOwnerAppName(),\n tags: this._getMetricTags(metric)\n };\n if (reset) {\n metric.reset();\n }\n return data;\n });\n }\n\n static getValueRecorders(metrics: Metric<number[]>[], reset = true): ValueRecorder[] {\n return metrics.map((metric) => {\n const data: ValueRecorder = {\n name: metric.getName(),\n createdTimestamp: metric.getCreatedOn(),\n lastUpdatedTimestamp: metric.getLastUpdatedOn(),\n values: metric.getData(),\n ownerName: metric.getOwnerName(),\n ownerAppName: metric.getOwnerAppName(),\n tags: this._getMetricTags(metric)\n };\n if (reset) {\n metric.reset();\n }\n return data;\n });\n }\n\n static getBucketHistograms(metrics: BucketMetric<number[]>[], reset = true): BucketHistogram[] {\n return metrics.map((metric) => {\n const data: BucketHistogram = {\n name: metric.getName(),\n createdTimestamp: metric.getCreatedOn(),\n lastUpdatedTimestamp: metric.getLastUpdatedOn(),\n values: metric.getData(),\n buckets: metric.getBuckets(),\n ownerName: metric.getOwnerName(),\n ownerAppName: metric.getOwnerAppName(),\n tags: this._getMetricTags(metric)\n };\n if (reset) {\n metric.reset();\n }\n return data;\n });\n }\n\n withUpCounters(upCounters: UpCounter[]): CoreEnvelopeBuilder {\n for (const upCounter of upCounters) {\n this._envelope.metrics.upCounters.push(upCounter);\n }\n this._envelope.diagnostics.upCounterCount = this._envelope.metrics.upCounters.length;\n return this;\n }\n\n withValueRecorders(valueRecorders: ValueRecorder[]): CoreEnvelopeBuilder {\n for (const valueRecorder of valueRecorders) {\n this._envelope.metrics.valueRecorders.push(valueRecorder);\n }\n this._envelope.diagnostics.valueRecorderCount =\n this._envelope.metrics.valueRecorders.length;\n return this;\n }\n\n withBucketHistograms(bucketHistograms: BucketHistogram[]): CoreEnvelopeBuilder {\n for (const bucketHistogram of bucketHistograms) {\n this._envelope.metrics.bucketHistograms.push(bucketHistogram);\n }\n this._envelope.diagnostics.bucketHistogramCount =\n this._envelope.metrics.bucketHistograms.length;\n return this;\n }\n\n build(): CoreEnvelope {\n this._envelope.diagnostics.generatedTimestamp = utility.time().tsNow;\n return this._envelope;\n }\n}\n","import { Root, Type } from 'protobufjs';\nimport { coreEnvelopeSchema } from 'o11y_schema/sf_instrumentation';\n\nimport {\n Environment,\n LogCollector,\n LogMeta,\n MetricsCollector,\n MetricsExtractorMethods,\n Schema\n} from '../../interfaces';\nimport { LazyMapToList, SchematizedData, schemaUtil, utility } from 'o11y/shared';\n\nimport { protobufUtil } from '../protobuf-util';\nimport { UploadMode } from './UploadMode';\nimport { CoreCollectorOptions } from './interfaces/CoreCollectorOptions';\nimport { CoreEnvelope } from './interfaces/CoreEnvelope';\nimport { CoreEnvelopeBuilder } from './CoreEnvelopeBuilder';\nimport { LogMessage } from './interfaces/LogMessage';\nimport { StaticAttributes } from './interfaces/StaticAttributes';\nimport { CoreEnvelopeContents } from './interfaces/CoreEnvelopeContents';\nimport { UploadResult } from './interfaces/UploadResult';\n\nconst defaultMaxUniqueSchemas = 10000;\nconst defaultMaxDelayBeforeUpload = 10000;\nconst defaultMessagesLimit = 10;\nconst defaultMetricsLimit = 10;\nconst defaultFormDataKey = 'telemetry';\nconst defaultUploadMode = UploadMode.fetchBinary;\n\nexport type UploadOptionsCallback = () => RequestInit;\n\nexport class CoreCollector implements LogCollector, MetricsCollector {\n private readonly _messageBuffers: LazyMapToList<Schema, LogMessage>;\n private readonly _coreEnvelopeType: Type;\n private _intervalHandle: NodeJS.Timeout;\n private _metricsExtractors: MetricsExtractorMethods;\n private readonly _staticAttributes: StaticAttributes;\n private _immediateUpload: boolean;\n private readonly _messagesLimit: number = defaultMessagesLimit;\n /*\n Known limitation:\n Unlike _messagesLimit, _metricsLimit is not a strict limit in all cases, as the CoreCollector\n doesn't get notified every time a new metric is added. Instead, it takes metrics into account\n when a message is logged or the upload timer is elapsed. If the _metricsLimit is exceeded \n with no messages logged and upload time not yet elapsed, upload will not occur.\n */\n private readonly _metricsLimit: number = defaultMetricsLimit;\n private readonly _formDataKey: string = defaultFormDataKey;\n private readonly _uploadFailedListener: (ur: UploadResult) => unknown;\n private _uploadInterval: number = defaultMaxDelayBeforeUpload;\n private _uploadEndpoint: string;\n private _uploadMode: UploadMode;\n private readonly _emptySize: number;\n private _messageSize = 0;\n private _uploadOptionsCallback: UploadOptionsCallback;\n\n constructor(\n uploadEndpoint?: string,\n uploadMode?: UploadMode,\n environment?: Environment,\n options?: CoreCollectorOptions\n ) {\n this.uploadEndpoint = uploadEndpoint;\n this.uploadMode = uploadMode == undefined ? defaultUploadMode : uploadMode;\n\n const root = Root.fromJSON(coreEnvelopeSchema.pbjsSchema);\n this._coreEnvelopeType = root.lookupType('CoreEnvelope');\n\n if (environment) {\n this._staticAttributes = {\n appName: environment.appName,\n appVersion: environment.appVersion,\n appExperience: environment.appExperience,\n deviceId: environment.deviceId,\n deviceModel: environment.deviceModel,\n sdkVersion: environment.sdkVersion\n };\n }\n\n let maxUniqueSchemas = defaultMaxUniqueSchemas;\n if (options) {\n const mus: number = options.maxUniqueSchemas;\n if (mus !== undefined) {\n if (typeof mus !== 'number' || !(mus > 0)) {\n throw new Error('options.maxUniqueSchemas, if defined, must be > 0');\n }\n maxUniqueSchemas = mus;\n }\n\n const msglim: number = options.messagesLimit;\n if (msglim !== undefined) {\n if (typeof msglim !== 'number' || !(msglim > 0)) {\n throw new Error('options.messagesLimit, if defined, must be > 0');\n }\n this._messagesLimit = msglim;\n }\n\n const metlim: number = options.metricsLimit;\n if (metlim !== undefined) {\n if (typeof metlim !== 'number' || !(metlim > 0)) {\n throw new Error('options.metricsLimit, if defined, must be > 0');\n }\n this._metricsLimit = metlim;\n }\n\n if (\n utility.requireArgumentIfDefined(\n options.formDataKeyName,\n 'options.formDataKeyName',\n 'string'\n )\n ) {\n this._formDataKey = options.formDataKeyName;\n }\n\n if (\n utility.requireArgumentIfDefined(\n options.uploadFailedListener,\n 'options.uploadFailedListener',\n 'function'\n )\n ) {\n this._uploadFailedListener = options.uploadFailedListener;\n }\n }\n this._messageBuffers = new LazyMapToList<Schema, LogMessage>(maxUniqueSchemas);\n\n this._emptySize = this.getByteSize(1);\n this._restartTimer();\n }\n\n get uploadInterval(): number {\n return this._uploadInterval;\n }\n set uploadInterval(uploadInterval: number) {\n if (uploadInterval === undefined) {\n uploadInterval = defaultMaxDelayBeforeUpload;\n }\n if (typeof uploadInterval !== 'number' || !(uploadInterval > 0)) {\n throw new Error('uploadInterval, if defined, must be > 0');\n }\n if (uploadInterval !== this._uploadInterval) {\n this._uploadInterval = uploadInterval;\n // Now that the interval has changed, restart the timer\n this._restartTimer();\n }\n }\n\n get uploadEndpoint(): string {\n return this._uploadEndpoint;\n }\n set uploadEndpoint(uploadEndpoint: string) {\n utility.requireArgumentIfDefined(uploadEndpoint, 'uploadEndpoint', 'string');\n this._uploadEndpoint = uploadEndpoint;\n }\n\n get uploadOptionsCallback(): UploadOptionsCallback {\n return this._uploadOptionsCallback;\n }\n set uploadOptionsCallback(uploadOptionsCallback: UploadOptionsCallback) {\n utility.requireArgumentIfDefined(\n uploadOptionsCallback,\n 'uploadOptionsCallback',\n 'function'\n );\n\n this._uploadOptionsCallback = uploadOptionsCallback;\n }\n\n get uploadMode(): UploadMode {\n return this._uploadMode;\n }\n set uploadMode(uploadMode: UploadMode) {\n utility.requireArgumentIfDefined(uploadMode, 'uploadMode', 'number');\n if (uploadMode === undefined) {\n uploadMode = defaultUploadMode;\n }\n if (!(uploadMode in UploadMode)) {\n throw new Error(`Unsupported upload mode: ${uploadMode}`);\n }\n this._uploadMode = uploadMode;\n }\n\n // Note: If making changes to this method, please locally test using SizeEstimation.test.js\n getByteSize(accuracy?: number): number {\n // This method provides an estimate.\n // Accuracy is specified as 1 = most accurate\n return accuracy >= 1\n ? this._buildProtoEncodedCoreEnvelope(false).byteLength\n : accuracy >= 0.5\n ? this._emptySize + this._messageSize + this.metricsCount * 8\n : this._emptySize + this._messageSize;\n }\n\n private _stopTimer(): void {\n if (this._intervalHandle !== undefined) {\n clearInterval(this._intervalHandle);\n this._intervalHandle = undefined;\n }\n }\n\n private _restartTimer(): void {\n this._stopTimer();\n this._intervalHandle = setInterval(() => {\n if (this.hasData) {\n this._upload();\n }\n }, this._uploadInterval);\n }\n\n // This method is implementing the LogCollector interface, but needs to return (not swallow)\n // the async result in order for direct call to it from test to handle failure cases properly.\n async collect(schema: Schema, data: SchematizedData, logMeta: LogMeta): Promise<UploadResult> {\n if (schemaUtil.isInternal(schema) && data.userPayload) {\n data.userPayload = protobufUtil.encodePayload(data.userPayload);\n }\n const msg: LogMessage = protobufUtil.getLogMessage(schema, data, logMeta);\n\n if (!this._messageBuffers.push(schema, msg)) {\n throw new Error(`Buffer is full. Refusing schemaId ${schemaUtil.getSchemaId(schema)}`);\n }\n // Get an estimate\n this._messageSize += utility.estimateObjectSize(msg);\n if (this._shouldUpload()) {\n return this._upload();\n }\n return undefined;\n }\n\n private _shouldUpload(): boolean {\n return (\n (this._immediateUpload && this.hasData) ||\n this.messagesCount >= this._messagesLimit ||\n this.metricsCount >= this._metricsLimit\n );\n }\n\n private async _upload(userInitiated?: boolean): Promise<UploadResult> {\n this._restartTimer();\n if (!this._uploadEndpoint || this._uploadMode === UploadMode.noUpload) {\n return undefined;\n }\n\n const contents: CoreEnvelopeContents = this._getContentsOfCoreEnvelope(true);\n return this._uploadContents(contents, userInitiated);\n }\n\n private async _uploadContents(\n contents: CoreEnvelopeContents,\n userInitiated: boolean\n ): Promise<UploadResult> {\n const coreEnvelope: Uint8Array = this._buildProtoEncodedCoreEnvelopeFrom(contents);\n\n let requestInit: RequestInit;\n switch (this._uploadMode) {\n case UploadMode.fetchBinary:\n requestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/octet-stream'\n },\n body: coreEnvelope\n };\n break;\n case UploadMode.fetchFile:\n const formData = new FormData();\n formData.append(this._formDataKey, new Blob([coreEnvelope]));\n // Per [this article](https://muffinman.io/uploading-files-using-fetch-multipart-form-data/)\n // make sure not to set the Content-Type header.\n // The browser will set it for you, including the boundary parameter.\n requestInit = {\n method: 'POST',\n body: formData\n };\n break;\n }\n\n const ur: UploadResult = {\n envelopeContents: contents\n };\n try {\n if (this._uploadOptionsCallback) {\n const options: RequestInit = this._uploadOptionsCallback() || {};\n if (options) {\n if (options.headers && requestInit.headers) {\n // According to lim.dom.d.ts:\n // type HeadersInit = string[][] | Record<string, string> | Headers;\n if (options.headers instanceof Headers) {\n for (const key in requestInit.headers) {\n if (\n Object.prototype.hasOwnProperty.call(requestInit.headers, key)\n ) {\n options.headers.set(\n key,\n (requestInit.headers as Record<string, string>)[key]\n );\n }\n }\n } else if (Array.isArray(options.headers)) {\n // This doesn't seem valid according to https://developer.mozilla.org/en-US/docs/Web/API/fetch\n throw new Error('Headers as array is not supported.');\n } else {\n Object.assign(options.headers, requestInit.headers);\n }\n }\n options.method = requestInit.method;\n options.body = requestInit.body;\n requestInit = options;\n }\n }\n\n ur.response = await fetch(this._uploadEndpoint, requestInit);\n // fetch only throws on network errors, not HTTP errors, so handle that here\n if (!ur.response.ok) {\n throw new Error('HTTP Not OK');\n }\n return ur;\n } catch (err) {\n ur.error = err;\n if (!userInitiated && this._uploadFailedListener) {\n try {\n this._uploadFailedListener(ur);\n } catch {}\n }\n throw ur;\n }\n }\n\n private _checkUploadState(): void {\n if (this._uploadEndpoint === undefined) {\n throw new Error('Upload endpoint is unset');\n }\n if (this._uploadMode === UploadMode.noUpload) {\n throw new Error('Upload mode is unset');\n }\n }\n\n // User initiated method\n public async upload(contents?: CoreEnvelopeContents): Promise<UploadResult> {\n this._checkUploadState();\n if (utility.requireArgumentIfDefined(contents, 'contents', 'object')) {\n return this._uploadContents(contents, true);\n }\n\n return this.hasData ? this._upload(true) : undefined;\n }\n\n get hasData(): boolean {\n return this.messagesCount > 0 || this.metricsCount > 0;\n }\n\n get messagesCount(): number {\n return this._messageBuffers.totalItemCount;\n }\n\n get metricsCount(): number {\n let count = 0;\n\n if (this._metricsExtractors) {\n let metrics: unknown[] = this._metricsExtractors.getAllUpCounters();\n count += (metrics && metrics.length) || 0;\n metrics = this._metricsExtractors.getAllValueRecorders();\n count += (metrics && metrics.length) || 0;\n metrics = this._metricsExtractors.getAllBucketHistograms();\n count += (metrics && metrics.length) || 0;\n }\n\n return count;\n }\n\n getProtoEncodedCoreEnvelope(): Uint8Array {\n return this._buildProtoEncodedCoreEnvelope(true);\n }\n\n getContentsOfCoreEnvelope(): CoreEnvelopeContents {\n return this._getContentsOfCoreEnvelope(true);\n }\n\n private _getContentsOfCoreEnvelope(extract: boolean): CoreEnvelopeContents {\n // 1. extract=true is for most use cases.\n // 2. extract=false is for peeking into the contents without affecting them\n // (i.e. messages are kept in the buffers and metrics are not reset.)\n // Message arrays are references to the originals and should be handled carefully.\n\n const contents: CoreEnvelopeContents = {\n staticAttributes: this._staticAttributes,\n messages: this._messageBuffers.getAllMessages(extract)\n };\n\n if (this._metricsExtractors) {\n contents.upCounters = CoreEnvelopeBuilder.getUpCounters(\n this._metricsExtractors.getAllUpCounters(),\n extract\n );\n contents.valueRecorders = CoreEnvelopeBuilder.getValueRecorders(\n this._metricsExtractors.getAllValueRecorders(),\n extract\n );\n contents.bucketHistograms = CoreEnvelopeBuilder.getBucketHistograms(\n this._metricsExtractors.getAllBucketHistograms(),\n extract\n );\n }\n\n if (extract) {\n this._messageSize = 0;\n }\n return contents;\n }\n\n private _buildProtoEncodedCoreEnvelope(extract: boolean): Uint8Array {\n const contents: CoreEnvelopeContents = this._getContentsOfCoreEnvelope(extract);\n return this._buildProtoEncodedCoreEnvelopeFrom(contents);\n }\n\n private _buildProtoEncodedCoreEnvelopeFrom(contents?: CoreEnvelopeContents): Uint8Array {\n const builder = new CoreEnvelopeBuilder();\n\n if (contents.staticAttributes) {\n builder.withStaticAttributes(contents.staticAttributes);\n }\n if (contents.messages) {\n contents.messages.forEach((logs: LogMessage[], schema: Schema) => {\n builder.withLogs(schemaUtil.getSchemaId(schema), logs);\n });\n }\n if (contents.upCounters) {\n builder.withUpCounters(contents.upCounters);\n }\n if (contents.valueRecorders) {\n builder.withValueRecorders(contents.valueRecorders);\n }\n if (contents.bucketHistograms) {\n builder.withBucketHistograms(contents.bucketHistograms);\n }\n\n return this._encodeCoreEnvelope(builder.build());\n }\n\n private _encodeCoreEnvelope(coreEnvelope: CoreEnvelope): Uint8Array {\n const errorMessage = this._coreEnvelopeType.verify(coreEnvelope);\n if (errorMessage) {\n throw new Error(`Invalid CoreEnvelope: ${errorMessage}`);\n }\n\n const encodedCoreEnvelope = this._coreEnvelopeType.encode(coreEnvelope).finish();\n return encodedCoreEnvelope;\n }\n\n receiveMetricsExtractors(metricsExtractors: MetricsExtractorMethods): void {\n this._metricsExtractors = metricsExtractors;\n }\n}\n","import {\n BucketMetric,\n LogCollector,\n LogMeta,\n Metric,\n MetricsCollector,\n MetricsExtractorMethods,\n Schema\n} from '../../interfaces';\nimport { SchematizedData, MetricsTags, schemaUtil, utility } from 'o11y/shared';\nimport { protobufUtil } from '../protobuf-util';\nimport { LogMessage } from '../core-collector/interfaces/LogMessage';\nimport { EncodedSchematizedPayload } from '../EncodedSchematizedPayload';\nimport { MetricTag } from '../metrics/MetricTag';\nimport { UpCounter } from '../metrics/UpCounter';\nimport { ValueRecorder } from '../metrics/ValueRecorder';\nimport { BucketHistogram } from '../metrics/BucketHistogram';\nimport { Metrics } from '../metrics/Metrics';\n\nconst metricsCollectionMilliseconds = 30000;\n\n// The observability plugin expects encoded payloads, so can't use LogMeta as-is.\ninterface LogMetaObservability {\n timestamp: number;\n rootId: string;\n sequence: number;\n loggerName: string;\n pagePayload: EncodedSchematizedPayload;\n loggerAppName: string;\n connectionType: string;\n appPayload: EncodedSchematizedPayload;\n}\n\n// The following interface is expected to be fulfilled by the\n// observability plugin in Lightning SDK.\ndeclare type NimbusObservabilityPlugin = {\n // Called to send a collected message to native for handling\n log: (schema: string, encodedMessage: Uint8Array, logMeta: LogMetaObservability) => void;\n\n // Called to send metrics to native for handling\n logMetrics: (metrics: Metrics) => void;\n\n // Called to listen for root activity changes in native.\n //\n // The startListener is called with the id of the root activity when an activity is started\n // The stopListener is called when a root activity is stopped\n addRootActivityListeners: (\n startListener: (activityInfo: { id: string }) => void,\n stopListener: () => void\n ) => void;\n\n // Called to inform native that the web view has detected an idle state.\n idleDetected: (timestamp: number) => void;\n};\n\n// The `HybridCollector` uses nimbus to send log data immediately across\n// to be handled by the native observability library.\nexport class HybridCollector implements LogCollector, MetricsCollector {\n private readonly _observability: NimbusObservabilityPlugin;\n private _metricsExtractors: MetricsExtractorMethods;\n\n constructor() {\n if (typeof __nimbus === 'undefined') {\n throw new Error('Nimbus is unavailable');\n }\n if (!__nimbus.plugins || !__nimbus.plugins.observability) {\n throw new Error('Observability plugin not found in Nimbus plugins');\n }\n this._observability = __nimbus.plugins.observability as NimbusObservabilityPlugin;\n setInterval(() => {\n this._collectMetrics();\n }, metricsCollectionMilliseconds);\n }\n\n collect(schema: Schema, data: SchematizedData, logMeta: LogMeta): void {\n if (schemaUtil.isInternal(schema) && data.userPayload) {\n data.userPayload = protobufUtil.encodePayload(data.userPayload);\n }\n const logMessage: LogMessage = protobufUtil.getLogMessage(schema, data, logMeta);\n const logMetaObs: LogMetaObservability = {\n timestamp: logMeta.timestamp,\n rootId: logMeta.rootId,\n sequence: logMeta.sequence,\n loggerName: logMeta.loggerName,\n pagePayload: logMessage.pagePayload,\n loggerAppName: logMeta.loggerAppName,\n connectionType: logMeta.connectionType,\n appPayload: logMessage.appPayload\n };\n this._observability.log(schemaUtil.getSchemaId(schema), logMessage.data, logMetaObs);\n }\n\n receiveMetricsExtractors(metricsExtractors: MetricsExtractorMethods): void {\n this._metricsExtractors = metricsExtractors;\n }\n\n // An app can call this method to listen for root activities that start and stop\n // on the native side, in order to associate web activities with the same root id.\n addRootActivityListeners(\n activityStarted: (info: { id: string }) => void,\n activityEnded: () => void\n ): void {\n utility.requireArgument(activityStarted, 'activityStarted', 'function');\n utility.requireArgument(activityEnded, 'activityEnded', 'function');\n\n this._observability.addRootActivityListeners(activityStarted, activityEnded);\n }\n\n // An app should call this method when it detects idle in the web view in order\n // to inform the native app of the idle state.\n notifyIdleDetected(timestamp: number): void {\n this._observability.idleDetected(timestamp);\n }\n\n private _collectMetrics(): void {\n if (this._metricsExtractors) {\n const upCounters: Metric<number>[] = this._metricsExtractors.getAllUpCounters();\n const valueRecorders: Metric<number[]>[] =\n this._metricsExtractors.getAllValueRecorders();\n const bucketHistograms: BucketMetric<number[]>[] =\n this._metricsExtractors.getAllBucketHistograms();\n const recorders: ValueRecorder[] = [];\n const counters: UpCounter[] = [];\n const histograms: BucketHistogram[] = [];\n\n for (const valueRecorder of valueRecorders) {\n const vr: ValueRecorder = {\n name: valueRecorder.getName(),\n createdTimestamp: valueRecorder.getCreatedOn(),\n lastUpdatedTimestamp: valueRecorder.getLastUpdatedOn(),\n values: valueRecorder.getData(),\n ownerName: valueRecorder.getOwnerName(),\n ownerAppName: valueRecorder.getOwnerAppName(),\n tags: this._getMetricTags(valueRecorder)\n };\n recorders.push(vr);\n valueRecorder.reset();\n }\n\n for (const upCounter of upCounters) {\n const uc: UpCounter = {\n name: upCounter.getName(),\n createdTimestamp: upCounter.getCreatedOn(),\n lastUpdatedTimestamp: upCounter.getLastUpdatedOn(),\n value: upCounter.getData(),\n ownerName: upCounter.getOwnerName(),\n ownerAppName: upCounter.getOwnerAppName(),\n tags: this._getMetricTags(upCounter)\n };\n counters.push(uc);\n upCounter.reset();\n }\n\n for (const bucketHistogram of bucketHistograms) {\n const bh: BucketHistogram = {\n name: bucketHistogram.getName(),\n createdTimestamp: bucketHistogram.getCreatedOn(),\n lastUpdatedTimestamp: bucketHistogram.getLastUpdatedOn(),\n values: bucketHistogram.getData(),\n buckets: bucketHistogram.getBuckets(),\n ownerName: bucketHistogram.getOwnerName(),\n ownerAppName: bucketHistogram.getOwnerAppName(),\n tags: this._getMetricTags(bucketHistogram)\n };\n histograms.push(bh);\n bucketHistogram.reset();\n }\n\n if (recorders.length > 0 || counters.length > 0) {\n const metrics: Metrics = {\n upCounters: counters,\n valueRecorders: recorders,\n bucketHistograms: histograms\n };\n this._observability.logMetrics(metrics);\n }\n }\n }\n\n private _getMetricTags<T>(metric: Metric<T>): MetricTag[] {\n const metricsTags: MetricsTags = metric.getTags();\n\n if (metricsTags) {\n return Object.entries(metricsTags).map((entry) => {\n const mt: MetricTag = {\n name: entry[0],\n value: entry[1].toString()\n };\n return mt;\n });\n }\n return [];\n }\n}\n"],"names":["schemaVersion"],"mappings":";;;;;;;;;;;;;AAOA;;;;;;;;;mCAUmC,iBAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBvC,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,yDAAW,CAAA;IACX,qDAAS,CAAA;IACT,mDAAQ,CAAA;AACZ,CAAC,EAJW,UAAU,KAAV,UAAU;;ACAf,MAAM,OAAO,CAAC;;ACYd,MAAM,eAAe,GAAG,MAAM,CAAC;MACzB,mBAAmB;IAG5B;QACI,IAAI,CAAC,SAAS,GAAG;YACb,WAAW,EAAE;gBACT,GAAG,EAAE,eAAe;gBACpB,kBAAkB,EAAE,SAAS;gBAC7B,WAAW,EAAE,CAAC;gBACd,oBAAoB,EAAE,CAAC;gBACvB,cAAc,EAAE,CAAC;gBACjB,kBAAkB,EAAE,CAAC;+BACrBA,OAAa;aAChB;YACD,OAAO,EAAE,EAAqB;YAC9B,OAAO,EAAE;gBACL,gBAAgB,EAAE,EAAuB;gBACzC,UAAU,EAAE,EAAiB;gBAC7B,cAAc,EAAE,EAAqB;aACxC;YACD,gBAAgB,EAAE,EAAE;SACvB,CAAC;KACL;IAED,oBAAoB,CAAC,gBAAkC;QACnD,IAAI,CAAC,SAAS,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACnD,OAAO,IAAI,CAAC;KACf;IAED,QAAQ,CAAC,UAAkB,EAAE,IAAkB;QAC3C,IAAI,SAAS,GAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CACtD,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,KAAK,UAAU,CAC/C,CAAC;QAEF,IAAI,SAAS,EAAE;YACX,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACpB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAChC;SACJ;aAAM;YACH,SAAS,GAAG;gBACR,UAAU,EAAE,UAAU;gBACtB,QAAQ,EAAE,IAAI;aACjB,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QACvE,OAAO,IAAI,CAAC;KACf;IAEO,OAAO,cAAc,CAAI,MAAiB;QAC9C,MAAM,IAAI,GAAgB,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,IAAI,EAAE;YACN,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;gBAClC,MAAM,EAAE,GAAc;oBAClB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;iBAC7B,CAAC;gBACF,OAAO,EAAE,CAAC;aACb,CAAC,CAAC;SACN;QACD,OAAO,SAAS,CAAC;KACpB;IAED,OAAO,aAAa,CAAC,OAAyB,EAAE,KAAK,GAAG,IAAI;QACxD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM;YACtB,MAAM,IAAI,GAAc;gBACpB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE;gBACvC,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,EAAE;gBAC/C,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;gBACvB,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;gBAChC,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE;gBACtC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;aACpC,CAAC;YACF,IAAI,KAAK,EAAE;gBACP,MAAM,CAAC,KAAK,EAAE,CAAC;aAClB;YACD,OAAO,IAAI,CAAC;SACf,CAAC,CAAC;KACN;IAED,OAAO,iBAAiB,CAAC,OAA2B,EAAE,KAAK,GAAG,IAAI;QAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM;YACtB,MAAM,IAAI,GAAkB;gBACxB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE;gBACvC,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,EAAE;gBAC/C,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;gBACxB,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;gBAChC,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE;gBACtC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;aACpC,CAAC;YACF,IAAI,KAAK,EAAE;gBACP,MAAM,CAAC,KAAK,EAAE,CAAC;aAClB;YACD,OAAO,IAAI,CAAC;SACf,CAAC,CAAC;KACN;IAED,OAAO,mBAAmB,CAAC,OAAiC,EAAE,KAAK,GAAG,IAAI;QACtE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM;YACtB,MAAM,IAAI,GAAoB;gBAC1B,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE;gBACvC,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,EAAE;gBAC/C,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;gBACxB,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE;gBAC5B,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;gBAChC,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE;gBACtC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;aACpC,CAAC;YACF,IAAI,KAAK,EAAE;gBACP,MAAM,CAAC,KAAK,EAAE,CAAC;aAClB;YACD,OAAO,IAAI,CAAC;SACf,CAAC,CAAC;KACN;IAED,cAAc,CAAC,UAAuB;QAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACrD;QACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QACrF,OAAO,IAAI,CAAC;KACf;IAED,kBAAkB,CAAC,cAA+B;QAC9C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC7D;QACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB;YACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;QACjD,OAAO,IAAI,CAAC;KACf;IAED,oBAAoB,CAAC,gBAAmC;QACpD,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;YAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACjE;QACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,oBAAoB;YAC3C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACnD,OAAO,IAAI,CAAC;KACf;IAED,KAAK;QACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;;ACzIL;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;qBAsCqB,iBAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CzB,MAAM,6BAA6B,GAAG,KAAK,CAAC;MAsC/B,eAAe;IAIxB;QACI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE;YACtD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACvE;QACD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,aAA0C,CAAC;QAClF,WAAW,CAAC;YACR,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B,EAAE,6BAA6B,CAAC,CAAC;KACrC;IAED,OAAO,CAAC,MAAc,EAAE,IAAqB,EAAE,OAAgB;QAC3D,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YACnD,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACnE;QACD,MAAM,UAAU,GAAe,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACjF,MAAM,UAAU,GAAyB;YACrC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,UAAU,CAAC,UAAU;SACpC,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KACxF;IAED,wBAAwB,CAAC,iBAA0C;QAC/D,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;KAC/C;IAID,wBAAwB,CACpB,eAA+C,EAC/C,aAAyB;QAEzB,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACxE,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAEpE,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;KAChF;IAID,kBAAkB,CAAC,SAAiB;QAChC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;KAC/C;IAEO,eAAe;QACnB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,MAAM,UAAU,GAAqB,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;YAChF,MAAM,cAAc,GAChB,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAC;YACnD,MAAM,gBAAgB,GAClB,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;YACrD,MAAM,SAAS,GAAoB,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAgB,EAAE,CAAC;YACjC,MAAM,UAAU,GAAsB,EAAE,CAAC;YAEzC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;gBACxC,MAAM,EAAE,GAAkB;oBACtB,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE;oBAC7B,gBAAgB,EAAE,aAAa,CAAC,YAAY,EAAE;oBAC9C,oBAAoB,EAAE,aAAa,CAAC,gBAAgB,EAAE;oBACtD,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE;oBAC/B,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE;oBACvC,YAAY,EAAE,aAAa,CAAC,eAAe,EAAE;oBAC7C,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;iBAC3C,CAAC;gBACF,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnB,aAAa,CAAC,KAAK,EAAE,CAAC;aACzB;YAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;gBAChC,MAAM,EAAE,GAAc;oBAClB,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE;oBACzB,gBAAgB,EAAE,SAAS,CAAC,YAAY,EAAE;oBAC1C,oBAAoB,EAAE,SAAS,CAAC,gBAAgB,EAAE;oBAClD,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE;oBAC1B,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE;oBACnC,YAAY,EAAE,SAAS,CAAC,eAAe,EAAE;oBACzC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;iBACvC,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClB,SAAS,CAAC,KAAK,EAAE,CAAC;aACrB;YAED,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;gBAC5C,MAAM,EAAE,GAAoB;oBACxB,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE;oBAC/B,gBAAgB,EAAE,eAAe,CAAC,YAAY,EAAE;oBAChD,oBAAoB,EAAE,eAAe,CAAC,gBAAgB,EAAE;oBACxD,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE;oBACjC,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE;oBACrC,SAAS,EAAE,eAAe,CAAC,YAAY,EAAE;oBACzC,YAAY,EAAE,eAAe,CAAC,eAAe,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;iBAC7C,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpB,eAAe,CAAC,KAAK,EAAE,CAAC;aAC3B;YAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7C,MAAM,OAAO,GAAY;oBACrB,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,SAAS;oBACzB,gBAAgB,EAAE,UAAU;iBAC/B,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC3C;SACJ;KACJ;IAEO,cAAc,CAAI,MAAiB;QACvC,MAAM,WAAW,GAAgB,MAAM,CAAC,OAAO,EAAE,CAAC;QAElD,IAAI,WAAW,EAAE;YACb,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;gBACzC,MAAM,EAAE,GAAc;oBAClB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;iBAC7B,CAAC;gBACF,OAAO,EAAE,CAAC;aACb,CAAC,CAAC;SACN;QACD,OAAO,EAAE,CAAC;KACb;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "o11y",
3
- "version": "240.8.0",
3
+ "version": "242.1.0",
4
4
  "description": "O11y Client-Side Instrumentation & Observability Library",
5
5
  "main": "index.js",
6
6
  "exports": {
@@ -37,7 +37,7 @@
37
37
  "author": "Instrumentation Team",
38
38
  "license": "BSD-3-Clause",
39
39
  "dependencies": {
40
- "o11y_schema": "240.11.0",
40
+ "o11y_schema": "242.0.0",
41
41
  "protobufjs": "6.11.3",
42
42
  "web-vitals": "2.1.4"
43
43
  },