@webex/internal-plugin-metrics 3.12.0-next.5 → 3.12.0-next.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +274 -0
  2. package/dist/automated-user.js +19 -0
  3. package/dist/automated-user.js.map +1 -0
  4. package/dist/batcher.js +3 -0
  5. package/dist/batcher.js.map +1 -1
  6. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +635 -62
  7. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  8. package/dist/call-diagnostic/call-diagnostic-metrics.js +188 -78
  9. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  10. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +5 -0
  11. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  12. package/dist/call-diagnostic/config.js +16 -3
  13. package/dist/call-diagnostic/config.js.map +1 -1
  14. package/dist/config.js +8 -0
  15. package/dist/config.js.map +1 -1
  16. package/dist/index.js +25 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/metrics.js +118 -5
  19. package/dist/metrics.js.map +1 -1
  20. package/dist/metrics.types.js +4 -0
  21. package/dist/metrics.types.js.map +1 -1
  22. package/dist/network-telemetry.js +610 -0
  23. package/dist/network-telemetry.js.map +1 -0
  24. package/dist/new-metrics.js +63 -17
  25. package/dist/new-metrics.js.map +1 -1
  26. package/dist/privacy-and-security-permission-enricher/constants.js +18 -0
  27. package/dist/privacy-and-security-permission-enricher/constants.js.map +1 -0
  28. package/dist/privacy-and-security-permission-enricher/index.js +143 -0
  29. package/dist/privacy-and-security-permission-enricher/index.js.map +1 -0
  30. package/dist/privacy-and-security-permission-enricher/types.js +7 -0
  31. package/dist/privacy-and-security-permission-enricher/types.js.map +1 -0
  32. package/dist/privacy-and-security-permission-enricher/utils.js +71 -0
  33. package/dist/privacy-and-security-permission-enricher/utils.js.map +1 -0
  34. package/dist/types/automated-user.d.ts +2 -0
  35. package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +208 -5
  36. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +73 -14
  37. package/dist/types/call-diagnostic/config.d.ts +4 -0
  38. package/dist/types/config.d.ts +9 -0
  39. package/dist/types/index.d.ts +5 -3
  40. package/dist/types/metrics.types.d.ts +7 -2
  41. package/dist/types/network-telemetry.d.ts +108 -0
  42. package/dist/types/new-metrics.d.ts +17 -1
  43. package/dist/types/privacy-and-security-permission-enricher/constants.d.ts +6 -0
  44. package/dist/types/privacy-and-security-permission-enricher/index.d.ts +40 -0
  45. package/dist/types/privacy-and-security-permission-enricher/types.d.ts +14 -0
  46. package/dist/types/privacy-and-security-permission-enricher/utils.d.ts +5 -0
  47. package/dist/types/unhandled-exception-telemetry/index.d.ts +60 -0
  48. package/dist/types/unhandled-exception-telemetry/utils.d.ts +6 -0
  49. package/dist/unhandled-exception-telemetry/index.js +330 -0
  50. package/dist/unhandled-exception-telemetry/index.js.map +1 -0
  51. package/dist/unhandled-exception-telemetry/utils.js +105 -0
  52. package/dist/unhandled-exception-telemetry/utils.js.map +1 -0
  53. package/package.json +12 -11
  54. package/src/automated-user.ts +16 -0
  55. package/src/batcher.js +4 -0
  56. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +781 -71
  57. package/src/call-diagnostic/call-diagnostic-metrics.ts +119 -16
  58. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +5 -0
  59. package/src/call-diagnostic/config.ts +14 -0
  60. package/src/config.js +8 -0
  61. package/src/index.ts +16 -0
  62. package/src/metrics.js +123 -5
  63. package/src/metrics.types.ts +25 -3
  64. package/src/network-telemetry.ts +757 -0
  65. package/src/new-metrics.ts +56 -6
  66. package/src/privacy-and-security-permission-enricher/constants.ts +33 -0
  67. package/src/privacy-and-security-permission-enricher/index.ts +142 -0
  68. package/src/privacy-and-security-permission-enricher/types.ts +21 -0
  69. package/src/privacy-and-security-permission-enricher/utils.ts +82 -0
  70. package/src/unhandled-exception-telemetry/index.ts +403 -0
  71. package/src/unhandled-exception-telemetry/utils.ts +101 -0
  72. package/test/unit/spec/automated-user.ts +43 -0
  73. package/test/unit/spec/batcher.js +43 -0
  74. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +14 -2
  75. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +1424 -293
  76. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +906 -159
  77. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +27 -0
  78. package/test/unit/spec/metrics.js +14 -5
  79. package/test/unit/spec/network-telemetry.ts +610 -0
  80. package/test/unit/spec/new-metrics.ts +203 -50
  81. package/test/unit/spec/prelogin-metrics-batcher.ts +71 -36
  82. package/test/unit/spec/privacy-and-security-permission-enricher.ts +318 -0
  83. package/test/unit/spec/unhandled-exception-telemetry/utils.ts +109 -0
  84. package/test/unit/spec/unhandled-exception-telemetry.ts +688 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_commonTimers","require","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","NETWORK_REQUEST_SUMMARY_METRIC","exports","NETWORK_TELEMETRY_INTERVAL_MS","SAFE_ROUTE_SEGMENT","MAX_TRACKING_IDS","UNKNOWN","String","undefined","getService","options","service","api","trim","toLowerCase","normalizeRouteSegment","segment","getOperation","resource","path","split","segments","Boolean","map","join","getDirectRequestIdentity","uri","url","requestUrl","URL","host","endPoint","pathname","_unused","getRequestIdentity","directRequestIdentity","getNetworkDuration","_options$$timings","_options$$timings2","start","$timings","networkStart","end","networkEnd","_isFinite","recordNetworkDuration","metric","duration","totalNetworkDurationMs","networkDurationsMs","getMethod","method","toUpperCase","getStatusCode","reason","_reason$statusCode","statusCode","status","_isInteger","getWrappedError","body","_typeof2","isTimeoutSignal","signal","includes","isTimeoutFailure","_options$$timings3","_options$$timings4","wrappedError","code","message","timeout","getErrorType","getErrorCode","errorCode","getErrorMessage","shouldTrackNetworkRequest","createNetworkErrorMetric","_options$headers","identity","trackingId","headers","trackingid","errorType","errorMessage","trackingIds","countError","createEmptyNetworkTelemetry","metricsSummary","totalSendRequest","totalFailedRequest","totalRecvdResponse","totalFailedResponse","metrics","errorMetrics","errorMetricsSummary","getRequestMetric","telemetry","_iterator","_step","err","countSendRequest","countFailedRequest","countRecvdResponse","countFailedResponse","isSameError","first","second","recordError","errorMetric","_iterator2","_step2","existingMetric","getDurationPercentile","durations","percentile","sortedDurations","_toConsumableArray2","sort","rank","Math","max","ceil","serializeRequestMetric","measuredRequestCount","averageNetworkDurationMs","maxNetworkDurationP90Ms","maxNetworkDurationP99Ms","serializeNetworkTelemetry","hasNetworkTelemetry","createNetworkTelemetryCollector","_ref","intervalMs","onSubmissionFailure","submitMetric","inFlightSubmissions","_set","trackSubmission","submission","add","then","delete","recordRequest","recordResponse","requestMetric","recordFailure","statusSummary","count","submitSummary","completedTelemetry","payload","_promise","resolve","type","tags","fields","eventPayload","_unused2","telemetryIntervalMs","telemetryInterval","safeSetInterval","flush","stop","clearInterval","all"],"sources":["network-telemetry.ts"],"sourcesContent":["// TypeScript signatures own the types; JSDoc contains descriptions only.\n/* eslint valid-jsdoc: [\"error\", {\"requireParamType\": false, \"requireReturnType\": false}] */\n\nimport {safeSetInterval} from '@webex/common-timers';\n\nexport const NETWORK_REQUEST_SUMMARY_METRIC = 'JS_SDK_NETWORK_REQUEST_SUMMARY';\nexport const NETWORK_TELEMETRY_INTERVAL_MS = 10 * 60 * 1_000;\n\n// Only segments that follow the SDK's static route naming convention are kept.\n// Numeric, mixed-case, encoded, and otherwise dynamic-looking values are redacted.\n// Lowercase alphabetic identifiers remain ambiguous because requests do not provide route templates.\n// Examples: `rooms/12345/messages` becomes `rooms/:id/messages`, and\n// `v1/rooms/65f81b6e-19dc-4a99-9175-59e9b34a5d42` becomes `v1/rooms/:id`.\n// `reports/a%2Fb/download` becomes `reports/:id/download`; `rooms`, `meeting-info`, and `v1` stay unchanged.\nconst SAFE_ROUTE_SEGMENT = /^(?:[a-z]+(?:-[a-z]+)*|v[1-9]\\d?)$/;\nconst MAX_TRACKING_IDS = 10;\nconst UNKNOWN = 'unknown';\n\ntype Headers = Record<string, unknown>;\n\ntype MetricsSummary = {\n totalSendRequest: number;\n totalFailedRequest: number;\n totalRecvdResponse: number;\n totalFailedResponse: number;\n};\n\ntype RequestMetric = {\n host: string;\n endPoint: string;\n countSendRequest: number;\n countFailedRequest: number;\n countRecvdResponse: number;\n countFailedResponse: number;\n averageNetworkDurationMs: number;\n maxNetworkDurationP90Ms: number;\n maxNetworkDurationP99Ms: number;\n};\n\ntype RequestIdentity = Pick<RequestMetric, 'host' | 'endPoint'>;\n\nexport type NetworkErrorMetric = {\n host: string;\n endPoint: string;\n statusCode: number;\n errorCode: string;\n method: string;\n errorType: string;\n errorMessage: string;\n trackingIds: string[];\n countError: number;\n};\n\nexport type NetworkTelemetry = {\n metricsSummary: MetricsSummary;\n metrics: RequestMetric[];\n errorMetrics: NetworkErrorMetric[];\n errorMetricsSummary: Record<string, {count: number}>;\n};\n\ntype RequestMetricState = Omit<\n RequestMetric,\n 'averageNetworkDurationMs' | 'maxNetworkDurationP90Ms' | 'maxNetworkDurationP99Ms'\n> & {\n totalNetworkDurationMs: number;\n networkDurationsMs: number[];\n};\n\ntype NetworkTelemetryState = Omit<NetworkTelemetry, 'metrics'> & {\n metrics: RequestMetricState[];\n};\n\ntype ErrorDetails = {\n code?: number | string;\n errorCode?: number | string;\n message?: string;\n name?: string;\n};\n\n// Request events come from JavaScript in webex-core and have no shared TypeScript\n// contract. This local type intentionally contains only fields used by telemetry.\ntype RequestOptions = {\n api?: string;\n headers?: Headers;\n method?: string;\n resource?: string;\n service?: string;\n timeout?: number;\n uri?: string;\n url?: string;\n // The network timing interceptor adds internal fields with a `$` prefix.\n $timings?: {\n networkEnd?: number;\n networkStart?: number;\n };\n};\n\ntype RequestFailure = ErrorDetails & {\n body?: ErrorDetails | string;\n status?: number;\n statusCode?: number;\n};\n\ntype NetworkMetricProperties = {\n type: 'operational';\n tags: Record<string, string>;\n fields: MetricsSummary;\n eventPayload: NetworkTelemetry;\n};\n\ntype NetworkTelemetryCollectorOptions = {\n intervalMs?: number;\n onSubmissionFailure: () => void;\n submitMetric: (name: string, properties: NetworkMetricProperties) => unknown;\n};\n\ntype NetworkTelemetryCollector = {\n recordRequest: (options?: RequestOptions) => void;\n recordResponse: (options?: RequestOptions) => void;\n recordFailure: (options?: RequestOptions, reason?: RequestFailure) => void;\n flush: () => Promise<void>;\n stop: () => Promise<void>;\n};\n\n/**\n * Converts a non-empty string or number to a string.\n * @param value Value to convert.\n * @returns The converted string, or undefined for unsupported values.\n */\nfunction toString(value: unknown): string | undefined {\n if (typeof value === 'number') {\n return String(value);\n }\n\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * Returns the normalized SDK service name.\n * @param options Request options containing the service or API name.\n * @returns The normalized service name.\n */\nfunction getService(options: RequestOptions): string {\n const service = options.service || options.api;\n\n return typeof service === 'string' ? service.trim().toLowerCase() : '';\n}\n\n/**\n * Replaces values that may be resource identifiers with a stable placeholder.\n * @param segment Endpoint path segment.\n * @returns The original static segment or the identifier placeholder.\n */\nfunction normalizeRouteSegment(segment: string): string {\n return SAFE_ROUTE_SEGMENT.test(segment) ? segment : ':id';\n}\n\n/**\n * Removes query data and redacts dynamic-looking endpoint segments.\n * @param resource SDK resource path.\n * @returns The normalized endpoint.\n */\nexport function getOperation(resource?: string): string {\n if (typeof resource !== 'string' || resource.length === 0) {\n return UNKNOWN;\n }\n\n const path = resource.split(/[?#]/, 1)[0];\n const segments = path.split('/').filter(Boolean).map(normalizeRouteSegment);\n\n return segments.length > 0 ? segments.join('/') : 'root';\n}\n\n/**\n * Extracts only the direct URL parts allowed in telemetry. URL credentials,\n * query parameters, and fragments are not returned, while the pathname is\n * converted to a sanitized endpoint.\n * @param options Request options containing a direct URL.\n * @returns The sanitized request identity, or undefined without a valid URL.\n */\nfunction getDirectRequestIdentity(options: RequestOptions): RequestIdentity | undefined {\n const value = options.uri || options.url;\n\n if (typeof value !== 'string') {\n return undefined;\n }\n\n try {\n const requestUrl = new URL(value);\n\n return {\n host: requestUrl.host.toLowerCase() || UNKNOWN,\n endPoint: getOperation(requestUrl.pathname),\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Uses the logical service as the host because request:start may run before the\n * service interceptor resolves a physical URL. Direct-URL requests use URL.host.\n * @param options Request options used to resolve the identity.\n * @returns The request host and endpoint.\n */\nfunction getRequestIdentity(options: RequestOptions): RequestIdentity {\n const directRequestIdentity = getDirectRequestIdentity(options);\n const service = getService(options);\n\n return {\n host: service || directRequestIdentity?.host || UNKNOWN,\n endPoint: options.resource\n ? getOperation(options.resource)\n : directRequestIdentity?.endPoint || UNKNOWN,\n };\n}\n\n/**\n * Returns the measured network duration when both timing points are valid.\n * @param options Request options containing network timing metadata.\n * @returns The duration in milliseconds, or undefined when timing is unavailable.\n */\nfunction getNetworkDuration(options: RequestOptions): number | undefined {\n const start = options.$timings?.networkStart;\n const end = options.$timings?.networkEnd;\n\n return typeof start === 'number' &&\n Number.isFinite(start) &&\n typeof end === 'number' &&\n Number.isFinite(end) &&\n end >= start\n ? end - start\n : undefined;\n}\n\n/**\n * Adds a completed request's network duration to its endpoint aggregate.\n * @param metric Endpoint aggregate to update.\n * @param options Request options containing network timing metadata.\n * @returns Nothing.\n */\nfunction recordNetworkDuration(metric: RequestMetricState, options: RequestOptions): void {\n const duration = getNetworkDuration(options);\n\n if (duration === undefined) {\n return;\n }\n\n metric.totalNetworkDurationMs += duration;\n metric.networkDurationsMs.push(duration);\n}\n\n/**\n * Returns a normalized uppercase HTTP method.\n * @param method HTTP method from the request options.\n * @returns The normalized method.\n */\nfunction getMethod(method?: string): string {\n return typeof method === 'string' && method.length > 0 ? method.toUpperCase() : 'UNKNOWN';\n}\n\n/**\n * Status zero represents a failure for which no valid HTTP response was received.\n * @param reason Request failure.\n * @returns A valid HTTP status code, or zero when no response was received.\n */\nfunction getStatusCode(reason: RequestFailure): number {\n const statusCode = reason.statusCode ?? reason.status;\n\n return typeof statusCode === 'number' &&\n Number.isInteger(statusCode) &&\n statusCode >= 100 &&\n statusCode <= 599\n ? statusCode\n : 0;\n}\n\n/**\n * Returns an error nested in a Webex HTTP error body.\n * @param reason Request failure.\n * @returns The wrapped error, when present.\n */\nfunction getWrappedError(reason: RequestFailure): ErrorDetails | undefined {\n return reason.body && typeof reason.body === 'object' ? reason.body : undefined;\n}\n\n/**\n * Checks the timeout forms emitted by browser and Node transports.\n * @param value Possible timeout signal.\n * @returns Whether the value represents a timeout.\n */\nfunction isTimeoutSignal(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n\n const signal = value.toLowerCase();\n\n return signal.includes('timeout') || signal === 'etimedout' || signal === 'esockettimedout';\n}\n\n/**\n * Detects direct errors, transport errors wrapped in body, and requests whose\n * measured network duration reached the configured timeout.\n * @param reason Request failure.\n * @param options Request options containing timeout metadata.\n * @returns Whether the request timed out.\n */\nfunction isTimeoutFailure(reason: RequestFailure, options: RequestOptions): boolean {\n const wrappedError = getWrappedError(reason);\n\n if (\n isTimeoutSignal(reason.name) ||\n isTimeoutSignal(reason.code) ||\n isTimeoutSignal(reason.message) ||\n isTimeoutSignal(reason.body) ||\n isTimeoutSignal(wrappedError?.name) ||\n isTimeoutSignal(wrappedError?.code) ||\n isTimeoutSignal(wrappedError?.message)\n ) {\n return true;\n }\n\n const start = options.$timings?.networkStart;\n const end = options.$timings?.networkEnd;\n\n return (\n typeof options.timeout === 'number' &&\n options.timeout > 0 &&\n typeof start === 'number' &&\n typeof end === 'number' &&\n end >= start &&\n end - start >= options.timeout\n );\n}\n\n/**\n * Converts errors into a bounded set of categories for aggregation.\n * @param reason Request failure.\n * @param options Request options.\n * @param statusCode Normalized status code.\n * @returns The aggregate error category.\n */\nfunction getErrorType(reason: RequestFailure, options: RequestOptions, statusCode: number): string {\n const name = typeof reason.name === 'string' ? reason.name.toLowerCase() : '';\n\n if (name === 'aborterror') {\n return 'aborted';\n }\n\n if (statusCode === 408 || statusCode === 504 || isTimeoutFailure(reason, options)) {\n return 'timeout';\n }\n\n if (statusCode === 429) {\n return 'rate_limited';\n }\n\n if (statusCode >= 500) {\n return 'server_error';\n }\n\n if (statusCode >= 400) {\n return 'client_error';\n }\n\n return statusCode === 0 || name?.includes('network') ? 'network_error' : 'request_error';\n}\n\n/**\n * Returns the most specific available error code.\n * @param reason Request failure.\n * @returns The error code or the unknown fallback.\n */\nfunction getErrorCode(reason: RequestFailure): string {\n const wrappedError = getWrappedError(reason);\n\n return (\n toString(wrappedError?.errorCode) ||\n toString(wrappedError?.code) ||\n toString(reason.errorCode) ||\n toString(reason.code) ||\n UNKNOWN\n );\n}\n\n/**\n * Returns the most specific available error message.\n * @param reason Request failure.\n * @returns The error message or the unknown fallback.\n */\nfunction getErrorMessage(reason: RequestFailure): string {\n const wrappedError = getWrappedError(reason);\n\n return (\n toString(wrappedError?.message) || toString(reason.body) || toString(reason.message) || UNKNOWN\n );\n}\n\n/**\n * Excludes the transports used to submit telemetry, preventing self-reporting.\n * @param options Request options.\n * @returns Whether the request should be tracked.\n */\nexport function shouldTrackNetworkRequest(options: RequestOptions = {}): boolean {\n const service = getService(options);\n\n return service !== 'metrics' && service !== 'unifiedtelemetry';\n}\n\n/**\n * Creates the error entry produced by one failed request.\n * @param options Request options.\n * @param reason Request failure.\n * @returns The normalized error metric.\n */\nexport function createNetworkErrorMetric(\n options: RequestOptions = {},\n reason: RequestFailure = {}\n): NetworkErrorMetric {\n const identity = getRequestIdentity(options);\n const statusCode = getStatusCode(reason);\n // WebexTrackingIdInterceptor stores the request ID under this lowercase key.\n const trackingId = toString(options.headers?.trackingid);\n\n return {\n ...identity,\n statusCode,\n errorCode: getErrorCode(reason),\n method: getMethod(options.method),\n errorType: getErrorType(reason, options, statusCode),\n errorMessage: getErrorMessage(reason),\n trackingIds: trackingId ? [trackingId] : [],\n countError: 1,\n };\n}\n\n/**\n * Creates an empty ten-minute telemetry window.\n * @returns An empty telemetry aggregate.\n */\nfunction createEmptyNetworkTelemetry(): NetworkTelemetryState {\n return {\n metricsSummary: {\n totalSendRequest: 0,\n totalFailedRequest: 0,\n totalRecvdResponse: 0,\n totalFailedResponse: 0,\n },\n metrics: [],\n errorMetrics: [],\n errorMetricsSummary: {},\n };\n}\n\n/**\n * Finds or creates the request counters for one host and endpoint.\n * @param telemetry Current telemetry aggregate.\n * @param options Request options.\n * @returns The matching endpoint counters.\n */\nfunction getRequestMetric(\n telemetry: NetworkTelemetryState,\n options: RequestOptions\n): RequestMetricState {\n const identity = getRequestIdentity(options);\n\n for (const metric of telemetry.metrics) {\n if (metric.host === identity.host && metric.endPoint === identity.endPoint) {\n return metric;\n }\n }\n\n const metric = {\n ...identity,\n countSendRequest: 0,\n countFailedRequest: 0,\n countRecvdResponse: 0,\n countFailedResponse: 0,\n totalNetworkDurationMs: 0,\n networkDurationsMs: [],\n };\n\n telemetry.metrics.push(metric);\n\n return metric;\n}\n\n/**\n * Error entries aggregate only when every identifying field matches.\n * @param first First error metric.\n * @param second Second error metric.\n * @returns Whether both errors belong to the same aggregate.\n */\nfunction isSameError(first: NetworkErrorMetric, second: NetworkErrorMetric): boolean {\n return (\n first.host === second.host &&\n first.endPoint === second.endPoint &&\n first.statusCode === second.statusCode &&\n first.errorCode === second.errorCode &&\n first.method === second.method &&\n first.errorType === second.errorType &&\n first.errorMessage === second.errorMessage\n );\n}\n\n/**\n * Adds a failure to its error aggregate and retains at most ten unique IDs.\n * @param telemetry Current telemetry aggregate.\n * @param errorMetric Error metric to record.\n * @returns Nothing.\n */\nfunction recordError(telemetry: NetworkTelemetryState, errorMetric: NetworkErrorMetric): void {\n for (const existingMetric of telemetry.errorMetrics) {\n if (isSameError(existingMetric, errorMetric)) {\n existingMetric.countError += 1;\n\n const trackingId = errorMetric.trackingIds[0];\n\n if (\n trackingId &&\n existingMetric.trackingIds.length < MAX_TRACKING_IDS &&\n !existingMetric.trackingIds.includes(trackingId)\n ) {\n existingMetric.trackingIds.push(trackingId);\n }\n\n return;\n }\n }\n\n telemetry.errorMetrics.push(errorMetric);\n}\n\n/**\n * Returns a nearest-rank percentile from the measured durations.\n * @param durations Measured network durations in milliseconds.\n * @param percentile Percentile to calculate, between zero and one.\n * @returns The percentile duration, or zero when no durations were measured.\n */\nfunction getDurationPercentile(durations: number[], percentile: number): number {\n if (durations.length === 0) {\n return 0;\n }\n\n const sortedDurations = [...durations].sort((first, second) => first - second);\n const rank = Math.max(1, Math.ceil(sortedDurations.length * percentile));\n\n return sortedDurations[rank - 1];\n}\n\n/**\n * Converts internal duration samples into the public endpoint metric shape.\n * @param metric Internal endpoint aggregate.\n * @returns Endpoint aggregate with average and p90 duration statistics.\n */\nfunction serializeRequestMetric(metric: RequestMetricState): RequestMetric {\n const measuredRequestCount = metric.networkDurationsMs.length;\n\n return {\n host: metric.host,\n endPoint: metric.endPoint,\n countSendRequest: metric.countSendRequest,\n countFailedRequest: metric.countFailedRequest,\n countRecvdResponse: metric.countRecvdResponse,\n countFailedResponse: metric.countFailedResponse,\n averageNetworkDurationMs:\n measuredRequestCount > 0 ? metric.totalNetworkDurationMs / measuredRequestCount : 0,\n maxNetworkDurationP90Ms: getDurationPercentile(metric.networkDurationsMs, 0.9),\n maxNetworkDurationP99Ms: getDurationPercentile(metric.networkDurationsMs, 0.99),\n };\n}\n\n/**\n * Converts the internal telemetry state into the submitted payload shape.\n * @param telemetry Internal telemetry aggregate.\n * @returns Telemetry payload with no internal duration samples.\n */\nfunction serializeNetworkTelemetry(telemetry: NetworkTelemetryState): NetworkTelemetry {\n return {\n metricsSummary: telemetry.metricsSummary,\n metrics: telemetry.metrics.map(serializeRequestMetric),\n errorMetrics: telemetry.errorMetrics,\n errorMetricsSummary: telemetry.errorMetricsSummary,\n };\n}\n\n/**\n * Checks whether the current window contains anything worth flushing.\n * @param telemetry Current telemetry aggregate.\n * @returns Whether the aggregate contains request data.\n */\nfunction hasNetworkTelemetry(telemetry: NetworkTelemetryState): boolean {\n return telemetry.metrics.length > 0 || telemetry.errorMetrics.length > 0;\n}\n\n/**\n * Creates a network telemetry collector and starts its periodic timer.\n * @param options Submission callbacks.\n * @returns The network telemetry collector.\n */\nexport function createNetworkTelemetryCollector({\n intervalMs,\n onSubmissionFailure,\n submitMetric,\n}: NetworkTelemetryCollectorOptions): NetworkTelemetryCollector {\n let telemetry = createEmptyNetworkTelemetry();\n const inFlightSubmissions = new Set<Promise<void>>();\n\n /**\n * Tracks a submission until it settles so shutdown can wait for requests\n * whose telemetry window has already been reset.\n * @param submission Submission promise.\n * @returns The tracked submission promise.\n */\n function trackSubmission(submission: Promise<void>): Promise<void> {\n inFlightSubmissions.add(submission);\n submission.then(\n () => inFlightSubmissions.delete(submission),\n () => inFlightSubmissions.delete(submission)\n );\n\n return submission;\n }\n\n /**\n * Records a request being sent.\n * @param options Request options.\n * @returns Nothing.\n */\n function recordRequest(options: RequestOptions = {}): void {\n if (!shouldTrackNetworkRequest(options)) {\n return;\n }\n\n telemetry.metricsSummary.totalSendRequest += 1;\n getRequestMetric(telemetry, options).countSendRequest += 1;\n }\n\n /**\n * Records a successful response.\n * @param options Request options.\n * @returns Nothing.\n */\n function recordResponse(options: RequestOptions = {}): void {\n if (!shouldTrackNetworkRequest(options)) {\n return;\n }\n\n telemetry.metricsSummary.totalRecvdResponse += 1;\n const requestMetric = getRequestMetric(telemetry, options);\n requestMetric.countRecvdResponse += 1;\n recordNetworkDuration(requestMetric, options);\n }\n\n /**\n * A real HTTP status is a failed response. Status zero means the request\n * failed before the SDK received a valid HTTP response.\n * @param options Request options.\n * @param reason Request failure.\n * @returns Nothing.\n */\n function recordFailure(options: RequestOptions = {}, reason: RequestFailure = {}): void {\n if (!shouldTrackNetworkRequest(options)) {\n return;\n }\n\n const errorMetric = createNetworkErrorMetric(options, reason);\n const requestMetric = getRequestMetric(telemetry, options);\n recordNetworkDuration(requestMetric, options);\n\n if (errorMetric.statusCode === 0) {\n telemetry.metricsSummary.totalFailedRequest += 1;\n requestMetric.countFailedRequest += 1;\n } else {\n telemetry.metricsSummary.totalRecvdResponse += 1;\n telemetry.metricsSummary.totalFailedResponse += 1;\n requestMetric.countRecvdResponse += 1;\n requestMetric.countFailedResponse += 1;\n }\n\n recordError(telemetry, errorMetric);\n\n const statusCode = String(errorMetric.statusCode);\n const statusSummary = telemetry.errorMetricsSummary[statusCode];\n\n if (statusSummary) {\n statusSummary.count += 1;\n } else {\n telemetry.errorMetricsSummary[statusCode] = {count: 1};\n }\n }\n\n /**\n * Submits the completed window and starts collecting the next one.\n * @returns A promise that settles after submission succeeds or is reported as failed.\n */\n function submitSummary(): Promise<void> {\n const completedTelemetry = telemetry;\n const payload = serializeNetworkTelemetry(completedTelemetry);\n\n // Reset before submission so requests emitted by the telemetry transport,\n // or while it is pending, cannot mutate the completed window.\n telemetry = createEmptyNetworkTelemetry();\n\n try {\n const submission = Promise.resolve(\n submitMetric(NETWORK_REQUEST_SUMMARY_METRIC, {\n type: 'operational',\n tags: {},\n fields: completedTelemetry.metricsSummary,\n eventPayload: payload,\n })\n ).then(\n () => undefined,\n () => {\n onSubmissionFailure();\n }\n );\n\n return trackSubmission(submission);\n } catch {\n // submitMetric may throw before returning a promise.\n onSubmissionFailure();\n\n return Promise.resolve();\n }\n }\n\n const telemetryIntervalMs =\n typeof intervalMs === 'number' && Number.isFinite(intervalMs) && intervalMs > 0\n ? intervalMs\n : NETWORK_TELEMETRY_INTERVAL_MS;\n const telemetryInterval = safeSetInterval(submitSummary, telemetryIntervalMs);\n\n /**\n * Submits the current non-empty window immediately.\n * @returns A promise that settles after submission succeeds or is reported as failed.\n */\n function flush(): Promise<void> {\n return hasNetworkTelemetry(telemetry) ? submitSummary() : Promise.resolve();\n }\n\n /**\n * Stops periodic submission and releases data from the current window.\n * @returns A promise that settles after the final window is submitted or failure is reported.\n */\n function stop(): Promise<void> {\n clearInterval(telemetryInterval);\n\n flush();\n\n return Promise.all(inFlightSubmissions).then(() => undefined);\n }\n\n return {recordRequest, recordResponse, recordFailure, flush, stop};\n}\n"],"mappings":"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","ignoreList":[]}
@@ -26,6 +26,9 @@ var _preloginMetricsBatcher = _interopRequireDefault(require("./prelogin-metrics
26
26
  var _callDiagnosticMetricsLatencies = _interopRequireDefault(require("./call-diagnostic/call-diagnostic-metrics-latencies"));
27
27
  var _callDiagnosticMetrics2 = require("./call-diagnostic/call-diagnostic-metrics.util");
28
28
  var _utils = require("./utils");
29
+ var _automatedUser = require("./automated-user");
30
+ var _privacyAndSecurityPermissionEnricher = _interopRequireDefault(require("./privacy-and-security-permission-enricher"));
31
+ var _unhandledExceptionTelemetry = require("./unhandled-exception-telemetry");
29
32
  var _Metrics;
30
33
  /* eslint-disable @typescript-eslint/no-unused-vars */
31
34
  /* eslint-disable class-methods-use-this */
@@ -53,8 +56,6 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
53
56
  args[_key] = arguments[_key];
54
57
  }
55
58
  _this = _callSuper(this, Metrics, [].concat(args));
56
-
57
- // @ts-ignore
58
59
  // Call Diagnostic latencies
59
60
  (0, _defineProperty2.default)(_this, "callDiagnosticLatencies", void 0);
60
61
  // Helper classes to handle the different types of metrics
@@ -77,9 +78,19 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
77
78
  */
78
79
  (0, _defineProperty2.default)(_this, "delayedClientEventsOverrides", {});
79
80
  (0, _defineProperty2.default)(_this, "delayedClientFeatureEventsOverrides", {});
81
+ (0, _defineProperty2.default)(_this, "privacyAndSecurityPermissionEnricher", void 0);
82
+ _this.privacyAndSecurityPermissionEnricher = new _privacyAndSecurityPermissionEnricher.default(function (error) {
83
+ // @ts-ignore
84
+ _this.webex.logger.error('NewMetrics: @submitClientEvent. Privacy and security permission enrichment failed.', error);
85
+ });
86
+ // @ts-ignore
80
87
  _this.callDiagnosticLatencies = new _callDiagnosticMetricsLatencies.default({}, {
81
88
  parent: _this.webex
82
89
  });
90
+ // @ts-ignore
91
+ _this.callDiagnosticMetrics = new _callDiagnosticMetrics.default({}, {
92
+ parent: _this.webex
93
+ });
83
94
  _this.onReady();
84
95
  return _this;
85
96
  }
@@ -94,10 +105,6 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
94
105
  var _this2 = this;
95
106
  // @ts-ignore
96
107
  this.webex.once('ready', function () {
97
- // @ts-ignore
98
- _this2.callDiagnosticMetrics = new _callDiagnosticMetrics.default({}, {
99
- parent: _this2.webex
100
- });
101
108
  _this2.preLoginMetrics = new _preloginMetrics.default(
102
109
  // @ts-ignore
103
110
  new _preloginMetricsBatcher.default({}, {
@@ -112,6 +119,8 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
112
119
  shouldDelay: _this2.delaySubmitClientEvents,
113
120
  overrides: _this2.delayedClientEventsOverrides
114
121
  });
122
+ // @ts-ignore
123
+ (0, _unhandledExceptionTelemetry.startUnhandledExceptionTelemetry)(_this2.webex);
115
124
  });
116
125
  }
117
126
 
@@ -209,6 +218,15 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
209
218
  return (_this$businessMetrics = (_this$businessMetrics2 = this.businessMetrics) === null || _this$businessMetrics2 === void 0 ? void 0 : _this$businessMetrics2.isReadyToSubmitEvents()) !== null && _this$businessMetrics !== void 0 ? _this$businessMetrics : false;
210
219
  }
211
220
 
221
+ /**
222
+ * @returns whether the current user agent belongs to an automated user
223
+ */
224
+ }, {
225
+ key: "isAutomatedUser",
226
+ value: function isAutomatedUser() {
227
+ return (0, _automatedUser.isAutomatedUser)();
228
+ }
229
+
212
230
  /**
213
231
  * Behavioral event
214
232
  * @param args
@@ -336,7 +354,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
336
354
  var name = _ref7.name,
337
355
  payload = _ref7.payload,
338
356
  options = _ref7.options;
339
- if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {
357
+ if (!this.isReady) {
340
358
  // @ts-ignore
341
359
  this.webex.logger.log("NewMetrics: @submitFeatureEvent. Attempted to submit before webex.ready. Event name: ".concat(name));
342
360
  return _promise.default.resolve();
@@ -366,7 +384,7 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
366
384
  var name = _ref8.name,
367
385
  payload = _ref8.payload,
368
386
  options = _ref8.options;
369
- if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {
387
+ if (!this.isReady) {
370
388
  // @ts-ignore
371
389
  this.webex.logger.log("NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ".concat(name));
372
390
  return _promise.default.resolve();
@@ -377,14 +395,42 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
377
395
  meetingId: options === null || options === void 0 ? void 0 : options.meetingId
378
396
  }
379
397
  });
380
- return this.callDiagnosticMetrics.submitClientEvent({
398
+ var enrichedPayload = this.privacyAndSecurityPermissionEnricher.enrich({
381
399
  name: name,
382
400
  payload: payload,
401
+ scope: this.getPermissionScope(options)
402
+ });
403
+ return this.callDiagnosticMetrics.submitClientEvent({
404
+ name: name,
405
+ payload: enrichedPayload,
383
406
  options: options,
384
407
  delaySubmitEvent: this.delaySubmitClientEvents
385
408
  });
386
409
  }
387
410
 
411
+ /**
412
+ * Stores the latest browser permission state supplied by the client.
413
+ * @param permission latest normalized permission snapshot
414
+ */
415
+ }, {
416
+ key: "setPrivacyAndSecurityPermission",
417
+ value: function setPrivacyAndSecurityPermission(permission) {
418
+ this.privacyAndSecurityPermissionEnricher.setPermission(permission);
419
+ }
420
+
421
+ /**
422
+ * Resolves event options to the call identity used by Call Diagnostic where possible.
423
+ * @param options client event options
424
+ * @returns the permission history scope
425
+ */
426
+ }, {
427
+ key: "getPermissionScope",
428
+ value: function getPermissionScope(options) {
429
+ var _webex$meetings, _webex$meetings$getBa, _ref9, _options$correlationI;
430
+ var meeting = options !== null && options !== void 0 && options.meetingId ? (_webex$meetings = this.webex.meetings) === null || _webex$meetings === void 0 ? void 0 : (_webex$meetings$getBa = _webex$meetings.getBasicMeetingInformation) === null || _webex$meetings$getBa === void 0 ? void 0 : _webex$meetings$getBa.call(_webex$meetings, options.meetingId) : undefined;
431
+ return (_ref9 = (_options$correlationI = options === null || options === void 0 ? void 0 : options.correlationId) !== null && _options$correlationI !== void 0 ? _options$correlationI : meeting === null || meeting === void 0 ? void 0 : meeting.correlationId) !== null && _ref9 !== void 0 ? _ref9 : 'default';
432
+ }
433
+
388
434
  /**
389
435
  * Issue request to alias a user's pre-login ID with their CI UUID
390
436
  * @param {string} preLoginId
@@ -442,12 +488,12 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
442
488
  }, {
443
489
  key: "buildClientEventFetchRequestOptions",
444
490
  value: (function () {
445
- var _buildClientEventFetchRequestOptions = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(_ref9) {
491
+ var _buildClientEventFetchRequestOptions = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(_ref0) {
446
492
  var name, payload, options;
447
493
  return _regenerator.default.wrap(function (_context) {
448
494
  while (1) switch (_context.prev = _context.next) {
449
495
  case 0:
450
- name = _ref9.name, payload = _ref9.payload, options = _ref9.options;
496
+ name = _ref0.name, payload = _ref0.payload, options = _ref0.options;
451
497
  return _context.abrupt("return", this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({
452
498
  name: name,
453
499
  payload: payload,
@@ -498,9 +544,9 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
498
544
  */
499
545
  }, {
500
546
  key: "setDelaySubmitClientEvents",
501
- value: function setDelaySubmitClientEvents(_ref0) {
502
- var shouldDelay = _ref0.shouldDelay,
503
- overrides = _ref0.overrides;
547
+ value: function setDelaySubmitClientEvents(_ref1) {
548
+ var shouldDelay = _ref1.shouldDelay,
549
+ overrides = _ref1.overrides;
504
550
  this.delaySubmitClientEvents = shouldDelay;
505
551
  this.delayedClientEventsOverrides = overrides || {};
506
552
  if (this.isReady && !shouldDelay) {
@@ -519,9 +565,9 @@ var Metrics = /*#__PURE__*/function (_WebexPlugin) {
519
565
  */
520
566
  }, {
521
567
  key: "setDelaySubmitClientFeatureEvents",
522
- value: function setDelaySubmitClientFeatureEvents(_ref1) {
523
- var shouldDelay = _ref1.shouldDelay,
524
- overrides = _ref1.overrides;
568
+ value: function setDelaySubmitClientFeatureEvents(_ref10) {
569
+ var shouldDelay = _ref10.shouldDelay,
570
+ overrides = _ref10.overrides;
525
571
  this.delaySubmitClientFeatureEvents = shouldDelay;
526
572
  this.delayedClientFeatureEventsOverrides = overrides || {};
527
573
  if (this.isReady && !shouldDelay) {
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_callDiagnosticMetrics","_interopRequireDefault","_behavioralMetrics","_operationalMetrics","_businessMetrics","_preloginMetrics","_preloginMetricsBatcher","_callDiagnosticMetricsLatencies","_callDiagnosticMetrics2","_utils","_Metrics","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","Metrics","_WebexPlugin","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","concat","_defineProperty2","callDiagnosticLatencies","CallDiagnosticLatencies","parent","webex","onReady","_inherits2","_createClass2","key","value","_this2","once","callDiagnosticMetrics","CallDiagnosticMetrics","preLoginMetrics","PreLoginMetrics","PreLoginMetricsBatcher","isReady","setDelaySubmitClientEvents","shouldDelay","delaySubmitClientEvents","overrides","delayedClientEventsOverrides","submitInternalEvent","_ref","name","payload","options","clearTimestamps","saveTimestamp","lazyBuildBehavioralMetrics","behavioralMetrics","BehavioralMetrics","lazyBuildOperationalMetrics","operationalMetrics","OperationalMetrics","lazyBuildBusinessMetrics","businessMetrics","BusinessMetrics","isReadyToSubmitBehavioralEvents","_this$behavioralMetri","_this$behavioralMetri2","isReadyToSubmitEvents","isReadyToSubmitOperationalEvents","_this$operationalMetr","_this$operationalMetr2","isReadyToSubmitBusinessEvents","_this$businessMetrics","_this$businessMetrics2","submitBehavioralEvent","_ref2","product","agent","target","verb","logger","log","_promise","resolve","submitOperationalEvent","_ref3","submitBusinessEvent","_ref4","table","metadata","submitPreLoginEvent","_ref5","preLoginId","submitMQE","_ref6","submitFeatureEvent","_ref7","meetingId","delaySubmitEvent","delaySubmitClientFeatureEvents","submitClientEvent","_ref8","clientMetricsAliasUser","_this3","request","method","api","resource","headers","body","qs","alias","then","res","catch","err","error","generateCommonErrorMetadata","reject","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref9","wrap","_context","prev","next","abrupt","buildClientEventFetchRequestOptions","stop","_x","setMetricTimingsAndFetch","setTimingsAndFetch","setMetricTimings","isServiceErrorExpected","serviceErrorCode","_ref0","submitDelayedClientEvents","setDelaySubmitClientFeatureEvents","_ref1","delayedClientFeatureEventsOverrides","submitDelayedClientFeatureEvents","WebexPlugin","_default","exports"],"sources":["new-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport BehavioralMetrics from './behavioral-metrics';\nimport OperationalMetrics from './operational-metrics';\nimport BusinessMetrics from './business-metrics';\nimport PreLoginMetrics from './prelogin-metrics';\nimport PreLoginMetricsBatcher from './prelogin-metrics-batcher';\nimport {\n RecursivePartial,\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n ClientEvent,\n FeatureEvent,\n EventPayload,\n OperationalEvent,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n Table,\n DelayedClientEvent,\n DelayedClientFeatureEvent,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?pageId=231011379\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n behavioralMetrics: BehavioralMetrics;\n operationalMetrics: OperationalMetrics;\n businessMetrics: BusinessMetrics;\n preLoginMetrics: PreLoginMetrics;\n isReady = false;\n\n /**\n * Whether or not to delay the submission of client events.\n */\n delaySubmitClientEvents = false;\n\n /**\n * Whether or not to delay the submission of feature events.\n */\n delaySubmitClientFeatureEvents = false;\n\n /**\n * Overrides for delayed client events. E.g. if you want to override the correlationId for all delayed client events, you can set this to { correlationId: 'newCorrelationId' }\n */\n delayedClientEventsOverrides: Partial<DelayedClientEvent['options']> = {};\n\n delayedClientFeatureEventsOverrides: Partial<DelayedClientFeatureEvent['options']> = {};\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n this.preLoginMetrics = new PreLoginMetrics(\n // @ts-ignore\n new PreLoginMetricsBatcher({}, {parent: this.webex}),\n {},\n // @ts-ignore\n {parent: this.webex}\n );\n this.isReady = true;\n this.setDelaySubmitClientEvents({\n shouldDelay: this.delaySubmitClientEvents,\n overrides: this.delayedClientEventsOverrides,\n });\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * if webex metrics is ready, build behavioral metric backend if not already done.\n */\n private lazyBuildBehavioralMetrics() {\n if (this.isReady && !this.behavioralMetrics) {\n // @ts-ignore\n this.behavioralMetrics = new BehavioralMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build operational metric backend if not already done.\n */\n private lazyBuildOperationalMetrics() {\n if (this.isReady && !this.operationalMetrics) {\n // @ts-ignore\n this.operationalMetrics = new OperationalMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build business metric backend if not already done.\n */\n private lazyBuildBusinessMetrics() {\n if (this.isReady && !this.businessMetrics) {\n // @ts-ignore\n this.businessMetrics = new BusinessMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * @returns true once we have the deviceId we need to submit behavioral events to Amplitude\n */\n isReadyToSubmitBehavioralEvents() {\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit operational events\n */\n isReadyToSubmitOperationalEvents() {\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit business events\n */\n isReadyToSubmitBusinessEvents() {\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * Behavioral event\n * @param args\n */\n submitBehavioralEvent({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBehavioralEvent. Attempted to submit before webex.ready: ${product}.${agent}.${target}.${verb}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics.submitBehavioralEvent({product, agent, target, verb, payload});\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({name, payload}: {name: string; payload?: EventPayload}) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitOperationalEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics.submitOperationalEvent({name, payload});\n }\n\n /**\n * Business event\n * @param args\n */\n submitBusinessEvent({\n name,\n payload,\n table,\n metadata,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n metadata?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBusinessEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics.submitBusinessEvent({name, payload, table, metadata});\n }\n\n /**\n * Call Analyzer: Pre-Login Event\n * @param args\n */\n submitPreLoginEvent({\n name,\n preLoginId,\n payload,\n metadata,\n }: {\n name: string;\n preLoginId: string;\n payload: EventPayload;\n metadata?: EventPayload;\n }): Promise<void> {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitPreLoginEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n return this.preLoginMetrics.submitPreLoginEvent({\n name,\n preLoginId,\n payload,\n metadata,\n });\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options: any;\n }) {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitFeatureEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitFeatureEvent({\n name,\n payload,\n options,\n delaySubmitEvent: this.delaySubmitClientFeatureEvents,\n });\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({\n name,\n payload,\n options,\n delaySubmitEvent: this.delaySubmitClientEvents,\n });\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful.`);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise<any> {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);\n }\n\n /**\n * Sets the value of delaySubmitClientEvents. If set to true, client events will be delayed until submitDelayedClientEvents is called. If\n * set to false, delayed client events will be submitted.\n *\n * @param {object} options - {shouldDelay: A boolean value indicating whether to delay the submission of client events, overrides: An object containing overrides for the client events}\n */\n public setDelaySubmitClientEvents({\n shouldDelay,\n overrides,\n }: {\n shouldDelay: boolean;\n overrides?: Partial<DelayedClientEvent['options']>;\n }) {\n this.delaySubmitClientEvents = shouldDelay;\n this.delayedClientEventsOverrides = overrides || {};\n\n if (this.isReady && !shouldDelay) {\n return this.callDiagnosticMetrics.submitDelayedClientEvents(overrides);\n }\n\n return Promise.resolve();\n }\n\n /**\n * Sets the value of setDelaySubmitClientFeatureEvents.\n * If set to true, feature events will be delayed until submitDelayedClientFeatureEvents is called.\n * If set to false, delayed feature events will be submitted.\n *\n * @param {object} options - {shouldDelay: A boolean value indicating whether to delay the submission of feature events,\n * overrides: An object containing overrides for the feature events}\n */\n public setDelaySubmitClientFeatureEvents({\n shouldDelay,\n overrides,\n }: {\n shouldDelay: boolean;\n overrides?: Partial<DelayedClientFeatureEvent['options']>;\n }) {\n this.delaySubmitClientFeatureEvents = shouldDelay;\n this.delayedClientFeatureEventsOverrides = overrides || {};\n\n if (this.isReady && !shouldDelay) {\n return this.callDiagnosticMetrics.submitDelayedClientFeatureEvents(overrides);\n }\n\n return Promise.resolve();\n }\n}\n\nexport default Metrics;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_webexCore","require","_callDiagnosticMetrics","_interopRequireDefault","_behavioralMetrics","_operationalMetrics","_businessMetrics","_preloginMetrics","_preloginMetricsBatcher","_callDiagnosticMetricsLatencies","_callDiagnosticMetrics2","_utils","_automatedUser","_privacyAndSecurityPermissionEnricher","_unhandledExceptionTelemetry","_Metrics","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","Metrics","_WebexPlugin","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","concat","_defineProperty2","privacyAndSecurityPermissionEnricher","PrivacyAndSecurityPermissionEnricher","error","webex","logger","callDiagnosticLatencies","CallDiagnosticLatencies","parent","callDiagnosticMetrics","CallDiagnosticMetrics","onReady","_inherits2","_createClass2","key","value","_this2","once","preLoginMetrics","PreLoginMetrics","PreLoginMetricsBatcher","isReady","setDelaySubmitClientEvents","shouldDelay","delaySubmitClientEvents","overrides","delayedClientEventsOverrides","startUnhandledExceptionTelemetry","submitInternalEvent","_ref","name","payload","options","clearTimestamps","saveTimestamp","lazyBuildBehavioralMetrics","behavioralMetrics","BehavioralMetrics","lazyBuildOperationalMetrics","operationalMetrics","OperationalMetrics","lazyBuildBusinessMetrics","businessMetrics","BusinessMetrics","isReadyToSubmitBehavioralEvents","_this$behavioralMetri","_this$behavioralMetri2","isReadyToSubmitEvents","isReadyToSubmitOperationalEvents","_this$operationalMetr","_this$operationalMetr2","isReadyToSubmitBusinessEvents","_this$businessMetrics","_this$businessMetrics2","isAutomatedUser","detectAutomatedUser","submitBehavioralEvent","_ref2","product","agent","target","verb","log","_promise","resolve","submitOperationalEvent","_ref3","submitBusinessEvent","_ref4","table","metadata","submitPreLoginEvent","_ref5","preLoginId","submitMQE","_ref6","submitFeatureEvent","_ref7","meetingId","delaySubmitEvent","delaySubmitClientFeatureEvents","submitClientEvent","_ref8","enrichedPayload","enrich","scope","getPermissionScope","setPrivacyAndSecurityPermission","permission","setPermission","_webex$meetings","_webex$meetings$getBa","_ref9","_options$correlationI","meeting","meetings","getBasicMeetingInformation","undefined","correlationId","clientMetricsAliasUser","_this3","request","method","api","resource","headers","body","qs","alias","then","res","catch","err","generateCommonErrorMetadata","reject","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref0","wrap","_context","prev","next","abrupt","buildClientEventFetchRequestOptions","stop","_x","setMetricTimingsAndFetch","setTimingsAndFetch","setMetricTimings","isServiceErrorExpected","serviceErrorCode","_ref1","submitDelayedClientEvents","setDelaySubmitClientFeatureEvents","_ref10","delayedClientFeatureEventsOverrides","submitDelayedClientFeatureEvents","WebexPlugin","_default","exports"],"sources":["new-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport BehavioralMetrics from './behavioral-metrics';\nimport OperationalMetrics from './operational-metrics';\nimport BusinessMetrics from './business-metrics';\nimport PreLoginMetrics from './prelogin-metrics';\nimport PreLoginMetricsBatcher from './prelogin-metrics-batcher';\nimport {\n RecursivePartial,\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n ClientEvent,\n FeatureEvent,\n EventPayload,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n Table,\n DelayedClientEvent,\n DelayedClientFeatureEvent,\n PrivacyAndSecurityPermission,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\nimport {isAutomatedUser as detectAutomatedUser} from './automated-user';\nimport PrivacyAndSecurityPermissionEnricher from './privacy-and-security-permission-enricher';\nimport {startUnhandledExceptionTelemetry} from './unhandled-exception-telemetry';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?pageId=231011379\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n behavioralMetrics: BehavioralMetrics;\n operationalMetrics: OperationalMetrics;\n businessMetrics: BusinessMetrics;\n preLoginMetrics: PreLoginMetrics;\n isReady = false;\n\n /**\n * Whether or not to delay the submission of client events.\n */\n delaySubmitClientEvents = false;\n\n /**\n * Whether or not to delay the submission of feature events.\n */\n delaySubmitClientFeatureEvents = false;\n\n /**\n * Overrides for delayed client events. E.g. if you want to override the correlationId for all delayed client events, you can set this to { correlationId: 'newCorrelationId' }\n */\n delayedClientEventsOverrides: Partial<DelayedClientEvent['options']> = {};\n\n delayedClientFeatureEventsOverrides: Partial<DelayedClientFeatureEvent['options']> = {};\n\n private privacyAndSecurityPermissionEnricher: PrivacyAndSecurityPermissionEnricher;\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n this.privacyAndSecurityPermissionEnricher = new PrivacyAndSecurityPermissionEnricher(\n (error) => {\n // @ts-ignore\n this.webex.logger.error(\n 'NewMetrics: @submitClientEvent. Privacy and security permission enrichment failed.',\n error\n );\n }\n );\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n this.preLoginMetrics = new PreLoginMetrics(\n // @ts-ignore\n new PreLoginMetricsBatcher({}, {parent: this.webex}),\n {},\n // @ts-ignore\n {parent: this.webex}\n );\n this.isReady = true;\n this.setDelaySubmitClientEvents({\n shouldDelay: this.delaySubmitClientEvents,\n overrides: this.delayedClientEventsOverrides,\n });\n // @ts-ignore\n startUnhandledExceptionTelemetry(this.webex);\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * if webex metrics is ready, build behavioral metric backend if not already done.\n */\n private lazyBuildBehavioralMetrics() {\n if (this.isReady && !this.behavioralMetrics) {\n // @ts-ignore\n this.behavioralMetrics = new BehavioralMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build operational metric backend if not already done.\n */\n private lazyBuildOperationalMetrics() {\n if (this.isReady && !this.operationalMetrics) {\n // @ts-ignore\n this.operationalMetrics = new OperationalMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * if webex metrics is ready, build business metric backend if not already done.\n */\n private lazyBuildBusinessMetrics() {\n if (this.isReady && !this.businessMetrics) {\n // @ts-ignore\n this.businessMetrics = new BusinessMetrics({}, {parent: this.webex});\n }\n }\n\n /**\n * @returns true once we have the deviceId we need to submit behavioral events to Amplitude\n */\n isReadyToSubmitBehavioralEvents() {\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit operational events\n */\n isReadyToSubmitOperationalEvents() {\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns true once we have the deviceId we need to submit business events\n */\n isReadyToSubmitBusinessEvents() {\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics?.isReadyToSubmitEvents() ?? false;\n }\n\n /**\n * @returns whether the current user agent belongs to an automated user\n */\n isAutomatedUser() {\n return detectAutomatedUser();\n }\n\n /**\n * Behavioral event\n * @param args\n */\n submitBehavioralEvent({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBehavioralEvent. Attempted to submit before webex.ready: ${product}.${agent}.${target}.${verb}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBehavioralMetrics();\n\n return this.behavioralMetrics.submitBehavioralEvent({product, agent, target, verb, payload});\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({name, payload}: {name: string; payload?: EventPayload}) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitOperationalEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildOperationalMetrics();\n\n return this.operationalMetrics.submitOperationalEvent({name, payload});\n }\n\n /**\n * Business event\n * @param args\n */\n submitBusinessEvent({\n name,\n payload,\n table,\n metadata,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n metadata?: EventPayload;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBusinessEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n this.lazyBuildBusinessMetrics();\n\n return this.businessMetrics.submitBusinessEvent({name, payload, table, metadata});\n }\n\n /**\n * Call Analyzer: Pre-Login Event\n * @param args\n */\n submitPreLoginEvent({\n name,\n preLoginId,\n payload,\n metadata,\n }: {\n name: string;\n preLoginId: string;\n payload: EventPayload;\n metadata?: EventPayload;\n }): Promise<void> {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitPreLoginEvent. Attempted to submit before webex.ready: ${name}`\n );\n\n return Promise.resolve();\n }\n\n return this.preLoginMetrics.submitPreLoginEvent({\n name,\n preLoginId,\n payload,\n metadata,\n });\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options: any;\n }) {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitFeatureEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitFeatureEvent({\n name,\n payload,\n options,\n delaySubmitEvent: this.delaySubmitClientFeatureEvents,\n });\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n if (!this.isReady) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n const enrichedPayload = this.privacyAndSecurityPermissionEnricher.enrich({\n name,\n payload,\n scope: this.getPermissionScope(options),\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({\n name,\n payload: enrichedPayload,\n options,\n delaySubmitEvent: this.delaySubmitClientEvents,\n });\n }\n\n /**\n * Stores the latest browser permission state supplied by the client.\n * @param permission latest normalized permission snapshot\n */\n public setPrivacyAndSecurityPermission(permission: PrivacyAndSecurityPermission): void {\n this.privacyAndSecurityPermissionEnricher.setPermission(permission);\n }\n\n /**\n * Resolves event options to the call identity used by Call Diagnostic where possible.\n * @param options client event options\n * @returns the permission history scope\n */\n private getPermissionScope(options?: SubmitClientEventOptions): string {\n const meeting = options?.meetingId\n ? (this as any).webex.meetings?.getBasicMeetingInformation?.(options.meetingId)\n : undefined;\n\n return options?.correlationId ?? meeting?.correlationId ?? 'default';\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful.`);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise<any> {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);\n }\n\n /**\n * Sets the value of delaySubmitClientEvents. If set to true, client events will be delayed until submitDelayedClientEvents is called. If\n * set to false, delayed client events will be submitted.\n *\n * @param {object} options - {shouldDelay: A boolean value indicating whether to delay the submission of client events, overrides: An object containing overrides for the client events}\n */\n public setDelaySubmitClientEvents({\n shouldDelay,\n overrides,\n }: {\n shouldDelay: boolean;\n overrides?: Partial<DelayedClientEvent['options']>;\n }) {\n this.delaySubmitClientEvents = shouldDelay;\n this.delayedClientEventsOverrides = overrides || {};\n\n if (this.isReady && !shouldDelay) {\n return this.callDiagnosticMetrics.submitDelayedClientEvents(overrides);\n }\n\n return Promise.resolve();\n }\n\n /**\n * Sets the value of setDelaySubmitClientFeatureEvents.\n * If set to true, feature events will be delayed until submitDelayedClientFeatureEvents is called.\n * If set to false, delayed feature events will be submitted.\n *\n * @param {object} options - {shouldDelay: A boolean value indicating whether to delay the submission of feature events,\n * overrides: An object containing overrides for the feature events}\n */\n public setDelaySubmitClientFeatureEvents({\n shouldDelay,\n overrides,\n }: {\n shouldDelay: boolean;\n overrides?: Partial<DelayedClientFeatureEvent['options']>;\n }) {\n this.delaySubmitClientFeatureEvents = shouldDelay;\n this.delayedClientFeatureEventsOverrides = overrides || {};\n\n if (this.isReady && !shouldDelay) {\n return this.callDiagnosticMetrics.submitDelayedClientFeatureEvents(overrides);\n }\n\n return Promise.resolve();\n }\n}\n\nexport default Metrics;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.NO_PERMISSION_ENRICHMENT = exports.MEDIA_TX_PERMISSION_EVENTS = exports.FINAL_PERMISSION_EVENTS = exports.CONTENT_SHARE_PERMISSION_EVENTS = exports.CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = void 0;
9
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set"));
10
+ var CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = exports.CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = new _set.default(['client.call.initiated', 'client.media.capabilities', 'client.ice.end', 'client.locus.join.request', 'client.locus.join.response', 'client.media-engine.ready']);
11
+ var MEDIA_TX_PERMISSION_EVENTS = exports.MEDIA_TX_PERMISSION_EVENTS = new _set.default(['client.media.tx.start', 'client.media.tx.stop']);
12
+ var CONTENT_SHARE_PERMISSION_EVENTS = exports.CONTENT_SHARE_PERMISSION_EVENTS = new _set.default(['client.share.initiated', 'client.share.floor-grant.request', 'client.share.floor-granted.local']);
13
+ var FINAL_PERMISSION_EVENTS = exports.FINAL_PERMISSION_EVENTS = new _set.default(['client.call.leave', 'client.call.remote-ended', 'client.call.aborted']);
14
+ var NO_PERMISSION_ENRICHMENT = exports.NO_PERMISSION_ENRICHMENT = {
15
+ resources: [],
16
+ terminal: false
17
+ };
18
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CAMERA_AND_MICROPHONE_PERMISSION_EVENTS","exports","_set","default","MEDIA_TX_PERMISSION_EVENTS","CONTENT_SHARE_PERMISSION_EVENTS","FINAL_PERMISSION_EVENTS","NO_PERMISSION_ENRICHMENT","resources","terminal"],"sources":["constants.ts"],"sourcesContent":["import type {ClientEvent} from '../metrics.types';\nimport type {PermissionEnrichmentPolicy} from './types';\n\nexport const CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.call.initiated',\n 'client.media.capabilities',\n 'client.ice.end',\n 'client.locus.join.request',\n 'client.locus.join.response',\n 'client.media-engine.ready',\n]);\n\nexport const MEDIA_TX_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.media.tx.start',\n 'client.media.tx.stop',\n]);\n\nexport const CONTENT_SHARE_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.share.initiated',\n 'client.share.floor-grant.request',\n 'client.share.floor-granted.local',\n]);\n\nexport const FINAL_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.call.leave',\n 'client.call.remote-ended',\n 'client.call.aborted',\n]);\n\nexport const NO_PERMISSION_ENRICHMENT: PermissionEnrichmentPolicy = {\n resources: [],\n terminal: false,\n};\n"],"mappings":";;;;;;;;;AAGO,IAAMA,uCAAuC,GAAAC,OAAA,CAAAD,uCAAA,GAAG,IAAAE,IAAA,CAAAC,OAAA,CAA6B,CAClF,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,CAC5B,CAAC;AAEK,IAAMC,0BAA0B,GAAAH,OAAA,CAAAG,0BAAA,GAAG,IAAAF,IAAA,CAAAC,OAAA,CAA6B,CACrE,uBAAuB,EACvB,sBAAsB,CACvB,CAAC;AAEK,IAAME,+BAA+B,GAAAJ,OAAA,CAAAI,+BAAA,GAAG,IAAAH,IAAA,CAAAC,OAAA,CAA6B,CAC1E,wBAAwB,EACxB,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEK,IAAMG,uBAAuB,GAAAL,OAAA,CAAAK,uBAAA,GAAG,IAAAJ,IAAA,CAAAC,OAAA,CAA6B,CAClE,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,CACtB,CAAC;AAEK,IAAMI,wBAAoD,GAAAN,OAAA,CAAAM,wBAAA,GAAG;EAClEC,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE;AACZ,CAAC","ignoreList":[]}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ _Object$defineProperty(exports, "__esModule", {
11
+ value: true
12
+ });
13
+ exports.default = exports.PERMISSION_ENRICHMENT_RULES = void 0;
14
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
15
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
17
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
18
+ var _constants = require("./constants");
19
+ var _utils = require("./utils");
20
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
22
+ var PERMISSION_ENRICHMENT_RULES = exports.PERMISSION_ENRICHMENT_RULES = [{
23
+ events: _constants.CAMERA_AND_MICROPHONE_PERMISSION_EVENTS,
24
+ resolve: function resolve() {
25
+ return {
26
+ resources: ['camera', 'microphone'],
27
+ terminal: false
28
+ };
29
+ }
30
+ }, {
31
+ events: _constants.MEDIA_TX_PERMISSION_EVENTS,
32
+ resolve: function resolve(payload) {
33
+ return {
34
+ resources: (0, _utils.resolveMediaResources)(payload),
35
+ terminal: false
36
+ };
37
+ }
38
+ }, {
39
+ events: _constants.CONTENT_SHARE_PERMISSION_EVENTS,
40
+ resolve: function resolve(payload) {
41
+ return {
42
+ resources: (0, _utils.resolveContentShareResources)(payload),
43
+ terminal: false
44
+ };
45
+ }
46
+ }, {
47
+ events: _constants.FINAL_PERMISSION_EVENTS,
48
+ resolve: function resolve() {
49
+ return {
50
+ resources: ['camera', 'microphone', 'contentShare'],
51
+ terminal: true
52
+ };
53
+ }
54
+ }];
55
+ var resolvePermissionEnrichmentPolicy = function resolvePermissionEnrichmentPolicy(name, payload) {
56
+ var _PERMISSION_ENRICHMEN, _PERMISSION_ENRICHMEN2;
57
+ return (_PERMISSION_ENRICHMEN = (_PERMISSION_ENRICHMEN2 = PERMISSION_ENRICHMENT_RULES.find(function (_ref) {
58
+ var events = _ref.events;
59
+ return events.has(name);
60
+ })) === null || _PERMISSION_ENRICHMEN2 === void 0 ? void 0 : _PERMISSION_ENRICHMEN2.resolve(payload)) !== null && _PERMISSION_ENRICHMEN !== void 0 ? _PERMISSION_ENRICHMEN : _constants.NO_PERMISSION_ENRICHMENT;
61
+ };
62
+
63
+ /**
64
+ * Enriches eligible client events with relevant browser permission changes.
65
+ */
66
+ var PrivacyAndSecurityPermissionEnricher = exports.default = /*#__PURE__*/function () {
67
+ /**
68
+ * Creates a permission enricher.
69
+ * @param {Function} onEnrichmentError permission enrichment error handler
70
+ */
71
+ function PrivacyAndSecurityPermissionEnricher(onEnrichmentError) {
72
+ (0, _classCallCheck2.default)(this, PrivacyAndSecurityPermissionEnricher);
73
+ (0, _defineProperty2.default)(this, "permission", void 0);
74
+ (0, _defineProperty2.default)(this, "lastReported", new _map.default());
75
+ (0, _defineProperty2.default)(this, "onEnrichmentError", void 0);
76
+ this.onEnrichmentError = onEnrichmentError;
77
+ }
78
+
79
+ /**
80
+ * Stores the latest normalized browser permission state.
81
+ * @param {PrivacyAndSecurityPermission} permission permission snapshot
82
+ * @returns {void}
83
+ */
84
+ return (0, _createClass2.default)(PrivacyAndSecurityPermissionEnricher, [{
85
+ key: "setPermission",
86
+ value: function setPermission(permission) {
87
+ this.permission = (0, _utils.projectPrivacyAndSecurityPermission)(permission, ['camera', 'microphone', 'contentShare']);
88
+ }
89
+
90
+ /**
91
+ * Returns the original payload or a copy enriched with relevant permission changes.
92
+ * @param {PermissionEnrichmentContext} context event context and permission history scope
93
+ * @returns {ClientEventPayload | undefined}
94
+ */
95
+ }, {
96
+ key: "enrich",
97
+ value: function enrich(_ref2) {
98
+ var name = _ref2.name,
99
+ payload = _ref2.payload,
100
+ scope = _ref2.scope;
101
+ var policy = resolvePermissionEnrichmentPolicy(name, payload);
102
+ try {
103
+ var _this$lastReported$ge;
104
+ if ((payload === null || payload === void 0 ? void 0 : payload.privacyAndSecurityPermission) !== undefined) {
105
+ // An explicitly supplied permission payload is authoritative for this event.
106
+ if (!policy.terminal) {
107
+ this.lastReported.set(scope, _objectSpread(_objectSpread({}, this.lastReported.get(scope)), payload.privacyAndSecurityPermission));
108
+ }
109
+ return payload;
110
+ }
111
+ if (policy.resources.length === 0) {
112
+ return payload;
113
+ }
114
+ var projectedPermission = this.permission ? (0, _utils.projectPrivacyAndSecurityPermission)(this.permission, policy.resources) : undefined;
115
+ if (!projectedPermission) {
116
+ return payload;
117
+ }
118
+ if (policy.terminal) {
119
+ return _objectSpread(_objectSpread({}, payload), {}, {
120
+ privacyAndSecurityPermission: projectedPermission
121
+ });
122
+ }
123
+ var lastReported = (_this$lastReported$ge = this.lastReported.get(scope)) !== null && _this$lastReported$ge !== void 0 ? _this$lastReported$ge : {};
124
+ var changedPermission = (0, _utils.getChangedPermission)(projectedPermission, lastReported);
125
+ if (!changedPermission) {
126
+ return payload;
127
+ }
128
+ this.lastReported.set(scope, _objectSpread(_objectSpread({}, lastReported), changedPermission));
129
+ return _objectSpread(_objectSpread({}, payload), {}, {
130
+ privacyAndSecurityPermission: changedPermission
131
+ });
132
+ } catch (error) {
133
+ this.onEnrichmentError(error);
134
+ return payload;
135
+ } finally {
136
+ if (policy.terminal) {
137
+ this.lastReported.delete(scope);
138
+ }
139
+ }
140
+ }
141
+ }]);
142
+ }();
143
+ //# sourceMappingURL=index.js.map