@microsoft/omnichannel-chat-sdk 1.0.0 → 1.0.1-main.2d305f2

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +48 -17
  3. package/lib/OmnichannelChatSDK.d.ts +6 -3
  4. package/lib/OmnichannelChatSDK.js +231 -99
  5. package/lib/OmnichannelChatSDK.js.map +1 -1
  6. package/lib/config/settings.d.ts +1 -1
  7. package/lib/config/settings.js +1 -1
  8. package/lib/config/settings.js.map +1 -1
  9. package/lib/core/ChatConfig.d.ts +4 -0
  10. package/lib/core/PostChatContext.d.ts +5 -0
  11. package/lib/core/PostChatContext.js +3 -0
  12. package/lib/core/PostChatContext.js.map +1 -0
  13. package/lib/core/messaging/ACSClient.js +1 -1
  14. package/lib/core/messaging/ACSClient.js.map +1 -1
  15. package/lib/external/ACSAdapter/createFormatEgressTagsMiddleware.d.ts +2 -0
  16. package/lib/external/ACSAdapter/createFormatEgressTagsMiddleware.js +31 -0
  17. package/lib/external/ACSAdapter/createFormatEgressTagsMiddleware.js.map +1 -0
  18. package/lib/external/ACSAdapter/createFormatIngressTagsMiddleware.d.ts +2 -0
  19. package/lib/external/ACSAdapter/createFormatIngressTagsMiddleware.js +25 -0
  20. package/lib/external/ACSAdapter/createFormatIngressTagsMiddleware.js.map +1 -0
  21. package/lib/telemetry/AriaTelemetry.js +5 -0
  22. package/lib/telemetry/AriaTelemetry.js.map +1 -1
  23. package/lib/telemetry/ScenarioMarker.d.ts +2 -0
  24. package/lib/telemetry/ScenarioMarker.js +7 -3
  25. package/lib/telemetry/ScenarioMarker.js.map +1 -1
  26. package/lib/telemetry/TelemetryEvent.d.ts +2 -1
  27. package/lib/telemetry/TelemetryEvent.js +1 -0
  28. package/lib/telemetry/TelemetryEvent.js.map +1 -1
  29. package/lib/tsconfig.tsbuildinfo +1017 -1305
  30. package/lib/utils/WebUtils.d.ts +3 -1
  31. package/lib/utils/WebUtils.js +8 -2
  32. package/lib/utils/WebUtils.js.map +1 -1
  33. package/lib/utils/locale.d.ts +3 -0
  34. package/lib/utils/locale.js +60 -0
  35. package/lib/utils/locale.js.map +1 -0
  36. package/lib/utils/loggers.d.ts +8 -0
  37. package/lib/utils/loggers.js +24 -0
  38. package/lib/utils/loggers.js.map +1 -1
  39. package/package.json +2 -2
@@ -55,37 +55,40 @@ var __spreadArrays = (this && this.__spreadArrays) || function () {
55
55
  return r;
56
56
  };
57
57
  Object.defineProperty(exports, "__esModule", { value: true });
58
+ var loggers_1 = require("./utils/loggers");
58
59
  var ACSClient_1 = require("./core/messaging/ACSClient");
60
+ var ocsdk_1 = require("@microsoft/ocsdk");
61
+ var platform_1 = require("./utils/platform");
62
+ var SDKConfigValidators_1 = require("./validators/SDKConfigValidators");
59
63
  var ACSParticipantDisplayName_1 = require("./core/messaging/ACSParticipantDisplayName");
60
64
  var AMSFileManager_1 = require("./external/ACSAdapter/AMSFileManager");
61
65
  var CallingOptionsOptionSetNumber_1 = require("./core/CallingOptionsOptionSetNumber");
62
66
  var ChatAdapterProtocols_1 = require("./core/messaging/ChatAdapterProtocols");
63
67
  var ConversationMode_1 = require("./core/ConversationMode");
64
- var omnichannel_amsclient_1 = require("@microsoft/omnichannel-amsclient");
65
- var loggers_1 = require("./utils/loggers");
66
- var createOmnichannelMessage_1 = require("./utils/createOmnichannelMessage");
67
- var createTelemetry_1 = require("./utils/createTelemetry");
68
- var createVoiceVideoCalling_1 = require("./api/createVoiceVideoCalling");
69
- var MessageTags_1 = require("./core/messaging/MessageTags");
68
+ var createFormatEgressTagsMiddleware_1 = require("./external/ACSAdapter/createFormatEgressTagsMiddleware");
69
+ var createFormatIngressTagsMiddleware_1 = require("./external/ACSAdapter/createFormatIngressTagsMiddleware");
70
70
  var DeliveryMode_1 = require("@microsoft/omnichannel-ic3core/lib/model/DeliveryMode");
71
71
  var FileSharingProtocolType_1 = require("@microsoft/omnichannel-ic3core/lib/model/FileSharingProtocolType");
72
72
  var HostType_1 = require("@microsoft/omnichannel-ic3core/lib/interfaces/HostType");
73
- var utilities_1 = require("./utils/utilities");
74
- var libraries_1 = require("./utils/libraries");
75
- var LiveWorkItemState_1 = require("./core/LiveWorkItemState");
73
+ var omnichannel_ic3core_1 = require("@microsoft/omnichannel-ic3core");
76
74
  var LiveChatVersion_1 = require("./core/LiveChatVersion");
77
- var WebUtils_1 = require("./utils/WebUtils");
75
+ var LiveWorkItemState_1 = require("./core/LiveWorkItemState");
78
76
  var MessageContentType_1 = require("@microsoft/omnichannel-ic3core/lib/model/MessageContentType");
79
77
  var MessageType_1 = require("@microsoft/omnichannel-ic3core/lib/model/MessageType");
80
78
  var PersonType_1 = require("@microsoft/omnichannel-ic3core/lib/model/PersonType");
81
- var platform_1 = require("./utils/platform");
82
79
  var ProtocoleType_1 = require("@microsoft/omnichannel-ic3core/lib/interfaces/ProtocoleType");
83
80
  var ScenarioMarker_1 = require("./telemetry/ScenarioMarker");
84
- var ocsdk_1 = require("@microsoft/ocsdk");
85
- var omnichannel_ic3core_1 = require("@microsoft/omnichannel-ic3core");
86
81
  var TelemetryEvent_1 = require("./telemetry/TelemetryEvent");
82
+ var omnichannel_amsclient_1 = require("@microsoft/omnichannel-amsclient");
83
+ var createOmnichannelMessage_1 = require("./utils/createOmnichannelMessage");
84
+ var createTelemetry_1 = require("./utils/createTelemetry");
85
+ var createVoiceVideoCalling_1 = require("./api/createVoiceVideoCalling");
86
+ var MessageTags_1 = require("./core/messaging/MessageTags");
87
+ var locale_1 = require("./utils/locale");
88
+ var utilities_1 = require("./utils/utilities");
89
+ var libraries_1 = require("./utils/libraries");
90
+ var WebUtils_1 = require("./utils/WebUtils");
87
91
  var OmnichannelConfigValidator_1 = require("./validators/OmnichannelConfigValidator");
88
- var SDKConfigValidators_1 = require("./validators/SDKConfigValidators");
89
92
  var OmnichannelChatSDK = /** @class */ (function () {
90
93
  function OmnichannelChatSDK(omnichannelConfig, chatSDKConfig) {
91
94
  if (chatSDKConfig === void 0) { chatSDKConfig = SDKConfigValidators_1.defaultChatSDKConfig; }
@@ -106,11 +109,13 @@ var OmnichannelChatSDK = /** @class */ (function () {
106
109
  this.reconnectId = null;
107
110
  this.refreshTokenTimer = null;
108
111
  this.debug = false;
112
+ this.runtimeId = ocsdk_1.uuidv4();
109
113
  this.omnichannelConfig = omnichannelConfig;
110
114
  this.chatSDKConfig = __assign(__assign({}, SDKConfigValidators_1.defaultChatSDKConfig), chatSDKConfig // overrides
111
115
  );
112
116
  this.isInitialized = false;
113
117
  this.liveChatVersion = LiveChatVersion_1.default.V1;
118
+ this.localeId = locale_1.defaultLocaleId;
114
119
  this.requestId = ocsdk_1.uuidv4();
115
120
  this.chatToken = {};
116
121
  this.liveChatConfig = {};
@@ -128,6 +133,11 @@ var OmnichannelChatSDK = /** @class */ (function () {
128
133
  this.ocSdkLogger.useTelemetry(this.telemetry);
129
134
  this.acsClientLogger.useTelemetry(this.telemetry);
130
135
  this.acsAdapterLogger.useTelemetry(this.telemetry);
136
+ this.scenarioMarker.setRuntimeId(this.runtimeId);
137
+ this.ic3ClientLogger.setRuntimeId(this.runtimeId);
138
+ this.ocSdkLogger.setRuntimeId(this.runtimeId);
139
+ this.acsClientLogger.setRuntimeId(this.runtimeId);
140
+ this.acsAdapterLogger.setRuntimeId(this.runtimeId);
131
141
  OmnichannelConfigValidator_1.default(omnichannelConfig);
132
142
  SDKConfigValidators_1.default(chatSDKConfig);
133
143
  ((_a = this.chatSDKConfig.telemetry) === null || _a === void 0 ? void 0 : _a.disable) && ((_b = this.telemetry) === null || _b === void 0 ? void 0 : _b.disable());
@@ -291,44 +301,52 @@ var OmnichannelChatSDK = /** @class */ (function () {
291
301
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
292
302
  if (optionalParams === void 0) { optionalParams = {}; }
293
303
  return __awaiter(this, void 0, void 0, function () {
294
- var reconnectableChatsParams, reconnectableChatsResponse, _p, exceptionDetails, conversationDetails, exceptionDetails, exceptionDetails, sessionInitOptionalParams, error_3, exceptionDetails, chatAdapterConfig, error_4, exceptionDetails, _q, error_5, exceptionDetails, error_6, exceptionDetails, error_7, exceptionDetails, _r, error_8, exceptionDetails;
304
+ var shouldReinitIC3Client, _p, reconnectableChatsParams, reconnectableChatsResponse, _q, exceptionDetails, conversationDetails, exceptionDetails, exceptionDetails, sessionInitOptionalParams, error_3, exceptionDetails, chatAdapterConfig, error_4, exceptionDetails, _r, error_5, exceptionDetails, error_6, exceptionDetails, error_7, exceptionDetails, _s, error_8, exceptionDetails;
295
305
  var _this = this;
296
- return __generator(this, function (_s) {
297
- switch (_s.label) {
306
+ return __generator(this, function (_t) {
307
+ switch (_t.label) {
298
308
  case 0:
299
309
  this.scenarioMarker.startScenario(TelemetryEvent_1.default.StartChat, {
300
310
  RequestId: this.requestId
301
311
  });
312
+ shouldReinitIC3Client = !platform_1.default.isNode() && !platform_1.default.isReactNative() && !this.IC3Client && this.liveChatVersion === LiveChatVersion_1.default.V1;
313
+ if (!shouldReinitIC3Client) return [3 /*break*/, 2];
314
+ _p = this;
315
+ return [4 /*yield*/, this.getIC3Client()];
316
+ case 1:
317
+ _p.IC3Client = _t.sent();
318
+ _t.label = 2;
319
+ case 2:
302
320
  if (this.isChatReconnect && !((_a = this.chatSDKConfig.chatReconnect) === null || _a === void 0 ? void 0 : _a.disable) && !this.isPersistentChat && optionalParams.reconnectId) {
303
321
  this.reconnectId = optionalParams.reconnectId;
304
322
  }
305
- if (!(this.isPersistentChat && !((_b = this.chatSDKConfig.persistentChat) === null || _b === void 0 ? void 0 : _b.disable))) return [3 /*break*/, 4];
306
- _s.label = 1;
307
- case 1:
308
- _s.trys.push([1, 3, , 4]);
323
+ if (!(this.isPersistentChat && !((_b = this.chatSDKConfig.persistentChat) === null || _b === void 0 ? void 0 : _b.disable))) return [3 /*break*/, 6];
324
+ _t.label = 3;
325
+ case 3:
326
+ _t.trys.push([3, 5, , 6]);
309
327
  reconnectableChatsParams = {
310
328
  authenticatedUserToken: this.authenticatedUserToken
311
329
  };
312
330
  return [4 /*yield*/, this.OCClient.getReconnectableChats(reconnectableChatsParams)];
313
- case 2:
314
- reconnectableChatsResponse = _s.sent();
331
+ case 4:
332
+ reconnectableChatsResponse = _t.sent();
315
333
  if (reconnectableChatsResponse && reconnectableChatsResponse.reconnectid) {
316
334
  this.reconnectId = reconnectableChatsResponse.reconnectid;
317
335
  }
318
- return [3 /*break*/, 4];
319
- case 3:
320
- _p = _s.sent();
336
+ return [3 /*break*/, 6];
337
+ case 5:
338
+ _q = _t.sent();
321
339
  exceptionDetails = {
322
340
  response: "OCClientGetReconnectableChatsFailed"
323
341
  };
324
342
  throw Error(exceptionDetails.response);
325
- case 4:
326
- if (!(optionalParams.liveChatContext && !this.isPersistentChat && !this.isChatReconnect)) return [3 /*break*/, 6];
343
+ case 6:
344
+ if (!(optionalParams.liveChatContext && !this.reconnectId)) return [3 /*break*/, 8];
327
345
  this.chatToken = optionalParams.liveChatContext.chatToken || {};
328
346
  this.requestId = optionalParams.liveChatContext.requestId || ocsdk_1.uuidv4();
329
347
  return [4 /*yield*/, this.getConversationDetails()];
330
- case 5:
331
- conversationDetails = _s.sent();
348
+ case 7:
349
+ conversationDetails = _t.sent();
332
350
  if (Object.keys(conversationDetails).length === 0) {
333
351
  exceptionDetails = {
334
352
  response: "InvalidConversation"
@@ -353,14 +371,14 @@ var OmnichannelChatSDK = /** @class */ (function () {
353
371
  console.error("Unable to join conversation that's in '" + conversationDetails.state + "' state");
354
372
  throw Error(exceptionDetails.response);
355
373
  }
356
- _s.label = 6;
357
- case 6:
358
- if (!(this.chatToken && Object.keys(this.chatToken).length === 0)) return [3 /*break*/, 8];
359
- return [4 /*yield*/, this.getChatToken(false)];
360
- case 7:
361
- _s.sent();
362
- _s.label = 8;
374
+ _t.label = 8;
363
375
  case 8:
376
+ if (!(this.chatToken && Object.keys(this.chatToken).length === 0)) return [3 /*break*/, 10];
377
+ return [4 /*yield*/, this.getChatToken(false)];
378
+ case 9:
379
+ _t.sent();
380
+ _t.label = 10;
381
+ case 10:
364
382
  (_c = this.ic3ClientLogger) === null || _c === void 0 ? void 0 : _c.setChatId(this.chatToken.chatId || '');
365
383
  (_d = this.ocSdkLogger) === null || _d === void 0 ? void 0 : _d.setChatId(this.chatToken.chatId || '');
366
384
  (_e = this.acsClientLogger) === null || _e === void 0 ? void 0 : _e.setChatId(this.chatToken.chatId || '');
@@ -368,6 +386,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
368
386
  sessionInitOptionalParams = {
369
387
  initContext: {}
370
388
  };
389
+ sessionInitOptionalParams.initContext.locale = locale_1.getLocaleStringFromId(this.localeId);
371
390
  if (this.isPersistentChat && !((_g = this.chatSDKConfig.persistentChat) === null || _g === void 0 ? void 0 : _g.disable)) {
372
391
  sessionInitOptionalParams.reconnectId = this.reconnectId;
373
392
  }
@@ -399,15 +418,16 @@ var OmnichannelChatSDK = /** @class */ (function () {
399
418
  if (this.authenticatedUserToken) {
400
419
  sessionInitOptionalParams.authenticatedUserToken = this.authenticatedUserToken;
401
420
  }
402
- _s.label = 9;
403
- case 9:
404
- _s.trys.push([9, 11, , 12]);
405
- return [4 /*yield*/, this.OCClient.sessionInit(this.requestId, sessionInitOptionalParams)];
406
- case 10:
407
- _s.sent();
408
- return [3 /*break*/, 12];
421
+ if (!!optionalParams.liveChatContext) return [3 /*break*/, 14];
422
+ _t.label = 11;
409
423
  case 11:
410
- error_3 = _s.sent();
424
+ _t.trys.push([11, 13, , 14]);
425
+ return [4 /*yield*/, this.OCClient.sessionInit(this.requestId, sessionInitOptionalParams)];
426
+ case 12:
427
+ _t.sent();
428
+ return [3 /*break*/, 14];
429
+ case 13:
430
+ error_3 = _t.sent();
411
431
  exceptionDetails = {
412
432
  response: "OCClientSessionInitFailed"
413
433
  };
@@ -418,8 +438,8 @@ var OmnichannelChatSDK = /** @class */ (function () {
418
438
  });
419
439
  console.error("OmnichannelChatSDK/startChat/sessionInit/error " + error_3);
420
440
  return [2 /*return*/, error_3];
421
- case 12:
422
- if (!(this.liveChatVersion === LiveChatVersion_1.default.V2)) return [3 /*break*/, 23];
441
+ case 14:
442
+ if (!(this.liveChatVersion === LiveChatVersion_1.default.V2)) return [3 /*break*/, 25];
423
443
  chatAdapterConfig = {
424
444
  token: this.chatToken.token,
425
445
  id: this.chatToken.visitorId || 'teamsvisitor',
@@ -427,18 +447,18 @@ var OmnichannelChatSDK = /** @class */ (function () {
427
447
  environmentUrl: this.chatToken.acsEndpoint,
428
448
  pollingInterval: 1000
429
449
  };
430
- _s.label = 13;
431
- case 13:
432
- _s.trys.push([13, 15, , 16]);
450
+ _t.label = 15;
451
+ case 15:
452
+ _t.trys.push([15, 17, , 18]);
433
453
  return [4 /*yield*/, ((_j = this.ACSClient) === null || _j === void 0 ? void 0 : _j.initialize({
434
454
  token: chatAdapterConfig.token,
435
455
  environmentUrl: chatAdapterConfig.environmentUrl
436
456
  }))];
437
- case 14:
438
- _s.sent();
439
- return [3 /*break*/, 16];
440
- case 15:
441
- error_4 = _s.sent();
457
+ case 16:
458
+ _t.sent();
459
+ return [3 /*break*/, 18];
460
+ case 17:
461
+ error_4 = _t.sent();
442
462
  exceptionDetails = {
443
463
  response: "ACSClientInitializeFailed"
444
464
  };
@@ -449,23 +469,23 @@ var OmnichannelChatSDK = /** @class */ (function () {
449
469
  });
450
470
  console.error("OmnichannelChatSDK/startChat/initialize/error " + error_4);
451
471
  return [2 /*return*/, error_4];
452
- case 16:
453
- _s.trys.push([16, 18, , 19]);
454
- _q = this;
472
+ case 18:
473
+ _t.trys.push([18, 20, , 21]);
474
+ _r = this;
455
475
  return [4 /*yield*/, ((_k = this.ACSClient) === null || _k === void 0 ? void 0 : _k.joinConversation({
456
476
  id: chatAdapterConfig.id,
457
477
  threadId: chatAdapterConfig.threadId,
458
478
  pollingInterval: chatAdapterConfig.pollingInterval
459
479
  }))];
460
- case 17:
461
- _q.conversation = (_s.sent());
480
+ case 19:
481
+ _r.conversation = (_t.sent());
462
482
  this.scenarioMarker.completeScenario(TelemetryEvent_1.default.StartChat, {
463
483
  RequestId: this.requestId,
464
484
  ChatId: this.chatToken.chatId
465
485
  });
466
- return [3 /*break*/, 19];
467
- case 18:
468
- error_5 = _s.sent();
486
+ return [3 /*break*/, 21];
487
+ case 20:
488
+ error_5 = _t.sent();
469
489
  exceptionDetails = {
470
490
  response: "ACSClientJoinConversationFailed"
471
491
  };
@@ -476,16 +496,16 @@ var OmnichannelChatSDK = /** @class */ (function () {
476
496
  });
477
497
  console.error("OmnichannelChatSDK/startChat/joinConversation/error " + error_5);
478
498
  throw Error(exceptionDetails.response);
479
- case 19:
480
- _s.trys.push([19, 21, , 22]);
499
+ case 21:
500
+ _t.trys.push([21, 23, , 24]);
481
501
  return [4 /*yield*/, ((_l = this.AMSClient) === null || _l === void 0 ? void 0 : _l.initialize({
482
502
  chatToken: this.chatToken
483
503
  }))];
484
- case 20:
485
- _s.sent();
486
- return [3 /*break*/, 22];
487
- case 21:
488
- error_6 = _s.sent();
504
+ case 22:
505
+ _t.sent();
506
+ return [3 /*break*/, 24];
507
+ case 23:
508
+ error_6 = _t.sent();
489
509
  exceptionDetails = {
490
510
  response: "AMSClientInitializeFailed"
491
511
  };
@@ -495,19 +515,19 @@ var OmnichannelChatSDK = /** @class */ (function () {
495
515
  ExceptionDetails: JSON.stringify(exceptionDetails)
496
516
  });
497
517
  throw Error(exceptionDetails.response);
498
- case 22: return [3 /*break*/, 29];
499
- case 23:
500
- _s.trys.push([23, 25, , 26]);
518
+ case 24: return [3 /*break*/, 31];
519
+ case 25:
520
+ _t.trys.push([25, 27, , 28]);
501
521
  return [4 /*yield*/, this.IC3Client.initialize({
502
522
  token: this.chatToken.token,
503
523
  regionGtms: this.chatToken.regionGTMS,
504
524
  visitor: true
505
525
  })];
506
- case 24:
507
- _s.sent();
508
- return [3 /*break*/, 26];
509
- case 25:
510
- error_7 = _s.sent();
526
+ case 26:
527
+ _t.sent();
528
+ return [3 /*break*/, 28];
529
+ case 27:
530
+ error_7 = _t.sent();
511
531
  exceptionDetails = {
512
532
  response: "IC3ClientInitializeFailed"
513
533
  };
@@ -518,19 +538,19 @@ var OmnichannelChatSDK = /** @class */ (function () {
518
538
  });
519
539
  console.error("OmnichannelChatSDK/startChat/initialize/error " + error_7);
520
540
  return [2 /*return*/, error_7];
521
- case 26:
522
- _s.trys.push([26, 28, , 29]);
523
- _r = this;
541
+ case 28:
542
+ _t.trys.push([28, 30, , 31]);
543
+ _s = this;
524
544
  return [4 /*yield*/, this.IC3Client.joinConversation(this.chatToken.chatId)];
525
- case 27:
526
- _r.conversation = _s.sent();
545
+ case 29:
546
+ _s.conversation = _t.sent();
527
547
  this.scenarioMarker.completeScenario(TelemetryEvent_1.default.StartChat, {
528
548
  RequestId: this.requestId,
529
549
  ChatId: this.chatToken.chatId
530
550
  });
531
- return [3 /*break*/, 29];
532
- case 28:
533
- error_8 = _s.sent();
551
+ return [3 /*break*/, 31];
552
+ case 30:
553
+ error_8 = _t.sent();
534
554
  exceptionDetails = {
535
555
  response: "IC3ClientJoinConversationFailed"
536
556
  };
@@ -541,7 +561,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
541
561
  });
542
562
  console.error("OmnichannelChatSDK/startChat/joinConversation/error " + error_8);
543
563
  return [2 /*return*/, error_8];
544
- case 29:
564
+ case 31:
545
565
  if (this.isPersistentChat && !((_m = this.chatSDKConfig.persistentChat) === null || _m === void 0 ? void 0 : _m.disable)) {
546
566
  this.refreshTokenTimer = setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
547
567
  return __generator(this, function (_a) {
@@ -579,6 +599,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
579
599
  }
580
600
  if (this.isChatReconnect && !((_b = this.chatSDKConfig.chatReconnect) === null || _b === void 0 ? void 0 : _b.disable) && !this.isPersistentChat) {
581
601
  isChatReconnect = this.reconnectId !== null ? true : false;
602
+ this.requestId = isChatReconnect ? this.reconnectId : this.requestId; // Chat Reconnect session to close
582
603
  sessionCloseOptionalParams.isReconnectChat = isChatReconnect;
583
604
  }
584
605
  if (this.authenticatedUserToken) {
@@ -599,6 +620,9 @@ var OmnichannelChatSDK = /** @class */ (function () {
599
620
  this.requestId = ocsdk_1.uuidv4();
600
621
  this.chatToken = {};
601
622
  this.reconnectId = null;
623
+ this.IC3Client.dispose();
624
+ !platform_1.default.isNode() && !platform_1.default.isReactNative() && WebUtils_1.removeElementById(this.IC3Client.id);
625
+ this.IC3Client = null;
602
626
  (_d = this.ic3ClientLogger) === null || _d === void 0 ? void 0 : _d.setRequestId(this.requestId);
603
627
  (_e = this.ic3ClientLogger) === null || _e === void 0 ? void 0 : _e.setChatId('');
604
628
  (_f = this.ocSdkLogger) === null || _f === void 0 ? void 0 : _f.setRequestId(this.requestId);
@@ -896,6 +920,13 @@ var OmnichannelChatSDK = /** @class */ (function () {
896
920
  sendMessageRequest = {
897
921
  content: message.content,
898
922
  };
923
+ sendMessageRequest.metadata = {
924
+ widgetId: this.omnichannelConfig.widgetId,
925
+ clientMessageId: Date.now().toString()
926
+ };
927
+ if (message.metadata) {
928
+ sendMessageRequest.metadata = __assign(__assign({}, sendMessageRequest.metadata), message.metadata);
929
+ }
899
930
  _e.label = 1;
900
931
  case 1:
901
932
  _e.trys.push([1, 3, , 4]);
@@ -1278,7 +1309,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
1278
1309
  };
1279
1310
  sendMessageRequest = {
1280
1311
  content: '',
1281
- metadata: __assign(__assign({}, fileIdsProperty), fileMetaProperty)
1312
+ metadata: __assign(__assign({ widgetId: this.omnichannelConfig.widgetId, clientMessageId: Date.now().toString() }, fileIdsProperty), fileMetaProperty)
1282
1313
  };
1283
1314
  messageToSend = {
1284
1315
  content: "",
@@ -1439,7 +1470,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
1439
1470
  ChatId: this.chatToken.chatId,
1440
1471
  EmailAddress: body.emailAddress,
1441
1472
  DefaultAttachmentMessage: body.attachmentMessage,
1442
- CustomerLocale: body.locale
1473
+ CustomerLocale: body.locale || locale_1.getLocaleStringFromId(this.localeId)
1443
1474
  };
1444
1475
  emailResponse = this.OCClient.emailTranscript(this.requestId, this.chatToken.token, emailRequestBody, emailTranscriptOptionalParams);
1445
1476
  this.scenarioMarker.completeScenario(TelemetryEvent_1.default.EmailLiveChatTranscript, {
@@ -1504,16 +1535,20 @@ var OmnichannelChatSDK = /** @class */ (function () {
1504
1535
  }
1505
1536
  if (protocol === ChatAdapterProtocols_1.default.ACS || this.liveChatVersion === LiveChatVersion_1.default.V2) {
1506
1537
  return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
1507
- var featuresOption, acsAdapterCDNUrl;
1538
+ var egressMiddlewares, ingressMiddlewares, featuresOption, acsAdapterCDNUrl;
1508
1539
  var _this = this;
1509
1540
  var _a;
1510
1541
  return __generator(this, function (_b) {
1511
1542
  switch (_b.label) {
1512
1543
  case 0:
1544
+ egressMiddlewares = [createFormatEgressTagsMiddleware_1.default()];
1545
+ ingressMiddlewares = [createFormatIngressTagsMiddleware_1.default()];
1513
1546
  featuresOption = {
1514
- enableAdaptiveCards: false,
1547
+ enableAdaptiveCards: true,
1515
1548
  enableThreadMemberUpdateNotification: true,
1516
- enableLeaveThreadOnWindowClosed: false
1549
+ enableLeaveThreadOnWindowClosed: false,
1550
+ egressMiddleware: egressMiddlewares,
1551
+ ingressMiddleware: ingressMiddlewares
1517
1552
  };
1518
1553
  acsAdapterCDNUrl = this.resolveChatAdapterUrl(protocol || ChatAdapterProtocols_1.default.ACS);
1519
1554
  (_a = this.telemetry) === null || _a === void 0 ? void 0 : _a.setCDNPackages({
@@ -1525,7 +1560,8 @@ var OmnichannelChatSDK = /** @class */ (function () {
1525
1560
  try {
1526
1561
  var ChatAdapter = window.ChatAdapter; // eslint-disable-line @typescript-eslint/no-explicit-any
1527
1562
  var fileManager = new AMSFileManager_1.default(_this.AMSClient, _this.acsAdapterLogger);
1528
- var adapter = ChatAdapter.createACSAdapter(_this.chatToken.token, _this.chatToken.visitorId || 'teamsvisitor', _this.chatToken.chatId, _this.chatToken.acsEndpoint, fileManager, 1000, ACSParticipantDisplayName_1.default.Customer, undefined, featuresOption);
1563
+ var adapter = ChatAdapter.createACSAdapter(_this.chatToken.token, _this.chatToken.visitorId || 'teamsvisitor', _this.chatToken.chatId, _this.chatToken.acsEndpoint, fileManager, 1000, ACSParticipantDisplayName_1.default.Customer, undefined, undefined, // logger
1564
+ featuresOption);
1529
1565
  resolve(adapter);
1530
1566
  }
1531
1567
  catch (_a) {
@@ -1566,8 +1602,6 @@ var OmnichannelChatSDK = /** @class */ (function () {
1566
1602
  };
1567
1603
  var adapter = new window.Microsoft.BotFramework.WebChat.IC3Adapter(adapterConfig);
1568
1604
  adapter.logger = _this.ic3ClientLogger;
1569
- // Keep iframe communication alive to reuse the same IC3Client instance
1570
- window.Microsoft.BotFramework.WebChat.IC3SDKProvider.disposeSdk = function () { }; // eslint-disable-line @typescript-eslint/no-empty-function
1571
1605
  _this.scenarioMarker.completeScenario(TelemetryEvent_1.default.CreateIC3Adapter);
1572
1606
  resolve(adapter);
1573
1607
  }, function () {
@@ -1659,6 +1693,92 @@ var OmnichannelChatSDK = /** @class */ (function () {
1659
1693
  });
1660
1694
  });
1661
1695
  };
1696
+ OmnichannelChatSDK.prototype.getPostChatSurveyContext = function () {
1697
+ return __awaiter(this, void 0, void 0, function () {
1698
+ var conversationId, liveWSAndLiveChatEngJoin, msdyn_postconversationsurveyenable, msfp_sourcesurveyidentifier, postConversationSurveyOwnerId, liveWorkItemDetails, participantJoined, surveyInviteLinkRequest, optionalParams, surveyInviteLinkResponse, surveyInviteLink, formsProLocale, postChatContext, ex_1;
1699
+ return __generator(this, function (_a) {
1700
+ switch (_a.label) {
1701
+ case 0:
1702
+ this.scenarioMarker.startScenario(TelemetryEvent_1.default.GetPostChatSurveyContext, {
1703
+ RequestId: this.requestId
1704
+ });
1705
+ _a.label = 1;
1706
+ case 1:
1707
+ _a.trys.push([1, 6, , 7]);
1708
+ liveWSAndLiveChatEngJoin = this.liveChatConfig.LiveWSAndLiveChatEngJoin;
1709
+ msdyn_postconversationsurveyenable = liveWSAndLiveChatEngJoin.msdyn_postconversationsurveyenable, msfp_sourcesurveyidentifier = liveWSAndLiveChatEngJoin.msfp_sourcesurveyidentifier, postConversationSurveyOwnerId = liveWSAndLiveChatEngJoin.postConversationSurveyOwnerId;
1710
+ if (!msdyn_postconversationsurveyenable) return [3 /*break*/, 4];
1711
+ return [4 /*yield*/, this.OCClient.getLWIDetails(this.requestId)];
1712
+ case 2:
1713
+ liveWorkItemDetails = _a.sent();
1714
+ participantJoined = (liveWorkItemDetails === null || liveWorkItemDetails === void 0 ? void 0 : liveWorkItemDetails.CanRenderPostChat) && (liveWorkItemDetails === null || liveWorkItemDetails === void 0 ? void 0 : liveWorkItemDetails.CanRenderPostChat) === "True";
1715
+ conversationId = liveWorkItemDetails === null || liveWorkItemDetails === void 0 ? void 0 : liveWorkItemDetails.ConversationId;
1716
+ surveyInviteLinkRequest = {
1717
+ "FormId": msfp_sourcesurveyidentifier,
1718
+ "ConversationId": conversationId,
1719
+ "OCLocaleCode": locale_1.getLocaleStringFromId(this.localeId) || locale_1.getLocaleStringFromId(locale_1.defaultLocaleId)
1720
+ };
1721
+ optionalParams = {
1722
+ "requestId": this.requestId
1723
+ };
1724
+ if (this.authenticatedUserToken) {
1725
+ optionalParams.authenticatedUserToken = this.authenticatedUserToken;
1726
+ }
1727
+ return [4 /*yield*/, this.OCClient.getSurveyInviteLink(postConversationSurveyOwnerId, surveyInviteLinkRequest)];
1728
+ case 3:
1729
+ surveyInviteLinkResponse = _a.sent();
1730
+ surveyInviteLink = void 0, formsProLocale = void 0;
1731
+ if (surveyInviteLinkResponse != null) {
1732
+ if (surveyInviteLinkResponse.inviteList != null && surveyInviteLinkResponse.inviteList.length == 1) {
1733
+ surveyInviteLink = surveyInviteLinkResponse.inviteList[0].invitationLink;
1734
+ }
1735
+ else {
1736
+ this.scenarioMarker.failScenario(TelemetryEvent_1.default.GetPostChatSurveyContext, {
1737
+ ConversationId: conversationId,
1738
+ RequestId: this.requestId,
1739
+ ExceptionDetails: "Survey Invite link failed to send response."
1740
+ });
1741
+ return [2 /*return*/, Promise.reject("Survey Invite link failed to send response.")];
1742
+ }
1743
+ if (surveyInviteLinkResponse.formsProLocaleCode != null) {
1744
+ formsProLocale = surveyInviteLinkResponse.formsProLocaleCode;
1745
+ }
1746
+ postChatContext = {
1747
+ participantJoined: participantJoined,
1748
+ surveyInviteLink: surveyInviteLink,
1749
+ formsProLocale: formsProLocale
1750
+ };
1751
+ return [2 /*return*/, Promise.resolve(postChatContext)];
1752
+ }
1753
+ else {
1754
+ this.scenarioMarker.failScenario(TelemetryEvent_1.default.GetPostChatSurveyContext, {
1755
+ ConversationId: conversationId,
1756
+ RequestId: this.requestId,
1757
+ ExceptionDetails: "surveyInviteLinkResponse is null."
1758
+ });
1759
+ return [2 /*return*/, Promise.reject("surveyInviteLinkResponse is null.")];
1760
+ }
1761
+ return [3 /*break*/, 5];
1762
+ case 4:
1763
+ this.scenarioMarker.failScenario(TelemetryEvent_1.default.GetPostChatSurveyContext, {
1764
+ RequestId: this.requestId,
1765
+ ExceptionDetails: "Post Chat Survey is disabled. Please check the Omnichannel Administration Portal."
1766
+ });
1767
+ return [2 /*return*/, Promise.reject("Post Chat is disabled from admin side.")];
1768
+ case 5: return [3 /*break*/, 7];
1769
+ case 6:
1770
+ ex_1 = _a.sent();
1771
+ this.scenarioMarker.failScenario(TelemetryEvent_1.default.GetPostChatSurveyContext, {
1772
+ ConversationId: conversationId,
1773
+ RequestId: this.requestId,
1774
+ ExceptionDetails: JSON.stringify(ex_1)
1775
+ });
1776
+ return [2 /*return*/, Promise.reject("Retrieving post chat context failed " + JSON.stringify(ex_1))];
1777
+ case 7: return [2 /*return*/];
1778
+ }
1779
+ });
1780
+ });
1781
+ };
1662
1782
  OmnichannelChatSDK.prototype.getIC3Client = function () {
1663
1783
  return __awaiter(this, void 0, void 0, function () {
1664
1784
  var IC3Client;
@@ -1685,7 +1805,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
1685
1805
  this.debug && console.debug('IC3Client');
1686
1806
  // Use IC3Client if browser is detected
1687
1807
  return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
1688
- var ic3ClientCDNUrl;
1808
+ var ic3ClientCDNUrl, IC3Client;
1689
1809
  var _this = this;
1690
1810
  var _a;
1691
1811
  return __generator(this, function (_b) {
@@ -1696,6 +1816,16 @@ var OmnichannelChatSDK = /** @class */ (function () {
1696
1816
  IC3Client: ic3ClientCDNUrl
1697
1817
  });
1698
1818
  this.scenarioMarker.startScenario(TelemetryEvent_1.default.GetIC3Client);
1819
+ if (!this.IC3SDKProvider) return [3 /*break*/, 2];
1820
+ return [4 /*yield*/, this.IC3SDKProvider.getSDK({
1821
+ hostType: HostType_1.default.IFrame,
1822
+ protocolType: ProtocoleType_1.default.IC3V1SDK,
1823
+ logger: this.ic3ClientLogger // eslint-disable-line @typescript-eslint/no-explicit-any
1824
+ })];
1825
+ case 1:
1826
+ IC3Client = _b.sent();
1827
+ return [2 /*return*/, resolve(IC3Client)];
1828
+ case 2:
1699
1829
  window.addEventListener("ic3:sdk:load", function () { return __awaiter(_this, void 0, void 0, function () {
1700
1830
  var ic3sdk, IC3SDKProvider, IC3Client;
1701
1831
  return __generator(this, function (_a) {
@@ -1732,7 +1862,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
1732
1862
  });
1733
1863
  reject('Failed to load IC3Client');
1734
1864
  })];
1735
- case 1:
1865
+ case 3:
1736
1866
  _b.sent();
1737
1867
  return [2 /*return*/];
1738
1868
  }
@@ -1744,7 +1874,7 @@ var OmnichannelChatSDK = /** @class */ (function () {
1744
1874
  };
1745
1875
  OmnichannelChatSDK.prototype.getChatConfig = function () {
1746
1876
  return __awaiter(this, void 0, void 0, function () {
1747
- var liveChatConfig, dataMaskingConfig, authSettings, liveWSAndLiveChatEngJoin, liveChatVersion, setting, preChatSurvey, msdyn_prechatenabled, msdyn_callingoptions, msdyn_conversationmode, msdyn_enablechatreconnect, isPreChatEnabled, isChatReconnectEnabled, token, exceptionDetails, _a, exceptionDetails, exceptionDetails, error_18;
1877
+ var liveChatConfig, dataMaskingConfig, authSettings, liveWSAndLiveChatEngJoin, liveChatVersion, chatWidgetLanguage, msdyn_localeid, setting, preChatSurvey, msdyn_prechatenabled, msdyn_callingoptions, msdyn_conversationmode, msdyn_enablechatreconnect, isPreChatEnabled, isChatReconnectEnabled, token, exceptionDetails, _a, exceptionDetails, exceptionDetails, error_18;
1748
1878
  return __generator(this, function (_b) {
1749
1879
  switch (_b.label) {
1750
1880
  case 0:
@@ -1752,7 +1882,9 @@ var OmnichannelChatSDK = /** @class */ (function () {
1752
1882
  return [4 /*yield*/, this.OCClient.getChatConfig()];
1753
1883
  case 1:
1754
1884
  liveChatConfig = _b.sent();
1755
- dataMaskingConfig = liveChatConfig.DataMaskingInfo, authSettings = liveChatConfig.LiveChatConfigAuthSettings, liveWSAndLiveChatEngJoin = liveChatConfig.LiveWSAndLiveChatEngJoin, liveChatVersion = liveChatConfig.LiveChatVersion;
1885
+ dataMaskingConfig = liveChatConfig.DataMaskingInfo, authSettings = liveChatConfig.LiveChatConfigAuthSettings, liveWSAndLiveChatEngJoin = liveChatConfig.LiveWSAndLiveChatEngJoin, liveChatVersion = liveChatConfig.LiveChatVersion, chatWidgetLanguage = liveChatConfig.ChatWidgetLanguage;
1886
+ msdyn_localeid = chatWidgetLanguage.msdyn_localeid;
1887
+ this.localeId = msdyn_localeid || locale_1.defaultLocaleId;
1756
1888
  this.liveChatVersion = liveChatVersion || LiveChatVersion_1.default.V1;
1757
1889
  /* istanbul ignore next */
1758
1890
  this.debug && console.log("[OmnichannelChatSDK][getChatConfig][liveChatVersion] " + this.liveChatVersion);