@webex/internal-plugin-metrics 3.12.0-next.56 → 3.12.0-next.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js.map +1 -1
- package/dist/types/metrics.types.d.ts +3 -3
- package/dist/unhandled-exception-telemetry/index.js +1 -0
- package/dist/unhandled-exception-telemetry/index.js.map +1 -1
- package/package.json +2 -2
- package/src/metrics.types.ts +3 -3
- package/src/unhandled-exception-telemetry/index.ts +1 -0
- package/test/unit/spec/unhandled-exception-telemetry.ts +1 -0
package/dist/metrics.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LOCUS_SYNC_LATENCY_EVENT_NAMES","exports"],"sources":["metrics.types.ts"],"sourcesContent":["import type {\n ClientEvent as RawClientEvent,\n Event as RawEvent,\n MediaQualityEvent as RawMediaQualityEvent,\n FeatureEvent as RawFeatureEvent,\n} from '@webex/event-dictionary-ts';\n\nexport type Event = Omit<RawEvent, 'event'> & {\n event: RawClientEvent | RawMediaQualityEvent | RawFeatureEvent;\n};\n\nexport type ClientEventError = NonNullable<RawClientEvent['errors']>[0];\n\nexport type EnvironmentType = NonNullable<RawEvent['origin']['environment']>;\n\nexport type NewEnvironmentType = NonNullable<RawEvent['origin']['newEnvironment']>;\n\nexport type ClientLaunchMethodType = NonNullable<\n RawEvent['origin']['clientInfo']\n>['clientLaunchMethod'];\n\nexport type ClientUserNameInput = NonNullable<RawClientEvent['userNameInput']>;\n\nexport type ClientEmailInput = NonNullable<RawClientEvent['emailInput']>;\n\nexport type PrivacyAndSecurityPermission = NonNullable<\n RawClientEvent['privacyAndSecurityPermission']\n>;\n\nexport type PrivacyAndSecurityPermissionResource = keyof PrivacyAndSecurityPermission;\n\nexport type PrivacyAndSecurityPermissionState =\n PrivacyAndSecurityPermission[PrivacyAndSecurityPermissionResource];\n\nexport type BrowserLaunchMethodType = NonNullable<\n RawEvent['origin']['clientInfo']\n>['browserLaunchMethod'];\n\nexport type MetricEventProduct = 'webex' | 'wxcc_desktop' | 'wxcc_crm' | 'wxcc_sdk';\n\nexport type MetricEventAgent = 'user' | 'browser' | 'system' | 'sdk' | 'redux' | 'service' | 'api';\n\nexport type MetricEventVerb =\n | 'abort'\n | 'accept'\n | 'activate'\n | 'apply'\n | 'answer'\n | 'authorize'\n | 'build'\n | 'cancel'\n | 'change'\n | 'click'\n | 'close'\n | 'complete'\n | 'connect'\n | 'create'\n | 'deactivate'\n | 'decrypt'\n | 'delete'\n | 'deliver'\n | 'destroy'\n | 'disable'\n | 'disconnect'\n | 'dismiss'\n | 'display'\n | 'download'\n | 'edit'\n | 'enable'\n | 'encrypt'\n | 'end'\n | 'expire'\n | 'fail'\n | 'fetch'\n | 'fire'\n | 'generate'\n | 'get'\n | 'hide'\n | 'hover'\n | 'ignore'\n | 'initialize'\n | 'initiate'\n | 'invalidate'\n | 'join'\n | 'list'\n | 'load'\n | 'login'\n | 'logout'\n | 'notify'\n | 'offer'\n | 'open'\n | 'press'\n | 'receive'\n | 'refer'\n | 'refresh'\n | 'register'\n | 'release'\n | 'reload'\n | 'reject'\n | 'request'\n | 'reset'\n | 'resize'\n | 'respond'\n | 'retry'\n | 'revoke'\n | 'save'\n | 'search'\n | 'select'\n | 'send'\n | 'set'\n | 'sign'\n | 'start'\n | 'submit'\n | 'switch'\n | 'sync'\n | 'toggle'\n | 'transfer'\n | 'unregister'\n | 'update'\n | 'upload'\n | 'use'\n | 'validate'\n | 'view'\n | 'visit'\n | 'wait'\n | 'warn'\n | 'exit';\n\nexport type MetricEventJoinFlowVersion = 'Other' | 'NewFTE';\nexport type MetricEventMeetingJoinPhase = 'pre-join' | 'join' | 'in-meeting';\n\nexport type SubmitClientEventOptions = {\n meetingId?: string;\n mediaConnections?: any[];\n rawError?: any;\n correlationId?: string;\n sessionCorrelationId?: string;\n preLoginId?: string;\n environment?: EnvironmentType;\n newEnvironmentType?: NewEnvironmentType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n webexConferenceIdStr?: string;\n globalMeetingId?: string;\n locusCluster?: string;\n joinFlowVersion?: MetricEventJoinFlowVersion;\n meetingJoinPhase?: MetricEventMeetingJoinPhase;\n triggeredTime?: string;\n emailInput?: ClientEmailInput;\n userNameInput?: ClientUserNameInput;\n vendorId?: string;\n};\n\nexport type SubmitMQEOptions = {\n meetingId: string;\n mediaConnections?: any[];\n networkType?: Event['origin']['networkType'];\n webexConferenceIdStr?: string;\n globalMeetingId?: string;\n};\n\nexport const LOCUS_SYNC_LATENCY_EVENT_NAMES = [\n 'internal.client.locus.sync.start',\n 'internal.client.locus.hashtree.request',\n 'internal.client.locus.hashtree.response',\n 'internal.client.locus.sync.request',\n 'internal.client.locus.sync.response',\n 'internal.client.locus.sync.message.received',\n] as const;\n\nexport type LocusSyncLatencyEventName = (typeof LOCUS_SYNC_LATENCY_EVENT_NAMES)[number];\n\nexport type InternalEvent = {\n name:\n | 'internal.client.meetinginfo.request'\n | 'internal.client.meetinginfo.response'\n | 'internal.register.device.request'\n | 'internal.register.device.response'\n | 'internal.reset.join.latencies'\n | 'internal.host.meeting.participant.admitted'\n | 'internal.client.meeting.interstitial-window.showed'\n | 'internal.client.interstitial-window.click.joinbutton'\n | 'internal.client.add-media.turn-discovery.start'\n | 'internal.client.add-media.turn-discovery.end'\n | 'internal.client.share.initiated'\n | 'internal.client.share.stopped'\n | LocusSyncLatencyEventName;\n\n payload?: never;\n options?: never;\n};\n\nexport interface ClientEvent {\n name: RawClientEvent['name'];\n payload?: RawClientEvent;\n options?: SubmitClientEventOptions;\n}\n\nexport interface DeviceContext {\n app: {version: string};\n device: {id: string};\n locale: string;\n os: {\n name: string;\n version: string;\n };\n}\n\nexport type MetricType = 'behavioral' | 'operational' | 'business';\n\nexport type Table = 'wbxapp_callend_metrics' | 'business_metrics' | 'business_ucf' | 'default';\n\ntype InternalEventPayload = string | number | boolean;\nexport type EventPayload = Record<string, InternalEventPayload>;\nexport type BehavioralEventPayload = EventPayload; // for compatibilty, can be remove after wxcc-desktop did change their imports.\n\nexport interface BusinessEventPayload {\n metricName: string;\n timestamp: number;\n context: DeviceContext;\n browserDetails: object;\n value: EventPayload;\n}\n\nexport interface BusinessEvent {\n type: string[];\n eventPayload: BusinessEventPayload;\n}\n\nexport interface TaggedEvent {\n context: DeviceContext;\n metricName: string;\n tags: EventPayload;\n timestamp: number;\n type: [MetricType];\n}\n\nexport type BehavioralEvent = TaggedEvent;\nexport type OperationalEvent = TaggedEvent;\n\nexport interface FeatureEvent {\n name: RawFeatureEvent['name'];\n payload?: RawFeatureEvent;\n options?: SubmitClientEventOptions;\n}\n\nexport interface MediaQualityEvent {\n name: RawMediaQualityEvent['name'];\n payload?: RawMediaQualityEvent;\n options: SubmitMQEOptions;\n}\n\nexport type RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends (infer U)[]\n ? RecursivePartial<U>[]\n : T[P] extends object\n ? RecursivePartial<T[P]>\n : T[P];\n};\n\nexport type MetricEventNames =\n | InternalEvent['name']\n | ClientEvent['name']\n | BehavioralEvent['metricName']\n | OperationalEvent['metricName']\n | BusinessEvent['eventPayload']['metricName']\n | FeatureEvent['name']\n | MediaQualityEvent['name'];\n\nexport type ClientInfo = NonNullable<RawEvent['origin']['clientInfo']>;\nexport type ClientType = NonNullable<RawEvent['origin']['clientInfo']>['clientType'];\nexport type SubClientType = NonNullable<RawEvent['origin']['clientInfo']>['subClientType'];\nexport type NetworkType = NonNullable<RawEvent['origin']>['networkType'];\n\nexport type ClientSubServiceType = ClientEvent['payload']['webexSubServiceType'];\nexport type ClientEventPayload = RecursivePartial<ClientEvent['payload']>;\nexport type ClientEventLeaveReason = ClientEvent['payload']['leaveReason'];\nexport type ClientEventPayloadError = ClientEvent['payload']['errors'];\n\nexport type ClientFeatureEventPayload = RecursivePartial<FeatureEvent['payload']>;\n\nexport type MediaQualityEventAudioSetupDelayPayload = NonNullable<\n MediaQualityEvent['payload']\n>['audioSetupDelay'];\nexport type MediaQualityEventVideoSetupDelayPayload = NonNullable<\n MediaQualityEvent['payload']\n>['videoSetupDelay'];\n\nexport type SubmitMQEPayload = RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: NonNullable<MediaQualityEvent['payload']>['intervals'];\n};\n\nexport type SubmitInternalEvent = (args: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n}) => void;\n\nexport type SubmitBehavioralEvent = (args: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: EventPayload;\n}) => void;\n\nexport type SubmitClientEvent = (args: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n}) => Promise<any>;\n\nexport type SubmitOperationalEvent = (args: {\n name: OperationalEvent['metricName'];\n payload: EventPayload;\n}) => void;\n\nexport type SubmitBusinessEvent = (args: {\n name: OperationalEvent['metricName'];\n payload: EventPayload;\n metadata?: EventPayload;\n table?: Table;\n}) => void;\n\nexport type SubmitMQE = (args: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: any;\n}) => void;\n\nexport type BuildClientEventFetchRequestOptions = (args: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n}) => Promise<any>;\n\nexport type PreComputedLatencies =\n | 'internal.client.pageJMT'\n | 'internal.download.time'\n | 'internal.get.cluster.time'\n | 'internal.click.to.interstitial'\n | 'internal.click.to.interstitial.with.user.delay'\n | 'internal.click.to.interstitial.for.client.jmt'\n | 'internal.refresh.captcha.time'\n | 'internal.exchange.ci.token.time'\n | 'internal.get.u2c.time'\n | 'internal.call.init.join.req'\n | 'internal.other.app.api.time'\n | 'internal.api.fetch.intelligence.models'\n | 'internal.client.locus.sync.random.backoff';\n\nexport interface IdType {\n meetingId?: string;\n callId?: string;\n}\n\nexport interface IMetricsAttributes {\n type: string;\n version: string;\n userId: string;\n correlationId: string;\n connectionId: string;\n data: any[];\n meetingId?: string;\n callId?: string;\n}\n\nexport interface DelayedClientEvent {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n}\n\nexport type SubmitFeatureEvent = (args: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options?: SubmitClientEventOptions;\n}) => Promise<any>;\n\nexport interface DelayedClientFeatureEvent {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options?: SubmitClientEventOptions;\n}\n"],"mappings":";;;;;;;AAiKO,IAAMA,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAG,CAC5C,kCAAkC,EAClC,wCAAwC,EACxC,yCAAyC,EACzC,oCAAoC,EACpC,qCAAqC,EACrC,6CAA6C,CACrC;;AA8CyC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["LOCUS_SYNC_LATENCY_EVENT_NAMES","exports"],"sources":["metrics.types.ts"],"sourcesContent":["import type {\n ClientEvent as RawClientEvent,\n Event as RawEvent,\n MediaQualityEvent as RawMediaQualityEvent,\n FeatureEvent as RawFeatureEvent,\n} from '@webex/event-dictionary-ts';\n\nexport type Event = Omit<RawEvent, 'event'> & {\n event: RawClientEvent | RawMediaQualityEvent | RawFeatureEvent;\n};\n\nexport type ClientEventError = NonNullable<RawClientEvent['errors']>[0];\n\nexport type EnvironmentType = NonNullable<RawEvent['origin']['environment']>;\n\nexport type NewEnvironmentType = NonNullable<RawEvent['origin']['newEnvironment']>;\n\nexport type ClientLaunchMethodType = NonNullable<\n RawEvent['origin']['clientInfo']\n>['clientLaunchMethod'];\n\nexport type ClientUserNameInput = NonNullable<RawClientEvent['userNameInput']>;\n\nexport type ClientEmailInput = NonNullable<RawClientEvent['emailInput']>;\n\nexport type PrivacyAndSecurityPermission = NonNullable<\n RawClientEvent['privacyAndSecurityPermission']\n>;\n\nexport type PrivacyAndSecurityPermissionResource = keyof PrivacyAndSecurityPermission;\n\nexport type PrivacyAndSecurityPermissionState =\n PrivacyAndSecurityPermission[PrivacyAndSecurityPermissionResource];\n\nexport type BrowserLaunchMethodType = NonNullable<\n RawEvent['origin']['clientInfo']\n>['browserLaunchMethod'];\n\nexport type MetricEventProduct = 'webex' | 'wxcc_desktop' | 'wxcc_crm' | 'wxcc_sdk';\n\nexport type MetricEventAgent = 'user' | 'browser' | 'system' | 'sdk' | 'redux' | 'service' | 'api';\n\nexport type MetricEventVerb =\n | 'abort'\n | 'accept'\n | 'activate'\n | 'apply'\n | 'answer'\n | 'authorize'\n | 'build'\n | 'cancel'\n | 'change'\n | 'click'\n | 'close'\n | 'complete'\n | 'connect'\n | 'create'\n | 'deactivate'\n | 'decrypt'\n | 'delete'\n | 'deliver'\n | 'destroy'\n | 'disable'\n | 'disconnect'\n | 'dismiss'\n | 'display'\n | 'download'\n | 'edit'\n | 'enable'\n | 'encrypt'\n | 'end'\n | 'expire'\n | 'fail'\n | 'fetch'\n | 'fire'\n | 'generate'\n | 'get'\n | 'hide'\n | 'hover'\n | 'ignore'\n | 'initialize'\n | 'initiate'\n | 'invalidate'\n | 'join'\n | 'list'\n | 'load'\n | 'login'\n | 'logout'\n | 'notify'\n | 'offer'\n | 'open'\n | 'press'\n | 'receive'\n | 'refer'\n | 'refresh'\n | 'register'\n | 'release'\n | 'reload'\n | 'reject'\n | 'request'\n | 'reset'\n | 'resize'\n | 'respond'\n | 'retry'\n | 'revoke'\n | 'save'\n | 'search'\n | 'select'\n | 'send'\n | 'set'\n | 'sign'\n | 'start'\n | 'submit'\n | 'switch'\n | 'sync'\n | 'toggle'\n | 'transfer'\n | 'unregister'\n | 'update'\n | 'upload'\n | 'use'\n | 'validate'\n | 'view'\n | 'visit'\n | 'wait'\n | 'warn'\n | 'exit';\n\nexport type MetricEventJoinFlowVersion = 'Other' | 'NewFTE';\nexport type MetricEventMeetingJoinPhase = 'pre-join' | 'join' | 'in-meeting';\n\nexport type SubmitClientEventOptions = {\n meetingId?: string;\n mediaConnections?: any[];\n rawError?: any;\n correlationId?: string;\n sessionCorrelationId?: string;\n preLoginId?: string;\n environment?: EnvironmentType;\n newEnvironmentType?: NewEnvironmentType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n webexConferenceIdStr?: string;\n globalMeetingId?: string;\n locusCluster?: string;\n joinFlowVersion?: MetricEventJoinFlowVersion;\n meetingJoinPhase?: MetricEventMeetingJoinPhase;\n triggeredTime?: string;\n emailInput?: ClientEmailInput;\n userNameInput?: ClientUserNameInput;\n vendorId?: string;\n};\n\nexport type SubmitMQEOptions = {\n meetingId: string;\n mediaConnections?: any[];\n networkType?: Event['origin']['networkType'];\n webexConferenceIdStr?: string;\n globalMeetingId?: string;\n};\n\nexport const LOCUS_SYNC_LATENCY_EVENT_NAMES = [\n 'internal.client.locus.sync.start',\n 'internal.client.locus.hashtree.request',\n 'internal.client.locus.hashtree.response',\n 'internal.client.locus.sync.request',\n 'internal.client.locus.sync.response',\n 'internal.client.locus.sync.message.received',\n] as const;\n\nexport type LocusSyncLatencyEventName = (typeof LOCUS_SYNC_LATENCY_EVENT_NAMES)[number];\n\nexport type InternalEvent = {\n name:\n | 'internal.client.meetinginfo.request'\n | 'internal.client.meetinginfo.response'\n | 'internal.register.device.request'\n | 'internal.register.device.response'\n | 'internal.reset.join.latencies'\n | 'internal.host.meeting.participant.admitted'\n | 'internal.client.meeting.interstitial-window.showed'\n | 'internal.client.interstitial-window.click.joinbutton'\n | 'internal.client.add-media.turn-discovery.start'\n | 'internal.client.add-media.turn-discovery.end'\n | 'internal.client.share.initiated'\n | 'internal.client.share.stopped'\n | LocusSyncLatencyEventName;\n\n payload?: never;\n options?: never;\n};\n\nexport interface ClientEvent {\n name: RawClientEvent['name'];\n payload?: RawClientEvent;\n options?: SubmitClientEventOptions;\n}\n\nexport interface DeviceContext {\n app: {version: string};\n device: {id: string};\n locale: string;\n os: {\n name: string;\n version: string;\n };\n}\n\nexport type MetricType = 'behavioral' | 'operational' | 'business';\n\nexport type Table = 'wbxapp_callend_metrics' | 'business_metrics' | 'business_ucf' | 'default';\n\ntype InternalEventPayload = string | number | boolean;\nexport type EventPayload = Record<string, InternalEventPayload>;\nexport type BehavioralEventPayload = EventPayload; // for compatibilty, can be remove after wxcc-desktop did change their imports.\n\nexport interface BusinessEventPayload {\n metricName: string;\n timestamp: number;\n context: DeviceContext;\n browserDetails: object;\n value: EventPayload;\n}\n\nexport interface BusinessEvent {\n type: string[];\n eventPayload: BusinessEventPayload;\n}\n\nexport interface TaggedEvent {\n context: DeviceContext;\n metricName: string;\n tags: EventPayload;\n timestamp: number;\n type: [MetricType];\n}\n\nexport type BehavioralEvent = TaggedEvent;\nexport type OperationalEvent = TaggedEvent;\n\nexport interface FeatureEvent {\n name: RawFeatureEvent['name'];\n payload?: RawFeatureEvent;\n options?: SubmitClientEventOptions;\n}\n\nexport interface MediaQualityEvent {\n name: RawMediaQualityEvent['name'];\n payload?: RawMediaQualityEvent;\n options: SubmitMQEOptions;\n}\n\nexport type RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends (infer U)[]\n ? RecursivePartial<U>[]\n : T[P] extends object\n ? RecursivePartial<T[P]>\n : T[P];\n};\n\nexport type MetricEventNames =\n | InternalEvent['name']\n | ClientEvent['name']\n | BehavioralEvent['metricName']\n | OperationalEvent['metricName']\n | BusinessEvent['eventPayload']['metricName']\n | FeatureEvent['name']\n | MediaQualityEvent['name'];\n\nexport type ClientInfo = NonNullable<RawEvent['origin']['clientInfo']>;\nexport type ClientType = NonNullable<RawEvent['origin']['clientInfo']>['clientType'];\nexport type SubClientType = NonNullable<RawEvent['origin']['clientInfo']>['subClientType'];\nexport type NetworkType = NonNullable<RawEvent['origin']>['networkType'];\n\nexport type ClientSubServiceType = NonNullable<ClientEvent['payload']>['webexSubServiceType'];\nexport type ClientEventPayload = RecursivePartial<ClientEvent['payload']>;\nexport type ClientEventLeaveReason = NonNullable<ClientEvent['payload']>['leaveReason'];\nexport type ClientEventPayloadError = NonNullable<ClientEvent['payload']>['errors'];\n\nexport type ClientFeatureEventPayload = RecursivePartial<FeatureEvent['payload']>;\n\nexport type MediaQualityEventAudioSetupDelayPayload = NonNullable<\n MediaQualityEvent['payload']\n>['audioSetupDelay'];\nexport type MediaQualityEventVideoSetupDelayPayload = NonNullable<\n MediaQualityEvent['payload']\n>['videoSetupDelay'];\n\nexport type SubmitMQEPayload = RecursivePartial<MediaQualityEvent['payload']> & {\n intervals: NonNullable<MediaQualityEvent['payload']>['intervals'];\n};\n\nexport type SubmitInternalEvent = (args: {\n name: InternalEvent['name'];\n payload?: RecursivePartial<InternalEvent['payload']>;\n options?: any;\n}) => void;\n\nexport type SubmitBehavioralEvent = (args: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: EventPayload;\n}) => void;\n\nexport type SubmitClientEvent = (args: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n}) => Promise<any>;\n\nexport type SubmitOperationalEvent = (args: {\n name: OperationalEvent['metricName'];\n payload: EventPayload;\n}) => void;\n\nexport type SubmitBusinessEvent = (args: {\n name: OperationalEvent['metricName'];\n payload: EventPayload;\n metadata?: EventPayload;\n table?: Table;\n}) => void;\n\nexport type SubmitMQE = (args: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: any;\n}) => void;\n\nexport type BuildClientEventFetchRequestOptions = (args: {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n}) => Promise<any>;\n\nexport type PreComputedLatencies =\n | 'internal.client.pageJMT'\n | 'internal.download.time'\n | 'internal.get.cluster.time'\n | 'internal.click.to.interstitial'\n | 'internal.click.to.interstitial.with.user.delay'\n | 'internal.click.to.interstitial.for.client.jmt'\n | 'internal.refresh.captcha.time'\n | 'internal.exchange.ci.token.time'\n | 'internal.get.u2c.time'\n | 'internal.call.init.join.req'\n | 'internal.other.app.api.time'\n | 'internal.api.fetch.intelligence.models'\n | 'internal.client.locus.sync.random.backoff';\n\nexport interface IdType {\n meetingId?: string;\n callId?: string;\n}\n\nexport interface IMetricsAttributes {\n type: string;\n version: string;\n userId: string;\n correlationId: string;\n connectionId: string;\n data: any[];\n meetingId?: string;\n callId?: string;\n}\n\nexport interface DelayedClientEvent {\n name: ClientEvent['name'];\n payload?: RecursivePartial<ClientEvent['payload']>;\n options?: SubmitClientEventOptions;\n}\n\nexport type SubmitFeatureEvent = (args: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options?: SubmitClientEventOptions;\n}) => Promise<any>;\n\nexport interface DelayedClientFeatureEvent {\n name: FeatureEvent['name'];\n payload?: RecursivePartial<FeatureEvent['payload']>;\n options?: SubmitClientEventOptions;\n}\n"],"mappings":";;;;;;;AAiKO,IAAMA,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAG,CAC5C,kCAAkC,EAClC,wCAAwC,EACxC,yCAAyC,EACzC,oCAAoC,EACpC,qCAAqC,EACrC,6CAA6C,CACrC;;AA8CyC","ignoreList":[]}
|
|
@@ -113,10 +113,10 @@ export type ClientInfo = NonNullable<RawEvent['origin']['clientInfo']>;
|
|
|
113
113
|
export type ClientType = NonNullable<RawEvent['origin']['clientInfo']>['clientType'];
|
|
114
114
|
export type SubClientType = NonNullable<RawEvent['origin']['clientInfo']>['subClientType'];
|
|
115
115
|
export type NetworkType = NonNullable<RawEvent['origin']>['networkType'];
|
|
116
|
-
export type ClientSubServiceType = ClientEvent['payload']['webexSubServiceType'];
|
|
116
|
+
export type ClientSubServiceType = NonNullable<ClientEvent['payload']>['webexSubServiceType'];
|
|
117
117
|
export type ClientEventPayload = RecursivePartial<ClientEvent['payload']>;
|
|
118
|
-
export type ClientEventLeaveReason = ClientEvent['payload']['leaveReason'];
|
|
119
|
-
export type ClientEventPayloadError = ClientEvent['payload']['errors'];
|
|
118
|
+
export type ClientEventLeaveReason = NonNullable<ClientEvent['payload']>['leaveReason'];
|
|
119
|
+
export type ClientEventPayloadError = NonNullable<ClientEvent['payload']>['errors'];
|
|
120
120
|
export type ClientFeatureEventPayload = RecursivePartial<FeatureEvent['payload']>;
|
|
121
121
|
export type MediaQualityEventAudioSetupDelayPayload = NonNullable<MediaQualityEvent['payload']>['audioSetupDelay'];
|
|
122
122
|
export type MediaQualityEventVideoSetupDelayPayload = NonNullable<MediaQualityEvent['payload']>['videoSetupDelay'];
|
|
@@ -276,6 +276,7 @@ var UnhandledExceptionTelemetry = /*#__PURE__*/function () {
|
|
|
276
276
|
try {
|
|
277
277
|
var _this$webex$internal2;
|
|
278
278
|
_promise.default.resolve(submitClientMetrics.call((_this$webex$internal2 = this.webex.internal) === null || _this$webex$internal2 === void 0 ? void 0 : _this$webex$internal2.metrics, UNHANDLED_EXCEPTION_METRIC_NAME, {
|
|
279
|
+
type: ['operational'],
|
|
279
280
|
tags: {
|
|
280
281
|
app_name: event.common.appName,
|
|
281
282
|
exception_kind: event.error.kind,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_commonTimers","require","_uuid","_interopRequireDefault","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","UNHANDLED_EXCEPTION_METRIC_NAME","exports","DEDUPE_WINDOW_MS","MAX_ERROR_MESSAGE_LENGTH","MAX_ERROR_NAME_LENGTH","MAX_METADATA_LENGTH","MAX_STACK_LENGTH","TELEMETRY_LOG_IDENTIFIER","logTelemetryFailure","webex","message","_webex$logger","_webex$logger$error","logger","error","call","_unused","UnhandledExceptionTelemetry","eventTarget","_this","_classCallCheck2","_map","event","captureError","captureRejection","preLoginId","uuid","v4","addEventListener","errorListener","capture","rejectionListener","_createClass2","key","value","stop","flushPending","_this2","removeEventListener","clearFlushTimer","pendingEvents","submit","clear","resourceTarget","target","currentSrc","_get","undefined","src","href","rawResourceUrl","_ref","resourceUrl","sanitizeResourceUrl","resourceType","String","toUpperCase","kind","concat","name","column","colno","filename","removeUrlDetails","line","lineno","stack","_unused2","reason","stringifyReason","_unused3","details","_this3","_truncate","_ref2","_this$webex$config$ap","_this$webex$config","_this$webex$config2","_this$webex$config3","truncate","removeUrlDetailsFromText","fingerprint","createFingerprint","join","capturedAt","Date","getTime","existingEvent","get","isWithinDedupeWindow","occurrenceCount","delete","schemaVersion","eventId","common","appName","config","sdkType","appVersion","runtime","sdkVersion","version","addMetadata","set","flushTimer","safeSetTimeout","flush","_unused4","_this$webex$config4","_this$webex$config4$m","_this$webex$config4$m2","getMetadata","metrics","unhandledExceptionTelemetry","metadata","serializedMetadata","_stringify","metadataCaptureStatus","parsedMetadata","JSON","parse","_typeof2","_isArray","_unused5","_this4","now","nextFlushInMs","_nextFlushInMs","remainingWindowMs","Math","min","_this$webex$internal","_this$webex$internal$","_this5","submitClientMetrics","internal","_this$webex$internal2","_promise","resolve","tags","app_name","exception_kind","fields","captured_at","error_fingerprint","error_name","event_id","occurrence_count","eventPayload","canAuthorize","catch","_unused6","clearTimeout","activeTelemetry","startUnhandledExceptionTelemetry","_webex$config","_webex$config$metrics","_webex$config$metrics2","_activeTelemetry","shouldStart","enabled","window","_unused7"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, valid-jsdoc */\n\nimport {safeSetTimeout} from '@webex/common-timers';\nimport uuid from 'uuid';\n\nimport {\n createFingerprint,\n removeUrlDetails,\n removeUrlDetailsFromText,\n sanitizeResourceUrl,\n stringifyReason,\n truncate,\n} from './utils';\n\nexport const UNHANDLED_EXCEPTION_METRIC_NAME = 'JS_SDK_OBSERVED_CLIENT_UNHANDLED_EXCEPTION';\n\nconst DEDUPE_WINDOW_MS = 1_000;\nconst MAX_ERROR_MESSAGE_LENGTH = 4_096;\nconst MAX_ERROR_NAME_LENGTH = 256;\nconst MAX_METADATA_LENGTH = 32_000;\nconst MAX_STACK_LENGTH = 8_192;\n\nconst TELEMETRY_LOG_IDENTIFIER = 'Unhandled Exception Telemetry -->';\n\ntype ErrorDetails = {\n column?: number;\n filename?: string;\n kind: 'error' | 'unhandledrejection' | 'resource_error';\n line?: number;\n message?: string;\n name: string;\n /** Uppercase DOM tag name, such as SCRIPT, LINK, or IMG; RESOURCE when unavailable. */\n resourceType?: string;\n resourceUrl?: string;\n stack?: string;\n};\n\nexport type UnhandledExceptionEvent = {\n schemaVersion: 1;\n capturedAt: number;\n eventId: string;\n occurrenceCount: number;\n common: {\n appName: string;\n appVersion?: string;\n runtime: 'browser';\n sdkVersion?: string;\n };\n error: ErrorDetails & {fingerprint: string};\n metadata?: Record<string, unknown>;\n metadataCaptureStatus?: 'invalid_type' | 'provider_error' | 'too_large';\n};\n\ntype WebexForUnhandledExceptionTelemetry = {\n canAuthorize?: boolean;\n version?: string;\n config?: {\n appName?: string;\n appVersion?: string;\n sdkType?: string;\n metrics?: {\n unhandledExceptionTelemetry?: {\n enabled?: boolean;\n getMetadata?: () => Record<string, unknown> | undefined;\n };\n };\n };\n internal?: {\n metrics?: {\n submitClientMetrics?: (name: string, properties: object, preLoginId?: string) => unknown;\n };\n };\n logger?: {\n error?: (...args: unknown[]) => unknown;\n };\n};\n\nfunction logTelemetryFailure(webex: WebexForUnhandledExceptionTelemetry, message: string): void {\n try {\n webex.logger?.error?.(TELEMETRY_LOG_IDENTIFIER, message);\n } catch {\n // Logging must not turn a telemetry failure into an application failure.\n }\n}\n\n/**\n * SDK-owned browser exception reporter with a single in-memory deduplication window.\n */\nclass UnhandledExceptionTelemetry {\n private readonly pendingEvents = new Map<string, UnhandledExceptionEvent>();\n private readonly eventTarget: Window;\n private readonly errorListener = (event: ErrorEvent) => this.captureError(event);\n private readonly preLoginId: string;\n private readonly rejectionListener = (event: PromiseRejectionEvent) =>\n this.captureRejection(event);\n\n private readonly webex: WebexForUnhandledExceptionTelemetry;\n private flushTimer?: number | NodeJS.Timeout;\n\n /**\n * Registers browser listeners after the SDK is ready.\n * @param webex SDK instance used for configuration and submission.\n * @param eventTarget Browser window.\n */\n constructor(webex: WebexForUnhandledExceptionTelemetry, eventTarget: Window) {\n this.webex = webex;\n this.eventTarget = eventTarget;\n this.preLoginId = uuid.v4();\n eventTarget.addEventListener('error', this.errorListener, {capture: true});\n eventTarget.addEventListener('unhandledrejection', this.rejectionListener, {capture: true});\n }\n\n /**\n * Removes global listeners and either flushes or discards pending events.\n * @param flushPending Whether to submit pending telemetry before teardown.\n * @returns {void}\n */\n stop(flushPending: boolean): void {\n this.eventTarget.removeEventListener('error', this.errorListener, {capture: true});\n this.eventTarget.removeEventListener('unhandledrejection', this.rejectionListener, {\n capture: true,\n });\n this.clearFlushTimer();\n\n if (flushPending) {\n this.pendingEvents.forEach((event) => this.submit(event));\n }\n\n this.pendingEvents.clear();\n }\n\n private captureError(event: ErrorEvent): void {\n try {\n const resourceTarget = event.target;\n const currentSrc = resourceTarget ? Reflect.get(resourceTarget, 'currentSrc') : undefined;\n const src = resourceTarget ? Reflect.get(resourceTarget, 'src') : undefined;\n const href = resourceTarget ? Reflect.get(resourceTarget, 'href') : undefined;\n const rawResourceUrl =\n (typeof currentSrc === 'string' && currentSrc.length > 0 && currentSrc) ||\n (typeof src === 'string' && src.length > 0 && src) ||\n (typeof href === 'string' && href.length > 0 && href) ||\n undefined;\n\n if (rawResourceUrl) {\n const resourceUrl = sanitizeResourceUrl(rawResourceUrl);\n\n if (!resourceUrl) {\n return;\n }\n\n const resourceType = String(\n (resourceTarget && Reflect.get(resourceTarget, 'tagName')) ?? 'RESOURCE'\n ).toUpperCase();\n\n this.capture({\n kind: 'resource_error',\n message: `Failed to load ${resourceType} resource`,\n name: 'ResourceError',\n resourceType,\n resourceUrl,\n });\n\n return;\n }\n\n const {error} = event;\n let message = 'Unknown uncaught error';\n\n if (typeof error?.message === 'string') {\n message = error.message;\n } else if (typeof event.message === 'string') {\n message = event.message;\n }\n\n this.capture({\n column: event.colno,\n filename: removeUrlDetails(event.filename),\n kind: 'error',\n line: event.lineno,\n message,\n name: typeof error?.name === 'string' ? error.name : 'Error',\n stack: typeof error?.stack === 'string' ? error.stack : undefined,\n });\n } catch {\n logTelemetryFailure(this.webex, 'Failed to extract an uncaught error.');\n }\n }\n\n private captureRejection(event: PromiseRejectionEvent): void {\n try {\n const {reason} = event;\n\n this.capture({\n kind: 'unhandledrejection',\n message: typeof reason?.message === 'string' ? reason.message : stringifyReason(reason),\n name: typeof reason?.name === 'string' ? reason.name : 'UnhandledRejection',\n stack: typeof reason?.stack === 'string' ? reason.stack : undefined,\n });\n } catch {\n logTelemetryFailure(this.webex, 'Failed to extract an unhandled rejection.');\n }\n }\n\n private capture(details: ErrorDetails): void {\n try {\n const error = {\n ...details,\n name: truncate(removeUrlDetailsFromText(details.name), MAX_ERROR_NAME_LENGTH) ?? 'Error',\n message: truncate(removeUrlDetailsFromText(details.message), MAX_ERROR_MESSAGE_LENGTH),\n stack: truncate(removeUrlDetailsFromText(details.stack), MAX_STACK_LENGTH),\n };\n const fingerprint = createFingerprint(\n [\n error.kind,\n error.name,\n error.message,\n error.stack,\n error.filename,\n error.line,\n error.column,\n error.resourceUrl,\n ].join('|')\n );\n const capturedAt = new Date().getTime();\n const existingEvent = this.pendingEvents.get(fingerprint);\n\n if (existingEvent) {\n const isWithinDedupeWindow = capturedAt - existingEvent.capturedAt < DEDUPE_WINDOW_MS;\n\n if (isWithinDedupeWindow) {\n existingEvent.occurrenceCount += 1;\n\n return;\n }\n\n // A throttled timer can leave an expired event pending. Its completed window must be\n // submitted before this fingerprint is replaced with a new event and a new window.\n this.pendingEvents.delete(fingerprint);\n this.submit(existingEvent);\n }\n\n const event: UnhandledExceptionEvent = {\n schemaVersion: 1,\n capturedAt,\n eventId: uuid.v4(),\n occurrenceCount: 1,\n common: {\n appName: this.webex.config?.appName ?? this.webex.config?.sdkType ?? 'webex-js-sdk',\n appVersion: this.webex.config?.appVersion,\n runtime: 'browser',\n sdkVersion: this.webex.version,\n },\n error: {...error, fingerprint},\n };\n\n this.addMetadata(event);\n this.pendingEvents.set(fingerprint, event);\n\n if (this.flushTimer === undefined) {\n this.flushTimer = safeSetTimeout(() => this.flush(), DEDUPE_WINDOW_MS);\n }\n } catch {\n logTelemetryFailure(this.webex, 'Failed to capture an exception.');\n }\n }\n\n private addMetadata(event: UnhandledExceptionEvent): void {\n const getMetadata = this.webex.config?.metrics?.unhandledExceptionTelemetry?.getMetadata;\n\n if (!getMetadata) {\n return;\n }\n\n try {\n const metadata = getMetadata();\n\n if (metadata === undefined) {\n return;\n }\n\n const serializedMetadata = JSON.stringify(metadata);\n\n if (serializedMetadata === undefined || serializedMetadata.length > MAX_METADATA_LENGTH) {\n event.metadataCaptureStatus =\n serializedMetadata === undefined ? 'invalid_type' : 'too_large';\n\n return;\n }\n\n const parsedMetadata = JSON.parse(serializedMetadata);\n\n if (\n parsedMetadata === null ||\n typeof parsedMetadata !== 'object' ||\n Array.isArray(parsedMetadata)\n ) {\n event.metadataCaptureStatus = 'invalid_type';\n\n return;\n }\n\n event.metadata = parsedMetadata;\n } catch {\n event.metadataCaptureStatus = 'provider_error';\n }\n }\n\n private flush(): void {\n const now = new Date().getTime();\n let nextFlushInMs: number | undefined;\n\n this.clearFlushTimer();\n this.pendingEvents.forEach((event, fingerprint) => {\n const remainingWindowMs = DEDUPE_WINDOW_MS - (now - event.capturedAt);\n\n if (remainingWindowMs <= 0) {\n this.pendingEvents.delete(fingerprint);\n this.submit(event);\n\n return;\n }\n\n nextFlushInMs = Math.min(nextFlushInMs ?? remainingWindowMs, remainingWindowMs);\n });\n\n if (nextFlushInMs !== undefined) {\n this.flushTimer = safeSetTimeout(() => this.flush(), nextFlushInMs);\n }\n }\n\n private submit(event: UnhandledExceptionEvent): void {\n const submitClientMetrics = this.webex.internal?.metrics?.submitClientMetrics;\n\n if (!submitClientMetrics) {\n logTelemetryFailure(this.webex, 'submitClientMetrics is unavailable.');\n\n return;\n }\n\n try {\n Promise.resolve(\n submitClientMetrics.call(\n this.webex.internal?.metrics,\n UNHANDLED_EXCEPTION_METRIC_NAME,\n {\n tags: {\n app_name: event.common.appName,\n exception_kind: event.error.kind,\n runtime: event.common.runtime,\n },\n fields: {\n captured_at: event.capturedAt,\n error_fingerprint: event.error.fingerprint,\n error_name: event.error.name,\n event_id: event.eventId,\n occurrence_count: event.occurrenceCount,\n },\n eventPayload: event,\n },\n this.webex.canAuthorize === true ? undefined : this.preLoginId\n )\n ).catch(() => {\n logTelemetryFailure(this.webex, 'Failed to submit exception telemetry.');\n });\n } catch {\n logTelemetryFailure(this.webex, 'Failed to submit exception telemetry.');\n }\n }\n\n private clearFlushTimer(): void {\n if (this.flushTimer !== undefined) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n}\n\nlet activeTelemetry: UnhandledExceptionTelemetry | undefined;\n\n/**\n * Starts browser exception telemetry after SDK readiness.\n * @param webex Initialized SDK instance.\n * @returns {void}\n */\nexport function startUnhandledExceptionTelemetry(webex: WebexForUnhandledExceptionTelemetry): void {\n const shouldStart =\n webex.config?.metrics?.unhandledExceptionTelemetry?.enabled === true &&\n typeof window !== 'undefined' &&\n typeof window.addEventListener === 'function';\n\n activeTelemetry?.stop(shouldStart);\n activeTelemetry = undefined;\n\n if (!shouldStart) {\n return;\n }\n\n try {\n activeTelemetry = new UnhandledExceptionTelemetry(webex, window);\n } catch {\n logTelemetryFailure(webex, 'Failed to start exception telemetry.');\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_commonTimers","require","_uuid","_interopRequireDefault","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","UNHANDLED_EXCEPTION_METRIC_NAME","exports","DEDUPE_WINDOW_MS","MAX_ERROR_MESSAGE_LENGTH","MAX_ERROR_NAME_LENGTH","MAX_METADATA_LENGTH","MAX_STACK_LENGTH","TELEMETRY_LOG_IDENTIFIER","logTelemetryFailure","webex","message","_webex$logger","_webex$logger$error","logger","error","call","_unused","UnhandledExceptionTelemetry","eventTarget","_this","_classCallCheck2","_map","event","captureError","captureRejection","preLoginId","uuid","v4","addEventListener","errorListener","capture","rejectionListener","_createClass2","key","value","stop","flushPending","_this2","removeEventListener","clearFlushTimer","pendingEvents","submit","clear","resourceTarget","target","currentSrc","_get","undefined","src","href","rawResourceUrl","_ref","resourceUrl","sanitizeResourceUrl","resourceType","String","toUpperCase","kind","concat","name","column","colno","filename","removeUrlDetails","line","lineno","stack","_unused2","reason","stringifyReason","_unused3","details","_this3","_truncate","_ref2","_this$webex$config$ap","_this$webex$config","_this$webex$config2","_this$webex$config3","truncate","removeUrlDetailsFromText","fingerprint","createFingerprint","join","capturedAt","Date","getTime","existingEvent","get","isWithinDedupeWindow","occurrenceCount","delete","schemaVersion","eventId","common","appName","config","sdkType","appVersion","runtime","sdkVersion","version","addMetadata","set","flushTimer","safeSetTimeout","flush","_unused4","_this$webex$config4","_this$webex$config4$m","_this$webex$config4$m2","getMetadata","metrics","unhandledExceptionTelemetry","metadata","serializedMetadata","_stringify","metadataCaptureStatus","parsedMetadata","JSON","parse","_typeof2","_isArray","_unused5","_this4","now","nextFlushInMs","_nextFlushInMs","remainingWindowMs","Math","min","_this$webex$internal","_this$webex$internal$","_this5","submitClientMetrics","internal","_this$webex$internal2","_promise","resolve","type","tags","app_name","exception_kind","fields","captured_at","error_fingerprint","error_name","event_id","occurrence_count","eventPayload","canAuthorize","catch","_unused6","clearTimeout","activeTelemetry","startUnhandledExceptionTelemetry","_webex$config","_webex$config$metrics","_webex$config$metrics2","_activeTelemetry","shouldStart","enabled","window","_unused7"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, valid-jsdoc */\n\nimport {safeSetTimeout} from '@webex/common-timers';\nimport uuid from 'uuid';\n\nimport {\n createFingerprint,\n removeUrlDetails,\n removeUrlDetailsFromText,\n sanitizeResourceUrl,\n stringifyReason,\n truncate,\n} from './utils';\n\nexport const UNHANDLED_EXCEPTION_METRIC_NAME = 'JS_SDK_OBSERVED_CLIENT_UNHANDLED_EXCEPTION';\n\nconst DEDUPE_WINDOW_MS = 1_000;\nconst MAX_ERROR_MESSAGE_LENGTH = 4_096;\nconst MAX_ERROR_NAME_LENGTH = 256;\nconst MAX_METADATA_LENGTH = 32_000;\nconst MAX_STACK_LENGTH = 8_192;\n\nconst TELEMETRY_LOG_IDENTIFIER = 'Unhandled Exception Telemetry -->';\n\ntype ErrorDetails = {\n column?: number;\n filename?: string;\n kind: 'error' | 'unhandledrejection' | 'resource_error';\n line?: number;\n message?: string;\n name: string;\n /** Uppercase DOM tag name, such as SCRIPT, LINK, or IMG; RESOURCE when unavailable. */\n resourceType?: string;\n resourceUrl?: string;\n stack?: string;\n};\n\nexport type UnhandledExceptionEvent = {\n schemaVersion: 1;\n capturedAt: number;\n eventId: string;\n occurrenceCount: number;\n common: {\n appName: string;\n appVersion?: string;\n runtime: 'browser';\n sdkVersion?: string;\n };\n error: ErrorDetails & {fingerprint: string};\n metadata?: Record<string, unknown>;\n metadataCaptureStatus?: 'invalid_type' | 'provider_error' | 'too_large';\n};\n\ntype WebexForUnhandledExceptionTelemetry = {\n canAuthorize?: boolean;\n version?: string;\n config?: {\n appName?: string;\n appVersion?: string;\n sdkType?: string;\n metrics?: {\n unhandledExceptionTelemetry?: {\n enabled?: boolean;\n getMetadata?: () => Record<string, unknown> | undefined;\n };\n };\n };\n internal?: {\n metrics?: {\n submitClientMetrics?: (name: string, properties: object, preLoginId?: string) => unknown;\n };\n };\n logger?: {\n error?: (...args: unknown[]) => unknown;\n };\n};\n\nfunction logTelemetryFailure(webex: WebexForUnhandledExceptionTelemetry, message: string): void {\n try {\n webex.logger?.error?.(TELEMETRY_LOG_IDENTIFIER, message);\n } catch {\n // Logging must not turn a telemetry failure into an application failure.\n }\n}\n\n/**\n * SDK-owned browser exception reporter with a single in-memory deduplication window.\n */\nclass UnhandledExceptionTelemetry {\n private readonly pendingEvents = new Map<string, UnhandledExceptionEvent>();\n private readonly eventTarget: Window;\n private readonly errorListener = (event: ErrorEvent) => this.captureError(event);\n private readonly preLoginId: string;\n private readonly rejectionListener = (event: PromiseRejectionEvent) =>\n this.captureRejection(event);\n\n private readonly webex: WebexForUnhandledExceptionTelemetry;\n private flushTimer?: number | NodeJS.Timeout;\n\n /**\n * Registers browser listeners after the SDK is ready.\n * @param webex SDK instance used for configuration and submission.\n * @param eventTarget Browser window.\n */\n constructor(webex: WebexForUnhandledExceptionTelemetry, eventTarget: Window) {\n this.webex = webex;\n this.eventTarget = eventTarget;\n this.preLoginId = uuid.v4();\n eventTarget.addEventListener('error', this.errorListener, {capture: true});\n eventTarget.addEventListener('unhandledrejection', this.rejectionListener, {capture: true});\n }\n\n /**\n * Removes global listeners and either flushes or discards pending events.\n * @param flushPending Whether to submit pending telemetry before teardown.\n * @returns {void}\n */\n stop(flushPending: boolean): void {\n this.eventTarget.removeEventListener('error', this.errorListener, {capture: true});\n this.eventTarget.removeEventListener('unhandledrejection', this.rejectionListener, {\n capture: true,\n });\n this.clearFlushTimer();\n\n if (flushPending) {\n this.pendingEvents.forEach((event) => this.submit(event));\n }\n\n this.pendingEvents.clear();\n }\n\n private captureError(event: ErrorEvent): void {\n try {\n const resourceTarget = event.target;\n const currentSrc = resourceTarget ? Reflect.get(resourceTarget, 'currentSrc') : undefined;\n const src = resourceTarget ? Reflect.get(resourceTarget, 'src') : undefined;\n const href = resourceTarget ? Reflect.get(resourceTarget, 'href') : undefined;\n const rawResourceUrl =\n (typeof currentSrc === 'string' && currentSrc.length > 0 && currentSrc) ||\n (typeof src === 'string' && src.length > 0 && src) ||\n (typeof href === 'string' && href.length > 0 && href) ||\n undefined;\n\n if (rawResourceUrl) {\n const resourceUrl = sanitizeResourceUrl(rawResourceUrl);\n\n if (!resourceUrl) {\n return;\n }\n\n const resourceType = String(\n (resourceTarget && Reflect.get(resourceTarget, 'tagName')) ?? 'RESOURCE'\n ).toUpperCase();\n\n this.capture({\n kind: 'resource_error',\n message: `Failed to load ${resourceType} resource`,\n name: 'ResourceError',\n resourceType,\n resourceUrl,\n });\n\n return;\n }\n\n const {error} = event;\n let message = 'Unknown uncaught error';\n\n if (typeof error?.message === 'string') {\n message = error.message;\n } else if (typeof event.message === 'string') {\n message = event.message;\n }\n\n this.capture({\n column: event.colno,\n filename: removeUrlDetails(event.filename),\n kind: 'error',\n line: event.lineno,\n message,\n name: typeof error?.name === 'string' ? error.name : 'Error',\n stack: typeof error?.stack === 'string' ? error.stack : undefined,\n });\n } catch {\n logTelemetryFailure(this.webex, 'Failed to extract an uncaught error.');\n }\n }\n\n private captureRejection(event: PromiseRejectionEvent): void {\n try {\n const {reason} = event;\n\n this.capture({\n kind: 'unhandledrejection',\n message: typeof reason?.message === 'string' ? reason.message : stringifyReason(reason),\n name: typeof reason?.name === 'string' ? reason.name : 'UnhandledRejection',\n stack: typeof reason?.stack === 'string' ? reason.stack : undefined,\n });\n } catch {\n logTelemetryFailure(this.webex, 'Failed to extract an unhandled rejection.');\n }\n }\n\n private capture(details: ErrorDetails): void {\n try {\n const error = {\n ...details,\n name: truncate(removeUrlDetailsFromText(details.name), MAX_ERROR_NAME_LENGTH) ?? 'Error',\n message: truncate(removeUrlDetailsFromText(details.message), MAX_ERROR_MESSAGE_LENGTH),\n stack: truncate(removeUrlDetailsFromText(details.stack), MAX_STACK_LENGTH),\n };\n const fingerprint = createFingerprint(\n [\n error.kind,\n error.name,\n error.message,\n error.stack,\n error.filename,\n error.line,\n error.column,\n error.resourceUrl,\n ].join('|')\n );\n const capturedAt = new Date().getTime();\n const existingEvent = this.pendingEvents.get(fingerprint);\n\n if (existingEvent) {\n const isWithinDedupeWindow = capturedAt - existingEvent.capturedAt < DEDUPE_WINDOW_MS;\n\n if (isWithinDedupeWindow) {\n existingEvent.occurrenceCount += 1;\n\n return;\n }\n\n // A throttled timer can leave an expired event pending. Its completed window must be\n // submitted before this fingerprint is replaced with a new event and a new window.\n this.pendingEvents.delete(fingerprint);\n this.submit(existingEvent);\n }\n\n const event: UnhandledExceptionEvent = {\n schemaVersion: 1,\n capturedAt,\n eventId: uuid.v4(),\n occurrenceCount: 1,\n common: {\n appName: this.webex.config?.appName ?? this.webex.config?.sdkType ?? 'webex-js-sdk',\n appVersion: this.webex.config?.appVersion,\n runtime: 'browser',\n sdkVersion: this.webex.version,\n },\n error: {...error, fingerprint},\n };\n\n this.addMetadata(event);\n this.pendingEvents.set(fingerprint, event);\n\n if (this.flushTimer === undefined) {\n this.flushTimer = safeSetTimeout(() => this.flush(), DEDUPE_WINDOW_MS);\n }\n } catch {\n logTelemetryFailure(this.webex, 'Failed to capture an exception.');\n }\n }\n\n private addMetadata(event: UnhandledExceptionEvent): void {\n const getMetadata = this.webex.config?.metrics?.unhandledExceptionTelemetry?.getMetadata;\n\n if (!getMetadata) {\n return;\n }\n\n try {\n const metadata = getMetadata();\n\n if (metadata === undefined) {\n return;\n }\n\n const serializedMetadata = JSON.stringify(metadata);\n\n if (serializedMetadata === undefined || serializedMetadata.length > MAX_METADATA_LENGTH) {\n event.metadataCaptureStatus =\n serializedMetadata === undefined ? 'invalid_type' : 'too_large';\n\n return;\n }\n\n const parsedMetadata = JSON.parse(serializedMetadata);\n\n if (\n parsedMetadata === null ||\n typeof parsedMetadata !== 'object' ||\n Array.isArray(parsedMetadata)\n ) {\n event.metadataCaptureStatus = 'invalid_type';\n\n return;\n }\n\n event.metadata = parsedMetadata;\n } catch {\n event.metadataCaptureStatus = 'provider_error';\n }\n }\n\n private flush(): void {\n const now = new Date().getTime();\n let nextFlushInMs: number | undefined;\n\n this.clearFlushTimer();\n this.pendingEvents.forEach((event, fingerprint) => {\n const remainingWindowMs = DEDUPE_WINDOW_MS - (now - event.capturedAt);\n\n if (remainingWindowMs <= 0) {\n this.pendingEvents.delete(fingerprint);\n this.submit(event);\n\n return;\n }\n\n nextFlushInMs = Math.min(nextFlushInMs ?? remainingWindowMs, remainingWindowMs);\n });\n\n if (nextFlushInMs !== undefined) {\n this.flushTimer = safeSetTimeout(() => this.flush(), nextFlushInMs);\n }\n }\n\n private submit(event: UnhandledExceptionEvent): void {\n const submitClientMetrics = this.webex.internal?.metrics?.submitClientMetrics;\n\n if (!submitClientMetrics) {\n logTelemetryFailure(this.webex, 'submitClientMetrics is unavailable.');\n\n return;\n }\n\n try {\n Promise.resolve(\n submitClientMetrics.call(\n this.webex.internal?.metrics,\n UNHANDLED_EXCEPTION_METRIC_NAME,\n {\n type: ['operational'],\n tags: {\n app_name: event.common.appName,\n exception_kind: event.error.kind,\n runtime: event.common.runtime,\n },\n fields: {\n captured_at: event.capturedAt,\n error_fingerprint: event.error.fingerprint,\n error_name: event.error.name,\n event_id: event.eventId,\n occurrence_count: event.occurrenceCount,\n },\n eventPayload: event,\n },\n this.webex.canAuthorize === true ? undefined : this.preLoginId\n )\n ).catch(() => {\n logTelemetryFailure(this.webex, 'Failed to submit exception telemetry.');\n });\n } catch {\n logTelemetryFailure(this.webex, 'Failed to submit exception telemetry.');\n }\n }\n\n private clearFlushTimer(): void {\n if (this.flushTimer !== undefined) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n}\n\nlet activeTelemetry: UnhandledExceptionTelemetry | undefined;\n\n/**\n * Starts browser exception telemetry after SDK readiness.\n * @param webex Initialized SDK instance.\n * @returns {void}\n */\nexport function startUnhandledExceptionTelemetry(webex: WebexForUnhandledExceptionTelemetry): void {\n const shouldStart =\n webex.config?.metrics?.unhandledExceptionTelemetry?.enabled === true &&\n typeof window !== 'undefined' &&\n typeof window.addEventListener === 'function';\n\n activeTelemetry?.stop(shouldStart);\n activeTelemetry = undefined;\n\n if (!shouldStart) {\n return;\n }\n\n try {\n activeTelemetry = new UnhandledExceptionTelemetry(webex, window);\n } catch {\n logTelemetryFailure(webex, 'Failed to start exception telemetry.');\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@webex/event-dictionary-ts": "^1.0.2220",
|
|
41
41
|
"@webex/test-helper-chai": "3.12.0-next.9",
|
|
42
42
|
"@webex/test-helper-mock-webex": "3.12.0-next.9",
|
|
43
|
-
"@webex/webex-core": "3.12.0-next.
|
|
43
|
+
"@webex/webex-core": "3.12.0-next.62",
|
|
44
44
|
"ip-anonymize": "^0.1.0",
|
|
45
45
|
"isbot": "5.2.1",
|
|
46
46
|
"lodash": "^4.17.21",
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"test:style": "eslint ./src/**/*.*",
|
|
55
55
|
"test:unit": "webex-legacy-tools test --unit --runner mocha"
|
|
56
56
|
},
|
|
57
|
-
"version": "3.12.0-next.
|
|
57
|
+
"version": "3.12.0-next.58"
|
|
58
58
|
}
|
package/src/metrics.types.ts
CHANGED
|
@@ -272,10 +272,10 @@ export type ClientType = NonNullable<RawEvent['origin']['clientInfo']>['clientTy
|
|
|
272
272
|
export type SubClientType = NonNullable<RawEvent['origin']['clientInfo']>['subClientType'];
|
|
273
273
|
export type NetworkType = NonNullable<RawEvent['origin']>['networkType'];
|
|
274
274
|
|
|
275
|
-
export type ClientSubServiceType = ClientEvent['payload']['webexSubServiceType'];
|
|
275
|
+
export type ClientSubServiceType = NonNullable<ClientEvent['payload']>['webexSubServiceType'];
|
|
276
276
|
export type ClientEventPayload = RecursivePartial<ClientEvent['payload']>;
|
|
277
|
-
export type ClientEventLeaveReason = ClientEvent['payload']['leaveReason'];
|
|
278
|
-
export type ClientEventPayloadError = ClientEvent['payload']['errors'];
|
|
277
|
+
export type ClientEventLeaveReason = NonNullable<ClientEvent['payload']>['leaveReason'];
|
|
278
|
+
export type ClientEventPayloadError = NonNullable<ClientEvent['payload']>['errors'];
|
|
279
279
|
|
|
280
280
|
export type ClientFeatureEventPayload = RecursivePartial<FeatureEvent['payload']>;
|
|
281
281
|
|