@microsoft/omnichannel-chat-sdk
Version:
Microsoft Omnichannel Chat SDK
778 lines • 143 kB
JavaScript
"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 ()