diff --git a/CHANGELOG.md b/CHANGELOG.md index 257cc4d..4c81dc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed +- Fix `ChatSDK.emailLiveChatTranscript()` calling `OCClient.emailTranscript()` without waiting until its completion +- Fix `EU` orgs telemetry to flow to the proper `EU` location ## [1.5.2] - 2023-10-14 ### Changed diff --git a/__tests__/telemetry/retrieveCollectorUri.spec.ts b/__tests__/telemetry/retrieveCollectorUri.spec.ts new file mode 100644 index 0000000..f858e8d --- /dev/null +++ b/__tests__/telemetry/retrieveCollectorUri.spec.ts @@ -0,0 +1,20 @@ +import retrieveCollectorUri from '../../src/telemetry/retrieveCollectorUri'; + +describe('retrieveCollectorUri', () => { + const defaultCollectorUri = "https://browser.pipe.aria.microsoft.com/Collector/3.0/"; + const EUCollectorUri = "https://eu-mobile.events.data.microsoft.com/Collector/3.0/"; + + it('retrieveCollectorUri() should return default EUCollectorUri on EU orgUrl', () => { + const orgUrl = "foo.crm4.omnichannelengagementhub.com"; + const collectorUri = retrieveCollectorUri(orgUrl); + + expect(collectorUri).toBe(EUCollectorUri); + }); + + it('retrieveCollectorUri() should return default defaultCollectorUri on non-EU orgUrl', () => { + const orgUrl = "microsoft.com"; + const collectorUri = retrieveCollectorUri(orgUrl); + + expect(collectorUri).toBe(defaultCollectorUri); + }); +}); \ No newline at end of file diff --git a/src/OmnichannelChatSDK.ts b/src/OmnichannelChatSDK.ts index e1ba054..c092ec0 100644 --- a/src/OmnichannelChatSDK.ts +++ b/src/OmnichannelChatSDK.ts @@ -89,6 +89,7 @@ import { getLocationInfo } from "./utils/location"; import urlResolvers from "./utils/urlResolvers"; import validateOmnichannelConfig from "./validators/OmnichannelConfigValidator"; import GetChatTokenOptionalParams from "./core/GetChatTokenOptionalParams"; +import retrieveCollectorUri from "./telemetry/retrieveCollectorUri"; class OmnichannelChatSDK { private debug: boolean; @@ -173,6 +174,9 @@ class OmnichannelChatSDK { this.chatSDKConfig.telemetry?.disable && this.telemetry?.disable(); + const collectorUri = retrieveCollectorUri(this.omnichannelConfig.orgUrl); + this.telemetry.setCollectorUri(collectorUri); + if (this.chatSDKConfig.telemetry?.ariaTelemetryKey) { this.telemetry.initialize(this.chatSDKConfig.telemetry.ariaTelemetryKey); } @@ -1477,7 +1481,7 @@ class OmnichannelChatSDK { CustomerLocale: body.locale || getLocaleStringFromId(this.localeId) }; - const emailResponse = this.OCClient.emailTranscript( + const emailResponse = await this.OCClient.emailTranscript( this.requestId, this.chatToken.token, emailRequestBody, diff --git a/src/telemetry/AriaTelemetry.ts b/src/telemetry/AriaTelemetry.ts index e1017d2..ad41300 100644 --- a/src/telemetry/AriaTelemetry.ts +++ b/src/telemetry/AriaTelemetry.ts @@ -1,6 +1,6 @@ import { ariaTelemetryKey } from '../config/settings'; import { AWTEventPriority } from '../external/aria/common/Enums'; -import { AWTLogManager, AWTLogger, AWTEventData } from '../external/aria/webjs/AriaSDK'; +import { AWTLogManager, AWTLogger, AWTEventData, AWTLogConfiguration } from '../external/aria/webjs/AriaSDK'; import LogLevel from '../telemetry/LogLevel'; import ScenarioType from '../telemetry/ScenarioType'; import { ic3ClientVersion, webChatACSAdapterVersion } from '../config/settings'; @@ -129,16 +129,30 @@ enum Renderer { ReactNative = 'ReactNative' } +const defaultAriaconfig = { + collectorUri: 'https://browser.pipe.aria.microsoft.com/Collector/3.0/', + cacheMemorySizeLimitInNumberOfEvents: 10000, + disableCookiesUsage: false, + canSendStatEvent: function (eventName: string) { return true; }, // eslint-disable-line @typescript-eslint/no-unused-vars + clockSkewRefreshDurationInMins: 0 +}; + class AriaTelemetry { private static _logger: AWTLogger; private static _debug = false; private static _CDNPackagesInfo: CDNPackagesInfo; private static _disable = false; + private static _key = ariaTelemetryKey; + private static _collectorUri = defaultAriaconfig.collectorUri; + private static _configuration = {}; - public static initialize(key: string): void { + public static initialize(key: string, configuration: AWTLogConfiguration = defaultAriaconfig): void { /* istanbul ignore next */ this._debug && console.log(`[AriaTelemetry][logger][initialize][custom]`); - AriaTelemetry._logger = AWTLogManager.initialize(key); + + AriaTelemetry._key = key; + AriaTelemetry._configuration = {...defaultAriaconfig, ...configuration, ...{collectorUri: AriaTelemetry._collectorUri}}; + AriaTelemetry._logger = AWTLogManager.initialize(key, configuration); } /* istanbul ignore next */ @@ -152,6 +166,11 @@ class AriaTelemetry { AriaTelemetry._disable = true; } + public static setCollectorUri(collectorUri: string): void { + AriaTelemetry._collectorUri = collectorUri; + AriaTelemetry._configuration = {...defaultAriaconfig, ...AriaTelemetry._configuration, ...{collectorUri: AriaTelemetry._collectorUri}}; + } + public static setCDNPackages(packages: CDNPackagesInfo): void { AriaTelemetry._CDNPackagesInfo = { ...AriaTelemetry._CDNPackagesInfo, @@ -638,7 +657,7 @@ class AriaTelemetry { if (!AriaTelemetry._logger) { /* istanbul ignore next */ this._debug && console.log(`[AriaTelemetry][logger][initialize]`); - AriaTelemetry._logger = AWTLogManager.initialize(ariaTelemetryKey); + AriaTelemetry._logger = AWTLogManager.initialize(ariaTelemetryKey, AriaTelemetry._configuration); } return AriaTelemetry._logger; } diff --git a/src/telemetry/EUDomainNames.ts b/src/telemetry/EUDomainNames.ts new file mode 100644 index 0000000..b2f60e1 --- /dev/null +++ b/src/telemetry/EUDomainNames.ts @@ -0,0 +1,9 @@ +const EUDomainNames = [ + "crm4.omnichannelengagementhub.com", // EUR + "crm12.omnichannelengagementhub.com", // FRA + "crm16.omnichannelengagementhub.com", // GER + "crm17.omnichannelengagementhub.com", // CHE + "crm19.omnichannelengagementhub.com" // NOR +]; + +export default EUDomainNames; \ No newline at end of file diff --git a/src/telemetry/retrieveCollectorUri.ts b/src/telemetry/retrieveCollectorUri.ts new file mode 100644 index 0000000..5b9b9f1 --- /dev/null +++ b/src/telemetry/retrieveCollectorUri.ts @@ -0,0 +1,21 @@ +import EUDomainNames from "./EUDomainNames"; + +const retrieveCollectorUri = (orgUrl: string): string => { + const defaultCollectorUri = "https://browser.pipe.aria.microsoft.com/Collector/3.0/"; + const EUCollectorUri = "https://eu-mobile.events.data.microsoft.com/Collector/3.0/"; + + let url = orgUrl; + if (orgUrl.endsWith("/")) { + url = orgUrl.replace("/", ""); + } + + for (let i = 0; i < EUDomainNames.length; i++) { + if (url.endsWith(EUDomainNames[i])) { + return EUCollectorUri; + } + } + + return defaultCollectorUri; +}; + +export default retrieveCollectorUri; \ No newline at end of file