@webex/internal-plugin-metrics 3.7.0-ipv6-multi-turn-urls.2 → 3.7.0-next.10

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.
@@ -24,7 +24,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
24
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
25
25
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
26
26
  /**
27
- * @description Util class to handle Buisness Metrics
27
+ * @description Util class to handle Business Metrics
28
28
  * @export
29
29
  * @class BusinessMetrics
30
30
  */
@@ -36,134 +36,108 @@ var BusinessMetrics = exports.default = /*#__PURE__*/function (_GenericMetrics)
36
36
  return _super.apply(this, arguments);
37
37
  }
38
38
  (0, _createClass2.default)(BusinessMetrics, [{
39
- key: "submitCallEndEvent",
39
+ key: "buildEvent",
40
40
  value:
41
41
  /**
42
- * unfortunately, the pinot team does not allow changes to the schema of wbxapp_callend_metrics
43
- * so we have to shim this layer specifically for this
44
- * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
45
- * @param {EventPayload} payload payload of the metric
46
- * @returns {Promise<any>}
47
- */
48
- function submitCallEndEvent(_ref) {
49
- var payload = _ref.payload;
50
- var event = {
51
- type: ['business'],
52
- eventPayload: {
53
- key: 'callEnd',
54
- client_timestamp: new Date().toISOString(),
55
- appType: 'Web Client',
56
- value: _objectSpread({}, payload)
57
- }
58
- };
59
- return this.submitEvent({
60
- kind: 'buisness-events:wbxapp_callend_metrics -> ',
61
- name: 'wbxapp_callend_metrics',
62
- event: event
63
- });
64
- }
65
-
66
- /**
67
- * Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
68
- * all event payload keys are converted into a hex string value
69
- * unfortunately, the pinot team does not allow changes to the schema of business_metrics
70
- * so we have to shim this layer specifically for this
71
- * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
42
+ * Build the metric event to submit.
72
43
  * @param {string} name of the metric
73
- * @param {EventPayload} payload payload of the metric
74
- * @returns {Promise<any>}
75
- */
76
- }, {
77
- key: "submitBusinessMetricsEvent",
78
- value: function submitBusinessMetricsEvent(_ref2) {
79
- var name = _ref2.name,
80
- payload = _ref2.payload;
81
- var event = {
82
- type: ['business'],
83
- eventPayload: {
84
- key: name,
85
- client_timestamp: new Date().toISOString(),
86
- appType: 'Web Client',
87
- value: _objectSpread(_objectSpread(_objectSpread({}, this.getContext()), this.getBrowserDetails()), payload)
88
- }
89
- };
90
- return this.submitEvent({
91
- kind: 'buisness-events:business_metrics -> ',
92
- name: name,
93
- event: event
94
- });
95
- }
96
-
97
- /**
98
- * Submit a buisness metric to our metrics endpoint, going to the default business_ucf table
99
- * all event payload keys are converted into a hex string value
100
- * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
101
- * @param {string} name of the metric
102
- * @param {EventPayload} user payload of the metric
103
- * @returns {Promise<any>}
44
+ * @param {EventPayload} payload user payload of the metric
45
+ * @param {EventPayload} metadata to include outside of eventPayload.value
46
+ * @returns {MetricEvent} The constructed metric event
104
47
  */
105
- }, {
106
- key: "submitDefaultEvent",
107
- value: function submitDefaultEvent(_ref3) {
108
- var name = _ref3.name,
109
- payload = _ref3.payload;
110
- var event = {
48
+ function buildEvent(_ref) {
49
+ var name = _ref.name,
50
+ payload = _ref.payload,
51
+ metadata = _ref.metadata;
52
+ return {
111
53
  type: ['business'],
112
- eventPayload: {
54
+ eventPayload: _objectSpread(_objectSpread({
113
55
  key: name,
114
- appType: 'Web Client',
115
- client_timestamp: new Date().toISOString(),
116
- context: this.getContext(),
117
- browserDetails: this.getBrowserDetails(),
56
+ client_timestamp: new Date().toISOString()
57
+ }, metadata), {}, {
118
58
  value: payload
119
- }
59
+ })
120
60
  };
121
- return this.submitEvent({
122
- kind: 'buisness-events:default -> ',
123
- name: name,
124
- event: event
125
- });
126
61
  }
127
62
 
128
63
  /**
129
- * Submit a buisness metric to our metrics endpoint.
64
+ * Submit a business metric to our metrics endpoint.
130
65
  * routes to the correct table with the correct schema payload by table
131
66
  * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
132
67
  * @param {string} name of the metric, ignored if going to wbxapp_callend_metrics
133
68
  * @param {EventPayload} payload user payload of the metric
134
69
  * @param {Table} table optional - to submit the metric to and adapt the sent schema
70
+ * @param {EventPayload} metadata optional - to include outside of eventPayload.value
135
71
  * @returns {Promise<any>}
136
72
  */
137
73
  }, {
138
74
  key: "submitBusinessEvent",
139
- value: function submitBusinessEvent(_ref4) {
140
- var name = _ref4.name,
141
- payload = _ref4.payload,
142
- table = _ref4.table;
75
+ value: function submitBusinessEvent(_ref2) {
76
+ var name = _ref2.name,
77
+ payload = _ref2.payload,
78
+ table = _ref2.table,
79
+ metadata = _ref2.metadata;
143
80
  if (!table) {
144
81
  table = 'default';
145
82
  }
83
+ if (!metadata) {
84
+ metadata = {};
85
+ }
86
+ if (!metadata.appType) {
87
+ metadata.appType = 'Web Client';
88
+ }
146
89
  switch (table) {
147
90
  case 'wbxapp_callend_metrics':
148
- return this.submitCallEndEvent({
149
- payload: payload
150
- });
91
+ {
92
+ // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics
93
+ var callEndEvent = this.buildEvent({
94
+ name: 'callEnd',
95
+ payload: payload,
96
+ metadata: metadata
97
+ });
98
+ return this.submitEvent({
99
+ kind: 'business-events:wbxapp_callend_metrics -> ',
100
+ name: 'wbxapp_callend_metrics',
101
+ event: callEndEvent
102
+ });
103
+ }
151
104
  case 'business_metrics':
152
- return this.submitBusinessMetricsEvent({
153
- name: name,
154
- payload: payload
155
- });
105
+ {
106
+ // all event payload keys are converted into a hex string value
107
+ // unfortunately, the pinot team does not allow changes to the schema of business_metrics
108
+ // so we have to shim this layer specifically for this
109
+ // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics
110
+ var businessEvent = this.buildEvent({
111
+ name: name,
112
+ payload: _objectSpread(_objectSpread(_objectSpread({}, this.getContext()), this.getBrowserDetails()), payload),
113
+ metadata: metadata
114
+ });
115
+ return this.submitEvent({
116
+ kind: 'business-events:business_metrics -> ',
117
+ name: name,
118
+ event: businessEvent
119
+ });
120
+ }
156
121
  case 'business_ucf':
157
- return this.submitDefaultEvent({
158
- name: name,
159
- payload: payload
160
- });
161
122
  case 'default':
162
123
  default:
163
- return this.submitDefaultEvent({
164
- name: name,
165
- payload: payload
166
- });
124
+ {
125
+ // all event payload keys are converted into a hex string value
126
+ // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
127
+ var defaultEvent = this.buildEvent({
128
+ name: name,
129
+ payload: payload,
130
+ metadata: _objectSpread({
131
+ context: this.getContext(),
132
+ browserDetails: this.getBrowserDetails()
133
+ }, metadata)
134
+ });
135
+ return this.submitEvent({
136
+ kind: 'business-events:default -> ',
137
+ name: name,
138
+ event: defaultEvent
139
+ });
140
+ }
167
141
  }
168
142
  }
169
143
  }]);
@@ -1 +1 @@
1
- {"version":3,"names":["_genericMetrics","_interopRequireDefault","require","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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","BusinessMetrics","exports","_GenericMetrics","_inherits2","_super","_classCallCheck2","_createClass2","key","value","submitCallEndEvent","_ref","payload","event","type","eventPayload","client_timestamp","Date","toISOString","appType","submitEvent","kind","name","submitBusinessMetricsEvent","_ref2","getContext","getBrowserDetails","submitDefaultEvent","_ref3","context","browserDetails","submitBusinessEvent","_ref4","table","GenericMetrics"],"sources":["business-metrics.ts"],"sourcesContent":["import GenericMetrics from './generic-metrics';\nimport {EventPayload, Table} from './metrics.types';\n\n/**\n * @description Util class to handle Buisness Metrics\n * @export\n * @class BusinessMetrics\n */\nexport default class BusinessMetrics extends GenericMetrics {\n /**\n * unfortunately, the pinot team does not allow changes to the schema of wbxapp_callend_metrics\n * so we have to shim this layer specifically for this\n * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics\n * @param {EventPayload} payload payload of the metric\n * @returns {Promise<any>}\n */\n private submitCallEndEvent({payload}: {payload: EventPayload}) {\n const event = {\n type: ['business'],\n eventPayload: {\n key: 'callEnd',\n client_timestamp: new Date().toISOString(),\n appType: 'Web Client',\n value: {\n ...payload,\n },\n },\n };\n\n return this.submitEvent({\n kind: 'buisness-events:wbxapp_callend_metrics -> ',\n name: 'wbxapp_callend_metrics',\n event,\n });\n }\n\n /**\n * Submit a buisness metric to our metrics endpoint, going to the default business_ucf table\n * all event payload keys are converted into a hex string value\n * unfortunately, the pinot team does not allow changes to the schema of business_metrics\n * so we have to shim this layer specifically for this\n * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics\n * @param {string} name of the metric\n * @param {EventPayload} payload payload of the metric\n * @returns {Promise<any>}\n */\n private submitBusinessMetricsEvent({name, payload}: {name: string; payload: EventPayload}) {\n const event = {\n type: ['business'],\n eventPayload: {\n key: name,\n client_timestamp: new Date().toISOString(),\n appType: 'Web Client',\n value: {\n ...this.getContext(),\n ...this.getBrowserDetails(),\n ...payload,\n },\n },\n };\n\n return this.submitEvent({kind: 'buisness-events:business_metrics -> ', name, event});\n }\n\n /**\n * Submit a buisness metric to our metrics endpoint, going to the default business_ucf table\n * all event payload keys are converted into a hex string value\n * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n * @param {string} name of the metric\n * @param {EventPayload} user payload of the metric\n * @returns {Promise<any>}\n */\n private submitDefaultEvent({name, payload}: {name: string; payload: EventPayload}) {\n const event = {\n type: ['business'],\n eventPayload: {\n key: name,\n appType: 'Web Client',\n client_timestamp: new Date().toISOString(),\n context: this.getContext(),\n browserDetails: this.getBrowserDetails(),\n value: payload,\n },\n };\n\n return this.submitEvent({kind: 'buisness-events:default -> ', name, event});\n }\n\n /**\n * Submit a buisness metric to our metrics endpoint.\n * routes to the correct table with the correct schema payload by table\n * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n * @param {string} name of the metric, ignored if going to wbxapp_callend_metrics\n * @param {EventPayload} payload user payload of the metric\n * @param {Table} table optional - to submit the metric to and adapt the sent schema\n * @returns {Promise<any>}\n */\n public submitBusinessEvent({\n name,\n payload,\n table,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n }): Promise<void> {\n if (!table) {\n table = 'default';\n }\n switch (table) {\n case 'wbxapp_callend_metrics':\n return this.submitCallEndEvent({payload});\n case 'business_metrics':\n return this.submitBusinessMetricsEvent({name, payload});\n case 'business_ucf':\n return this.submitDefaultEvent({name, payload});\n case 'default':\n default:\n return this.submitDefaultEvent({name, payload});\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_genericMetrics","_interopRequireDefault","require","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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","BusinessMetrics","exports","_GenericMetrics","_inherits2","_super","_classCallCheck2","_createClass2","key","value","buildEvent","_ref","name","payload","metadata","type","eventPayload","client_timestamp","Date","toISOString","submitBusinessEvent","_ref2","table","appType","callEndEvent","submitEvent","kind","event","businessEvent","getContext","getBrowserDetails","defaultEvent","context","browserDetails","GenericMetrics"],"sources":["business-metrics.ts"],"sourcesContent":["import GenericMetrics from './generic-metrics';\nimport {EventPayload, Table} from './metrics.types';\n\n/**\n * @description Util class to handle Business Metrics\n * @export\n * @class BusinessMetrics\n */\nexport default class BusinessMetrics extends GenericMetrics {\n /**\n * Build the metric event to submit.\n * @param {string} name of the metric\n * @param {EventPayload} payload user payload of the metric\n * @param {EventPayload} metadata to include outside of eventPayload.value\n * @returns {MetricEvent} The constructed metric event\n */\n private buildEvent({name, payload, metadata}: {name: string; payload: object; metadata: object}) {\n return {\n type: ['business'],\n eventPayload: {\n key: name,\n client_timestamp: new Date().toISOString(),\n ...metadata,\n value: payload,\n },\n };\n }\n\n /**\n * Submit a business metric to our metrics endpoint.\n * routes to the correct table with the correct schema payload by table\n * https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n * @param {string} name of the metric, ignored if going to wbxapp_callend_metrics\n * @param {EventPayload} payload user payload of the metric\n * @param {Table} table optional - to submit the metric to and adapt the sent schema\n * @param {EventPayload} metadata optional - to include outside of eventPayload.value\n * @returns {Promise<any>}\n */\n public submitBusinessEvent({\n name,\n payload,\n table,\n metadata,\n }: {\n name: string;\n payload: EventPayload;\n table?: Table;\n metadata?: EventPayload;\n }): Promise<void> {\n if (!table) {\n table = 'default';\n }\n if (!metadata) {\n metadata = {};\n }\n if (!metadata.appType) {\n metadata.appType = 'Web Client';\n }\n switch (table) {\n case 'wbxapp_callend_metrics': {\n // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table+wbxapp_callend_metrics\n const callEndEvent = this.buildEvent({name: 'callEnd', payload, metadata});\n\n return this.submitEvent({\n kind: 'business-events:wbxapp_callend_metrics -> ',\n name: 'wbxapp_callend_metrics',\n event: callEndEvent,\n });\n }\n\n case 'business_metrics': {\n // all event payload keys are converted into a hex string value\n // unfortunately, the pinot team does not allow changes to the schema of business_metrics\n // so we have to shim this layer specifically for this\n // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Table%3A+business_metrics\n const businessEvent = this.buildEvent({\n name,\n payload: {\n ...this.getContext(),\n ...this.getBrowserDetails(),\n ...payload,\n },\n metadata,\n });\n\n return this.submitEvent({\n kind: 'business-events:business_metrics -> ',\n name,\n event: businessEvent,\n });\n }\n\n case 'business_ucf':\n case 'default':\n default: {\n // all event payload keys are converted into a hex string value\n // https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n const defaultEvent = this.buildEvent({\n name,\n payload,\n metadata: {\n context: this.getContext(),\n browserDetails: this.getBrowserDetails(),\n ...metadata,\n },\n });\n\n return this.submitEvent({kind: 'business-events:default -> ', name, event: defaultEvent});\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -338,14 +338,15 @@ var CallDiagnosticMetrics = exports.default = /*#__PURE__*/function (_StatelessW
338
338
  key: "prepareDiagnosticEvent",
339
339
  value: function prepareDiagnosticEvent(eventData, options) {
340
340
  var _this$webex$meetings$12;
341
- var meetingId = options.meetingId;
341
+ var meetingId = options.meetingId,
342
+ triggeredTime = options.triggeredTime;
342
343
  var origin = this.getOrigin(options, meetingId);
343
344
  var event = {
344
345
  eventId: _uuid.default.v4(),
345
346
  version: 1,
346
347
  origin: origin,
347
348
  originTime: {
348
- triggered: new Date().toISOString(),
349
+ triggered: triggeredTime || new Date().toISOString(),
349
350
  // is overridden in prepareRequest batcher
350
351
  sent: 'not_defined_yet'
351
352
  },
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_uuid","_interopRequireDefault","_lodash","_webexCore","_metrics","_callDiagnosticMetrics","_config","_callDiagnosticMetricsBatcher","_preloginMetricsBatcher","_config2","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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","concat","_assertThisInitialized2","options","_promise","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","_createClass2","key","value","getCurLoginType","canAuthorize","credentials","isUnverifiedGuest","getIsConvergedArchitectureEnabled","_ref","meetingId","_meeting$meetingInfo","meeting","meetings","getBasicMeetingInformation","meetingInfo","enableConvergedArchitecture","undefined","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","WEBINAR","getOrigin","_this$webex$meetings$","_this$webex$meetings$2","_this$webex$meetings$3","_this$webex$meetings$4","_this$webex$meetings$5","_this$webex$meetings$6","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","hasLoggedBrowserSerial","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","_stringify","getBrowserSerial","_this$webex$meetings","_this$webex$meetings$7","_this$webex$meetings$8","_this$webex$meetings$9","_this$webex$meetings$10","_this$webex$meetings$11","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","publicNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","localNetworkPrefix","meetingCollection","get","statsAnalyzer","getLocalIpAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","browserLaunchMethod","Error","getIdentifiers","_meeting$locusInfo","_meeting$meetingInfo2","_meeting$meetingInfo3","_meeting$meetingInfo6","_meeting$meetingInfo8","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","sessionCorrelationId","identifiers","device","_ref2","installationId","userId","deviceId","url","orgId","locusUrl","internal","services","machineId","locusInfo","fullState","locusId","split","pop","locusStartTime","lastActive","confIdStr","confID","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","siteName","_meeting$meetingInfo9","webexSiteName","_mediaConnections$","_mediaConnections$2","mediaAgentAlias","mediaAgentGroupId","prepareDiagnosticEvent","eventData","_this$webex$meetings$12","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","senderCountryCode","countryCode","clearEmptyKeysRecursively","submitFeatureEvent","submitMQE","_ref3","payload","console","warn","submitClientMetrics","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","fields","clientEventObject","canProceed","webClientDomain","window","location","hostname","intervals","callingServiceType","meetingJoinInfo","clientSignallingProtocol","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","merge","diagnosticEvent","validator","submitToCallDiagnostics","getErrorPayloadForClientErrorCode","_ref4","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","generateClientEventErrorPayload","rawError","_rawError$error","_rawError$error$body","_rawError$body","_rawError$body2","_rawError$body3","_rawError$body3$reaso","message","statusCode","isBrowserMediaErrorName","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","isSdpOfferCreationError","_rawError$cause","causeType","cause","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","body","code","reason","reasonCode","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","isLocusServiceErrorCode","NEW_LOCUS_ERROR_CLIENT_CODE","isMeetingInfoServiceError","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","isNetworkError","NETWORK_ERROR","isUnauthorizedError","AUTHENTICATION_FAILED_CODE","UNKNOWN_ERROR","createClientEventObjectInMeeting","_ref5","_options$joinFlowVers","_meeting$callStateFor","errors","userType","getCurUserType","loginType","callStateForMetrics","isConvergedArchitectureEnabled","webexSubServiceType","joinFlowVersion","meetingJoinPhase","createClientEventObjectPreMeeting","_ref6","prepareClientEvent","_ref7","generatedError","submitClientEvent","_ref8","submitToCallDiagnosticsPreLogin","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref9","clientEvent","wrap","_callee$","_context","prev","next","prepareDiagnosticMetricItem","method","service","resource","headers","waitForServiceTimeout","authorization","abrupt","prepareFetchOptions","stop","buildClientEventFetchRequestOptions","_x","isServiceErrorExpected","clientErrorPayload","setDeviceInfo","StatelessWebexPlugin"],"sources":["call-diagnostic-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {BrowserDetection, getBrowserSerial} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\n isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n BrowserLaunchMethodType,\n} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\nimport PreLoginMetricsBatcher from '../prelogin-metrics-batcher';\n\nimport {\n CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD,\n CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n NEW_LOCUS_ERROR_CLIENT_CODE,\n SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP,\n UNKNOWN_ERROR,\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n} from './config';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: string;\n sessionCorrelationId?: string;\n preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n // @ts-ignore\n private preLoginMetricsBatcher: PreLoginMetricsBatcher;\n\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n private device: any;\n\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n // if Scheduled, Webinar, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick<ClientInfo, 'majorVersion' | 'minorVersion'> = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n if (options?.browserLaunchMethod) {\n origin.clientInfo.browserLaunchMethod = options.browserLaunchMethod;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n sessionCorrelationId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown', // concerned with setting this to unknown. This will fail diagnostic events parsing because it's not a uuid pattern\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n if (meeting.sessionCorrelationId) {\n identifiers.sessionCorrelationId = meeting.sessionCorrelationId;\n }\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n\n // TODO: should we use patterns.uuid to validate correlationId and session correlation id? they will fail the diagnostic events validation pipeline if improperly formatted\n\n if (this.device) {\n const {device} = this;\n const {installationId} = device?.config || {};\n\n identifiers.userId = device?.userId || preLoginId;\n identifiers.deviceId = device?.url;\n identifiers.orgId = device?.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n\n if (installationId) {\n identifiers.machineId = installationId;\n }\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n callingServiceType: 'LOCUS',\n meetingJoinInfo: {\n clientSignallingProtocol: 'WebRTC',\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @param arg.httpStatusCode\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n httpStatusCode,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: any;\n httpStatusCode?: number;\n }): ClientEventError {\n let error: ClientEventError;\n\n if (clientErrorCode) {\n const partialParsedError = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n if (partialParsedError) {\n error = merge(\n {fatal: true, shownToUser: false, name: 'other', category: 'other'}, // default values\n {errorCode: clientErrorCode},\n serviceErrorName ? {errorData: {errorName: serviceErrorName}} : {},\n {serviceErrorCode},\n {rawErrorMessage},\n httpStatusCode === undefined ? {} : {httpStatusCode},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError)) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // otherwise return unkown error but passing serviceErrorCode and serviceErrorName so that we know the issue\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: serviceErrorCode || UNKNOWN_ERROR,\n serviceErrorName: rawError?.name,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {\n meetingId,\n mediaConnections,\n globalMeetingId,\n webexConferenceIdStr,\n sessionCorrelationId,\n } = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send client event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n sessionCorrelationId,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;\n if (joinFlowVersion) {\n clientEventObject.joinFlowVersion = joinFlowVersion;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return clientEventObject;\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId, sessionCorrelationId} =\n options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n sessionCorrelationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n loginType: this.getCurLoginType(),\n };\n\n if (options.joinFlowVersion) {\n clientEventObject.joinFlowVersion = options.joinFlowVersion;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const generatedError = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError: ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service, pre login.\n * @param event\n * @param preLoginId\n * @returns\n */\n submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n };\n\n /**\n * Builds a request options object to later be passed to fetch().\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - client event options\n * @returns {Promise<any>}\n * @throws\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...',\n `name: ${name}`\n );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\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 const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n\n /**\n * This method is used to set the device information by internal-plugin-device\n * @param {device} object The webex.internal.device object\n * @returns {undefined}\n */\n public setDeviceInfo(device: any): void {\n // This was created to fix the circular dependency between internal-plugin-device and internal-plugin-metrics\n this.logger.log('CallDiagnosticMetrics: @setDeviceInfo called', device);\n\n this.device = device;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_uuid","_interopRequireDefault","_lodash","_webexCore","_metrics","_callDiagnosticMetrics","_config","_callDiagnosticMetricsBatcher","_preloginMetricsBatcher","_config2","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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","_BrowserDetection","BrowserDetection","getOSVersion","getBrowserName","getBrowserVersion","CallDiagnosticMetrics","exports","_StatelessWebexPlugin","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","concat","_assertThisInitialized2","options","_promise","resolve","event","valid","preLoginId","finalEvent","eventPayload","type","preLoginMetricsBatcher","savePreLoginId","request","logger","webex","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","parent","PreLoginMetricsBatcher","_createClass2","key","value","getCurLoginType","canAuthorize","credentials","isUnverifiedGuest","getIsConvergedArchitectureEnabled","_ref","meetingId","_meeting$meetingInfo","meeting","meetings","getBasicMeetingInformation","meetingInfo","enableConvergedArchitecture","undefined","getSubServiceType","webexScheduled","enableEvent","pmr","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","WEBINAR","getOrigin","_this$webex$meetings$","_this$webex$meetings$2","_this$webex$meetings$3","_this$webex$meetings$4","_this$webex$meetings$5","_this$webex$meetings$6","defaultClientType","config","metrics","clientType","defaultSubClientType","subClientType","providedClientVersion","clientVersion","defaultSDKClientVersion","CLIENT_NAME","version","versionMetadata","extractVersionMetadata","hasLoggedBrowserSerial","log","CALL_DIAGNOSTIC_LOG_IDENTIFIER","_stringify","getBrowserSerial","_this$webex$meetings","_this$webex$meetings$7","_this$webex$meetings$8","_this$webex$meetings$9","_this$webex$meetings$10","_this$webex$meetings$11","origin","name","networkType","userAgent","userAgentToString","clientName","webexVersion","clientInfo","publicNetworkPrefix","anonymizeIPAddress","geoHintInfo","clientAddress","localNetworkPrefix","meetingCollection","get","statsAnalyzer","getLocalIpAddress","osVersion","os","getOSNameInternal","browser","browserVersion","environment","newEnvironment","clientLaunchMethod","browserLaunchMethod","Error","getIdentifiers","_meeting$locusInfo","_meeting$meetingInfo2","_meeting$meetingInfo3","_meeting$meetingInfo6","_meeting$meetingInfo8","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","sessionCorrelationId","identifiers","device","_ref2","installationId","userId","deviceId","url","orgId","locusUrl","internal","services","machineId","locusInfo","fullState","locusId","split","pop","locusStartTime","lastActive","confIdStr","confID","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","siteName","_meeting$meetingInfo9","webexSiteName","_mediaConnections$","_mediaConnections$2","mediaAgentAlias","mediaAgentGroupId","prepareDiagnosticEvent","eventData","_this$webex$meetings$12","triggeredTime","eventId","uuid","v4","originTime","triggered","Date","toISOString","sent","senderCountryCode","countryCode","clearEmptyKeysRecursively","submitFeatureEvent","submitMQE","_ref3","payload","console","warn","submitClientMetrics","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","fields","clientEventObject","canProceed","webClientDomain","window","location","hostname","intervals","callingServiceType","meetingJoinInfo","clientSignallingProtocol","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","merge","diagnosticEvent","validator","submitToCallDiagnostics","getErrorPayloadForClientErrorCode","_ref4","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","error","partialParsedError","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","fatal","shownToUser","category","errorCode","errorData","errorName","generateClientEventErrorPayload","rawError","_rawError$error","_rawError$error$body","_rawError$body","_rawError$body2","_rawError$body3","_rawError$body3$reaso","message","statusCode","isBrowserMediaErrorName","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","isSdpOfferCreationError","_rawError$cause","causeType","cause","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","body","code","reason","reasonCode","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","isLocusServiceErrorCode","NEW_LOCUS_ERROR_CLIENT_CODE","isMeetingInfoServiceError","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","isNetworkError","NETWORK_ERROR","isUnauthorizedError","AUTHENTICATION_FAILED_CODE","UNKNOWN_ERROR","createClientEventObjectInMeeting","_ref5","_options$joinFlowVers","_meeting$callStateFor","errors","userType","getCurUserType","loginType","callStateForMetrics","isConvergedArchitectureEnabled","webexSubServiceType","joinFlowVersion","meetingJoinPhase","createClientEventObjectPreMeeting","_ref6","prepareClientEvent","_ref7","generatedError","submitClientEvent","_ref8","submitToCallDiagnosticsPreLogin","_buildClientEventFetchRequestOptions","_asyncToGenerator2","_regenerator","mark","_callee","_ref9","clientEvent","wrap","_callee$","_context","prev","next","prepareDiagnosticMetricItem","method","service","resource","headers","waitForServiceTimeout","authorization","abrupt","prepareFetchOptions","stop","buildClientEventFetchRequestOptions","_x","isServiceErrorExpected","clientErrorPayload","setDeviceInfo","StatelessWebexPlugin"],"sources":["call-diagnostic-metrics.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {BrowserDetection, getBrowserSerial} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\n isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n BrowserLaunchMethodType,\n} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\nimport PreLoginMetricsBatcher from '../prelogin-metrics-batcher';\n\nimport {\n CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD,\n CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n NEW_LOCUS_ERROR_CLIENT_CODE,\n SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP,\n UNKNOWN_ERROR,\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n} from './config';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: string;\n sessionCorrelationId?: string;\n preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n // @ts-ignore\n private preLoginMetricsBatcher: PreLoginMetricsBatcher;\n\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n private device: any;\n\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n // if Scheduled, Webinar, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick<ClientInfo, 'majorVersion' | 'minorVersion'> = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n if (options?.browserLaunchMethod) {\n origin.clientInfo.browserLaunchMethod = options.browserLaunchMethod;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n sessionCorrelationId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown', // concerned with setting this to unknown. This will fail diagnostic events parsing because it's not a uuid pattern\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n if (meeting.sessionCorrelationId) {\n identifiers.sessionCorrelationId = meeting.sessionCorrelationId;\n }\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (sessionCorrelationId) {\n identifiers.sessionCorrelationId = sessionCorrelationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n\n // TODO: should we use patterns.uuid to validate correlationId and session correlation id? they will fail the diagnostic events validation pipeline if improperly formatted\n\n if (this.device) {\n const {device} = this;\n const {installationId} = device?.config || {};\n\n identifiers.userId = device?.userId || preLoginId;\n identifiers.deviceId = device?.url;\n identifiers.orgId = device?.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n\n if (installationId) {\n identifiers.machineId = installationId;\n }\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId, triggeredTime} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: triggeredTime || new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n callingServiceType: 'LOCUS',\n meetingJoinInfo: {\n clientSignallingProtocol: 'WebRTC',\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @param arg.httpStatusCode\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n httpStatusCode,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: any;\n httpStatusCode?: number;\n }): ClientEventError {\n let error: ClientEventError;\n\n if (clientErrorCode) {\n const partialParsedError = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n if (partialParsedError) {\n error = merge(\n {fatal: true, shownToUser: false, name: 'other', category: 'other'}, // default values\n {errorCode: clientErrorCode},\n serviceErrorName ? {errorData: {errorName: serviceErrorName}} : {},\n {serviceErrorCode},\n {rawErrorMessage},\n httpStatusCode === undefined ? {} : {httpStatusCode},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError)) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // otherwise return unkown error but passing serviceErrorCode and serviceErrorName so that we know the issue\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: serviceErrorCode || UNKNOWN_ERROR,\n serviceErrorName: rawError?.name,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {\n meetingId,\n mediaConnections,\n globalMeetingId,\n webexConferenceIdStr,\n sessionCorrelationId,\n } = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.getBasicMeetingInformation(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send client event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n sessionCorrelationId,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n const joinFlowVersion = options.joinFlowVersion ?? meeting.callStateForMetrics?.joinFlowVersion;\n if (joinFlowVersion) {\n clientEventObject.joinFlowVersion = joinFlowVersion;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return clientEventObject;\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId, sessionCorrelationId} =\n options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n sessionCorrelationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n loginType: this.getCurLoginType(),\n };\n\n if (options.joinFlowVersion) {\n clientEventObject.joinFlowVersion = options.joinFlowVersion;\n }\n\n if (options.meetingJoinPhase) {\n clientEventObject.meetingJoinPhase = options.meetingJoinPhase;\n }\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const generatedError = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError: ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise<any> {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service, pre login.\n * @param event\n * @param preLoginId\n * @returns\n */\n submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise<any> => {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n };\n\n /**\n * Builds a request options object to later be passed to fetch().\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - client event options\n * @returns {Promise<any>}\n * @throws\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }): Promise<any> {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...',\n `name: ${name}`\n );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\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 const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n\n /**\n * This method is used to set the device information by internal-plugin-device\n * @param {device} object The webex.internal.device object\n * @returns {undefined}\n */\n public setDeviceInfo(device: any): void {\n // This was created to fix the circular dependency between internal-plugin-device and internal-plugin-metrics\n this.logger.log('CallDiagnosticMetrics: @setDeviceInfo called', device);\n\n this.device = device;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AAEA,IAAAM,sBAAA,GAAAN,OAAA;AAaA,IAAAO,OAAA,GAAAP,OAAA;AAqBA,IAAAQ,6BAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,uBAAA,GAAAP,sBAAA,CAAAF,OAAA;AAEA,IAAAU,QAAA,GAAAV,OAAA;AAakB,SAAAW,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAqB,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAV,OAAA,EAAAK,OAAA,GAAAM,MAAA,MAAAL,yBAAA,QAAAM,SAAA,OAAAF,gBAAA,CAAAV,OAAA,QAAAa,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAL,KAAA,EAAAd,SAAA,EAAAiB,SAAA,YAAAD,MAAA,GAAAF,KAAA,CAAAhB,KAAA,OAAAE,SAAA,gBAAAoB,2BAAA,CAAAf,OAAA,QAAAW,MAAA;AAAA,SAAAJ,0BAAA,eAAAS,OAAA,qBAAAF,kBAAA,oBAAAA,kBAAA,CAAAG,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAR,kBAAA,CAAAK,OAAA,8CAAApC,CAAA,sBA3DlB,uDACA,4CACA;AA2DA,IAAAwC,iBAAA,GAA0D,IAAAC,wBAAgB,EAAC,CAAC;EAArEC,YAAY,GAAAF,iBAAA,CAAZE,YAAY;EAAEC,cAAc,GAAAH,iBAAA,CAAdG,cAAc;EAAEC,iBAAiB,GAAAJ,iBAAA,CAAjBI,iBAAiB;AAsBtD;AACA;AACA;AACA;AACA;AAJA,IAKqBC,qBAAqB,GAAAC,OAAA,CAAA7B,OAAA,0BAAA8B,qBAAA;EAAA,IAAAC,UAAA,CAAA/B,OAAA,EAAA4B,qBAAA,EAAAE,qBAAA;EAAA,IAAAE,MAAA,GAAA5B,YAAA,CAAAwB,qBAAA;EAkBxC;AACF;AACA;AACA;EACE,SAAAA,sBAAA,EAAqB;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,CAAAlC,OAAA,QAAA4B,qBAAA;IAAA,SAAAO,IAAA,GAAAxC,SAAA,CAAAC,MAAA,EAANwC,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAA3C,SAAA,CAAA2C,IAAA;IAAA;IACjBL,KAAA,GAAAD,MAAA,CAAAV,IAAA,CAAA7B,KAAA,CAAAuC,MAAA,SAAAO,MAAA,CAASH,IAAI;IACb;IAvBF;IAAA,IAAArC,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA;IAEA;IAAA,IAAAlC,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA;IAAA,IAAAlC,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA;IAGqB;IAAA,IAAAlC,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA;IAAA,IAAAlC,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA;IAIrB;IACA;IAAA,IAAAlC,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA,gBAIgD,UAACQ,OAA2C;MAAA,OAC1FC,QAAA,CAAA1C,OAAA,CAAQ2C,OAAO,CAAC;QAACC,KAAK,EAAEH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,KAAK;QAAEC,KAAK,EAAE;MAAI,CAAC,CAAC;IAAA;IA8wBvD;AACF;AACA;AACA;AACA;AACA;IALE,IAAA9C,gBAAA,CAAAC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAiC,KAAA,sCAMkC,UAACW,KAAY,EAAEE,UAAmB,EAAmB;MACrF;MACA,IAAMC,UAAU,GAAG;QACjBC,YAAY,EAAEJ,KAAK;QACnBK,IAAI,EAAE,CAAC,kBAAkB;MAC3B,CAAC;MACDhB,KAAA,CAAKiB,sBAAsB,CAACC,cAAc,CAACL,UAAU,CAAC;MAEtD,OAAOb,KAAA,CAAKiB,sBAAsB,CAACE,OAAO,CAACL,UAAU,CAAC;IACxD,CAAC;IApxBCd,KAAA,CAAKoB,MAAM,GAAGpB,KAAA,CAAKqB,KAAK,CAACD,MAAM;IAC/B;IACApB,KAAA,CAAKsB,2BAA2B,GAAG,IAAIC,qCAA2B,CAAC,CAAC,CAAC,EAAE;MAACC,MAAM,EAAExB,KAAA,CAAKqB;IAAK,CAAC,CAAC;IAC5F;IACArB,KAAA,CAAKiB,sBAAsB,GAAG,IAAIQ,+BAAsB,CAAC,CAAC,CAAC,EAAE;MAACD,MAAM,EAAExB,KAAA,CAAKqB;IAAK,CAAC,CAAC;IAAC,OAAArB,KAAA;EACrF;;EAEA;AACF;AACA;AACA;EAHE,IAAA0B,aAAA,CAAA3D,OAAA,EAAA4B,qBAAA;IAAAgC,GAAA;IAAAC,KAAA,EAIA,SAAAC,gBAAA,EAAkB;MAChB;MACA,IAAI,IAAI,CAACR,KAAK,CAACS,YAAY,EAAE;QAC3B;QACA,OAAO,IAAI,CAACT,KAAK,CAACU,WAAW,CAACC,iBAAiB,GAAG,kBAAkB,GAAG,UAAU;MACnF;MAEA,OAAO,IAAI;IACb;;IAEA;AACF;AACA;AACA;EAHE;IAAAL,GAAA;IAAAC,KAAA,EAIA,SAAAK,kCAAAC,IAAA,EAA8E;MAAA,IAA3CC,SAAS,GAAAD,IAAA,CAATC,SAAS;MAC1C,IAAIA,SAAS,EAAE;QAAA,IAAAC,oBAAA;QACb;QACA,IAAMC,OAAO,GAAG,IAAI,CAAChB,KAAK,CAACiB,QAAQ,CAACC,0BAA0B,CAACJ,SAAS,CAAC;QAEzE,OAAOE,OAAO,aAAPA,OAAO,wBAAAD,oBAAA,GAAPC,OAAO,CAAEG,WAAW,cAAAJ,oBAAA,uBAApBA,oBAAA,CAAsBK,2BAA2B;MAC1D;MAEA,OAAOC,SAAS;IAClB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAf,GAAA;IAAAC,KAAA,EAKA,SAAAe,kBAAkBN,OAAa,EAAwB;MACrD,IAAIA,OAAO,EAAE;QACX;QACA,IAAMG,WAAW,GAAGH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,WAAW;QACxC;QACA,IAAI,EAACA,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEI,cAAc,KAAI,EAACJ,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEK,WAAW,KAAIL,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEM,GAAG,EAAE;UACjF,OAAOC,gCAAuB,CAACC,GAAG;QACpC;QACA;QACA,IAAIR,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEI,cAAc,IAAI,EAACJ,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEK,WAAW,KAAI,EAACL,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEM,GAAG,GAAE;UACjF,OAAOC,gCAAuB,CAACE,iBAAiB;QAClD;QACA;QACA,IAAIT,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEI,cAAc,IAAIJ,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEK,WAAW,IAAI,EAACL,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEM,GAAG,GAAE;UAChF,OAAOC,gCAAuB,CAACG,OAAO;QACxC;MACF;MAEA,OAAOR,SAAS;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAf,GAAA;IAAAC,KAAA,EAMA,SAAAuB,UAAU3C,OAAyB,EAAE2B,SAAkB,EAAE;MAAA,IAAAiB,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;MACvD,IAAMC,iBAA6B,GACjC;MAAA,CAAAN,qBAAA,GACA,IAAI,CAAC/B,KAAK,CAACiB,QAAQ,CAACqB,MAAM,cAAAP,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4BQ,OAAO,cAAAP,sBAAA,uBAAnCA,sBAAA,CAAqCQ,UAAU;MACjD,IAAMC,oBAAmC,GACvC;MAAA,CAAAR,sBAAA,GACA,IAAI,CAACjC,KAAK,CAACiB,QAAQ,CAACqB,MAAM,cAAAL,sBAAA,wBAAAC,sBAAA,GAA1BD,sBAAA,CAA4BM,OAAO,cAAAL,sBAAA,uBAAnCA,sBAAA,CAAqCQ,aAAa;MACpD;MACA,IAAMC,qBAA6B,IAAAR,sBAAA,GAAG,IAAI,CAACnC,KAAK,CAACiB,QAAQ,CAACqB,MAAM,cAAAH,sBAAA,wBAAAC,sBAAA,GAA1BD,sBAAA,CAA4BI,OAAO,cAAAH,sBAAA,uBAAnCA,sBAAA,CAAqCQ,aAAa;MACxF;MACA,IAAMC,uBAAuB,MAAA5D,MAAA,CAAM6D,mBAAW,OAAA7D,MAAA,CAAI,IAAI,CAACe,KAAK,CAAC+C,OAAO,CAAE;MAEtE,IAAIC,eAAkE,GAAG,CAAC,CAAC;;MAE3E;MACA,IAAIL,qBAAqB,EAAE;QACzBK,eAAe,GAAG,IAAAC,6CAAsB,EAACN,qBAAqB,CAAC;MACjE;MAEA,IAAI,CAAC,IAAI,CAACO,sBAAsB,EAAE;QAChC,IAAI,CAACnD,MAAM,CAACoD,GAAG,CACbC,uCAA8B,wFAE9B,IAAAC,UAAA,CAAA3G,OAAA,EAAe,IAAA4G,wBAAgB,EAAC,CAAC,CACnC,CAAC;QAED,IAAI,CAACJ,sBAAsB,GAAG,IAAI;MACpC;MAEA,IACGb,iBAAiB,IAAII,oBAAoB,IACzCtD,OAAO,CAACqD,UAAU,IAAIrD,OAAO,CAACuD,aAAc,EAC7C;QAAA,IAAAa,oBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,uBAAA,EAAAC,uBAAA;QACA,IAAMC,MAAuB,GAAG;UAC9BC,IAAI,EAAE,UAAU;UAChBC,WAAW,EAAE,CAAA5E,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE4E,WAAW,KAAI,SAAS;UAC9CC,SAAS,EAAE,IAAAC,wCAAiB,EAAC;YAC3B;YACAC,UAAU,GAAAX,oBAAA,GAAE,IAAI,CAACvD,KAAK,CAACiB,QAAQ,cAAAsC,oBAAA,wBAAAC,sBAAA,GAAnBD,oBAAA,CAAqBjB,MAAM,cAAAkB,sBAAA,wBAAAC,sBAAA,GAA3BD,sBAAA,CAA6BjB,OAAO,cAAAkB,sBAAA,uBAApCA,sBAAA,CAAsCS,UAAU;YAC5D;YACAC,YAAY,EAAE,IAAI,CAACnE,KAAK,CAAC+C;UAC3B,CAAC,CAAC;UACFqB,UAAU,EAAAhI,aAAA,CAAAA,aAAA;YACRoG,UAAU,EAAE,CAAArD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEqD,UAAU,KAAIH,iBAAiB;YACpDO,aAAa,EAAED,qBAAqB,IAAIE;UAAuB,GAC5DG,eAAe;YAClBqB,mBAAmB;YACjB;YACA,IAAAC,yCAAkB,GAAAZ,sBAAA,GAAC,IAAI,CAAC1D,KAAK,CAACiB,QAAQ,CAACsD,WAAW,cAAAb,sBAAA,uBAA/BA,sBAAA,CAAiCc,aAAa,CAAC,IAAInD,SAAS;YACjFoD,kBAAkB,EAChB,IAAAH,yCAAkB,GAChB;YAAA,CAAAX,uBAAA,GACA,IAAI,CAAC3D,KAAK,CAACiB,QAAQ,CAACyD,iBAAiB,CAClCC,GAAG,CAAC7D,SAAS,CAAC,cAAA6C,uBAAA,wBAAAC,uBAAA,GADjBD,uBAAA,CAEIiB,aAAa,cAAAhB,uBAAA,uBAFjBA,uBAAA,CAEmBiB,iBAAiB,CAAC,CACvC,CAAC,IAAIxD,SAAS;YAChByD,SAAS,EAAE3G,YAAY,CAAC,CAAC,IAAI,SAAS;YACtCuE,aAAa,EAAE,CAAAvD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEuD,aAAa,KAAID,oBAAoB;YAC7DsC,EAAE,EAAE,IAAAC,0BAAiB,EAAC,CAAC;YACvBC,OAAO,EAAE7G,cAAc,CAAC,CAAC;YACzB8G,cAAc,EAAE7G,iBAAiB,CAAC;UAAC;QAEvC,CAAC;QAED,IAAIyC,SAAS,EAAE;UACb;UACA,IAAME,OAAO,GAAG,IAAI,CAAChB,KAAK,CAACiB,QAAQ,CAACC,0BAA0B,CAACJ,SAAS,CAAC;UACzE,IAAIE,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEmE,WAAW,EAAE;YACxBtB,MAAM,CAACsB,WAAW,GAAGnE,OAAO,CAACmE,WAAW;UAC1C;QACF;QAEA,IAAIhG,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEgG,WAAW,EAAE;UACxBtB,MAAM,CAACsB,WAAW,GAAGhG,OAAO,CAACgG,WAAW;QAC1C;QAEA,IAAIhG,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEiG,cAAc,EAAE;UAC3BvB,MAAM,CAACuB,cAAc,GAAGjG,OAAO,CAACiG,cAAc;QAChD;QAEA,IAAIjG,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEkG,kBAAkB,EAAE;UAC/BxB,MAAM,CAACO,UAAU,CAACiB,kBAAkB,GAAGlG,OAAO,CAACkG,kBAAkB;QACnE;QAEA,IAAIlG,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEmG,mBAAmB,EAAE;UAChCzB,MAAM,CAACO,UAAU,CAACkB,mBAAmB,GAAGnG,OAAO,CAACmG,mBAAmB;QACrE;QAEA,OAAOzB,MAAM;MACf;MAEA,MAAM,IAAI0B,KAAK,CAAC,iDAAiD,CAAC;IACpE;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAjF,GAAA;IAAAC,KAAA,EAKA,SAAAiF,eAAerG,OAA8B,EAAE;MAAA,IAAAsG,kBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;MAC7C,IACE7E,OAAO,GAOL7B,OAAO,CAPT6B,OAAO;QACP8E,gBAAgB,GAMd3G,OAAO,CANT2G,gBAAgB;QAChBC,aAAa,GAKX5G,OAAO,CALT4G,aAAa;QACbC,oBAAoB,GAIlB7G,OAAO,CAJT6G,oBAAoB;QACpBC,eAAe,GAGb9G,OAAO,CAHT8G,eAAe;QACfzG,UAAU,GAERL,OAAO,CAFTK,UAAU;QACV0G,oBAAoB,GAClB/G,OAAO,CADT+G,oBAAoB;MAEtB,IAAMC,WAA0C,GAAG;QACjDJ,aAAa,EAAE,SAAS,CAAE;MAC5B,CAAC;;MAED,IAAI/E,OAAO,EAAE;QACXmF,WAAW,CAACJ,aAAa,GAAG/E,OAAO,CAAC+E,aAAa;QACjD,IAAI/E,OAAO,CAACkF,oBAAoB,EAAE;UAChCC,WAAW,CAACD,oBAAoB,GAAGlF,OAAO,CAACkF,oBAAoB;QACjE;MACF;MAEA,IAAIA,oBAAoB,EAAE;QACxBC,WAAW,CAACD,oBAAoB,GAAGA,oBAAoB;MACzD;MAEA,IAAIA,oBAAoB,EAAE;QACxBC,WAAW,CAACD,oBAAoB,GAAGA,oBAAoB;MACzD;MAEA,IAAIH,aAAa,EAAE;QACjBI,WAAW,CAACJ,aAAa,GAAGA,aAAa;MAC3C;;MAEA;;MAEA,IAAI,IAAI,CAACK,MAAM,EAAE;QACf,IAAOA,MAAM,GAAI,IAAI,CAAdA,MAAM;QACb,IAAAC,KAAA,GAAyB,CAAAD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAE9D,MAAM,KAAI,CAAC,CAAC;UAAtCgE,cAAc,GAAAD,KAAA,CAAdC,cAAc;QAErBH,WAAW,CAACI,MAAM,GAAG,CAAAH,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEG,MAAM,KAAI/G,UAAU;QACjD2G,WAAW,CAACK,QAAQ,GAAGJ,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEK,GAAG;QAClCN,WAAW,CAACO,KAAK,GAAGN,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEM,KAAK;QACjC;QACAP,WAAW,CAACQ,QAAQ,GAAG,IAAI,CAAC3G,KAAK,CAAC4G,QAAQ,CAACC,QAAQ,CAAClC,GAAG,CAAC,OAAO,CAAC;QAEhE,IAAI2B,cAAc,EAAE;UAClBH,WAAW,CAACW,SAAS,GAAGR,cAAc;QACxC;MACF;MAEA,IAAItF,OAAO,aAAPA,OAAO,gBAAAyE,kBAAA,GAAPzE,OAAO,CAAE+F,SAAS,cAAAtB,kBAAA,eAAlBA,kBAAA,CAAoBuB,SAAS,EAAE;QACjCb,WAAW,CAACQ,QAAQ,GAAG3F,OAAO,CAAC2F,QAAQ;QACvCR,WAAW,CAACc,OAAO,GAAGjG,OAAO,CAAC2F,QAAQ,IAAI3F,OAAO,CAAC2F,QAAQ,CAACO,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC;QAC3EhB,WAAW,CAACiB,cAAc,GACxBpG,OAAO,CAAC+F,SAAS,CAACC,SAAS,IAAIhG,OAAO,CAAC+F,SAAS,CAACC,SAAS,CAACK,UAAU;MACzE;MAEA,IAAIrG,OAAO,aAAPA,OAAO,gBAAA0E,qBAAA,GAAP1E,OAAO,CAAEG,WAAW,cAAAuE,qBAAA,eAApBA,qBAAA,CAAsB4B,SAAS,IAAItG,OAAO,aAAPA,OAAO,gBAAA2E,qBAAA,GAAP3E,OAAO,CAAEG,WAAW,cAAAwE,qBAAA,eAApBA,qBAAA,CAAsB4B,MAAM,EAAE;QAAA,IAAAC,qBAAA,EAAAC,qBAAA;QACnEtB,WAAW,CAACH,oBAAoB,MAAA/G,MAAA,CAC9B,EAAAuI,qBAAA,GAAAxG,OAAO,CAACG,WAAW,cAAAqG,qBAAA,uBAAnBA,qBAAA,CAAqBF,SAAS,OAAAG,qBAAA,GAAIzG,OAAO,CAACG,WAAW,cAAAsG,qBAAA,uBAAnBA,qBAAA,CAAqBF,MAAM,EAC7D;MACJ;MAEA,IAAIvG,OAAO,aAAPA,OAAO,gBAAA4E,qBAAA,GAAP5E,OAAO,CAAEG,WAAW,cAAAyE,qBAAA,eAApBA,qBAAA,CAAsB9E,SAAS,EAAE;QAAA,IAAA4G,qBAAA;QACnCvB,WAAW,CAACF,eAAe,IAAAyB,qBAAA,GAAG1G,OAAO,CAACG,WAAW,cAAAuG,qBAAA,uBAAnBA,qBAAA,CAAqB5G,SAAS;MAC9D;MAEA,IAAIE,OAAO,aAAPA,OAAO,gBAAA6E,qBAAA,GAAP7E,OAAO,CAAEG,WAAW,cAAA0E,qBAAA,eAApBA,qBAAA,CAAsB8B,QAAQ,EAAE;QAAA,IAAAC,qBAAA;QAClCzB,WAAW,CAAC0B,aAAa,IAAAD,qBAAA,GAAG5G,OAAO,CAACG,WAAW,cAAAyG,qBAAA,uBAAnBA,qBAAA,CAAqBD,QAAQ;MAC3D;MAEA,IAAI7B,gBAAgB,EAAE;QAAA,IAAAgC,kBAAA,EAAAC,mBAAA;QACpB5B,WAAW,CAAC6B,eAAe,GAAGlC,gBAAgB,aAAhBA,gBAAgB,wBAAAgC,kBAAA,GAAhBhC,gBAAgB,CAAG,CAAC,CAAC,cAAAgC,kBAAA,uBAArBA,kBAAA,CAAuBE,eAAe;QACpE7B,WAAW,CAAC8B,iBAAiB,GAAGnC,gBAAgB,aAAhBA,gBAAgB,wBAAAiC,mBAAA,GAAhBjC,gBAAgB,CAAG,CAAC,CAAC,cAAAiC,mBAAA,uBAArBA,mBAAA,CAAuBE,iBAAiB;MAC1E;MAEA,IAAI,EAAC9B,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEH,oBAAoB,KAAIA,oBAAoB,EAAE;QAC9DG,WAAW,CAACH,oBAAoB,MAAA/G,MAAA,CAAM+G,oBAAoB,CAAE;MAC9D;MAEA,IAAI,EAACG,WAAW,aAAXA,WAAW,eAAXA,WAAW,CAAEF,eAAe,KAAIA,eAAe,EAAE;QACpDE,WAAW,CAACF,eAAe,GAAGA,eAAe;MAC/C;MAEA,IAAIE,WAAW,CAACJ,aAAa,KAAK1E,SAAS,EAAE;QAC3C,MAAM,IAAIkE,KAAK,CAAC,oCAAoC,CAAC;MACvD;MAEA,OAAOY,WAAW;IACpB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA7F,GAAA;IAAAC,KAAA,EAOA,SAAA2H,uBAAuBC,SAAyB,EAAEhJ,OAAY,EAAE;MAAA,IAAAiJ,uBAAA;MAC9D,IAAOtH,SAAS,GAAmB3B,OAAO,CAAnC2B,SAAS;QAAEuH,aAAa,GAAIlJ,OAAO,CAAxBkJ,aAAa;MAC/B,IAAMxE,MAAM,GAAG,IAAI,CAAC/B,SAAS,CAAC3C,OAAO,EAAE2B,SAAS,CAAC;MAEjD,IAAMxB,KAAY,GAAG;QACnBgJ,OAAO,EAAEC,aAAI,CAACC,EAAE,CAAC,CAAC;QAClBzF,OAAO,EAAE,CAAC;QACVc,MAAM,EAANA,MAAM;QACN4E,UAAU,EAAE;UACVC,SAAS,EAAEL,aAAa,IAAI,IAAIM,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;UACpD;UACAC,IAAI,EAAE;QACR,CAAC;QACD;QACAC,iBAAiB,GAAAV,uBAAA,GAAE,IAAI,CAACpI,KAAK,CAACiB,QAAQ,CAACsD,WAAW,cAAA6D,uBAAA,uBAA/BA,uBAAA,CAAiCW,WAAW;QAC/DzJ,KAAK,EAAE6I;MACT,CAAC;;MAED;MACA;MACA;MACA,IAAIA,SAAS,CAACrE,IAAI,KAAK,2BAA2B,EAAE;QAClD,IAAAkF,gDAAyB,EAAC1J,KAAK,CAAC;MAClC;MAEA,OAAOA,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAgB,GAAA;IAAAC,KAAA,EAKA,SAAA0I,mBAAA,EAA4B;MAC1B,MAAM1D,KAAK,CAAC,iBAAiB,CAAC;IAChC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAjF,GAAA;IAAAC,KAAA,EAOA,SAAA2I,UAAAC,KAAA,EAQG;MAAA,IAPDrF,IAAI,GAAAqF,KAAA,CAAJrF,IAAI;QACJsF,OAAO,GAAAD,KAAA,CAAPC,OAAO;QACPjK,OAAO,GAAAgK,KAAA,CAAPhK,OAAO;MAMP,IAAO2B,SAAS,GAA6D3B,OAAO,CAA7E2B,SAAS;QAAEgF,gBAAgB,GAA2C3G,OAAO,CAAlE2G,gBAAgB;QAAEE,oBAAoB,GAAqB7G,OAAO,CAAhD6G,oBAAoB;QAAEC,eAAe,GAAI9G,OAAO,CAA1B8G,eAAe;;MAEzE;MACA,IAAInF,SAAS,EAAE;QACb;QACA,IAAME,OAAO,GAAG,IAAI,CAAChB,KAAK,CAACiB,QAAQ,CAACC,0BAA0B,CAACJ,SAAS,CAAC;QAEzE,IAAI,CAACE,OAAO,EAAE;UACZqI,OAAO,CAACC,IAAI,CACV,iDAAiD,YAAArK,MAAA,CACvC6E,IAAI,mBAAA7E,MAAA,CAAgB6B,SAAS,CACzC,CAAC;UACD;UACA,IAAI,CAACd,KAAK,CAAC4G,QAAQ,CAACrE,OAAO,CAACgH,mBAAmB,CAACC,6CAAoC,EAAE;YACpFC,MAAM,EAAE;cACN3I,SAAS,EAATA,SAAS;cACTgD,IAAI,EAAJA;YACF;UACF,CAAC,CAAC;UAEF;QACF;;QAEA;QACA,IAAMqC,WAAW,GAAG,IAAI,CAACX,cAAc,CAAC;UACtCxE,OAAO,EAAPA,OAAO;UACP8E,gBAAgB,EAAE9E,OAAO,CAAC8E,gBAAgB,IAAIA,gBAAgB;UAC9DE,oBAAoB,EAApBA,oBAAoB;UACpBC,eAAe,EAAfA;QACF,CAAC,CAAC;;QAEF;QACA,IAAIyD,iBAA+C,GAAG;UACpD5F,IAAI,EAAJA,IAAI;UACJ6F,UAAU,EAAE,IAAI;UAChBxD,WAAW,EAAXA,WAAW;UACXgC,SAAS,EAAE;YACTyB,eAAe,EAAEC,MAAM,CAACC,QAAQ,CAACC;UACnC,CAAC;UACDC,SAAS,EAAEZ,OAAO,CAACY,SAAS;UAC5BC,kBAAkB,EAAE,OAAO;UAC3BC,eAAe,EAAE;YACfC,wBAAwB,EAAE;UAC5B,CAAC;UACDC,cAAc,EAAE;YACdC,uBAAuB,EAAEvH,mBAAW;YACpC;YACAwH,0BAA0B,EAAE,IAAI,CAACtK,KAAK,CAAC+C,OAAO;YAC9CwH,uBAAuB,EAAEnM,cAAc,CAAC,CAAC,IAAI,SAAS;YACtDoM,0BAA0B,EAAErM,YAAY,CAAC,CAAC,IAAI,SAAS;YACvDsM,SAAS,EAAE,IAAI9B,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;UACpC;QACF,CAAC;;QAED;QACAc,iBAAiB,GAAG,IAAAgB,aAAK,EAAChB,iBAAiB,EAAEN,OAAO,CAAC;;QAErD;QACA,IAAMuB,eAAe,GAAG,IAAI,CAACzC,sBAAsB,CAACwB,iBAAiB,EAAEvK,OAAO,CAAC;QAC/E,IAAI,CAACyL,SAAS,CAAC;UAACjL,IAAI,EAAE,KAAK;UAAEL,KAAK,EAAEqL;QAAe,CAAC,CAAC;QACrD,IAAI,CAACE,uBAAuB,CAACF,eAAe,CAAC;MAC/C,CAAC,MAAM;QACL,MAAM,IAAIpF,KAAK,CACb,6FACF,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAjF,GAAA;IAAAC,KAAA,EASA,SAAAuK,kCAAAC,KAAA,EAcqB;MAAA,IAbnBC,eAAe,GAAAD,KAAA,CAAfC,eAAe;QACfC,gBAAgB,GAAAF,KAAA,CAAhBE,gBAAgB;QAChBC,gBAAgB,GAAAH,KAAA,CAAhBG,gBAAgB;QAChBC,eAAe,GAAAJ,KAAA,CAAfI,eAAe;QACfC,gBAAgB,GAAAL,KAAA,CAAhBK,gBAAgB;QAChBC,cAAc,GAAAN,KAAA,CAAdM,cAAc;MASd,IAAIC,KAAuB;MAE3B,IAAIN,eAAe,EAAE;QACnB,IAAMO,kBAAkB,GAAGC,2CAAkC,CAACR,eAAe,CAAC;QAE9E,IAAIO,kBAAkB,EAAE;UACtBD,KAAK,GAAG,IAAAZ,aAAK,EACX;YAACe,KAAK,EAAE,IAAI;YAAEC,WAAW,EAAE,KAAK;YAAE5H,IAAI,EAAE,OAAO;YAAE6H,QAAQ,EAAE;UAAO,CAAC;UAAE;UACrE;YAACC,SAAS,EAAEZ;UAAe,CAAC,EAC5BE,gBAAgB,GAAG;YAACW,SAAS,EAAE;cAACC,SAAS,EAAEZ;YAAgB;UAAC,CAAC,GAAG,CAAC,CAAC,EAClE;YAACD,gBAAgB,EAAhBA;UAAgB,CAAC,EAClB;YAACE,eAAe,EAAfA;UAAe,CAAC,EACjBE,cAAc,KAAKhK,SAAS,GAAG,CAAC,CAAC,GAAG;YAACgK,cAAc,EAAdA;UAAc,CAAC,EACpDE,kBAAkB,EAClBH,gBAAgB,IAAI,CAAC,CACvB,CAAC;UAED,OAAOE,KAAK;QACd;MACF;MAEA,OAAOjK,SAAS;IAClB;;IAEA;AACF;AACA;AACA;EAHE;IAAAf,GAAA;IAAAC,KAAA,EAIA,SAAAwL,gCAAgCC,QAAa,EAAE;MAAA,IAAAC,eAAA,EAAAC,oBAAA,EAAAC,cAAA,EAAAC,eAAA,EAAAC,eAAA,EAAAC,qBAAA;MAC7C,IAAMnB,eAAe,GAAGa,QAAQ,CAACO,OAAO;MACxC,IAAMlB,cAAc,GAAGW,QAAQ,CAACQ,UAAU;MAC1C,IAAIR,QAAQ,CAAClI,IAAI,EAAE;QACjB,IAAI,IAAA2I,8CAAuB,EAACT,QAAQ,CAAClI,IAAI,CAAC,EAAE;UAC1C,OAAO,IAAI,CAACgH,iCAAiC,CAAC;YAC5CG,gBAAgB,EAAE5J,SAAS;YAC3B2J,eAAe,EAAE0B,2DAAkD,CAACV,QAAQ,CAAClI,IAAI,CAAC;YAClFoH,gBAAgB,EAAEc,QAAQ,CAAClI,IAAI;YAC/BqH,eAAe,EAAfA,eAAe;YACfE,cAAc,EAAdA;UACF,CAAC,CAAC;QACJ;MACF;MAEA,IAAI,IAAAsB,8CAAuB,EAACX,QAAQ,CAAC,EAAE;QAAA,IAAAY,eAAA;QACrC;QACA,IAAMC,SAAS,IAAAD,eAAA,GAAGZ,QAAQ,CAACc,KAAK,cAAAF,eAAA,uBAAdA,eAAA,CAAgBjN,IAAI;QAEtC,OAAO,IAAI,CAACmL,iCAAiC,CAAC;UAC5CG,gBAAgB,EAAE5J,SAAS;UAC3B2J,eAAe,EACb+B,qCAA4B,CAACF,SAAS,CAAC,IAAIE,qCAA4B,CAACC,OAAO;UACjF9B,gBAAgB,EAAEc,QAAQ,CAAClI,IAAI;UAC/BqH,eAAe,EAAfA,eAAe;UACfE,cAAc,EAAdA;QACF,CAAC,CAAC;MACJ;MAEA,IAAMJ,gBAAgB,GACpB,CAAAe,QAAQ,aAARA,QAAQ,wBAAAC,eAAA,GAARD,QAAQ,CAAEV,KAAK,cAAAW,eAAA,wBAAAC,oBAAA,GAAfD,eAAA,CAAiBgB,IAAI,cAAAf,oBAAA,uBAArBA,oBAAA,CAAuBN,SAAS,MAChCI,QAAQ,aAARA,QAAQ,wBAAAG,cAAA,GAARH,QAAQ,CAAEiB,IAAI,cAAAd,cAAA,uBAAdA,cAAA,CAAgBP,SAAS,MACzBI,QAAQ,aAARA,QAAQ,wBAAAI,eAAA,GAARJ,QAAQ,CAAEiB,IAAI,cAAAb,eAAA,uBAAdA,eAAA,CAAgBc,IAAI,MACpBlB,QAAQ,aAARA,QAAQ,wBAAAK,eAAA,GAARL,QAAQ,CAAEiB,IAAI,cAAAZ,eAAA,wBAAAC,qBAAA,GAAdD,eAAA,CAAgBc,MAAM,cAAAb,qBAAA,uBAAtBA,qBAAA,CAAwBc,UAAU;MAEpC,IAAInC,gBAAgB,EAAE;QACpB,IAAMD,eAAe,GAAGqC,sDAA6C,CAACpC,gBAAgB,CAAC;QACvF,IAAID,eAAe,EAAE;UACnB,OAAO,IAAI,CAACF,iCAAiC,CAAC;YAC5CE,eAAe,EAAfA,eAAe;YACfC,gBAAgB,EAAhBA,gBAAgB;YAChBE,eAAe,EAAfA,eAAe;YACfE,cAAc,EAAdA;UACF,CAAC,CAAC;QACJ;;QAEA;QACA,IAAI,IAAAiC,8CAAuB,EAACrC,gBAAgB,CAAC,EAAE;UAC7C,OAAO,IAAI,CAACH,iCAAiC,CAAC;YAC5CE,eAAe,EAAEuC,oCAA2B;YAC5CtC,gBAAgB,EAAhBA,gBAAgB;YAChBE,eAAe,EAAfA,eAAe;YACfE,cAAc,EAAdA;UACF,CAAC,CAAC;QACJ;MACF;MAEA,IAAI,IAAAmC,gDAAyB,EAACxB,QAAQ,CAAC,EAAE;QACvC,OAAO,IAAI,CAAClB,iCAAiC,CAAC;UAC5CE,eAAe,EAAEyC,8CAAqC;UACtDxC,gBAAgB,EAAhBA,gBAAgB;UAChBE,eAAe,EAAfA,eAAe;UACfE,cAAc,EAAdA;QACF,CAAC,CAAC;MACJ;MAEA,IAAI,IAAAqC,qCAAc,EAAC1B,QAAQ,CAAC,EAAE;QAC5B,OAAO,IAAI,CAAClB,iCAAiC,CAAC;UAC5CE,eAAe,EAAE2C,sBAAa;UAC9B1C,gBAAgB,EAAhBA,gBAAgB;UAChBG,gBAAgB,EAAEY,QAAQ,CAACZ,gBAAgB;UAC3CD,eAAe,EAAfA,eAAe;UACfE,cAAc,EAAdA;QACF,CAAC,CAAC;MACJ;MAEA,IAAI,IAAAuC,0CAAmB,EAAC5B,QAAQ,CAAC,EAAE;QACjC,OAAO,IAAI,CAAClB,iCAAiC,CAAC;UAC5CE,eAAe,EAAE6C,mCAA0B;UAC3C5C,gBAAgB,EAAhBA,gBAAgB;UAChBG,gBAAgB,EAAEY,QAAQ,CAACZ,gBAAgB;UAC3CD,eAAe,EAAfA,eAAe;UACfE,cAAc,EAAdA;QACF,CAAC,CAAC;MACJ;;MAEA;MACA,OAAO,IAAI,CAACP,iCAAiC,CAAC;QAC5CE,eAAe,EAAE8C,sBAAa;QAC9B7C,gBAAgB,EAAEA,gBAAgB,IAAI6C,sBAAa;QACnD5C,gBAAgB,EAAEc,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAElI,IAAI;QAChCsH,gBAAgB,EAAEY,QAAQ,CAACZ,gBAAgB;QAC3CD,eAAe,EAAfA,eAAe;QACfE,cAAc,EAAdA;MACF,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA/K,GAAA;IAAAC,KAAA,EAOA,SAAAwN,iCAAAC,KAAA,EAQG;MAAA,IAAAC,qBAAA,EAAAC,qBAAA;MAAA,IAPDpK,IAAI,GAAAkK,KAAA,CAAJlK,IAAI;QACJ3E,OAAO,GAAA6O,KAAA,CAAP7O,OAAO;QACPgP,MAAM,GAAAH,KAAA,CAANG,MAAM;MAMN,IACErN,SAAS,GAKP3B,OAAO,CALT2B,SAAS;QACTgF,gBAAgB,GAId3G,OAAO,CAJT2G,gBAAgB;QAChBG,eAAe,GAGb9G,OAAO,CAHT8G,eAAe;QACfD,oBAAoB,GAElB7G,OAAO,CAFT6G,oBAAoB;QACpBE,oBAAoB,GAClB/G,OAAO,CADT+G,oBAAoB;;MAGtB;MACA,IAAMlF,OAAO,GAAG,IAAI,CAAChB,KAAK,CAACiB,QAAQ,CAACC,0BAA0B,CAACJ,SAAS,CAAC;MAEzE,IAAI,CAACE,OAAO,EAAE;QACZqI,OAAO,CAACC,IAAI,CACV,0DAA0D,WAAArK,MAAA,CACjD6E,IAAI,mBAAA7E,MAAA,CAAgB6B,SAAS,CACxC,CAAC;QACD;QACA,IAAI,CAACd,KAAK,CAAC4G,QAAQ,CAACrE,OAAO,CAACgH,mBAAmB,CAACC,6CAAoC,EAAE;UACpFC,MAAM,EAAE;YACN3I,SAAS,EAATA,SAAS;YACTgD,IAAI,EAAJA;UACF;QACF,CAAC,CAAC;QAEF,OAAOzC,SAAS;MAClB;;MAEA;MACA,IAAM8E,WAAW,GAAG,IAAI,CAACX,cAAc,CAAC;QACtCxE,OAAO,EAAPA,OAAO;QACP8E,gBAAgB,EAAE,CAAA9E,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE8E,gBAAgB,KAAIA,gBAAgB;QAC/DE,oBAAoB,EAApBA,oBAAoB;QACpBC,eAAe,EAAfA,eAAe;QACfC,oBAAoB,EAApBA;MACF,CAAC,CAAC;;MAEF;MACA,IAAMwD,iBAAyC,GAAG;QAChD5F,IAAI,EAAJA,IAAI;QACJ6F,UAAU,EAAE,IAAI;QAChBxD,WAAW,EAAXA,WAAW;QACXgI,MAAM,EAANA,MAAM;QACNhG,SAAS,EAAE;UACTyB,eAAe,EAAEC,MAAM,CAACC,QAAQ,CAACC;QACnC,CAAC;QACDqE,QAAQ,EAAEpN,OAAO,CAACqN,cAAc,CAAC,CAAC;QAClCC,SAAS,EACP,WAAW,IAAItN,OAAO,CAACuN,mBAAmB,GACtCvN,OAAO,CAACuN,mBAAmB,CAACD,SAAS,GACrC,IAAI,CAAC9N,eAAe,CAAC,CAAC;QAC5BgO,8BAA8B,EAAE,IAAI,CAAC5N,iCAAiC,CAAC;UACrEE,SAAS,EAATA;QACF,CAAC,CAAC;QACF2N,mBAAmB,EAAE,IAAI,CAACnN,iBAAiB,CAACN,OAAO;MACrD,CAAC;MAED,IAAM0N,eAAe,IAAAT,qBAAA,GAAG9O,OAAO,CAACuP,eAAe,cAAAT,qBAAA,cAAAA,qBAAA,IAAAC,qBAAA,GAAIlN,OAAO,CAACuN,mBAAmB,cAAAL,qBAAA,uBAA3BA,qBAAA,CAA6BQ,eAAe;MAC/F,IAAIA,eAAe,EAAE;QACnBhF,iBAAiB,CAACgF,eAAe,GAAGA,eAAe;MACrD;MAEA,IAAIvP,OAAO,CAACwP,gBAAgB,EAAE;QAC5BjF,iBAAiB,CAACiF,gBAAgB,GAAGxP,OAAO,CAACwP,gBAAgB;MAC/D;MAEA,OAAOjF,iBAAiB;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAApJ,GAAA;IAAAC,KAAA,EAOA,SAAAqO,kCAAAC,KAAA,EAQG;MAAA,IAPD/K,IAAI,GAAA+K,KAAA,CAAJ/K,IAAI;QACJ3E,OAAO,GAAA0P,KAAA,CAAP1P,OAAO;QACPgP,MAAM,GAAAU,KAAA,CAANV,MAAM;MAMN,IAAOpI,aAAa,GAClB5G,OAAO,CADF4G,aAAa;QAAEE,eAAe,GACnC9G,OAAO,CADa8G,eAAe;QAAED,oBAAoB,GACzD7G,OAAO,CAD8B6G,oBAAoB;QAAExG,UAAU,GACrEL,OAAO,CADoDK,UAAU;QAAE0G,oBAAoB,GAC3F/G,OAAO,CADgE+G,oBAAoB;;MAG7F;MACA,IAAMC,WAAW,GAAG,IAAI,CAACX,cAAc,CAAC;QACtCO,aAAa,EAAbA,aAAa;QACbG,oBAAoB,EAApBA,oBAAoB;QACpB1G,UAAU,EAAVA,UAAU;QACVyG,eAAe,EAAfA,eAAe;QACfD,oBAAoB,EAApBA;MACF,CAAC,CAAC;;MAEF;MACA,IAAM0D,iBAAyC,GAAG;QAChD5F,IAAI,EAAJA,IAAI;QACJqK,MAAM,EAANA,MAAM;QACNxE,UAAU,EAAE,IAAI;QAChBxD,WAAW,EAAXA,WAAW;QACXgC,SAAS,EAAE;UACTyB,eAAe,EAAEC,MAAM,CAACC,QAAQ,CAACC;QACnC,CAAC;QACDuE,SAAS,EAAE,IAAI,CAAC9N,eAAe,CAAC;MAClC,CAAC;MAED,IAAIrB,OAAO,CAACuP,eAAe,EAAE;QAC3BhF,iBAAiB,CAACgF,eAAe,GAAGvP,OAAO,CAACuP,eAAe;MAC7D;MAEA,IAAIvP,OAAO,CAACwP,gBAAgB,EAAE;QAC5BjF,iBAAiB,CAACiF,gBAAgB,GAAGxP,OAAO,CAACwP,gBAAgB;MAC/D;MAEA,OAAOjF,iBAAiB;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAApJ,GAAA;IAAAC,KAAA,EASA,SAAAuO,mBAAAC,KAAA,EAQG;MAAA,IAPDjL,IAAI,GAAAiL,KAAA,CAAJjL,IAAI;QACJsF,OAAO,GAAA2F,KAAA,CAAP3F,OAAO;QACPjK,OAAO,GAAA4P,KAAA,CAAP5P,OAAO;MAMP,IAAO2B,SAAS,GAA6B3B,OAAO,CAA7C2B,SAAS;QAAEiF,aAAa,GAAc5G,OAAO,CAAlC4G,aAAa;QAAEiG,QAAQ,GAAI7M,OAAO,CAAnB6M,QAAQ;MACzC,IAAItC,iBAAyC;;MAE7C;MACA,IAAMyE,MAA+B,GAAG,EAAE;MAE1C,IAAInC,QAAQ,EAAE;QACZ,IAAMgD,cAAc,GAAG,IAAI,CAACjD,+BAA+B,CAACC,QAAQ,CAAC;QACrE,IAAIgD,cAAc,EAAE;UAClBb,MAAM,CAACjS,IAAI,CAAC8S,cAAc,CAAC;QAC7B;QACA,IAAI,CAACjP,MAAM,CAACoD,GAAG,CACbC,uCAA8B,EAC9B,+DAA+D,qBAAAnE,MAAA,CAC5C,IAAAoE,UAAA,CAAA3G,OAAA,EAAesS,cAAc,CAAC,CACnD,CAAC;MACH;;MAEA;MACA,IAAIlO,SAAS,EAAE;QACb4I,iBAAiB,GAAG,IAAI,CAACqE,gCAAgC,CAAC;UAACjK,IAAI,EAAJA,IAAI;UAAE3E,OAAO,EAAPA,OAAO;UAAEgP,MAAM,EAANA;QAAM,CAAC,CAAC;MACpF,CAAC,MAAM,IAAIpI,aAAa,EAAE;QACxB;QACA2D,iBAAiB,GAAG,IAAI,CAACkF,iCAAiC,CAAC;UAAC9K,IAAI,EAAJA,IAAI;UAAE3E,OAAO,EAAPA,OAAO;UAAEgP,MAAM,EAANA;QAAM,CAAC,CAAC;MACrF,CAAC,MAAM;QACL,MAAM,IAAI5I,KAAK,CAAC,iBAAiB,CAAC;MACpC;;MAEA;MACAmE,iBAAiB,GAAG,IAAAgB,aAAK,EAAChB,iBAAiB,EAAEN,OAAO,CAAC;;MAErD;MACA,IAAMuB,eAAe,GAAG,IAAI,CAACzC,sBAAsB,CAACwB,iBAAiB,EAAEvK,OAAO,CAAC;MAE/E,OAAOwL,eAAe;IACxB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAArK,GAAA;IAAAC,KAAA,EAQA,SAAA0O,kBAAAC,KAAA,EAQG;MAAA,IAPDpL,IAAI,GAAAoL,KAAA,CAAJpL,IAAI;QACJsF,OAAO,GAAA8F,KAAA,CAAP9F,OAAO;QACPjK,OAAO,GAAA+P,KAAA,CAAP/P,OAAO;MAMP,IAAI,CAACY,MAAM,CAACoD,GAAG,CACbC,uCAA8B,EAC9B,0EAA0E,WAAAnE,MAAA,CACjE6E,IAAI,CACf,CAAC;MACD,IAAM6G,eAAe,GAAG,IAAI,CAACmE,kBAAkB,CAAC;QAAChL,IAAI,EAAJA,IAAI;QAAEsF,OAAO,EAAPA,OAAO;QAAEjK,OAAO,EAAPA;MAAO,CAAC,CAAC;MAEzE,IAAIA,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEK,UAAU,EAAE;QACvB,OAAO,IAAI,CAAC2P,+BAA+B,CAACxE,eAAe,EAAExL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,UAAU,CAAC;MACnF;MAEA,IAAI,CAACoL,SAAS,CAAC;QAACjL,IAAI,EAAE,IAAI;QAAEL,KAAK,EAAEqL;MAAe,CAAC,CAAC;MAEpD,OAAO,IAAI,CAACE,uBAAuB,CAACF,eAAe,CAAC;IACtD;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAArK,GAAA;IAAAC,KAAA,EAKA,SAAAsK,wBAAwBvL,KAAY,EAAgB;MAClD;MACA,IAAMG,UAAU,GAAG;QACjBC,YAAY,EAAEJ,KAAK;QACnBK,IAAI,EAAE,CAAC,kBAAkB;MAC3B,CAAC;MAED,OAAO,IAAI,CAACM,2BAA2B,CAACH,OAAO,CAACL,UAAU,CAAC;IAC7D;EAAC;IAAAa,GAAA;IAAAC,KAAA;IAmBD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARE;MAAA,IAAA6O,oCAAA,OAAAC,kBAAA,CAAA3S,OAAA,gBAAA4S,YAAA,CAAA5S,OAAA,CAAA6S,IAAA,CASA,SAAAC,QAAAC,KAAA;QAAA,IAAA3L,IAAA,EAAAsF,OAAA,EAAAjK,OAAA,EAAAuQ,WAAA,EAAA/E,eAAA,EAAA7K,OAAA;QAAA,OAAAwP,YAAA,CAAA5S,OAAA,CAAAiT,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cACEjM,IAAI,GAAA2L,KAAA,CAAJ3L,IAAI,EACJsF,OAAO,GAAAqG,KAAA,CAAPrG,OAAO,EACPjK,OAAO,GAAAsQ,KAAA,CAAPtQ,OAAO;cAMP,IAAI,CAACY,MAAM,CAACoD,GAAG,CACbC,uCAA8B,EAC9B,6GAA6G,WAAAnE,MAAA,CACpG6E,IAAI,CACf,CAAC;cAEK4L,WAAW,GAAG,IAAI,CAACZ,kBAAkB,CAAC;gBAAChL,IAAI,EAAJA,IAAI;gBAAEsF,OAAO,EAAPA,OAAO;gBAAEjK,OAAO,EAAPA;cAAO,CAAC,CAAC,EAErE;cACA;cACMwL,eAAe,GAAG,IAAAqF,kDAA2B,EAAC,IAAI,CAAChQ,KAAK,EAAE;gBAC9DN,YAAY,EAAEgQ,WAAW;gBACzB/P,IAAI,EAAE,CAAC,kBAAkB;cAC3B,CAAC,CAAC;cAEIG,OAAO,GAAG;gBACdmQ,MAAM,EAAE,MAAM;gBACdC,OAAO,EAAE,SAAS;gBAClBC,QAAQ,EAAE,eAAe;gBACzBlD,IAAI,EAAE;kBACJ1K,OAAO,EAAE,CAACoI,eAAe;gBAC3B,CAAC;gBACDyF,OAAO,EAAE,CAAC,CAAC;gBACX;gBACAC,qBAAqB,EAAE,IAAI,CAACrQ,KAAK,CAAC4G,QAAQ,CAACrE,OAAO,CAACD,MAAM,CAAC+N;cAC5D,CAAC;cAED,IAAIlR,OAAO,CAACK,UAAU,EAAE;gBACtBM,OAAO,CAACsQ,OAAO,GAAG;kBAChBE,aAAa,EAAE,KAAK;kBACpB,mBAAmB,EAAEnR,OAAO,CAACK;gBAC/B,CAAC;gBACDM,OAAO,CAACqQ,QAAQ,GAAG,wBAAwB;cAC7C;;cAEA;cAAA,OAAAN,QAAA,CAAAU,MAAA,WACO,IAAI,CAACvQ,KAAK,CAACwQ,mBAAmB,CAAC1Q,OAAO,CAAC;YAAA;YAAA;cAAA,OAAA+P,QAAA,CAAAY,IAAA;UAAA;QAAA,GAAAjB,OAAA;MAAA,CAC/C;MAAA,SAAAkB,oCAAAC,EAAA;QAAA,OAAAvB,oCAAA,CAAAjT,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAqU,mCAAA;IAAA;IAED;AACF;AACA;AACA;AACA;IAJE;EAAA;IAAApQ,GAAA;IAAAC,KAAA,EAKA,SAAAqQ,uBAA8B3F,gBAAwB,EAAW;MAC/D,IAAMD,eAAe,GAAGqC,sDAA6C,CAACpC,gBAAgB,CAAC;MACvF,IAAM4F,kBAAkB,GAAGrF,2CAAkC,CAACR,eAAe,CAAC;MAE9E,OAAO,CAAA6F,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAElF,QAAQ,MAAK,UAAU;IACpD;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAArL,GAAA;IAAAC,KAAA,EAKA,SAAAuQ,cAAqB1K,MAAW,EAAQ;MACtC;MACA,IAAI,CAACrG,MAAM,CAACoD,GAAG,CAAC,8CAA8C,EAAEiD,MAAM,CAAC;MAEvE,IAAI,CAACA,MAAM,GAAGA,MAAM;IACtB;EAAC;EAAA,OAAA9H,qBAAA;AAAA,EA93BgDyS,+BAAoB"}