@livechat/customer-sdk 2.0.4 → 3.1.1

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.
@@ -1,19 +1,19 @@
1
- import { mapValues, noop, hasOwn, identity, isObject, pickOwn, toPairs, generateUniqueId, pick, keyBy, isEmpty, flatMap, includes, last, numericSortBy, stringCompare, uniqBy } from '@livechat/data-utils';
2
- import deferred from '@livechat/deferred';
1
+ import createAuth, { validateConfig } from '@livechat/customer-auth';
2
+ import mitt from '@livechat/mitt';
3
+ import { hasOwn, identity, toPairs, pickOwn, isObject, generateUniqueId, noop, pick, mapValues, keyBy, values, includes, isEmpty, numericSortBy, uniqBy, flatMap, last, stringCompare } from '@livechat/data-utils';
3
4
  import { createStore, applyMiddleware } from 'redux';
4
5
  import createSideEffectsMiddleware from '@livechat/side-effects-middleware';
5
- import storage from '@livechat/isomorphic-storage';
6
+ import deferred from '@livechat/deferred';
6
7
  import promiseTry from '@livechat/promise-try';
7
- import Backo from 'backo2';
8
+ import createBackoff from '@livechat/backoff';
9
+ import storage from '@livechat/isomorphic-storage';
8
10
  import unfetch from 'unfetch';
9
11
  import { buildQueryString } from '@livechat/url-utils';
10
12
  import createPlatformClient from '@livechat/platform-client';
11
- import mitt from '@livechat/mitt';
12
13
  import rawUploadFile from '@livechat/file-upload';
13
- import createAuth, { validateConfig } from '@livechat/customer-auth';
14
14
 
15
15
  function _extends() {
16
- _extends = Object.assign || function (target) {
16
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
17
17
  for (var i = 1; i < arguments.length; i++) {
18
18
  var source = arguments[i];
19
19
 
@@ -26,7 +26,6 @@ function _extends() {
26
26
 
27
27
  return target;
28
28
  };
29
-
30
29
  return _extends.apply(this, arguments);
31
30
  }
32
31
 
@@ -90,11 +89,13 @@ var CONNECTION_LOST = 'CONNECTION_LOST';
90
89
  var IDENTITY_MISMATCH = 'IDENTITY_MISMATCH';
91
90
  var MISDIRECTED_CONNECTION = 'MISDIRECTED_CONNECTION';
92
91
  var MISSING_CHAT_THREAD = 'MISSING_CHAT_THREAD';
92
+ var NO_CONNECTION = 'NO_CONNECTION';
93
93
  var REQUEST_TIMEOUT = 'REQUEST_TIMEOUT';
94
- var TOO_MANY_UNAUTHORIZED_CONNECTIONS = 'TOO_MANY_UNAUTHORIZED_CONNECTIONS';
94
+ var SDK_DESTROYED = 'SDK_DESTROYED';
95
+ var SERVICE_TEMPORARILY_UNAVAILABLE = 'SERVICE_TEMPORARILY_UNAVAILABLE';
96
+ var TOO_BIG_FILE = 'TOO_BIG_FILE';
95
97
 
96
98
  var ACCEPT_GREETING = 'accept_greeting';
97
- var ACTIVATE_CHAT = 'activate_chat';
98
99
  var CANCEL_GREETING = 'cancel_greeting';
99
100
  var CHECK_GOALS$1 = 'check_goals';
100
101
  var DEACTIVATE_CHAT = 'deactivate_chat';
@@ -111,6 +112,7 @@ var LIST_GROUP_STATUSES = 'list_group_statuses';
111
112
  var LIST_THREADS = 'list_threads';
112
113
  var LOGIN = 'login';
113
114
  var MARK_EVENTS_AS_SEEN = 'mark_events_as_seen';
115
+ var RESUME_CHAT = 'resume_chat';
114
116
  var SEND_EVENT = 'send_event';
115
117
  var SEND_RICH_MESSAGE_POSTBACK = 'send_rich_message_postback';
116
118
  var SEND_SNEAK_PEEK = 'send_sneak_peek';
@@ -123,8 +125,6 @@ var UPDATE_EVENT_PROPERTIES = 'update_event_properties';
123
125
  var UPDATE_THREAD_PROPERTIES = 'update_thread_properties';
124
126
  var UPLOAD_FILE = 'upload_file';
125
127
 
126
- var DESC = 'desc';
127
-
128
128
  var createReducer = function createReducer(initialState, reducersMap) {
129
129
  if (process.env.NODE_ENV !== 'development' && reducersMap[undefined]) {
130
130
  // eslint-disable-next-line no-console
@@ -197,7 +197,7 @@ var getApiOrigin = function getApiOrigin(state) {
197
197
  return "https://api" + regionPart + getEnvPart(state) + ".livechatinc.com";
198
198
  };
199
199
  var getServerUrl = function getServerUrl(state) {
200
- return getApiOrigin(state) + "/v3.2/customer";
200
+ return getApiOrigin(state) + "/v3.3/customer";
201
201
  };
202
202
  var createInitialState = function createInitialState(initialStateData) {
203
203
  var _initialStateData$app = initialStateData.application,
@@ -219,7 +219,7 @@ var createInitialState = function createInitialState(initialStateData) {
219
219
  return {
220
220
  application: _extends({}, application, {
221
221
  name: "customer_sdk",
222
- version: "2.0.4"
222
+ version: "3.1.1"
223
223
  }),
224
224
  licenseId: licenseId,
225
225
  env: env,
@@ -247,7 +247,6 @@ var createInitialState = function createInitialState(initialStateData) {
247
247
  var removeStoredRequest = function removeStoredRequest(state, _ref2) {
248
248
  var id = _ref2.id;
249
249
 
250
- // eslint-disable-next-line no-unused-vars
251
250
  var _state$requests = state.requests,
252
251
  requests = _objectWithoutPropertiesLoose(_state$requests, [id].map(_toPropertyKey));
253
252
 
@@ -278,7 +277,7 @@ var createReducer$1 = (function (state) {
278
277
  return setConnectionStatus(CONNECTED, state);
279
278
  }, _createReducer[PAUSE_CONNECTION] = function (state) {
280
279
  return setConnectionStatus(PAUSED, state);
281
- }, _createReducer[REQUEST_FAILED] = removeStoredRequest, _createReducer[RESPONSE_RECEIVED] = removeStoredRequest, _createReducer[SEND_REQUEST] = function (state, _ref4) {
280
+ }, _createReducer[REQUEST_FAILED] = removeStoredRequest, _createReducer[RESPONSE_RECEIVED] = removeStoredRequest, _createReducer[PUSH_RESPONSE_RECEIVED] = removeStoredRequest, _createReducer[SEND_REQUEST] = function (state, _ref4) {
282
281
  var _extends2;
283
282
 
284
283
  var promise = _ref4.promise,
@@ -350,14 +349,21 @@ function createError(_ref) {
350
349
  }
351
350
 
352
351
  var ACCESS_TOKEN_EXPIRED = 'access_token_expired';
353
- var CUSTOMER_BANNED = 'customer_banned';
352
+ var CUSTOMER_BANNED = 'customer_banned'; // customer tried reconnecting too many times after they received too_many_connections error
353
+
354
354
  var CUSTOMER_TEMPORARILY_BLOCKED = 'customer_temporarily_blocked';
355
+ var LICENSE_EXPIRED = 'license_expired';
355
356
  var LICENSE_NOT_FOUND = 'license_not_found';
356
357
  var MISDIRECTED_CONNECTION$1 = 'misdirected_connection';
357
- var PRODUCT_VERSION_CHANGED = 'product_version_changed';
358
+ var PRODUCT_VERSION_CHANGED = 'product_version_changed'; // the limit of connections per user host has been exceeded
359
+ // or rate limit for new connections has been hit
360
+ // (in 3.2 only the latter case, the first one is using `too_many_connections` to avoid breaking changes)
361
+
362
+ var SERVICE_TEMPORARILY_UNAVAILABLE$1 = 'service_temporarily_unavailable'; // the limit of those connections is per user
363
+
358
364
  var TOO_MANY_CONNECTIONS = 'too_many_connections'; // the limit of unauthorized connections is per IP
359
365
 
360
- var TOO_MANY_UNAUTHORIZED_CONNECTIONS$1 = 'too_many_unauthorized_connections';
366
+ var TOO_MANY_UNAUTHORIZED_CONNECTIONS = 'too_many_unauthorized_connections';
361
367
  var UNSUPPORTED_VERSION = 'unsupported_version';
362
368
 
363
369
  var CHAT_DEACTIVATED = 'chat_deactivated';
@@ -386,11 +392,42 @@ var THREAD_PROPERTIES_UPDATED = 'thread_properties_updated';
386
392
  var USER_ADDED_TO_CHAT = 'user_added_to_chat';
387
393
  var USER_REMOVED_FROM_CHAT = 'user_removed_from_chat';
388
394
 
395
+ var serverPushActions = /*#__PURE__*/Object.freeze({
396
+ __proto__: null,
397
+ CHAT_DEACTIVATED: CHAT_DEACTIVATED,
398
+ CHAT_PROPERTIES_DELETED: CHAT_PROPERTIES_DELETED,
399
+ CHAT_PROPERTIES_UPDATED: CHAT_PROPERTIES_UPDATED,
400
+ CHAT_TRANSFERRED: CHAT_TRANSFERRED,
401
+ CUSTOMER_DISCONNECTED: CUSTOMER_DISCONNECTED,
402
+ CUSTOMER_PAGE_UPDATED: CUSTOMER_PAGE_UPDATED,
403
+ CUSTOMER_SIDE_STORAGE_UPDATED: CUSTOMER_SIDE_STORAGE_UPDATED,
404
+ CUSTOMER_UPDATED: CUSTOMER_UPDATED,
405
+ EVENT_PROPERTIES_DELETED: EVENT_PROPERTIES_DELETED,
406
+ EVENT_PROPERTIES_UPDATED: EVENT_PROPERTIES_UPDATED,
407
+ EVENT_UPDATED: EVENT_UPDATED,
408
+ EVENTS_MARKED_AS_SEEN: EVENTS_MARKED_AS_SEEN,
409
+ GREETING_ACCEPTED: GREETING_ACCEPTED,
410
+ GREETING_CANCELED: GREETING_CANCELED,
411
+ INCOMING_CHAT: INCOMING_CHAT,
412
+ INCOMING_EVENT: INCOMING_EVENT,
413
+ INCOMING_GREETING: INCOMING_GREETING,
414
+ INCOMING_MULTICAST: INCOMING_MULTICAST,
415
+ INCOMING_RICH_MESSAGE_POSTBACK: INCOMING_RICH_MESSAGE_POSTBACK,
416
+ INCOMING_TYPING_INDICATOR: INCOMING_TYPING_INDICATOR,
417
+ QUEUE_POSITION_UPDATED: QUEUE_POSITION_UPDATED,
418
+ THREAD_PROPERTIES_DELETED: THREAD_PROPERTIES_DELETED,
419
+ THREAD_PROPERTIES_UPDATED: THREAD_PROPERTIES_UPDATED,
420
+ USER_ADDED_TO_CHAT: USER_ADDED_TO_CHAT,
421
+ USER_REMOVED_FROM_CHAT: USER_REMOVED_FROM_CHAT
422
+ });
423
+
389
424
  var FILE = 'file';
425
+ var FORM = 'form';
390
426
  var FILLED_FORM = 'filled_form';
391
427
  var MESSAGE = 'message';
392
428
  var RICH_MESSAGE = 'rich_message';
393
429
  var SYSTEM_MESSAGE = 'system_message';
430
+ var CUSTOM = 'custom';
394
431
 
395
432
  var createEventBase = function createEventBase(event) {
396
433
  var base = {};
@@ -434,7 +471,8 @@ var parseEvent = function parseEvent(event) {
434
471
  {
435
472
  var file = _extends({}, createEventBase(event), {
436
473
  type: event.type,
437
- url: event.url
474
+ url: event.url,
475
+ alternative_text: event.alternativeText
438
476
  });
439
477
 
440
478
  return file;
@@ -487,6 +525,19 @@ var parseEvent = function parseEvent(event) {
487
525
 
488
526
  return systemMessage;
489
527
  }
528
+
529
+ case CUSTOM:
530
+ {
531
+ var customEvent = _extends({}, createEventBase(event), {
532
+ type: event.type
533
+ });
534
+
535
+ if (event.content) {
536
+ customEvent.content = event.content;
537
+ }
538
+
539
+ return customEvent;
540
+ }
490
541
  }
491
542
  };
492
543
 
@@ -507,9 +558,12 @@ var parseThreadData = function parseThreadData(thread) {
507
558
  };
508
559
 
509
560
  var parseStartChatData = function parseStartChatData(_ref) {
510
- var chat = _ref.chat,
561
+ var _ref$active = _ref.active,
562
+ active = _ref$active === void 0 ? true : _ref$active,
563
+ chat = _ref.chat,
511
564
  continuous = _ref.continuous;
512
565
  var data = {
566
+ active: active,
513
567
  chat: {}
514
568
  };
515
569
 
@@ -541,7 +595,7 @@ var parseStartChatData = function parseStartChatData(_ref) {
541
595
 
542
596
  return data;
543
597
  };
544
- var parseActivateChatData = function parseActivateChatData(requestData) {
598
+ var parseResumeChatData = function parseResumeChatData(requestData) {
545
599
  var data = parseStartChatData(requestData);
546
600
  return _extends({}, data, {
547
601
  chat: _extends({}, data.chat, {
@@ -582,6 +636,14 @@ var loginSuccess = function loginSuccess(payload) {
582
636
  payload: payload
583
637
  };
584
638
  };
639
+ var pauseConnection = function pauseConnection(reason) {
640
+ return {
641
+ type: PAUSE_CONNECTION,
642
+ payload: {
643
+ reason: reason
644
+ }
645
+ };
646
+ };
585
647
  var prefetchToken = function prefetchToken(fresh) {
586
648
  if (fresh === void 0) {
587
649
  fresh = false;
@@ -686,15 +748,15 @@ var getSideStorageKey = function getSideStorageKey(store) {
686
748
  };
687
749
 
688
750
  var getSideStorage = function getSideStorage(store) {
689
- return storage.getItem(getSideStorageKey(store)).catch(noop).then(function (sideStorage) {
751
+ return storage.getItem(getSideStorageKey(store))["catch"](noop).then(function (sideStorage) {
690
752
  return JSON.parse(sideStorage || '{}');
691
753
  }) // shouldnt get triggered, just a defensive measure against malformed storage entries
692
- .catch(function () {
754
+ ["catch"](function () {
693
755
  return {};
694
756
  });
695
757
  };
696
758
  var saveSideStorage = function saveSideStorage(store, sideStorage) {
697
- return storage.setItem(getSideStorageKey(store), JSON.stringify(sideStorage)).catch(noop);
759
+ return storage.setItem(getSideStorageKey(store), JSON.stringify(sideStorage))["catch"](noop);
698
760
  };
699
761
 
700
762
  var taskChain = function taskChain(_ref, onSuccess, onError) {
@@ -748,18 +810,23 @@ function createLoginTask(auth, customerDataProvider) {
748
810
  var store;
749
811
  var sentPage = null;
750
812
  var task;
751
- var backoff = new Backo({
813
+ var backoffConfig = {
752
814
  min: 300,
753
815
  max: 60000,
754
816
  jitter: 0.3
755
- });
817
+ };
818
+ var defaultBackoffStrategy = createBackoff(backoffConfig);
819
+ var slowerBackoffStrategy = createBackoff(_extends({}, backoffConfig, {
820
+ min: 1000
821
+ }));
822
+ var currentBackoffStrategy = defaultBackoffStrategy;
756
823
 
757
- var destroy$$1 = function destroy$$1(reason) {
824
+ var destroy$1 = function destroy$1(reason) {
758
825
  return store.dispatch(destroy(reason));
759
826
  };
760
827
 
761
- var reconnect$$1 = function reconnect$$1() {
762
- return store.dispatch(reconnect(backoff.duration()));
828
+ var reconnect$1 = function reconnect$1() {
829
+ return store.dispatch(reconnect(currentBackoffStrategy.duration()));
763
830
  };
764
831
 
765
832
  var getTokenAndSideStorage = function getTokenAndSideStorage() {
@@ -782,7 +849,7 @@ function createLoginTask(auth, customerDataProvider) {
782
849
  return [token, sideStorage];
783
850
  };
784
851
 
785
- var sendLogin = function sendLogin(_ref3) {
852
+ var _sendLogin = function sendLogin(_ref3) {
786
853
  var token = _ref3[0],
787
854
  sideStorage = _ref3[1];
788
855
  var state = store.getState();
@@ -829,71 +896,91 @@ function createLoginTask(auth, customerDataProvider) {
829
896
  page = _store$getState.page;
830
897
 
831
898
  if (sentPage !== page) {
832
- sendLoginFlowRequest(store, UPDATE_CUSTOMER_PAGE$1, page).catch(noop);
899
+ sendLoginFlowRequest(store, UPDATE_CUSTOMER_PAGE$1, page)["catch"](noop);
833
900
  }
834
901
 
835
902
  sentPage = null;
836
903
  };
837
904
 
838
- return function (_store) {
839
- // after switching to callbags, we should be able to use smth similar to redux-observable
840
- // and thus just use store given to epic
841
- store = _store;
905
+ return {
906
+ sendLogin: function sendLogin(_store) {
907
+ var _task;
908
+
909
+ // after switching to callbags, we should be able to use smth similar to redux-observable
910
+ // and thus just use store given to epic
911
+ store = _store;
912
+ (_task = task) == null ? void 0 : _task.cancel();
913
+ task = taskChain([getTokenAndSideStorage, dispatchSelfId, _sendLogin], function (loginResponse) {
914
+ task = null;
915
+ defaultBackoffStrategy.reset();
916
+ slowerBackoffStrategy.reset();
917
+ currentBackoffStrategy = defaultBackoffStrategy; // TODO: rethink if this should be handled by SDK consumer
918
+
919
+ updateCustomerPageIfNeeded();
920
+ store.dispatch(loginSuccess(loginResponse));
921
+ }, function (error) {
922
+ task = null;
923
+
924
+ if (process.env.NODE_ENV !== 'production') {
925
+ console.error('[Customer SDK] Login flow has thrown code', error.code, 'with', error);
926
+ }
842
927
 
843
- if (task) {
844
- task.cancel();
845
- }
928
+ switch (error.code) {
929
+ case AUTHENTICATION:
930
+ auth.getFreshToken();
931
+ reconnect$1();
932
+ return;
846
933
 
847
- task = taskChain([getTokenAndSideStorage, dispatchSelfId, sendLogin], function (loginResponse) {
848
- task = null;
849
- backoff.reset(); // TODO: rethink if this should be handled by SDK consumer
934
+ case CONNECTION_LOST:
935
+ // this is connectivity problem, not a server error
936
+ // and is taken care of in socket module
937
+ // as it has its own backoff implementation
938
+ return;
850
939
 
851
- updateCustomerPageIfNeeded();
852
- store.dispatch(loginSuccess(loginResponse));
853
- }, function (error) {
854
- if (process.env.NODE_ENV !== 'production') {
855
- console.error('[Customer SDK] Login flow has thrown code', error.code, 'with', error);
856
- }
940
+ case MISDIRECTED_CONNECTION:
941
+ // socket gets reinitialized on this anyway, so just ignore it here
942
+ return;
857
943
 
858
- switch (error.code) {
859
- case AUTHENTICATION:
860
- auth.getFreshToken();
861
- reconnect$$1();
862
- return;
944
+ case SDK_DESTROYED:
945
+ return;
946
+ // those are auth errors, we should maybe export those constants from the auth package
863
947
 
864
- case CONNECTION_LOST:
865
- // this is connectivity problem, not a server error
866
- // and is taken care of in socket module
867
- // as it has its own backoff implementation
868
- return;
948
+ case 'SSO_IDENTITY_EXCEPTION':
949
+ case 'SSO_OAUTH_EXCEPTION':
950
+ if (error.message === 'server_error' || error.message === 'temporarily_unavailable') {
951
+ reconnect$1();
952
+ return;
953
+ }
869
954
 
870
- case MISDIRECTED_CONNECTION:
871
- // socket gets reinitialized on this anyway, so just ignore it here
872
- return;
873
- // those are auth errors, we should maybe export those constants from the auth package
955
+ destroy$1(error.message);
956
+ return;
874
957
 
875
- case 'SSO_IDENTITY_EXCEPTION':
876
- case 'SSO_OAUTH_EXCEPTION':
877
- if (error.message === 'server_error' || error.message === 'temporarily_unavailable') {
878
- reconnect$$1();
958
+ case USERS_LIMIT_REACHED:
959
+ store.dispatch(pauseConnection(error.code.toLowerCase()));
879
960
  return;
880
- }
881
961
 
882
- destroy$$1(error.message);
883
- return;
962
+ case IDENTITY_MISMATCH:
963
+ case CUSTOMER_BANNED$1:
964
+ case WRONG_PRODUCT_VERSION:
965
+ destroy$1(error.code.toLowerCase());
966
+ return;
884
967
 
885
- case IDENTITY_MISMATCH:
886
- case CUSTOMER_BANNED$1:
887
- case USERS_LIMIT_REACHED:
888
- case WRONG_PRODUCT_VERSION:
889
- destroy$$1(error.code.toLowerCase());
890
- return;
968
+ case SERVICE_TEMPORARILY_UNAVAILABLE:
969
+ currentBackoffStrategy = slowerBackoffStrategy;
970
+ reconnect$1();
971
+ return;
891
972
 
892
- default:
893
- reconnect$$1();
894
- return;
895
- }
896
- });
973
+ default:
974
+ reconnect$1();
975
+ return;
976
+ }
977
+ });
978
+ },
979
+ cancel: function cancel() {
980
+ var _task2;
981
+
982
+ (_task2 = task) == null ? void 0 : _task2.cancel();
983
+ }
897
984
  };
898
985
  }
899
986
 
@@ -915,8 +1002,6 @@ var checkGoals = function checkGoals(store, auth, sessionFields) {
915
1002
  license_id: state.licenseId
916
1003
  });
917
1004
  var payload = {
918
- // TODO: remove sending customer_fields once API releases their changes
919
- customer_fields: sessionFields || {},
920
1005
  session_fields: parseCustomerSessionFields(sessionFields || {}),
921
1006
  group_id: state.groupId || 0,
922
1007
  page_url: page.url
@@ -1017,13 +1102,15 @@ var parseImage = function parseImage(thread, image) {
1017
1102
  width: image.width,
1018
1103
  height: image.height,
1019
1104
  thumbnails: {
1020
- default: _extends({
1105
+ "default": _extends({
1021
1106
  url: image.thumbnail_url
1022
1107
  }, downsizeWithRatio(300, image)),
1023
1108
  high: _extends({
1024
1109
  url: image.thumbnail2x_url
1025
1110
  }, downsizeWithRatio(600, image))
1026
1111
  }
1112
+ }, image.alternative_text && {
1113
+ alternativeText: image.alternative_text
1027
1114
  });
1028
1115
  };
1029
1116
 
@@ -1039,6 +1126,14 @@ var parseFile = function parseFile(thread, file) {
1039
1126
  name: file.name
1040
1127
  });
1041
1128
  };
1129
+ var parseForm = function parseForm(thread, form) {
1130
+ return _extends({}, parseCommonEventProps(thread, form), {
1131
+ authorId: 'system',
1132
+ type: FORM,
1133
+ formId: form.form_id,
1134
+ fields: form.fields
1135
+ });
1136
+ };
1042
1137
  var parseFilledForm = function parseFilledForm(thread, filledForm) {
1043
1138
  return _extends({}, parseCommonEventProps(thread, filledForm), {
1044
1139
  type: FILLED_FORM,
@@ -1074,6 +1169,13 @@ var parseMessage = function parseMessage(thread, message) {
1074
1169
  text: message.text
1075
1170
  });
1076
1171
  };
1172
+ var parseCustomEvent = function parseCustomEvent(thread, event) {
1173
+ return _extends({}, parseCommonEventProps(thread, event), {
1174
+ type: CUSTOM
1175
+ }, event.content && {
1176
+ content: event.content
1177
+ });
1178
+ };
1077
1179
 
1078
1180
  var parseRichMessageElement = function parseRichMessageElement(element) {
1079
1181
  var parsed = {};
@@ -1089,10 +1191,12 @@ var parseRichMessageElement = function parseRichMessageElement(element) {
1089
1191
  if (element.image) {
1090
1192
  // TODO: we should reuse parseImage here
1091
1193
  var image = element.image;
1092
- parsed.image = {
1194
+ parsed.image = _extends({
1093
1195
  url: image.url,
1094
1196
  name: image.name
1095
- };
1197
+ }, image.alternative_text && {
1198
+ alternativeText: image.alternative_text
1199
+ });
1096
1200
  }
1097
1201
 
1098
1202
  if (element.buttons) {
@@ -1111,6 +1215,17 @@ var parseRichMessageElement = function parseRichMessageElement(element) {
1111
1215
  };
1112
1216
  }
1113
1217
 
1218
+ case 'cancel':
1219
+ {
1220
+ return {
1221
+ type: serverButton.type,
1222
+ text: serverButton.text,
1223
+ postbackId: serverButton.postback_id,
1224
+ userIds: serverButton.user_ids,
1225
+ role: serverButton.role || 'default'
1226
+ };
1227
+ }
1228
+
1114
1229
  case 'url':
1115
1230
  {
1116
1231
  var button = {
@@ -1198,6 +1313,9 @@ var parseEvent$1 = function parseEvent(thread, event) {
1198
1313
  case FILE:
1199
1314
  return parseFile(thread, event);
1200
1315
 
1316
+ case FORM:
1317
+ return parseForm(thread, event);
1318
+
1201
1319
  case FILLED_FORM:
1202
1320
  return parseFilledForm(thread, event);
1203
1321
 
@@ -1210,6 +1328,9 @@ var parseEvent$1 = function parseEvent(thread, event) {
1210
1328
  case SYSTEM_MESSAGE:
1211
1329
  return parseSystemMessage(thread, event);
1212
1330
 
1331
+ case CUSTOM:
1332
+ return parseCustomEvent(thread, event);
1333
+
1213
1334
  default:
1214
1335
  return null;
1215
1336
  }
@@ -1221,6 +1342,7 @@ var parseGreeting = function parseGreeting(greeting) {
1221
1342
  uniqueId: greeting.unique_id,
1222
1343
  displayedFirstTime: greeting.displayed_first_time,
1223
1344
  accepted: greeting.accepted || false,
1345
+ subtype: greeting.subtype || 'greeting',
1224
1346
  // threadId is typed as nonoptional string but for greetings it doesn't exist
1225
1347
  event: parseEvent$1(null, greeting.event),
1226
1348
  agent: {
@@ -1277,13 +1399,12 @@ var parseThread = function parseThread(chatId, thread) {
1277
1399
  queue: thread.queue ? parseQueue(thread.queue) : null
1278
1400
  };
1279
1401
  };
1280
- var parseIncomingChat = function parseIncomingChat(chat) {
1402
+ var parseChatCommon = function parseChatCommon(chat) {
1281
1403
  return {
1282
1404
  id: chat.id,
1283
1405
  access: parseAccess(chat.access),
1284
1406
  users: chat.users.map(parseChatUser),
1285
1407
  properties: chat.properties || {},
1286
- thread: parseThread(chat.id, chat.thread),
1287
1408
  eventsSeenUpToMap: getEventsSeenUpToMap(chat.users)
1288
1409
  };
1289
1410
  };
@@ -1338,14 +1459,19 @@ var parseCustomer = function parseCustomer(customer) {
1338
1459
  }
1339
1460
  });
1340
1461
  };
1341
- var parsePredictedAgent = function parsePredictedAgent(agent) {
1462
+ var parsePredictedAgent = function parsePredictedAgent(payload) {
1463
+ var agent = payload.agent,
1464
+ queue = payload.queue;
1342
1465
  return {
1343
- id: agent.id,
1344
- type: AGENT,
1345
- name: agent.name,
1346
- avatar: agent.avatar,
1347
- jobTitle: agent.job_title,
1348
- isBot: agent.is_bot
1466
+ agent: {
1467
+ id: agent.id,
1468
+ type: AGENT,
1469
+ name: agent.name,
1470
+ avatar: agent.avatar,
1471
+ jobTitle: agent.job_title,
1472
+ isBot: agent.is_bot
1473
+ },
1474
+ queue: queue
1349
1475
  };
1350
1476
  };
1351
1477
  var parseQueueUpdate = function parseQueueUpdate(queueUpdate) {
@@ -1411,7 +1537,7 @@ var updateStateIfNeeded = function updateStateIfNeeded(store, action) {
1411
1537
  }
1412
1538
  };
1413
1539
 
1414
- var sendRequest$1 = function sendRequest$$1(socket, _ref3) {
1540
+ var sendRequest$1 = function sendRequest(socket, _ref3) {
1415
1541
  var _ref3$payload = _ref3.payload,
1416
1542
  id = _ref3$payload.id,
1417
1543
  request = _ref3$payload.request;
@@ -1420,7 +1546,31 @@ var sendRequest$1 = function sendRequest$$1(socket, _ref3) {
1420
1546
  request_id: id
1421
1547
  }, request);
1422
1548
 
1423
- socket.emit(frame);
1549
+ switch (frame.action) {
1550
+ case LOGIN:
1551
+ {
1552
+ var upgradedPushes = [];
1553
+ socket.emit(_extends({}, frame, {
1554
+ version: '3.3',
1555
+ payload: _extends({}, frame.payload, {
1556
+ pushes: {
1557
+ // '3.4': upgradedPushes,
1558
+ '3.3': values(serverPushActions).filter(function (pushAction) {
1559
+ return (// `customer_disconnected` can be sent immediately after opening the connection, before it even received login request
1560
+ // therefore it's not possible to subscribe for a particular version of this push - the "connection version" is always used
1561
+ pushAction !== CUSTOMER_DISCONNECTED && !includes(pushAction, upgradedPushes)
1562
+ );
1563
+ })
1564
+ }
1565
+ })
1566
+ }));
1567
+ return;
1568
+ }
1569
+
1570
+ default:
1571
+ socket.emit(frame);
1572
+ return;
1573
+ }
1424
1574
  };
1425
1575
 
1426
1576
  var emitUsers = function emitUsers(emit, users) {
@@ -1521,10 +1671,11 @@ var handlePush = function handlePush(_ref5, _ref6) {
1521
1671
  });
1522
1672
  break;
1523
1673
 
1524
- case TOO_MANY_UNAUTHORIZED_CONNECTIONS$1:
1674
+ case SERVICE_TEMPORARILY_UNAVAILABLE$1:
1675
+ case TOO_MANY_UNAUTHORIZED_CONNECTIONS:
1525
1676
  // this should only really fail a `login` request - as it's the only one sent before authorization
1526
1677
  // and login should reconnect on its own right now
1527
- failAllRequests(store, TOO_MANY_UNAUTHORIZED_CONNECTIONS);
1678
+ failAllRequests(store, payload.payload.reason.toUpperCase());
1528
1679
  break;
1529
1680
 
1530
1681
  default:
@@ -1609,7 +1760,7 @@ var createSideEffectsHandler = (function (_ref9) {
1609
1760
  emitter = _ref9.emitter,
1610
1761
  socket = _ref9.socket;
1611
1762
  var emit = emitter.emit;
1612
- var login = createLoginTask(auth, customerDataProvider); // TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
1763
+ var loginTask = createLoginTask(auth, customerDataProvider); // TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
1613
1764
 
1614
1765
  return function (action, store) {
1615
1766
  switch (action.type) {
@@ -1618,16 +1769,35 @@ var createSideEffectsHandler = (function (_ref9) {
1618
1769
  return;
1619
1770
 
1620
1771
  case CHECK_GOALS:
1621
- checkGoals(store, auth, action.payload.sessionFields).catch(noop);
1772
+ checkGoals(store, auth, action.payload.sessionFields)["catch"](noop);
1622
1773
  return;
1623
1774
 
1624
1775
  case DESTROY:
1625
1776
  {
1626
1777
  var payload = action.payload;
1778
+ loginTask.cancel();
1627
1779
  socket.destroy();
1628
1780
 
1629
- if (payload.reason !== 'manual') {
1630
- emit('disconnected', payload);
1781
+ switch (payload.reason) {
1782
+ case 'manual':
1783
+ failAllRequests(store, SDK_DESTROYED);
1784
+ break;
1785
+
1786
+ case CUSTOMER_BANNED:
1787
+ case LICENSE_EXPIRED:
1788
+ case PRODUCT_VERSION_CHANGED:
1789
+ // normalize those to CONNECTION_LOST as the handling on the consumer's side should be the same
1790
+ failAllRequests(store, CONNECTION_LOST);
1791
+ emit('disconnected', payload);
1792
+ break;
1793
+
1794
+ default:
1795
+ // in general those deestroys should only come either from login errors
1796
+ // or from customer_disconnected pushes that are sent immediately after connection
1797
+ // so this case would only be able to fail login requests but that wouldn't even be caught be a handler there
1798
+ // as we cancel the loginTask beforehand
1799
+ emit('disconnected', payload);
1800
+ break;
1631
1801
  }
1632
1802
 
1633
1803
  emitter.off();
@@ -1676,12 +1846,20 @@ var createSideEffectsHandler = (function (_ref9) {
1676
1846
  }
1677
1847
 
1678
1848
  case PAUSE_CONNECTION:
1679
- socket.disconnect();
1680
- return;
1849
+ {
1850
+ var _payload = action.payload;
1851
+ socket.disconnect();
1852
+
1853
+ if (_payload.reason !== 'manual') {
1854
+ emit('disconnected', _payload);
1855
+ }
1856
+
1857
+ return;
1858
+ }
1681
1859
 
1682
1860
  case PREFETCH_TOKEN:
1683
1861
  if (action.payload.fresh) {
1684
- auth.getFreshToken().catch(noop);
1862
+ auth.getFreshToken()["catch"](noop);
1685
1863
  return;
1686
1864
  }
1687
1865
 
@@ -1702,7 +1880,7 @@ var createSideEffectsHandler = (function (_ref9) {
1702
1880
 
1703
1881
  return auth.invalidate().then(auth.getFreshToken);
1704
1882
  });
1705
- }).catch(noop);
1883
+ })["catch"](noop);
1706
1884
  return;
1707
1885
 
1708
1886
  case PUSH_RECEIVED:
@@ -1731,6 +1909,7 @@ var createSideEffectsHandler = (function (_ref9) {
1731
1909
  return;
1732
1910
 
1733
1911
  case RECONNECT:
1912
+ failAllRequests(store, CONNECTION_LOST);
1734
1913
  socket.reconnect(action.payload.delay);
1735
1914
  return;
1736
1915
 
@@ -1756,7 +1935,7 @@ var createSideEffectsHandler = (function (_ref9) {
1756
1935
 
1757
1936
  if (isDestroyed(state)) {
1758
1937
  failRequest(store, action, {
1759
- code: 'SDK_DESTROYED',
1938
+ code: SDK_DESTROYED,
1760
1939
  message: 'SDK destroyed.'
1761
1940
  });
1762
1941
  return;
@@ -1764,7 +1943,7 @@ var createSideEffectsHandler = (function (_ref9) {
1764
1943
 
1765
1944
  if (!isConnected(state) && action.payload.source !== 'login') {
1766
1945
  failRequest(store, action, {
1767
- code: 'NO_CONNECTION',
1946
+ code: NO_CONNECTION,
1768
1947
  message: 'No connection.'
1769
1948
  });
1770
1949
  return;
@@ -1785,7 +1964,7 @@ var createSideEffectsHandler = (function (_ref9) {
1785
1964
  return;
1786
1965
 
1787
1966
  case SOCKET_CONNECTED:
1788
- login(store);
1967
+ loginTask.sendLogin(store);
1789
1968
  return;
1790
1969
 
1791
1970
  case SOCKET_RECOVERED:
@@ -1816,7 +1995,7 @@ var createSideEffectsHandler = (function (_ref9) {
1816
1995
  return;
1817
1996
  }
1818
1997
 
1819
- sendRequestAction(store, sendRequest(UPDATE_CUSTOMER_PAGE$1, action.payload)).catch(noop);
1998
+ sendRequestAction(store, sendRequest(UPDATE_CUSTOMER_PAGE$1, action.payload))["catch"](noop);
1820
1999
  return;
1821
2000
 
1822
2001
  default:
@@ -1842,10 +2021,12 @@ var createChatHistoryIterator = function createChatHistoryIterator(sdk, chatId)
1842
2021
  switch (historyState.status) {
1843
2022
  case 'idle':
1844
2023
  historyState.status = 'fetching';
1845
- sdk.listThreads({
2024
+ sdk.listThreads(historyState.nextPageId ? {
2025
+ chatId: chatId,
2026
+ pageId: historyState.nextPageId
2027
+ } : {
1846
2028
  chatId: chatId,
1847
- minEventsCount: HISTORY_EVENT_COUNT_TARGET,
1848
- pageId: historyState.nextPageId || undefined
2029
+ minEventsCount: HISTORY_EVENT_COUNT_TARGET
1849
2030
  }).then(function (_ref) {
1850
2031
  var threads = _ref.threads,
1851
2032
  nextPageId = _ref.nextPageId;
@@ -1922,7 +2103,7 @@ var createChatHistoryIterator = function createChatHistoryIterator(sdk, chatId)
1922
2103
 
1923
2104
  var initialize = function initialize(store, emitter) {
1924
2105
  var state = store.getState();
1925
- var url = getServerUrl(state) + "/rtm/sjs";
2106
+ var url = (getServerUrl(state) + "/rtm/ws").replace(/^https/, 'wss');
1926
2107
  return createPlatformClient(url, {
1927
2108
  query: {
1928
2109
  license_id: state.licenseId
@@ -1993,16 +2174,14 @@ var parseCustomerPageUpdatedPush = function parseCustomerPageUpdatedPush(payload
1993
2174
  return {
1994
2175
  url: payload.url,
1995
2176
  title: payload.title,
1996
- timestamp: payload.timestamp * 1000
2177
+ openedAt: payload.opened_at
1997
2178
  };
1998
2179
  };
1999
2180
 
2000
2181
  var parseCustomerUpdatedPush = function parseCustomerUpdatedPush(payload) {
2001
- return {
2002
- customer: _extends({
2003
- id: payload.customer.id
2004
- }, parseCustomerOptionalProps(payload.customer))
2005
- };
2182
+ return _extends({
2183
+ id: payload.id
2184
+ }, parseCustomerOptionalProps(payload));
2006
2185
  };
2007
2186
 
2008
2187
  var parseEventPropertiesDeletedPush = function parseEventPropertiesDeletedPush(payload) {
@@ -2047,12 +2226,17 @@ var parseGreetingAcceptedPush = function parseGreetingAcceptedPush(payload) {
2047
2226
  };
2048
2227
 
2049
2228
  var parseGetChatResponse = function parseGetChatResponse(payload) {
2050
- return parseIncomingChat(payload);
2229
+ return _extends({}, parseChatCommon(payload), {
2230
+ thread: payload.thread ? parseThread(payload.id, payload.thread) : null
2231
+ });
2051
2232
  };
2052
2233
 
2053
2234
  var parseIncomingChatPush = function parseIncomingChatPush(payload) {
2235
+ var chat = payload.chat;
2054
2236
  return {
2055
- chat: parseIncomingChat(payload.chat)
2237
+ chat: _extends({}, parseChatCommon(chat), {
2238
+ thread: parseThread(chat.id, chat.thread)
2239
+ })
2056
2240
  };
2057
2241
  };
2058
2242
 
@@ -2168,20 +2352,21 @@ var parseTicketFormFields = function parseTicketFormFields(fields) {
2168
2352
  return parseFields(withFakeIds);
2169
2353
  };
2170
2354
 
2355
+ var parseForm$1 = function parseForm(form) {
2356
+ var isTicketForm = !('id' in form.fields[0]);
2357
+ return {
2358
+ id: form.id,
2359
+ fields: isTicketForm ? parseTicketFormFields(form.fields) : parseFields(form.fields)
2360
+ };
2361
+ };
2362
+
2171
2363
  var parseGetFormResponse = function parseGetFormResponse(payload) {
2172
2364
  if (!payload.enabled) {
2173
2365
  return payload;
2174
2366
  }
2175
2367
 
2176
2368
  return _extends({}, payload, {
2177
- form: 'id' in payload.form.fields[0] ? {
2178
- id: payload.form.id,
2179
- fields: parseFields(payload.form.fields)
2180
- } : {
2181
- // TODO: should we fake id for this one?
2182
- id: 'ticket',
2183
- fields: parseTicketFormFields(payload.form.fields)
2184
- }
2369
+ form: parseForm$1(payload.form)
2185
2370
  });
2186
2371
  };
2187
2372
 
@@ -2299,9 +2484,8 @@ var parseListThreadsResponse = function parseListThreadsResponse(request, payloa
2299
2484
 
2300
2485
  var parseLoginResponse = function parseLoginResponse(payload) {
2301
2486
  var dynamicConfig = payload.__priv_dynamic_config,
2302
- chats = payload.chats;
2303
- var greeting = payload.greeting || dynamicConfig.greeting; // TODO: remove the fallback after API release the new greeting object position to the prod env
2304
-
2487
+ chats = payload.chats,
2488
+ greeting = payload.greeting;
2305
2489
  return _extends({
2306
2490
  dynamicConfig: dynamicConfig,
2307
2491
  customer: parseCustomer(payload.customer),
@@ -2471,19 +2655,6 @@ var parsePush = function parsePush(push) {
2471
2655
  case USER_REMOVED_FROM_CHAT:
2472
2656
  return {
2473
2657
  action: push.action,
2474
- payload: parseUserRemovedFromChatPush(push.payload) // TODO: remove those once we sync with the API on prod
2475
-
2476
- };
2477
-
2478
- case 'chat_user_added':
2479
- return {
2480
- action: USER_ADDED_TO_CHAT,
2481
- payload: parseUserAddedToChatPush(push.payload)
2482
- };
2483
-
2484
- case 'chat_user_removed':
2485
- return {
2486
- action: USER_REMOVED_FROM_CHAT,
2487
2658
  payload: parseUserRemovedFromChatPush(push.payload)
2488
2659
  };
2489
2660
  }
@@ -2731,8 +2902,7 @@ var socketListener = (function (store, socket) {
2731
2902
  }
2732
2903
 
2733
2904
  switch (message.action) {
2734
- case ACTIVATE_CHAT:
2735
- case DEACTIVATE_CHAT:
2905
+ case RESUME_CHAT:
2736
2906
  case SEND_EVENT:
2737
2907
  case START_CHAT:
2738
2908
  // those are requests with indirect responses
@@ -2746,7 +2916,6 @@ var socketListener = (function (store, socket) {
2746
2916
 
2747
2917
  if ('request_id' in message) {
2748
2918
  switch (message.action) {
2749
- case CHAT_DEACTIVATED:
2750
2919
  case INCOMING_CHAT:
2751
2920
  case INCOMING_EVENT:
2752
2921
  // those are acting as indirect responses
@@ -2986,7 +3155,7 @@ var validateFile = function validateFile(file) {
2986
3155
  if (file.size > SIZE_LIMIT) {
2987
3156
  throw createError({
2988
3157
  message: "The file is too big (max size is " + formatBytes(SIZE_LIMIT) + ").",
2989
- code: 'TOO_BIG_FILE'
3158
+ code: TOO_BIG_FILE
2990
3159
  });
2991
3160
  }
2992
3161
  };
@@ -3083,7 +3252,7 @@ var log = function log(_ref) {
3083
3252
  var message = {
3084
3253
  event_name: eventName,
3085
3254
  severity: 'Informational',
3086
- sdkVersion: "2.0.4"
3255
+ sdkVersion: "3.1.1"
3087
3256
  };
3088
3257
  var body = {
3089
3258
  licence_id: licenseId,
@@ -3115,11 +3284,13 @@ var createDebuggedMethods = function createDebuggedMethods(methods, prefix) {
3115
3284
 
3116
3285
  var result = method.apply(void 0, args);
3117
3286
 
3118
- if (result && typeof result.then === 'function') {
3119
- result.then(function (data) {
3287
+ if (typeof (result == null ? void 0 : result.then) === 'function') {
3288
+ return result.then(function (data) {
3120
3289
  console.info(prefix + "." + methodName + "() <===", data);
3121
- }).catch(function (err) {
3290
+ return data;
3291
+ }, function (err) {
3122
3292
  console.error(prefix + "." + methodName + "() <===", err);
3293
+ throw err;
3123
3294
  });
3124
3295
  }
3125
3296
 
@@ -3191,17 +3362,19 @@ var debug = (function (_sdk) {
3191
3362
 
3192
3363
  (_console3 = console).info.apply(_console3, [logLabel + " ===>"].concat(args));
3193
3364
 
3194
- var result = history.next();
3195
- result.then(function (data) {
3365
+ return history.next().then(function (data) {
3196
3366
  var _console4;
3197
3367
 
3198
3368
  (_console4 = console).info.apply(_console4, [logLabel + " <==="].concat(args, [data]));
3199
- }).catch(function (err) {
3369
+
3370
+ return data;
3371
+ }, function (err) {
3200
3372
  var _console5;
3201
3373
 
3202
3374
  (_console5 = console).error.apply(_console5, [logLabel + " <==="].concat(args, [err]));
3375
+
3376
+ throw err;
3203
3377
  });
3204
- return result;
3205
3378
  }
3206
3379
  };
3207
3380
  },
@@ -3236,14 +3409,15 @@ var init = function init(config, env) {
3236
3409
  var _config$autoConnect = config.autoConnect,
3237
3410
  autoConnect = _config$autoConnect === void 0 ? true : _config$autoConnect,
3238
3411
  customerDataProvider = config.customerDataProvider,
3239
- instanceConfig = _objectWithoutPropertiesLoose(config, ["autoConnect", "customerDataProvider"]);
3412
+ identityProvider = config.identityProvider,
3413
+ instanceConfig = _objectWithoutPropertiesLoose(config, ["autoConnect", "customerDataProvider", "identityProvider"]);
3240
3414
 
3241
3415
  var store = finalCreateStore(_extends({}, instanceConfig, {
3242
3416
  env: env
3243
3417
  }));
3244
3418
  var emitter = mitt();
3245
3419
  var socket = createSocketClient(store);
3246
- var auth = createAuth(instanceConfig, env);
3420
+ var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth(instanceConfig, env);
3247
3421
  store.addSideEffectsHandler(createSideEffectsHandler({
3248
3422
  emitter: emitter,
3249
3423
  socket: socket,
@@ -3252,7 +3426,7 @@ var init = function init(config, env) {
3252
3426
  }));
3253
3427
  socketListener(store, socket);
3254
3428
 
3255
- var sendRequestAction$$1 = sendRequestAction.bind(null, store);
3429
+ var sendRequestAction$1 = sendRequestAction.bind(null, store);
3256
3430
 
3257
3431
  var startConnection = function startConnection() {
3258
3432
  store.dispatch({
@@ -3264,23 +3438,15 @@ var init = function init(config, env) {
3264
3438
  acceptGreeting: function acceptGreeting(_ref) {
3265
3439
  var greetingId = _ref.greetingId,
3266
3440
  uniqueId = _ref.uniqueId;
3267
- return sendRequestAction$$1(sendRequest(ACCEPT_GREETING, {
3441
+ return sendRequestAction$1(sendRequest(ACCEPT_GREETING, {
3268
3442
  greeting_id: greetingId,
3269
3443
  unique_id: uniqueId
3270
3444
  }));
3271
3445
  },
3272
- activateChat: function activateChat(data) {
3273
- log({
3274
- env: env,
3275
- licenseId: config.licenseId,
3276
- eventName: 'chat_started'
3277
- });
3278
- return sendRequestAction$$1(sendRequest(ACTIVATE_CHAT, parseActivateChatData(data)));
3279
- },
3280
3446
  auth: auth,
3281
3447
  cancelGreeting: function cancelGreeting(_ref2) {
3282
3448
  var uniqueId = _ref2.uniqueId;
3283
- return sendRequestAction$$1(sendRequest(CANCEL_GREETING, {
3449
+ return sendRequestAction$1(sendRequest(CANCEL_GREETING, {
3284
3450
  unique_id: uniqueId
3285
3451
  }));
3286
3452
  },
@@ -3311,16 +3477,16 @@ var init = function init(config, env) {
3311
3477
  },
3312
3478
  connect: startConnection,
3313
3479
  deactivateChat: function deactivateChat(_ref4) {
3314
- var chatId = _ref4.chatId;
3315
- return sendRequestAction$$1(sendRequest(DEACTIVATE_CHAT, {
3316
- chat_id: chatId
3480
+ var id = _ref4.id;
3481
+ return sendRequestAction$1(sendRequest(DEACTIVATE_CHAT, {
3482
+ id: id
3317
3483
  }));
3318
3484
  },
3319
3485
  deleteChatProperties: function deleteChatProperties(_ref5) {
3320
- var chatId = _ref5.chatId,
3486
+ var id = _ref5.id,
3321
3487
  properties = _ref5.properties;
3322
- return sendRequestAction$$1(sendRequest(DELETE_CHAT_PROPERTIES, {
3323
- chat_id: chatId,
3488
+ return sendRequestAction$1(sendRequest(DELETE_CHAT_PROPERTIES, {
3489
+ id: id,
3324
3490
  properties: properties
3325
3491
  }));
3326
3492
  },
@@ -3329,7 +3495,7 @@ var init = function init(config, env) {
3329
3495
  threadId = _ref6.threadId,
3330
3496
  eventId = _ref6.eventId,
3331
3497
  properties = _ref6.properties;
3332
- return sendRequestAction$$1(sendRequest(DELETE_EVENT_PROPERTIES, {
3498
+ return sendRequestAction$1(sendRequest(DELETE_EVENT_PROPERTIES, {
3333
3499
  chat_id: chatId,
3334
3500
  thread_id: threadId,
3335
3501
  event_id: eventId,
@@ -3340,24 +3506,22 @@ var init = function init(config, env) {
3340
3506
  var chatId = _ref7.chatId,
3341
3507
  threadId = _ref7.threadId,
3342
3508
  properties = _ref7.properties;
3343
- return sendRequestAction$$1(sendRequest(DELETE_THREAD_PROPERTIES, {
3509
+ return sendRequestAction$1(sendRequest(DELETE_THREAD_PROPERTIES, {
3344
3510
  chat_id: chatId,
3345
3511
  thread_id: threadId,
3346
3512
  properties: properties
3347
3513
  }));
3348
3514
  },
3349
- destroy: function destroy$$1() {
3515
+ destroy: function destroy$1() {
3350
3516
  store.dispatch(destroy('manual'));
3351
3517
  },
3352
3518
  disconnect: function disconnect() {
3353
- store.dispatch({
3354
- type: PAUSE_CONNECTION
3355
- });
3519
+ store.dispatch(pauseConnection('manual'));
3356
3520
  },
3357
3521
  getChat: function getChat(_ref8) {
3358
3522
  var chatId = _ref8.chatId,
3359
3523
  threadId = _ref8.threadId;
3360
- return sendRequestAction$$1(sendRequest(GET_CHAT, {
3524
+ return sendRequestAction$1(sendRequest(GET_CHAT, {
3361
3525
  chat_id: chatId,
3362
3526
  thread_id: threadId
3363
3527
  }));
@@ -3367,12 +3531,12 @@ var init = function init(config, env) {
3367
3531
  return createChatHistoryIterator(api, chatId);
3368
3532
  },
3369
3533
  getCustomer: function getCustomer() {
3370
- return sendRequestAction$$1(sendRequest(GET_CUSTOMER, {}));
3534
+ return sendRequestAction$1(sendRequest(GET_CUSTOMER, {}));
3371
3535
  },
3372
3536
  getForm: function getForm(_ref10) {
3373
3537
  var groupId = _ref10.groupId,
3374
3538
  type = _ref10.type;
3375
- return sendRequestAction$$1(sendRequest(GET_FORM, {
3539
+ return sendRequestAction$1(sendRequest(GET_FORM, {
3376
3540
  group_id: groupId,
3377
3541
  type: type
3378
3542
  }));
@@ -3384,60 +3548,56 @@ var init = function init(config, env) {
3384
3548
 
3385
3549
  var _params = params,
3386
3550
  groupId = _params.groupId;
3387
- return sendRequestAction$$1(sendRequest(GET_PREDICTED_AGENT, typeof groupId === 'number' ? {
3551
+ return sendRequestAction$1(sendRequest(GET_PREDICTED_AGENT, typeof groupId === 'number' ? {
3388
3552
  group_id: groupId
3389
3553
  } : {}));
3390
3554
  },
3391
3555
  getUrlInfo: function getUrlInfo(_ref11) {
3392
3556
  var url = _ref11.url;
3393
- return sendRequestAction$$1(sendRequest(GET_URL_INFO, {
3557
+ return sendRequestAction$1(sendRequest(GET_URL_INFO, {
3394
3558
  url: url
3395
3559
  }));
3396
3560
  },
3397
- listChats: function listChats(_temp) {
3398
- var _ref12 = _temp === void 0 ? {} : _temp,
3399
- _ref12$limit = _ref12.limit,
3400
- limit = _ref12$limit === void 0 ? 10 : _ref12$limit,
3401
- pageId = _ref12.pageId;
3561
+ listChats: function listChats(params) {
3562
+ if (params === void 0) {
3563
+ params = {};
3564
+ }
3402
3565
 
3403
- if (limit > CHATS_PAGINATION_MAX_LIMIT) {
3566
+ if ('limit' in params && typeof params.limit === 'number' && params.limit > CHATS_PAGINATION_MAX_LIMIT) {
3404
3567
  return Promise.reject(new Error("Specified limit is too high (max " + CHATS_PAGINATION_MAX_LIMIT + ")."));
3405
3568
  }
3406
3569
 
3407
- return sendRequestAction$$1(sendRequest(LIST_CHATS, {
3408
- limit: limit,
3409
- page_id: pageId
3570
+ return sendRequestAction$1(sendRequest(LIST_CHATS, params.pageId === undefined ? {
3571
+ limit: params.limit || 10
3572
+ } : {
3573
+ page_id: params.pageId
3410
3574
  }));
3411
3575
  },
3412
- listGroupStatuses: function listGroupStatuses(_temp2) {
3413
- var _ref13 = _temp2 === void 0 ? {} : _temp2,
3414
- groupIds = _ref13.groupIds;
3576
+ listGroupStatuses: function listGroupStatuses(_temp) {
3577
+ var _ref12 = _temp === void 0 ? {} : _temp,
3578
+ groupIds = _ref12.groupIds;
3415
3579
 
3416
- return sendRequestAction$$1(sendRequest(LIST_GROUP_STATUSES, groupIds ? {
3580
+ return sendRequestAction$1(sendRequest(LIST_GROUP_STATUSES, groupIds ? {
3417
3581
  group_ids: groupIds
3418
3582
  } : {
3419
3583
  all: true
3420
3584
  }));
3421
3585
  },
3422
- listThreads: function listThreads(_ref14) {
3423
- var chatId = _ref14.chatId,
3424
- _ref14$sortOrder = _ref14.sortOrder,
3425
- sortOrder = _ref14$sortOrder === void 0 ? DESC : _ref14$sortOrder,
3426
- limit = _ref14.limit,
3427
- pageId = _ref14.pageId,
3428
- minEventsCount = _ref14.minEventsCount;
3429
- return sendRequestAction$$1(sendRequest(LIST_THREADS, {
3430
- chat_id: chatId,
3431
- sort_order: sortOrder,
3432
- limit: limit,
3433
- page_id: pageId,
3434
- min_events_count: minEventsCount
3586
+ listThreads: function listThreads(params) {
3587
+ return sendRequestAction$1(sendRequest(LIST_THREADS, params.pageId === undefined ? {
3588
+ chat_id: params.chatId,
3589
+ sort_order: params.sortOrder,
3590
+ limit: params.limit,
3591
+ min_events_count: params.minEventsCount
3592
+ } : {
3593
+ chat_id: params.chatId,
3594
+ page_id: params.pageId
3435
3595
  }));
3436
3596
  },
3437
- markEventsAsSeen: function markEventsAsSeen(_ref15) {
3438
- var chatId = _ref15.chatId,
3439
- seenUpTo = _ref15.seenUpTo;
3440
- return sendRequestAction$$1(sendRequest(MARK_EVENTS_AS_SEEN, {
3597
+ markEventsAsSeen: function markEventsAsSeen(_ref13) {
3598
+ var chatId = _ref13.chatId,
3599
+ seenUpTo = _ref13.seenUpTo;
3600
+ return sendRequestAction$1(sendRequest(MARK_EVENTS_AS_SEEN, {
3441
3601
  chat_id: chatId,
3442
3602
  seen_up_to: seenUpTo
3443
3603
  }));
@@ -3450,8 +3610,8 @@ var init = function init(config, env) {
3450
3610
  rating = params.rating;
3451
3611
  return api.listThreads({
3452
3612
  chatId: chatId
3453
- }).then(function (_ref16) {
3454
- var threads = _ref16.threads;
3613
+ }).then(function (_ref14) {
3614
+ var threads = _ref14.threads;
3455
3615
 
3456
3616
  if (!threads.length) {
3457
3617
  throw createError({
@@ -3469,53 +3629,61 @@ var init = function init(config, env) {
3469
3629
  });
3470
3630
  });
3471
3631
  },
3632
+ resumeChat: function resumeChat(data) {
3633
+ log({
3634
+ env: env,
3635
+ licenseId: config.licenseId,
3636
+ eventName: 'chat_started'
3637
+ });
3638
+ return sendRequestAction$1(sendRequest(RESUME_CHAT, parseResumeChatData(data)));
3639
+ },
3472
3640
  sendEvent: function (_sendEvent) {
3473
- function sendEvent$$1(_x) {
3641
+ function sendEvent(_x) {
3474
3642
  return _sendEvent.apply(this, arguments);
3475
3643
  }
3476
3644
 
3477
- sendEvent$$1.toString = function () {
3645
+ sendEvent.toString = function () {
3478
3646
  return _sendEvent.toString();
3479
3647
  };
3480
3648
 
3481
- return sendEvent$$1;
3649
+ return sendEvent;
3482
3650
  }(function (params) {
3483
- return sendRequestAction$$1(sendEvent(params));
3651
+ return sendRequestAction$1(sendEvent(params));
3484
3652
  }),
3485
- sendTicketForm: function sendTicketForm$$1(options) {
3653
+ sendTicketForm: function sendTicketForm$1(options) {
3486
3654
  return sendTicketForm(store, auth, options);
3487
3655
  },
3488
- sendRichMessagePostback: function sendRichMessagePostback(_ref17) {
3489
- var chatId = _ref17.chatId,
3490
- threadId = _ref17.threadId,
3491
- eventId = _ref17.eventId,
3492
- postback = _ref17.postback;
3493
- return sendRequestAction$$1(sendRequest(SEND_RICH_MESSAGE_POSTBACK, {
3656
+ sendRichMessagePostback: function sendRichMessagePostback(_ref15) {
3657
+ var chatId = _ref15.chatId,
3658
+ threadId = _ref15.threadId,
3659
+ eventId = _ref15.eventId,
3660
+ postback = _ref15.postback;
3661
+ return sendRequestAction$1(sendRequest(SEND_RICH_MESSAGE_POSTBACK, {
3494
3662
  chat_id: chatId,
3495
3663
  event_id: eventId,
3496
3664
  thread_id: threadId,
3497
3665
  postback: postback
3498
3666
  }));
3499
3667
  },
3500
- setCustomerSessionFields: function setCustomerSessionFields(_ref18) {
3501
- var sessionFields = _ref18.sessionFields;
3502
- return sendRequestAction$$1(sendRequest(SET_CUSTOMER_SESSION_FIELDS, {
3668
+ setCustomerSessionFields: function setCustomerSessionFields(_ref16) {
3669
+ var sessionFields = _ref16.sessionFields;
3670
+ return sendRequestAction$1(sendRequest(SET_CUSTOMER_SESSION_FIELDS, {
3503
3671
  session_fields: parseCustomerSessionFields(sessionFields)
3504
3672
  }));
3505
3673
  },
3506
- setSneakPeek: function setSneakPeek(_ref19) {
3507
- var chatId = _ref19.chatId,
3508
- sneakPeekText = _ref19.sneakPeekText;
3674
+ setSneakPeek: function setSneakPeek(_ref17) {
3675
+ var chatId = _ref17.chatId,
3676
+ sneakPeekText = _ref17.sneakPeekText;
3509
3677
  var state = store.getState();
3510
3678
 
3511
3679
  if (!isChatActive(state, chatId) || !isConnected(state)) {
3512
3680
  return;
3513
3681
  }
3514
3682
 
3515
- sendRequestAction$$1(sendRequest(SEND_SNEAK_PEEK, {
3683
+ sendRequestAction$1(sendRequest(SEND_SNEAK_PEEK, {
3516
3684
  chat_id: chatId,
3517
3685
  sneak_peek_text: sneakPeekText
3518
- })).catch(noop);
3686
+ }))["catch"](noop);
3519
3687
  },
3520
3688
  startChat: function startChat(data) {
3521
3689
  if (data === void 0) {
@@ -3527,18 +3695,18 @@ var init = function init(config, env) {
3527
3695
  licenseId: config.licenseId,
3528
3696
  eventName: 'chat_started'
3529
3697
  });
3530
- return sendRequestAction$$1(sendRequest(START_CHAT, parseStartChatData(data)));
3698
+ return sendRequestAction$1(sendRequest(START_CHAT, parseStartChatData(data)));
3531
3699
  },
3532
- updateChatProperties: function updateChatProperties(_ref20) {
3533
- var chatId = _ref20.chatId,
3534
- properties = _ref20.properties;
3535
- return sendRequestAction$$1(sendRequest(UPDATE_CHAT_PROPERTIES, {
3536
- chat_id: chatId,
3700
+ updateChatProperties: function updateChatProperties(_ref18) {
3701
+ var id = _ref18.id,
3702
+ properties = _ref18.properties;
3703
+ return sendRequestAction$1(sendRequest(UPDATE_CHAT_PROPERTIES, {
3704
+ id: id,
3537
3705
  properties: properties
3538
3706
  }));
3539
3707
  },
3540
3708
  updateCustomer: function updateCustomer(update) {
3541
- return sendRequestAction$$1(sendRequest(UPDATE_CUSTOMER, parseCustomerUpdate(update)));
3709
+ return sendRequestAction$1(sendRequest(UPDATE_CUSTOMER, parseCustomerUpdate(update)));
3542
3710
  },
3543
3711
  updateCustomerPage: function updateCustomerPage(page) {
3544
3712
  store.dispatch({
@@ -3546,29 +3714,29 @@ var init = function init(config, env) {
3546
3714
  payload: pickOwn(['title', 'url'], page)
3547
3715
  });
3548
3716
  },
3549
- updateEventProperties: function updateEventProperties(_ref21) {
3550
- var chatId = _ref21.chatId,
3551
- threadId = _ref21.threadId,
3552
- eventId = _ref21.eventId,
3553
- properties = _ref21.properties;
3554
- return sendRequestAction$$1(sendRequest(UPDATE_EVENT_PROPERTIES, {
3717
+ updateEventProperties: function updateEventProperties(_ref19) {
3718
+ var chatId = _ref19.chatId,
3719
+ threadId = _ref19.threadId,
3720
+ eventId = _ref19.eventId,
3721
+ properties = _ref19.properties;
3722
+ return sendRequestAction$1(sendRequest(UPDATE_EVENT_PROPERTIES, {
3555
3723
  chat_id: chatId,
3556
3724
  event_id: eventId,
3557
3725
  thread_id: threadId,
3558
3726
  properties: properties
3559
3727
  }));
3560
3728
  },
3561
- updateThreadProperties: function updateThreadProperties(_ref22) {
3562
- var chatId = _ref22.chatId,
3563
- threadId = _ref22.threadId,
3564
- properties = _ref22.properties;
3565
- return sendRequestAction$$1(sendRequest(UPDATE_THREAD_PROPERTIES, {
3729
+ updateThreadProperties: function updateThreadProperties(_ref20) {
3730
+ var chatId = _ref20.chatId,
3731
+ threadId = _ref20.threadId,
3732
+ properties = _ref20.properties;
3733
+ return sendRequestAction$1(sendRequest(UPDATE_THREAD_PROPERTIES, {
3566
3734
  chat_id: chatId,
3567
3735
  thread_id: threadId,
3568
3736
  properties: properties
3569
3737
  }));
3570
3738
  },
3571
- uploadFile: function uploadFile$$1(options) {
3739
+ uploadFile: function uploadFile$1(options) {
3572
3740
  return uploadFile({
3573
3741
  auth: auth,
3574
3742
  store: store
@@ -3590,4 +3758,4 @@ var init = function init(config, env) {
3590
3758
  return api;
3591
3759
  };
3592
3760
 
3593
- export { init, debug, parseFile, parseFilledForm, parseMessage, parseRichMessage, parseSystemMessage, parseEvent$1 as parseEvent, parseGreeting };
3761
+ export { debug, init, parseCustomEvent, parseEvent$1 as parseEvent, parseFile, parseFilledForm, parseForm$1 as parseForm, parseGreeting, parseMessage, parseRichMessage, parseSystemMessage };