UNPKG

@microsoft/omnichannel-chat-sdk

Version:
778 lines 143 kB
"use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion */ var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); var loggers_1 = require("./utils/loggers"); var ACSClient_1 = require("./core/messaging/ACSClient"); var ocsdk_1 = require("@microsoft/ocsdk"); var chatAdapterCreators_1 = require("./utils/chatAdapterCreators"); var locale_1 = require("./utils/locale"); var utilities_1 = require("./utils/utilities"); var WebUtils_1 = require("./utils/WebUtils"); var platform_1 = require("./utils/platform"); var SDKConfigValidators_1 = require("./validators/SDKConfigValidators"); var ACSParticipantDisplayName_1 = require("./core/messaging/ACSParticipantDisplayName"); var AMSFileManager_1 = require("./external/ACSAdapter/AMSFileManager"); var CallingOptionsOptionSetNumber_1 = require("./core/CallingOptionsOptionSetNumber"); var ChatAdapterProtocols_1 = require("./core/messaging/ChatAdapterProtocols"); var ChatSDKErrors_1 = require("./core/ChatSDKErrors"); var ConversationMode_1 = require("./core/ConversationMode"); var DeliveryMode_1 = require("@microsoft/omnichannel-ic3core/lib/model/DeliveryMode"); var FileSharingProtocolType_1 = require("@microsoft/omnichannel-ic3core/lib/model/FileSharingProtocolType"); var HostType_1 = require("@microsoft/omnichannel-ic3core/lib/interfaces/HostType"); var omnichannel_ic3core_1 = require("@microsoft/omnichannel-ic3core"); var LiveChatVersion_1 = require("./core/LiveChatVersion"); var LiveWorkItemState_1 = require("./core/LiveWorkItemState"); var MessageContentType_1 = require("@microsoft/omnichannel-ic3core/lib/model/MessageContentType"); var MessageType_1 = require("@microsoft/omnichannel-ic3core/lib/model/MessageType"); var OmnichannelErrorCodes_1 = require("./core/OmnichannelErrorCodes"); var PersonType_1 = require("@microsoft/omnichannel-ic3core/lib/model/PersonType"); var ProtocoleType_1 = require("@microsoft/omnichannel-ic3core/lib/interfaces/ProtocoleType"); var ScenarioMarker_1 = require("./telemetry/ScenarioMarker"); var TelemetryEvent_1 = require("./telemetry/TelemetryEvent"); var omnichannel_amsclient_1 = require("@microsoft/omnichannel-amsclient"); var createOmnichannelMessage_1 = require("./utils/createOmnichannelMessage"); var createTelemetry_1 = require("./utils/createTelemetry"); var createVoiceVideoCalling_1 = require("./api/createVoiceVideoCalling"); var MessageTags_1 = require("./core/messaging/MessageTags"); var exceptionThrowers_1 = require("./utils/exceptionThrowers"); var exceptionSuppressors_1 = require("./utils/exceptionSuppressors"); var location_1 = require("./utils/location"); var urlResolvers_1 = require("./utils/urlResolvers"); var OmnichannelConfigValidator_1 = require("./validators/OmnichannelConfigValidator"); var retrieveCollectorUri_1 = require("./telemetry/retrieveCollectorUri"); var OmnichannelChatSDK = /** @class */ (function () { function OmnichannelChatSDK(omnichannelConfig, chatSDKConfig) { var _this = this; if (chatSDKConfig === void 0) { chatSDKConfig = SDKConfigValidators_1.defaultChatSDKConfig; } var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; this.ACSClient = null; this.AMSClient = null; this.authSettings = null; this.authenticatedUserToken = null; this.conversation = null; this.callingOption = CallingOptionsOptionSetNumber_1.default.NoCalling; this.telemetry = null; this.ic3ClientLogger = null; this.ocSdkLogger = null; this.acsClientLogger = null; this.acsAdapterLogger = null; this.callingSdkLogger = null; this.amsClientLogger = null; this.isPersistentChat = false; this.isChatReconnect = false; this.reconnectId = null; this.refreshTokenTimer = null; this.populateInitChatOptionalParam = function (requestOptionalParams, optionalParams, telemetryEvent) { requestOptionalParams.initContext.locale = locale_1.getLocaleStringFromId(_this.localeId); if (optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.customContext) { // eslint-disable-next-line @typescript-eslint/no-explicit-any var context = optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.customContext; if (typeof context === "object") { for (var key in context) { if (context[key].value === null || context[key].value === undefined || context[key].value === "") { delete context[key]; } } } requestOptionalParams.initContext.customContextData = optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.customContext; // eslint-disable-line @typescript-eslint/no-explicit-any } if (optionalParams.browser) { requestOptionalParams.initContext.browser = optionalParams.browser; } if (optionalParams.os) { requestOptionalParams.initContext.os = optionalParams.os; } if (optionalParams.locale) { requestOptionalParams.initContext.locale = optionalParams.locale; } if (optionalParams.device) { requestOptionalParams.initContext.device = optionalParams.device; } if (optionalParams.preChatResponse) { requestOptionalParams.initContext.preChatResponse = optionalParams.preChatResponse; } if (optionalParams.portalContactId) { requestOptionalParams.initContext.portalcontactid = optionalParams.portalContactId; } if (optionalParams.sendDefaultInitContext) { if (platform_1.default.isNode() || platform_1.default.isReactNative()) { var message = "sendDefaultInitContext is only supported on browser"; var telemetryData = { RequestId: _this.requestId, ChatId: _this.chatToken.chatId }; exceptionThrowers_1.default.throwUnsupportedPlatform(_this.scenarioMarker, telemetryEvent, message, telemetryData); } requestOptionalParams.getContext = true; } // Override initContext completely if (optionalParams.initContext) { requestOptionalParams.initContext = optionalParams.initContext; } if (_this.authenticatedUserToken) { requestOptionalParams.authenticatedUserToken = _this.authenticatedUserToken; } if (_this.chatToken.chatId) { // eslint-disable-next-line @typescript-eslint/no-explicit-any requestOptionalParams.initContext.chatId = _this.chatToken.chatId; } return requestOptionalParams; }; this.debug = false; this.runtimeId = ocsdk_1.uuidv4(); this.omnichannelConfig = omnichannelConfig; this.chatSDKConfig = __assign(__assign({}, SDKConfigValidators_1.defaultChatSDKConfig), chatSDKConfig // overrides ); this.isInitialized = false; this.liveChatVersion = LiveChatVersion_1.default.V2; this.localeId = locale_1.defaultLocaleId; this.requestId = ocsdk_1.uuidv4(); this.chatToken = {}; this.liveChatConfig = {}; this.dataMaskingRules = {}; this.authSettings = null; this.preChatSurvey = null; this.telemetry = createTelemetry_1.default(this.debug); this.scenarioMarker = new ScenarioMarker_1.default(this.omnichannelConfig); this.ic3ClientLogger = loggers_1.createIC3ClientLogger(this.omnichannelConfig); this.ocSdkLogger = loggers_1.createOCSDKLogger(this.omnichannelConfig); this.acsClientLogger = loggers_1.createACSClientLogger(this.omnichannelConfig); this.acsAdapterLogger = loggers_1.createACSAdapterLogger(this.omnichannelConfig); this.callingSdkLogger = loggers_1.createCallingSDKLogger(this.omnichannelConfig); this.amsClientLogger = loggers_1.createAMSClientLogger(this.omnichannelConfig); this.scenarioMarker.useTelemetry(this.telemetry); this.ic3ClientLogger.useTelemetry(this.telemetry); this.ocSdkLogger.useTelemetry(this.telemetry); this.acsClientLogger.useTelemetry(this.telemetry); this.acsAdapterLogger.useTelemetry(this.telemetry); this.callingSdkLogger.useTelemetry(this.telemetry); this.amsClientLogger.useTelemetry(this.telemetry); this.scenarioMarker.setRuntimeId(this.runtimeId); this.ic3ClientLogger.setRuntimeId(this.runtimeId); this.ocSdkLogger.setRuntimeId(this.runtimeId); this.acsClientLogger.setRuntimeId(this.runtimeId); this.acsAdapterLogger.setRuntimeId(this.runtimeId); this.callingSdkLogger.setRuntimeId(this.runtimeId); this.amsClientLogger.setRuntimeId(this.runtimeId); OmnichannelConfigValidator_1.default(omnichannelConfig); SDKConfigValidators_1.default(chatSDKConfig); ((_a = this.chatSDKConfig.telemetry) === null || _a === void 0 ? void 0 : _a.disable) && ((_b = this.telemetry) === null || _b === void 0 ? void 0 : _b.disable()); var collectorUri = retrieveCollectorUri_1.default(this.omnichannelConfig.orgUrl); if ((_c = this.chatSDKConfig.telemetry) === null || _c === void 0 ? void 0 : _c.ariaCollectorUri) { this.telemetry.setCollectorUri((_d = this.chatSDKConfig.telemetry) === null || _d === void 0 ? void 0 : _d.ariaCollectorUri); } else { this.telemetry.setCollectorUri(collectorUri); } if ((_e = this.chatSDKConfig.telemetry) === null || _e === void 0 ? void 0 : _e.ariaTelemetryKey) { this.telemetry.initialize(this.chatSDKConfig.telemetry.ariaTelemetryKey); } (_f = this.ic3ClientLogger) === null || _f === void 0 ? void 0 : _f.setRequestId(this.requestId); (_g = this.ocSdkLogger) === null || _g === void 0 ? void 0 : _g.setRequestId(this.requestId); (_h = this.acsClientLogger) === null || _h === void 0 ? void 0 : _h.setRequestId(this.requestId); (_j = this.acsAdapterLogger) === null || _j === void 0 ? void 0 : _j.setRequestId(this.requestId); (_k = this.callingSdkLogger) === null || _k === void 0 ? void 0 : _k.setRequestId(this.requestId); (_l = this.amsClientLogger) === null || _l === void 0 ? void 0 : _l.setRequestId(this.requestId); } /* istanbul ignore next */ OmnichannelChatSDK.prototype.setDebug = function (flag) { var _a, _b, _c, _d, _e, _f, _g, _h; this.debug = flag; (_a = this.AMSClient) === null || _a === void 0 ? void 0 : _a.setDebug(flag); (_b = this.telemetry) === null || _b === void 0 ? void 0 : _b.setDebug(flag); this.scenarioMarker.setDebug(flag); (_c = this.ic3ClientLogger) === null || _c === void 0 ? void 0 : _c.setDebug(flag); (_d = this.ocSdkLogger) === null || _d === void 0 ? void 0 : _d.setDebug(flag); (_e = this.acsClientLogger) === null || _e === void 0 ? void 0 : _e.setDebug(flag); (_f = this.acsAdapterLogger) === null || _f === void 0 ? void 0 : _f.setDebug(flag); (_g = this.callingSdkLogger) === null || _g === void 0 ? void 0 : _g.setDebug(flag); (_h = this.amsClientLogger) === null || _h === void 0 ? void 0 : _h.setDebug(flag); }; OmnichannelChatSDK.prototype.initialize = function (optionalParams) { if (optionalParams === void 0) { optionalParams = {}; } return __awaiter(this, void 0, void 0, function () { var ocSDKConfiguration, _a, e_1, getLiveChatConfigOptionalParams, e_2, supportedLiveChatVersions, _b, _c, e_3; return __generator(this, function (_d) { switch (_d.label) { case 0: this.scenarioMarker.startScenario(TelemetryEvent_1.default.InitializeChatSDK); if (this.isInitialized) { this.scenarioMarker.completeScenario(TelemetryEvent_1.default.InitializeChatSDK); return [2 /*return*/, this.liveChatConfig]; } ocSDKConfiguration = { getChatTokenRetryCount: 2, getChatTokenTimeBetweenRetriesOnFailure: 2000, getChatTokenRetryOn429: false, }; _d.label = 1; case 1: _d.trys.push([1, 3, , 4]); this.OCSDKProvider = ocsdk_1.SDKProvider; _a = this; return [4 /*yield*/, ocsdk_1.SDKProvider.getSDK(this.omnichannelConfig, ocSDKConfiguration, this.ocSdkLogger)]; case 2: _a.OCClient = _d.sent(); return [3 /*break*/, 4]; case 3: e_1 = _d.sent(); exceptionThrowers_1.default.throwOmnichannelClientInitializationFailure(e_1, this.scenarioMarker, TelemetryEvent_1.default.InitializeChatSDK); return [3 /*break*/, 4]; case 4: _d.trys.push([4, 6, , 7]); getLiveChatConfigOptionalParams = optionalParams.getLiveChatConfigOptionalParams; return [4 /*yield*/, this.getChatConfig(getLiveChatConfigOptionalParams || {})]; case 5: _d.sent(); return [3 /*break*/, 7]; case 6: e_2 = _d.sent(); exceptionThrowers_1.default.throwChatConfigRetrievalFailure(e_2, this.scenarioMarker, TelemetryEvent_1.default.InitializeChatSDK); return [3 /*break*/, 7]; case 7: supportedLiveChatVersions = [LiveChatVersion_1.default.V1, LiveChatVersion_1.default.V2]; if (!supportedLiveChatVersions.includes(this.liveChatVersion)) { exceptionThrowers_1.default.throwUnsupportedLiveChatVersionFailure(new Error(ChatSDKErrors_1.default.UnsupportedLiveChatVersion), this.scenarioMarker, TelemetryEvent_1.default.InitializeChatSDK); } _d.label = 8; case 8: _d.trys.push([8, 13, , 14]); if (!(this.liveChatVersion === LiveChatVersion_1.default.V2)) return [3 /*break*/, 10]; this.ACSClient = new ACSClient_1.default(this.acsClientLogger); _b = this; return [4 /*yield*/, omnichannel_amsclient_1.default({ framedMode: platform_1.isBrowser(), multiClient: true, debug: false, logger: this.amsClientLogger })]; case 9: _b.AMSClient = _d.sent(); return [3 /*break*/, 12]; case 10: if (!(this.liveChatVersion === LiveChatVersion_1.default.V1)) return [3 /*break*/, 12]; _c = this; return [4 /*yield*/, this.getIC3Client()]; case 11: _c.IC3Client = _d.sent(); _d.label = 12; case 12: this.isInitialized = true; this.scenarioMarker.completeScenario(TelemetryEvent_1.default.InitializeChatSDK); return [3 /*break*/, 14]; case 13: e_3 = _d.sent(); exceptionThrowers_1.default.throwMessagingClientCreationFailure(e_3, this.scenarioMarker, TelemetryEvent_1.default.InitializeChatSDK); return [3 /*break*/, 14]; case 14: return [2 /*return*/, this.liveChatConfig]; } }); }); }; OmnichannelChatSDK.prototype.getChatReconnectContextWithAuthToken = function () { return __awaiter(this, void 0, void 0, function () { var context, reconnectableChatsParams, reconnectableChatsResponse, error_1, exceptionDetails, telemetryData; return __generator(this, function (_a) { switch (_a.label) { case 0: this.scenarioMarker.startScenario(TelemetryEvent_1.default.GetChatReconnectContextWithAuthToken, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); context = { reconnectId: null, redirectURL: null }; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); reconnectableChatsParams = { authenticatedUserToken: this.authenticatedUserToken }; return [4 /*yield*/, this.OCClient.getReconnectableChats(reconnectableChatsParams)]; case 2: reconnectableChatsResponse = _a.sent(); if (reconnectableChatsResponse && reconnectableChatsResponse.reconnectid) { context.reconnectId = reconnectableChatsResponse.reconnectid; } this.scenarioMarker.completeScenario(TelemetryEvent_1.default.GetChatReconnectContextWithAuthToken, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); return [3 /*break*/, 4]; case 3: error_1 = _a.sent(); exceptionDetails = { response: "OCClientGetReconnectableChatsFailed" }; telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, ExceptionDetails: JSON.stringify(exceptionDetails) }; if (utilities_1.isClientIdNotFoundErrorMessage(error_1)) { exceptionThrowers_1.default.throwAuthContactIdNotFoundFailure(error_1, this.scenarioMarker, TelemetryEvent_1.default.GetChatReconnectContextWithAuthToken, telemetryData); } this.scenarioMarker.failScenario(TelemetryEvent_1.default.GetChatReconnectContextWithAuthToken, telemetryData); console.error("OmnichannelChatSDK/GetChatReconnectContextWithAuthToken/error " + error_1); return [3 /*break*/, 4]; case 4: return [2 /*return*/, context]; } }); }); }; OmnichannelChatSDK.prototype.getChatReconnectContextWithReconnectId = function (optionalParams) { if (optionalParams === void 0) { optionalParams = {}; } return __awaiter(this, void 0, void 0, function () { var context, reconnectAvailabilityResponse, error_2, exceptionDetails; return __generator(this, function (_a) { switch (_a.label) { case 0: this.scenarioMarker.startScenario(TelemetryEvent_1.default.GetChatReconnectContextWithReconnectId, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); context = { reconnectId: null, redirectURL: null }; if (!optionalParams.reconnectId) return [3 /*break*/, 4]; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, this.OCClient.getReconnectAvailability(optionalParams.reconnectId)]; case 2: reconnectAvailabilityResponse = _a.sent(); // isReconnectAvailable , indicates if the chat is still valid, or the token has expired if (reconnectAvailabilityResponse && !reconnectAvailabilityResponse.isReconnectAvailable) { if (reconnectAvailabilityResponse.reconnectRedirectionURL) { context.redirectURL = reconnectAvailabilityResponse.reconnectRedirectionURL; } } else { context.reconnectId = optionalParams.reconnectId; } this.scenarioMarker.completeScenario(TelemetryEvent_1.default.GetChatReconnectContextWithReconnectId, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); return [3 /*break*/, 4]; case 3: error_2 = _a.sent(); exceptionDetails = { response: "OCClientGetReconnectAvailabilityFailed" }; this.scenarioMarker.failScenario(TelemetryEvent_1.default.GetChatReconnectContextWithReconnectId, { RequestId: this.requestId, ChatId: this.chatToken.chatId, ExceptionDetails: JSON.stringify(exceptionDetails) }); console.error("OmnichannelChatSDK/GetChatReconnectContextWithReconnectId/error " + error_2); return [3 /*break*/, 4]; case 4: //here the context contains recconnectionId if valid, or redirectionURL if not valid return [2 /*return*/, context]; } }); }); }; OmnichannelChatSDK.prototype.getChatReconnectContext = function (optionalParams) { if (optionalParams === void 0) { optionalParams = {}; } return __awaiter(this, void 0, void 0, function () { var context; return __generator(this, function (_a) { switch (_a.label) { case 0: this.scenarioMarker.startScenario(TelemetryEvent_1.default.GetChatReconnectContext, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); context = { reconnectId: null, redirectURL: null }; return [4 /*yield*/, this.getChatReconnectContextWithReconnectId(optionalParams)]; case 1: // if necessary to make this call, to validate if the token is valid. context = _a.sent(); // if redirectURL is present, it means the token is not longer valid. if (context.redirectURL && context.redirectURL.length > 0) { return [2 /*return*/, context]; } if (!this.authenticatedUserToken) return [3 /*break*/, 3]; return [4 /*yield*/, this.getChatReconnectContextWithAuthToken()]; case 2: context = _a.sent(); _a.label = 3; case 3: this.scenarioMarker.completeScenario(TelemetryEvent_1.default.GetChatReconnectContext, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); return [2 /*return*/, context]; } }); }); }; OmnichannelChatSDK.prototype.startChat = function (optionalParams) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; if (optionalParams === void 0) { optionalParams = {}; } return __awaiter(this, void 0, void 0, function () { var shouldReinitIC3Client, _q, reconnectableChatsParams, reconnectableChatsResponse, e_4, telemetryData, conversationDetails, telemetryData, telemetryData, e_5, telemetryData, sessionInitOptionalParams, location_2, sessionInitPromise, messagingClientPromise, attachmentClientPromise; var _this = this; return __generator(this, function (_r) { switch (_r.label) { case 0: this.scenarioMarker.startScenario(TelemetryEvent_1.default.StartChat, { RequestId: this.requestId }); if (!this.isInitialized) { exceptionThrowers_1.default.throwUninitializedChatSDK(this.scenarioMarker, TelemetryEvent_1.default.StartChat); } shouldReinitIC3Client = !platform_1.default.isNode() && !platform_1.default.isReactNative() && !this.IC3Client && this.liveChatVersion === LiveChatVersion_1.default.V1; if (!shouldReinitIC3Client) return [3 /*break*/, 2]; _q = this; return [4 /*yield*/, this.getIC3Client()]; case 1: _q.IC3Client = _r.sent(); _r.label = 2; case 2: if (this.isChatReconnect && !((_a = this.chatSDKConfig.chatReconnect) === null || _a === void 0 ? void 0 : _a.disable) && !this.isPersistentChat && optionalParams.reconnectId) { this.reconnectId = optionalParams.reconnectId; } if (!(this.isPersistentChat && !((_b = this.chatSDKConfig.persistentChat) === null || _b === void 0 ? void 0 : _b.disable))) return [3 /*break*/, 6]; _r.label = 3; case 3: _r.trys.push([3, 5, , 6]); reconnectableChatsParams = { authenticatedUserToken: this.authenticatedUserToken }; return [4 /*yield*/, this.OCClient.getReconnectableChats(reconnectableChatsParams)]; case 4: reconnectableChatsResponse = _r.sent(); if (reconnectableChatsResponse && reconnectableChatsResponse.reconnectid) { this.reconnectId = reconnectableChatsResponse.reconnectid; } return [3 /*break*/, 6]; case 5: e_4 = _r.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwPersistentChatConversationRetrievalFailure(e_4, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 6]; case 6: if (!(optionalParams.liveChatContext && Object.keys(optionalParams.liveChatContext).length > 0 && !this.reconnectId)) return [3 /*break*/, 8]; this.chatToken = optionalParams.liveChatContext.chatToken || {}; this.requestId = optionalParams.liveChatContext.requestId || ocsdk_1.uuidv4(); return [4 /*yield*/, this.getConversationDetails()]; case 7: conversationDetails = _r.sent(); if (Object.keys(conversationDetails).length === 0) { telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwInvalidConversation(this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); } if (conversationDetails.state === LiveWorkItemState_1.default.WrapUp || conversationDetails.state === LiveWorkItemState_1.default.Closed) { console.error("Unable to join conversation that's in '" + conversationDetails.state + "' state"); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwClosedConversation(this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); } _r.label = 8; case 8: if (!this.authSettings) return [3 /*break*/, 14]; if (!!this.authenticatedUserToken) return [3 /*break*/, 10]; return [4 /*yield*/, this.setAuthTokenProvider(this.chatSDKConfig.getAuthToken)]; case 9: _r.sent(); _r.label = 10; case 10: if (!(optionalParams.liveChatContext && Object.keys(optionalParams.liveChatContext).length > 0)) return [3 /*break*/, 14]; this.chatToken = optionalParams.liveChatContext.chatToken || {}; this.requestId = optionalParams.liveChatContext.requestId || ocsdk_1.uuidv4(); _r.label = 11; case 11: _r.trys.push([11, 13, , 14]); return [4 /*yield*/, this.OCClient.validateAuthChatRecord(this.requestId, { authenticatedUserToken: this.authenticatedUserToken, chatId: this.chatToken.chatId })]; case 12: _r.sent(); return [3 /*break*/, 14]; case 13: e_5 = _r.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwAuthenticatedChatConversationRetrievalFailure(e_5, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 14]; case 14: if (!(this.chatToken && Object.keys(this.chatToken).length === 0)) return [3 /*break*/, 16]; return [4 /*yield*/, this.getChatToken(false)]; case 15: _r.sent(); _r.label = 16; case 16: (_c = this.ic3ClientLogger) === null || _c === void 0 ? void 0 : _c.setChatId(this.chatToken.chatId || ''); (_d = this.ocSdkLogger) === null || _d === void 0 ? void 0 : _d.setChatId(this.chatToken.chatId || ''); (_e = this.acsClientLogger) === null || _e === void 0 ? void 0 : _e.setChatId(this.chatToken.chatId || ''); (_f = this.acsAdapterLogger) === null || _f === void 0 ? void 0 : _f.setChatId(this.chatToken.chatId || ''); (_g = this.callingSdkLogger) === null || _g === void 0 ? void 0 : _g.setChatId(this.chatToken.chatId || ''); (_h = this.amsClientLogger) === null || _h === void 0 ? void 0 : _h.setChatId(this.chatToken.chatId || ''); sessionInitOptionalParams = { initContext: {} }; sessionInitOptionalParams = this.populateInitChatOptionalParam(sessionInitOptionalParams, optionalParams, TelemetryEvent_1.default.StartChat); sessionInitOptionalParams.initContext.isProactiveChat = !!optionalParams.isProactiveChat; if (this.isPersistentChat && !((_j = this.chatSDKConfig.persistentChat) === null || _j === void 0 ? void 0 : _j.disable)) { sessionInitOptionalParams.reconnectId = this.reconnectId; } else if (this.isChatReconnect && !((_k = this.chatSDKConfig.chatReconnect) === null || _k === void 0 ? void 0 : _k.disable) && !this.isPersistentChat) { sessionInitOptionalParams.reconnectId = this.reconnectId; } if (!(((_m = (_l = this.liveChatConfig) === null || _l === void 0 ? void 0 : _l.LiveWSAndLiveChatEngJoin) === null || _m === void 0 ? void 0 : _m.msdyn_requestvisitorlocation) === "true")) return [3 /*break*/, 18]; return [4 /*yield*/, location_1.getLocationInfo(this.scenarioMarker, this.chatToken.chatId, this.requestId)]; case 17: location_2 = _r.sent(); sessionInitOptionalParams.initContext.latitude = location_2.latitude; sessionInitOptionalParams.initContext.longitude = location_2.longitude; _r.label = 18; case 18: sessionInitPromise = function () { return __awaiter(_this, void 0, void 0, function () { var error_3, telemetryData; var _a, _b, _c, _d; return __generator(this, function (_e) { switch (_e.label) { case 0: if (!!optionalParams.liveChatContext) return [3 /*break*/, 4]; _e.label = 1; case 1: _e.trys.push([1, 3, , 4]); return [4 /*yield*/, this.OCClient.sessionInit(this.requestId, sessionInitOptionalParams)]; case 2: _e.sent(); return [3 /*break*/, 4]; case 3: error_3 = _e.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; // eslint-disable-next-line @typescript-eslint/no-explicit-any if (((_a = error_3) === null || _a === void 0 ? void 0 : _a.isAxiosError) && ((_d = (_c = (_b = error_3.response) === null || _b === void 0 ? void 0 : _b.headers) === null || _c === void 0 ? void 0 : _c.errorcode) === null || _d === void 0 ? void 0 : _d.toString()) === OmnichannelErrorCodes_1.default.WidgetUseOutsideOperatingHour.toString()) { exceptionThrowers_1.default.throwWidgetUseOutsideOperatingHour(error_3, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); } exceptionThrowers_1.default.throwConversationInitializationFailure(error_3, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); }; messagingClientPromise = function () { return __awaiter(_this, void 0, void 0, function () { var chatAdapterConfig, error_4, telemetryData, _a, error_5, telemetryData, error_6, telemetryData, _b, error_7, telemetryData; var _c, _d; return __generator(this, function (_e) { switch (_e.label) { case 0: if (!(this.liveChatVersion === LiveChatVersion_1.default.V2)) return [3 /*break*/, 8]; chatAdapterConfig = { token: this.chatToken.token, id: this.chatToken.visitorId || 'teamsvisitor', threadId: this.chatToken.chatId, environmentUrl: this.chatToken.acsEndpoint, pollingInterval: 30000 }; _e.label = 1; case 1: _e.trys.push([1, 3, , 4]); return [4 /*yield*/, ((_c = this.ACSClient) === null || _c === void 0 ? void 0 : _c.initialize({ token: chatAdapterConfig.token, environmentUrl: chatAdapterConfig.environmentUrl, }))]; case 2: _e.sent(); return [3 /*break*/, 4]; case 3: error_4 = _e.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwMessagingClientInitializationFailure(error_4, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 4]; case 4: _e.trys.push([4, 6, , 7]); _a = this; return [4 /*yield*/, ((_d = this.ACSClient) === null || _d === void 0 ? void 0 : _d.joinConversation({ id: chatAdapterConfig.id, threadId: chatAdapterConfig.threadId, pollingInterval: chatAdapterConfig.pollingInterval }))]; case 5: _a.conversation = (_e.sent()); this.scenarioMarker.completeScenario(TelemetryEvent_1.default.StartChat, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); return [3 /*break*/, 7]; case 6: error_5 = _e.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwMessagingClientConversationJoinFailure(error_5, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 7]; case 7: return [3 /*break*/, 14]; case 8: _e.trys.push([8, 10, , 11]); return [4 /*yield*/, this.IC3Client.initialize({ token: this.chatToken.token, regionGtms: this.chatToken.regionGTMS, visitor: true })]; case 9: _e.sent(); return [3 /*break*/, 11]; case 10: error_6 = _e.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwMessagingClientInitializationFailure(error_6, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 11]; case 11: _e.trys.push([11, 13, , 14]); _b = this; return [4 /*yield*/, this.IC3Client.joinConversation(this.chatToken.chatId)]; case 12: _b.conversation = _e.sent(); this.scenarioMarker.completeScenario(TelemetryEvent_1.default.StartChat, { RequestId: this.requestId, ChatId: this.chatToken.chatId }); return [3 /*break*/, 14]; case 13: error_7 = _e.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwMessagingClientConversationJoinFailure(error_7, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 14]; case 14: return [2 /*return*/]; } }); }); }; attachmentClientPromise = function () { return __awaiter(_this, void 0, void 0, function () { var error_8, telemetryData; var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 3, , 4]); if (!(this.liveChatVersion === LiveChatVersion_1.default.V2)) return [3 /*break*/, 2]; return [4 /*yield*/, ((_a = this.AMSClient) === null || _a === void 0 ? void 0 : _a.initialize({ chatToken: this.chatToken }))]; case 1: _b.sent(); _b.label = 2; case 2: return [3 /*break*/, 4]; case 3: error_8 = _b.sent(); telemetryData = { RequestId: this.requestId, ChatId: this.chatToken.chatId, }; exceptionThrowers_1.default.throwMessagingClientInitializationFailure(error_8, this.scenarioMarker, TelemetryEvent_1.default.StartChat, telemetryData); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); }; return [4 /*yield*/, Promise.all([sessionInitPromise(), messagingClientPromise(), attachmentClientPromise()])]; case 19: _r.sent(); if (this.isPersistentChat && !((_o = this.chatSDKConfig.persistentChat) === null || _o === void 0 ? void 0 : _o.disable)) { this.refreshTokenTimer = setInterval(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.getChatToken(false)]; case 1: _a.sent(); this.updateChatToken(this.chatToken.token, this.chatToken.regionGTMS); return [2 /*return*/]; } }); }); }, (_p = this.chatSDKConfig.persistentChat) === null || _p === void 0 ? void 0 : _p.tokenUpdateTime); } return [2 /*return*/]; } }); }); }; OmnichannelChatSDK.prototype.endChat = function () { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; return __awaiter(this, void 0, void 0, function ()