@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.
@@ -2,25 +2,35 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
-
5
+ var createAuth = require('@livechat/customer-auth');
6
+ var mitt = require('@livechat/mitt');
7
7
  var dataUtils = require('@livechat/data-utils');
8
- var deferred = _interopDefault(require('@livechat/deferred'));
9
8
  var redux = require('redux');
10
- var createSideEffectsMiddleware = _interopDefault(require('@livechat/side-effects-middleware'));
11
- var storage = _interopDefault(require('@livechat/isomorphic-storage'));
12
- var promiseTry = _interopDefault(require('@livechat/promise-try'));
13
- var Backo = _interopDefault(require('backo2'));
14
- var unfetch = _interopDefault(require('unfetch'));
9
+ var createSideEffectsMiddleware = require('@livechat/side-effects-middleware');
10
+ var deferred = require('@livechat/deferred');
11
+ var promiseTry = require('@livechat/promise-try');
12
+ var createBackoff = require('@livechat/backoff');
13
+ var storage = require('@livechat/isomorphic-storage');
14
+ var unfetch = require('unfetch');
15
15
  var urlUtils = require('@livechat/url-utils');
16
- var createPlatformClient = _interopDefault(require('@livechat/platform-client'));
17
- var mitt = _interopDefault(require('@livechat/mitt'));
18
- var rawUploadFile = _interopDefault(require('@livechat/file-upload'));
19
- var createAuth = require('@livechat/customer-auth');
20
- var createAuth__default = _interopDefault(createAuth);
16
+ var createPlatformClient = require('@livechat/platform-client');
17
+ var rawUploadFile = require('@livechat/file-upload');
18
+
19
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
+
21
+ var createAuth__default = /*#__PURE__*/_interopDefaultLegacy(createAuth);
22
+ var mitt__default = /*#__PURE__*/_interopDefaultLegacy(mitt);
23
+ var createSideEffectsMiddleware__default = /*#__PURE__*/_interopDefaultLegacy(createSideEffectsMiddleware);
24
+ var deferred__default = /*#__PURE__*/_interopDefaultLegacy(deferred);
25
+ var promiseTry__default = /*#__PURE__*/_interopDefaultLegacy(promiseTry);
26
+ var createBackoff__default = /*#__PURE__*/_interopDefaultLegacy(createBackoff);
27
+ var storage__default = /*#__PURE__*/_interopDefaultLegacy(storage);
28
+ var unfetch__default = /*#__PURE__*/_interopDefaultLegacy(unfetch);
29
+ var createPlatformClient__default = /*#__PURE__*/_interopDefaultLegacy(createPlatformClient);
30
+ var rawUploadFile__default = /*#__PURE__*/_interopDefaultLegacy(rawUploadFile);
21
31
 
22
32
  function _extends() {
23
- _extends = Object.assign || function (target) {
33
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
24
34
  for (var i = 1; i < arguments.length; i++) {
25
35
  var source = arguments[i];
26
36
 
@@ -33,7 +43,6 @@ function _extends() {
33
43
 
34
44
  return target;
35
45
  };
36
-
37
46
  return _extends.apply(this, arguments);
38
47
  }
39
48
 
@@ -97,11 +106,13 @@ var CONNECTION_LOST = 'CONNECTION_LOST';
97
106
  var IDENTITY_MISMATCH = 'IDENTITY_MISMATCH';
98
107
  var MISDIRECTED_CONNECTION = 'MISDIRECTED_CONNECTION';
99
108
  var MISSING_CHAT_THREAD = 'MISSING_CHAT_THREAD';
109
+ var NO_CONNECTION = 'NO_CONNECTION';
100
110
  var REQUEST_TIMEOUT = 'REQUEST_TIMEOUT';
101
- var TOO_MANY_UNAUTHORIZED_CONNECTIONS = 'TOO_MANY_UNAUTHORIZED_CONNECTIONS';
111
+ var SDK_DESTROYED = 'SDK_DESTROYED';
112
+ var SERVICE_TEMPORARILY_UNAVAILABLE = 'SERVICE_TEMPORARILY_UNAVAILABLE';
113
+ var TOO_BIG_FILE = 'TOO_BIG_FILE';
102
114
 
103
115
  var ACCEPT_GREETING = 'accept_greeting';
104
- var ACTIVATE_CHAT = 'activate_chat';
105
116
  var CANCEL_GREETING = 'cancel_greeting';
106
117
  var CHECK_GOALS$1 = 'check_goals';
107
118
  var DEACTIVATE_CHAT = 'deactivate_chat';
@@ -118,6 +129,7 @@ var LIST_GROUP_STATUSES = 'list_group_statuses';
118
129
  var LIST_THREADS = 'list_threads';
119
130
  var LOGIN = 'login';
120
131
  var MARK_EVENTS_AS_SEEN = 'mark_events_as_seen';
132
+ var RESUME_CHAT = 'resume_chat';
121
133
  var SEND_EVENT = 'send_event';
122
134
  var SEND_RICH_MESSAGE_POSTBACK = 'send_rich_message_postback';
123
135
  var SEND_SNEAK_PEEK = 'send_sneak_peek';
@@ -130,8 +142,6 @@ var UPDATE_EVENT_PROPERTIES = 'update_event_properties';
130
142
  var UPDATE_THREAD_PROPERTIES = 'update_thread_properties';
131
143
  var UPLOAD_FILE = 'upload_file';
132
144
 
133
- var DESC = 'desc';
134
-
135
145
  var createReducer = function createReducer(initialState, reducersMap) {
136
146
  if (process.env.NODE_ENV !== 'development' && reducersMap[undefined]) {
137
147
  // eslint-disable-next-line no-console
@@ -204,7 +214,7 @@ var getApiOrigin = function getApiOrigin(state) {
204
214
  return "https://api" + regionPart + getEnvPart(state) + ".livechatinc.com";
205
215
  };
206
216
  var getServerUrl = function getServerUrl(state) {
207
- return getApiOrigin(state) + "/v3.2/customer";
217
+ return getApiOrigin(state) + "/v3.3/customer";
208
218
  };
209
219
  var createInitialState = function createInitialState(initialStateData) {
210
220
  var _initialStateData$app = initialStateData.application,
@@ -226,7 +236,7 @@ var createInitialState = function createInitialState(initialStateData) {
226
236
  return {
227
237
  application: _extends({}, application, {
228
238
  name: "customer_sdk",
229
- version: "2.0.4"
239
+ version: "3.1.1"
230
240
  }),
231
241
  licenseId: licenseId,
232
242
  env: env,
@@ -254,7 +264,6 @@ var createInitialState = function createInitialState(initialStateData) {
254
264
  var removeStoredRequest = function removeStoredRequest(state, _ref2) {
255
265
  var id = _ref2.id;
256
266
 
257
- // eslint-disable-next-line no-unused-vars
258
267
  var _state$requests = state.requests,
259
268
  requests = _objectWithoutPropertiesLoose(_state$requests, [id].map(_toPropertyKey));
260
269
 
@@ -285,7 +294,7 @@ var createReducer$1 = (function (state) {
285
294
  return setConnectionStatus(CONNECTED, state);
286
295
  }, _createReducer[PAUSE_CONNECTION] = function (state) {
287
296
  return setConnectionStatus(PAUSED, state);
288
- }, _createReducer[REQUEST_FAILED] = removeStoredRequest, _createReducer[RESPONSE_RECEIVED] = removeStoredRequest, _createReducer[SEND_REQUEST] = function (state, _ref4) {
297
+ }, _createReducer[REQUEST_FAILED] = removeStoredRequest, _createReducer[RESPONSE_RECEIVED] = removeStoredRequest, _createReducer[PUSH_RESPONSE_RECEIVED] = removeStoredRequest, _createReducer[SEND_REQUEST] = function (state, _ref4) {
289
298
  var _extends2;
290
299
 
291
300
  var promise = _ref4.promise,
@@ -342,7 +351,7 @@ function finalCreateStore(initialStateData) {
342
351
  var compose = process.env.NODE_ENV === 'development' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
343
352
  name: '@livechat/customer-sdk'
344
353
  }) : dataUtils.identity;
345
- var sideEffectsMiddleware = createSideEffectsMiddleware();
354
+ var sideEffectsMiddleware = createSideEffectsMiddleware__default['default']();
346
355
  var store = redux.createStore(createReducer$1(createInitialState(initialStateData)), compose(redux.applyMiddleware(sideEffectsMiddleware)));
347
356
  store.addSideEffectsHandler = sideEffectsMiddleware.add;
348
357
  return store;
@@ -357,14 +366,21 @@ function createError(_ref) {
357
366
  }
358
367
 
359
368
  var ACCESS_TOKEN_EXPIRED = 'access_token_expired';
360
- var CUSTOMER_BANNED = 'customer_banned';
369
+ var CUSTOMER_BANNED = 'customer_banned'; // customer tried reconnecting too many times after they received too_many_connections error
370
+
361
371
  var CUSTOMER_TEMPORARILY_BLOCKED = 'customer_temporarily_blocked';
372
+ var LICENSE_EXPIRED = 'license_expired';
362
373
  var LICENSE_NOT_FOUND = 'license_not_found';
363
374
  var MISDIRECTED_CONNECTION$1 = 'misdirected_connection';
364
- var PRODUCT_VERSION_CHANGED = 'product_version_changed';
375
+ var PRODUCT_VERSION_CHANGED = 'product_version_changed'; // the limit of connections per user host has been exceeded
376
+ // or rate limit for new connections has been hit
377
+ // (in 3.2 only the latter case, the first one is using `too_many_connections` to avoid breaking changes)
378
+
379
+ var SERVICE_TEMPORARILY_UNAVAILABLE$1 = 'service_temporarily_unavailable'; // the limit of those connections is per user
380
+
365
381
  var TOO_MANY_CONNECTIONS = 'too_many_connections'; // the limit of unauthorized connections is per IP
366
382
 
367
- var TOO_MANY_UNAUTHORIZED_CONNECTIONS$1 = 'too_many_unauthorized_connections';
383
+ var TOO_MANY_UNAUTHORIZED_CONNECTIONS = 'too_many_unauthorized_connections';
368
384
  var UNSUPPORTED_VERSION = 'unsupported_version';
369
385
 
370
386
  var CHAT_DEACTIVATED = 'chat_deactivated';
@@ -393,11 +409,42 @@ var THREAD_PROPERTIES_UPDATED = 'thread_properties_updated';
393
409
  var USER_ADDED_TO_CHAT = 'user_added_to_chat';
394
410
  var USER_REMOVED_FROM_CHAT = 'user_removed_from_chat';
395
411
 
412
+ var serverPushActions = /*#__PURE__*/Object.freeze({
413
+ __proto__: null,
414
+ CHAT_DEACTIVATED: CHAT_DEACTIVATED,
415
+ CHAT_PROPERTIES_DELETED: CHAT_PROPERTIES_DELETED,
416
+ CHAT_PROPERTIES_UPDATED: CHAT_PROPERTIES_UPDATED,
417
+ CHAT_TRANSFERRED: CHAT_TRANSFERRED,
418
+ CUSTOMER_DISCONNECTED: CUSTOMER_DISCONNECTED,
419
+ CUSTOMER_PAGE_UPDATED: CUSTOMER_PAGE_UPDATED,
420
+ CUSTOMER_SIDE_STORAGE_UPDATED: CUSTOMER_SIDE_STORAGE_UPDATED,
421
+ CUSTOMER_UPDATED: CUSTOMER_UPDATED,
422
+ EVENT_PROPERTIES_DELETED: EVENT_PROPERTIES_DELETED,
423
+ EVENT_PROPERTIES_UPDATED: EVENT_PROPERTIES_UPDATED,
424
+ EVENT_UPDATED: EVENT_UPDATED,
425
+ EVENTS_MARKED_AS_SEEN: EVENTS_MARKED_AS_SEEN,
426
+ GREETING_ACCEPTED: GREETING_ACCEPTED,
427
+ GREETING_CANCELED: GREETING_CANCELED,
428
+ INCOMING_CHAT: INCOMING_CHAT,
429
+ INCOMING_EVENT: INCOMING_EVENT,
430
+ INCOMING_GREETING: INCOMING_GREETING,
431
+ INCOMING_MULTICAST: INCOMING_MULTICAST,
432
+ INCOMING_RICH_MESSAGE_POSTBACK: INCOMING_RICH_MESSAGE_POSTBACK,
433
+ INCOMING_TYPING_INDICATOR: INCOMING_TYPING_INDICATOR,
434
+ QUEUE_POSITION_UPDATED: QUEUE_POSITION_UPDATED,
435
+ THREAD_PROPERTIES_DELETED: THREAD_PROPERTIES_DELETED,
436
+ THREAD_PROPERTIES_UPDATED: THREAD_PROPERTIES_UPDATED,
437
+ USER_ADDED_TO_CHAT: USER_ADDED_TO_CHAT,
438
+ USER_REMOVED_FROM_CHAT: USER_REMOVED_FROM_CHAT
439
+ });
440
+
396
441
  var FILE = 'file';
442
+ var FORM = 'form';
397
443
  var FILLED_FORM = 'filled_form';
398
444
  var MESSAGE = 'message';
399
445
  var RICH_MESSAGE = 'rich_message';
400
446
  var SYSTEM_MESSAGE = 'system_message';
447
+ var CUSTOM = 'custom';
401
448
 
402
449
  var createEventBase = function createEventBase(event) {
403
450
  var base = {};
@@ -441,7 +488,8 @@ var parseEvent = function parseEvent(event) {
441
488
  {
442
489
  var file = _extends({}, createEventBase(event), {
443
490
  type: event.type,
444
- url: event.url
491
+ url: event.url,
492
+ alternative_text: event.alternativeText
445
493
  });
446
494
 
447
495
  return file;
@@ -494,6 +542,19 @@ var parseEvent = function parseEvent(event) {
494
542
 
495
543
  return systemMessage;
496
544
  }
545
+
546
+ case CUSTOM:
547
+ {
548
+ var customEvent = _extends({}, createEventBase(event), {
549
+ type: event.type
550
+ });
551
+
552
+ if (event.content) {
553
+ customEvent.content = event.content;
554
+ }
555
+
556
+ return customEvent;
557
+ }
497
558
  }
498
559
  };
499
560
 
@@ -514,9 +575,12 @@ var parseThreadData = function parseThreadData(thread) {
514
575
  };
515
576
 
516
577
  var parseStartChatData = function parseStartChatData(_ref) {
517
- var chat = _ref.chat,
578
+ var _ref$active = _ref.active,
579
+ active = _ref$active === void 0 ? true : _ref$active,
580
+ chat = _ref.chat,
518
581
  continuous = _ref.continuous;
519
582
  var data = {
583
+ active: active,
520
584
  chat: {}
521
585
  };
522
586
 
@@ -548,7 +612,7 @@ var parseStartChatData = function parseStartChatData(_ref) {
548
612
 
549
613
  return data;
550
614
  };
551
- var parseActivateChatData = function parseActivateChatData(requestData) {
615
+ var parseResumeChatData = function parseResumeChatData(requestData) {
552
616
  var data = parseStartChatData(requestData);
553
617
  return _extends({}, data, {
554
618
  chat: _extends({}, data.chat, {
@@ -589,6 +653,14 @@ var loginSuccess = function loginSuccess(payload) {
589
653
  payload: payload
590
654
  };
591
655
  };
656
+ var pauseConnection = function pauseConnection(reason) {
657
+ return {
658
+ type: PAUSE_CONNECTION,
659
+ payload: {
660
+ reason: reason
661
+ }
662
+ };
663
+ };
592
664
  var prefetchToken = function prefetchToken(fresh) {
593
665
  if (fresh === void 0) {
594
666
  fresh = false;
@@ -666,7 +738,7 @@ var socketDisconnected = function socketDisconnected() {
666
738
  var sendRequestAction = function sendRequestAction(store, action) {
667
739
  action.payload.id = dataUtils.generateUniqueId(store.getState().requests);
668
740
 
669
- var _deferred = deferred(),
741
+ var _deferred = deferred__default['default'](),
670
742
  resolve = _deferred.resolve,
671
743
  reject = _deferred.reject,
672
744
  promise = _deferred.promise;
@@ -693,15 +765,15 @@ var getSideStorageKey = function getSideStorageKey(store) {
693
765
  };
694
766
 
695
767
  var getSideStorage = function getSideStorage(store) {
696
- return storage.getItem(getSideStorageKey(store)).catch(dataUtils.noop).then(function (sideStorage) {
768
+ return storage__default['default'].getItem(getSideStorageKey(store))["catch"](dataUtils.noop).then(function (sideStorage) {
697
769
  return JSON.parse(sideStorage || '{}');
698
770
  }) // shouldnt get triggered, just a defensive measure against malformed storage entries
699
- .catch(function () {
771
+ ["catch"](function () {
700
772
  return {};
701
773
  });
702
774
  };
703
775
  var saveSideStorage = function saveSideStorage(store, sideStorage) {
704
- return storage.setItem(getSideStorageKey(store), JSON.stringify(sideStorage)).catch(dataUtils.noop);
776
+ return storage__default['default'].setItem(getSideStorageKey(store), JSON.stringify(sideStorage))["catch"](dataUtils.noop);
705
777
  };
706
778
 
707
779
  var taskChain = function taskChain(_ref, onSuccess, onError) {
@@ -711,7 +783,7 @@ var taskChain = function taskChain(_ref, onSuccess, onError) {
711
783
 
712
784
  var next = function next(intermediateResult) {
713
785
  var step = steps.shift();
714
- promiseTry(function () {
786
+ promiseTry__default['default'](function () {
715
787
  return step(intermediateResult);
716
788
  }).then(function (result) {
717
789
  if (cancelled) {
@@ -755,18 +827,23 @@ function createLoginTask(auth, customerDataProvider) {
755
827
  var store;
756
828
  var sentPage = null;
757
829
  var task;
758
- var backoff = new Backo({
830
+ var backoffConfig = {
759
831
  min: 300,
760
832
  max: 60000,
761
833
  jitter: 0.3
762
- });
834
+ };
835
+ var defaultBackoffStrategy = createBackoff__default['default'](backoffConfig);
836
+ var slowerBackoffStrategy = createBackoff__default['default'](_extends({}, backoffConfig, {
837
+ min: 1000
838
+ }));
839
+ var currentBackoffStrategy = defaultBackoffStrategy;
763
840
 
764
- var destroy$$1 = function destroy$$1(reason) {
841
+ var destroy$1 = function destroy$1(reason) {
765
842
  return store.dispatch(destroy(reason));
766
843
  };
767
844
 
768
- var reconnect$$1 = function reconnect$$1() {
769
- return store.dispatch(reconnect(backoff.duration()));
845
+ var reconnect$1 = function reconnect$1() {
846
+ return store.dispatch(reconnect(currentBackoffStrategy.duration()));
770
847
  };
771
848
 
772
849
  var getTokenAndSideStorage = function getTokenAndSideStorage() {
@@ -789,7 +866,7 @@ function createLoginTask(auth, customerDataProvider) {
789
866
  return [token, sideStorage];
790
867
  };
791
868
 
792
- var sendLogin = function sendLogin(_ref3) {
869
+ var _sendLogin = function sendLogin(_ref3) {
793
870
  var token = _ref3[0],
794
871
  sideStorage = _ref3[1];
795
872
  var state = store.getState();
@@ -836,71 +913,91 @@ function createLoginTask(auth, customerDataProvider) {
836
913
  page = _store$getState.page;
837
914
 
838
915
  if (sentPage !== page) {
839
- sendLoginFlowRequest(store, UPDATE_CUSTOMER_PAGE$1, page).catch(dataUtils.noop);
916
+ sendLoginFlowRequest(store, UPDATE_CUSTOMER_PAGE$1, page)["catch"](dataUtils.noop);
840
917
  }
841
918
 
842
919
  sentPage = null;
843
920
  };
844
921
 
845
- return function (_store) {
846
- // after switching to callbags, we should be able to use smth similar to redux-observable
847
- // and thus just use store given to epic
848
- store = _store;
922
+ return {
923
+ sendLogin: function sendLogin(_store) {
924
+ var _task;
925
+
926
+ // after switching to callbags, we should be able to use smth similar to redux-observable
927
+ // and thus just use store given to epic
928
+ store = _store;
929
+ (_task = task) == null ? void 0 : _task.cancel();
930
+ task = taskChain([getTokenAndSideStorage, dispatchSelfId, _sendLogin], function (loginResponse) {
931
+ task = null;
932
+ defaultBackoffStrategy.reset();
933
+ slowerBackoffStrategy.reset();
934
+ currentBackoffStrategy = defaultBackoffStrategy; // TODO: rethink if this should be handled by SDK consumer
935
+
936
+ updateCustomerPageIfNeeded();
937
+ store.dispatch(loginSuccess(loginResponse));
938
+ }, function (error) {
939
+ task = null;
940
+
941
+ if (process.env.NODE_ENV !== 'production') {
942
+ console.error('[Customer SDK] Login flow has thrown code', error.code, 'with', error);
943
+ }
849
944
 
850
- if (task) {
851
- task.cancel();
852
- }
945
+ switch (error.code) {
946
+ case AUTHENTICATION:
947
+ auth.getFreshToken();
948
+ reconnect$1();
949
+ return;
853
950
 
854
- task = taskChain([getTokenAndSideStorage, dispatchSelfId, sendLogin], function (loginResponse) {
855
- task = null;
856
- backoff.reset(); // TODO: rethink if this should be handled by SDK consumer
951
+ case CONNECTION_LOST:
952
+ // this is connectivity problem, not a server error
953
+ // and is taken care of in socket module
954
+ // as it has its own backoff implementation
955
+ return;
857
956
 
858
- updateCustomerPageIfNeeded();
859
- store.dispatch(loginSuccess(loginResponse));
860
- }, function (error) {
861
- if (process.env.NODE_ENV !== 'production') {
862
- console.error('[Customer SDK] Login flow has thrown code', error.code, 'with', error);
863
- }
957
+ case MISDIRECTED_CONNECTION:
958
+ // socket gets reinitialized on this anyway, so just ignore it here
959
+ return;
864
960
 
865
- switch (error.code) {
866
- case AUTHENTICATION:
867
- auth.getFreshToken();
868
- reconnect$$1();
869
- return;
961
+ case SDK_DESTROYED:
962
+ return;
963
+ // those are auth errors, we should maybe export those constants from the auth package
870
964
 
871
- case CONNECTION_LOST:
872
- // this is connectivity problem, not a server error
873
- // and is taken care of in socket module
874
- // as it has its own backoff implementation
875
- return;
965
+ case 'SSO_IDENTITY_EXCEPTION':
966
+ case 'SSO_OAUTH_EXCEPTION':
967
+ if (error.message === 'server_error' || error.message === 'temporarily_unavailable') {
968
+ reconnect$1();
969
+ return;
970
+ }
876
971
 
877
- case MISDIRECTED_CONNECTION:
878
- // socket gets reinitialized on this anyway, so just ignore it here
879
- return;
880
- // those are auth errors, we should maybe export those constants from the auth package
972
+ destroy$1(error.message);
973
+ return;
881
974
 
882
- case 'SSO_IDENTITY_EXCEPTION':
883
- case 'SSO_OAUTH_EXCEPTION':
884
- if (error.message === 'server_error' || error.message === 'temporarily_unavailable') {
885
- reconnect$$1();
975
+ case USERS_LIMIT_REACHED:
976
+ store.dispatch(pauseConnection(error.code.toLowerCase()));
886
977
  return;
887
- }
888
978
 
889
- destroy$$1(error.message);
890
- return;
979
+ case IDENTITY_MISMATCH:
980
+ case CUSTOMER_BANNED$1:
981
+ case WRONG_PRODUCT_VERSION:
982
+ destroy$1(error.code.toLowerCase());
983
+ return;
891
984
 
892
- case IDENTITY_MISMATCH:
893
- case CUSTOMER_BANNED$1:
894
- case USERS_LIMIT_REACHED:
895
- case WRONG_PRODUCT_VERSION:
896
- destroy$$1(error.code.toLowerCase());
897
- return;
985
+ case SERVICE_TEMPORARILY_UNAVAILABLE:
986
+ currentBackoffStrategy = slowerBackoffStrategy;
987
+ reconnect$1();
988
+ return;
898
989
 
899
- default:
900
- reconnect$$1();
901
- return;
902
- }
903
- });
990
+ default:
991
+ reconnect$1();
992
+ return;
993
+ }
994
+ });
995
+ },
996
+ cancel: function cancel() {
997
+ var _task2;
998
+
999
+ (_task2 = task) == null ? void 0 : _task2.cancel();
1000
+ }
904
1001
  };
905
1002
  }
906
1003
 
@@ -922,13 +1019,11 @@ var checkGoals = function checkGoals(store, auth, sessionFields) {
922
1019
  license_id: state.licenseId
923
1020
  });
924
1021
  var payload = {
925
- // TODO: remove sending customer_fields once API releases their changes
926
- customer_fields: sessionFields || {},
927
1022
  session_fields: parseCustomerSessionFields(sessionFields || {}),
928
1023
  group_id: state.groupId || 0,
929
1024
  page_url: page.url
930
1025
  };
931
- return unfetch(getServerUrl(state) + "/action/" + CHECK_GOALS$1 + "?" + query, {
1026
+ return unfetch__default['default'](getServerUrl(state) + "/action/" + CHECK_GOALS$1 + "?" + query, {
932
1027
  method: 'POST',
933
1028
  headers: {
934
1029
  'Content-Type': 'application/json',
@@ -1024,13 +1119,15 @@ var parseImage = function parseImage(thread, image) {
1024
1119
  width: image.width,
1025
1120
  height: image.height,
1026
1121
  thumbnails: {
1027
- default: _extends({
1122
+ "default": _extends({
1028
1123
  url: image.thumbnail_url
1029
1124
  }, downsizeWithRatio(300, image)),
1030
1125
  high: _extends({
1031
1126
  url: image.thumbnail2x_url
1032
1127
  }, downsizeWithRatio(600, image))
1033
1128
  }
1129
+ }, image.alternative_text && {
1130
+ alternativeText: image.alternative_text
1034
1131
  });
1035
1132
  };
1036
1133
 
@@ -1046,6 +1143,14 @@ var parseFile = function parseFile(thread, file) {
1046
1143
  name: file.name
1047
1144
  });
1048
1145
  };
1146
+ var parseForm = function parseForm(thread, form) {
1147
+ return _extends({}, parseCommonEventProps(thread, form), {
1148
+ authorId: 'system',
1149
+ type: FORM,
1150
+ formId: form.form_id,
1151
+ fields: form.fields
1152
+ });
1153
+ };
1049
1154
  var parseFilledForm = function parseFilledForm(thread, filledForm) {
1050
1155
  return _extends({}, parseCommonEventProps(thread, filledForm), {
1051
1156
  type: FILLED_FORM,
@@ -1081,6 +1186,13 @@ var parseMessage = function parseMessage(thread, message) {
1081
1186
  text: message.text
1082
1187
  });
1083
1188
  };
1189
+ var parseCustomEvent = function parseCustomEvent(thread, event) {
1190
+ return _extends({}, parseCommonEventProps(thread, event), {
1191
+ type: CUSTOM
1192
+ }, event.content && {
1193
+ content: event.content
1194
+ });
1195
+ };
1084
1196
 
1085
1197
  var parseRichMessageElement = function parseRichMessageElement(element) {
1086
1198
  var parsed = {};
@@ -1096,10 +1208,12 @@ var parseRichMessageElement = function parseRichMessageElement(element) {
1096
1208
  if (element.image) {
1097
1209
  // TODO: we should reuse parseImage here
1098
1210
  var image = element.image;
1099
- parsed.image = {
1211
+ parsed.image = _extends({
1100
1212
  url: image.url,
1101
1213
  name: image.name
1102
- };
1214
+ }, image.alternative_text && {
1215
+ alternativeText: image.alternative_text
1216
+ });
1103
1217
  }
1104
1218
 
1105
1219
  if (element.buttons) {
@@ -1118,6 +1232,17 @@ var parseRichMessageElement = function parseRichMessageElement(element) {
1118
1232
  };
1119
1233
  }
1120
1234
 
1235
+ case 'cancel':
1236
+ {
1237
+ return {
1238
+ type: serverButton.type,
1239
+ text: serverButton.text,
1240
+ postbackId: serverButton.postback_id,
1241
+ userIds: serverButton.user_ids,
1242
+ role: serverButton.role || 'default'
1243
+ };
1244
+ }
1245
+
1121
1246
  case 'url':
1122
1247
  {
1123
1248
  var button = {
@@ -1205,6 +1330,9 @@ var parseEvent$1 = function parseEvent(thread, event) {
1205
1330
  case FILE:
1206
1331
  return parseFile(thread, event);
1207
1332
 
1333
+ case FORM:
1334
+ return parseForm(thread, event);
1335
+
1208
1336
  case FILLED_FORM:
1209
1337
  return parseFilledForm(thread, event);
1210
1338
 
@@ -1217,6 +1345,9 @@ var parseEvent$1 = function parseEvent(thread, event) {
1217
1345
  case SYSTEM_MESSAGE:
1218
1346
  return parseSystemMessage(thread, event);
1219
1347
 
1348
+ case CUSTOM:
1349
+ return parseCustomEvent(thread, event);
1350
+
1220
1351
  default:
1221
1352
  return null;
1222
1353
  }
@@ -1228,6 +1359,7 @@ var parseGreeting = function parseGreeting(greeting) {
1228
1359
  uniqueId: greeting.unique_id,
1229
1360
  displayedFirstTime: greeting.displayed_first_time,
1230
1361
  accepted: greeting.accepted || false,
1362
+ subtype: greeting.subtype || 'greeting',
1231
1363
  // threadId is typed as nonoptional string but for greetings it doesn't exist
1232
1364
  event: parseEvent$1(null, greeting.event),
1233
1365
  agent: {
@@ -1284,13 +1416,12 @@ var parseThread = function parseThread(chatId, thread) {
1284
1416
  queue: thread.queue ? parseQueue(thread.queue) : null
1285
1417
  };
1286
1418
  };
1287
- var parseIncomingChat = function parseIncomingChat(chat) {
1419
+ var parseChatCommon = function parseChatCommon(chat) {
1288
1420
  return {
1289
1421
  id: chat.id,
1290
1422
  access: parseAccess(chat.access),
1291
1423
  users: chat.users.map(parseChatUser),
1292
1424
  properties: chat.properties || {},
1293
- thread: parseThread(chat.id, chat.thread),
1294
1425
  eventsSeenUpToMap: getEventsSeenUpToMap(chat.users)
1295
1426
  };
1296
1427
  };
@@ -1345,14 +1476,19 @@ var parseCustomer = function parseCustomer(customer) {
1345
1476
  }
1346
1477
  });
1347
1478
  };
1348
- var parsePredictedAgent = function parsePredictedAgent(agent) {
1479
+ var parsePredictedAgent = function parsePredictedAgent(payload) {
1480
+ var agent = payload.agent,
1481
+ queue = payload.queue;
1349
1482
  return {
1350
- id: agent.id,
1351
- type: AGENT,
1352
- name: agent.name,
1353
- avatar: agent.avatar,
1354
- jobTitle: agent.job_title,
1355
- isBot: agent.is_bot
1483
+ agent: {
1484
+ id: agent.id,
1485
+ type: AGENT,
1486
+ name: agent.name,
1487
+ avatar: agent.avatar,
1488
+ jobTitle: agent.job_title,
1489
+ isBot: agent.is_bot
1490
+ },
1491
+ queue: queue
1356
1492
  };
1357
1493
  };
1358
1494
  var parseQueueUpdate = function parseQueueUpdate(queueUpdate) {
@@ -1418,7 +1554,7 @@ var updateStateIfNeeded = function updateStateIfNeeded(store, action) {
1418
1554
  }
1419
1555
  };
1420
1556
 
1421
- var sendRequest$1 = function sendRequest$$1(socket, _ref3) {
1557
+ var sendRequest$1 = function sendRequest(socket, _ref3) {
1422
1558
  var _ref3$payload = _ref3.payload,
1423
1559
  id = _ref3$payload.id,
1424
1560
  request = _ref3$payload.request;
@@ -1427,7 +1563,31 @@ var sendRequest$1 = function sendRequest$$1(socket, _ref3) {
1427
1563
  request_id: id
1428
1564
  }, request);
1429
1565
 
1430
- socket.emit(frame);
1566
+ switch (frame.action) {
1567
+ case LOGIN:
1568
+ {
1569
+ var upgradedPushes = [];
1570
+ socket.emit(_extends({}, frame, {
1571
+ version: '3.3',
1572
+ payload: _extends({}, frame.payload, {
1573
+ pushes: {
1574
+ // '3.4': upgradedPushes,
1575
+ '3.3': dataUtils.values(serverPushActions).filter(function (pushAction) {
1576
+ return (// `customer_disconnected` can be sent immediately after opening the connection, before it even received login request
1577
+ // therefore it's not possible to subscribe for a particular version of this push - the "connection version" is always used
1578
+ pushAction !== CUSTOMER_DISCONNECTED && !dataUtils.includes(pushAction, upgradedPushes)
1579
+ );
1580
+ })
1581
+ }
1582
+ })
1583
+ }));
1584
+ return;
1585
+ }
1586
+
1587
+ default:
1588
+ socket.emit(frame);
1589
+ return;
1590
+ }
1431
1591
  };
1432
1592
 
1433
1593
  var emitUsers = function emitUsers(emit, users) {
@@ -1528,10 +1688,11 @@ var handlePush = function handlePush(_ref5, _ref6) {
1528
1688
  });
1529
1689
  break;
1530
1690
 
1531
- case TOO_MANY_UNAUTHORIZED_CONNECTIONS$1:
1691
+ case SERVICE_TEMPORARILY_UNAVAILABLE$1:
1692
+ case TOO_MANY_UNAUTHORIZED_CONNECTIONS:
1532
1693
  // this should only really fail a `login` request - as it's the only one sent before authorization
1533
1694
  // and login should reconnect on its own right now
1534
- failAllRequests(store, TOO_MANY_UNAUTHORIZED_CONNECTIONS);
1695
+ failAllRequests(store, payload.payload.reason.toUpperCase());
1535
1696
  break;
1536
1697
 
1537
1698
  default:
@@ -1616,7 +1777,7 @@ var createSideEffectsHandler = (function (_ref9) {
1616
1777
  emitter = _ref9.emitter,
1617
1778
  socket = _ref9.socket;
1618
1779
  var emit = emitter.emit;
1619
- var login = createLoginTask(auth, customerDataProvider); // TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
1780
+ var loginTask = createLoginTask(auth, customerDataProvider); // TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
1620
1781
 
1621
1782
  return function (action, store) {
1622
1783
  switch (action.type) {
@@ -1625,16 +1786,35 @@ var createSideEffectsHandler = (function (_ref9) {
1625
1786
  return;
1626
1787
 
1627
1788
  case CHECK_GOALS:
1628
- checkGoals(store, auth, action.payload.sessionFields).catch(dataUtils.noop);
1789
+ checkGoals(store, auth, action.payload.sessionFields)["catch"](dataUtils.noop);
1629
1790
  return;
1630
1791
 
1631
1792
  case DESTROY:
1632
1793
  {
1633
1794
  var payload = action.payload;
1795
+ loginTask.cancel();
1634
1796
  socket.destroy();
1635
1797
 
1636
- if (payload.reason !== 'manual') {
1637
- emit('disconnected', payload);
1798
+ switch (payload.reason) {
1799
+ case 'manual':
1800
+ failAllRequests(store, SDK_DESTROYED);
1801
+ break;
1802
+
1803
+ case CUSTOMER_BANNED:
1804
+ case LICENSE_EXPIRED:
1805
+ case PRODUCT_VERSION_CHANGED:
1806
+ // normalize those to CONNECTION_LOST as the handling on the consumer's side should be the same
1807
+ failAllRequests(store, CONNECTION_LOST);
1808
+ emit('disconnected', payload);
1809
+ break;
1810
+
1811
+ default:
1812
+ // in general those deestroys should only come either from login errors
1813
+ // or from customer_disconnected pushes that are sent immediately after connection
1814
+ // so this case would only be able to fail login requests but that wouldn't even be caught be a handler there
1815
+ // as we cancel the loginTask beforehand
1816
+ emit('disconnected', payload);
1817
+ break;
1638
1818
  }
1639
1819
 
1640
1820
  emitter.off();
@@ -1683,12 +1863,20 @@ var createSideEffectsHandler = (function (_ref9) {
1683
1863
  }
1684
1864
 
1685
1865
  case PAUSE_CONNECTION:
1686
- socket.disconnect();
1687
- return;
1866
+ {
1867
+ var _payload = action.payload;
1868
+ socket.disconnect();
1869
+
1870
+ if (_payload.reason !== 'manual') {
1871
+ emit('disconnected', _payload);
1872
+ }
1873
+
1874
+ return;
1875
+ }
1688
1876
 
1689
1877
  case PREFETCH_TOKEN:
1690
1878
  if (action.payload.fresh) {
1691
- auth.getFreshToken().catch(dataUtils.noop);
1879
+ auth.getFreshToken()["catch"](dataUtils.noop);
1692
1880
  return;
1693
1881
  }
1694
1882
 
@@ -1709,7 +1897,7 @@ var createSideEffectsHandler = (function (_ref9) {
1709
1897
 
1710
1898
  return auth.invalidate().then(auth.getFreshToken);
1711
1899
  });
1712
- }).catch(dataUtils.noop);
1900
+ })["catch"](dataUtils.noop);
1713
1901
  return;
1714
1902
 
1715
1903
  case PUSH_RECEIVED:
@@ -1738,6 +1926,7 @@ var createSideEffectsHandler = (function (_ref9) {
1738
1926
  return;
1739
1927
 
1740
1928
  case RECONNECT:
1929
+ failAllRequests(store, CONNECTION_LOST);
1741
1930
  socket.reconnect(action.payload.delay);
1742
1931
  return;
1743
1932
 
@@ -1763,7 +1952,7 @@ var createSideEffectsHandler = (function (_ref9) {
1763
1952
 
1764
1953
  if (isDestroyed(state)) {
1765
1954
  failRequest(store, action, {
1766
- code: 'SDK_DESTROYED',
1955
+ code: SDK_DESTROYED,
1767
1956
  message: 'SDK destroyed.'
1768
1957
  });
1769
1958
  return;
@@ -1771,7 +1960,7 @@ var createSideEffectsHandler = (function (_ref9) {
1771
1960
 
1772
1961
  if (!isConnected(state) && action.payload.source !== 'login') {
1773
1962
  failRequest(store, action, {
1774
- code: 'NO_CONNECTION',
1963
+ code: NO_CONNECTION,
1775
1964
  message: 'No connection.'
1776
1965
  });
1777
1966
  return;
@@ -1792,7 +1981,7 @@ var createSideEffectsHandler = (function (_ref9) {
1792
1981
  return;
1793
1982
 
1794
1983
  case SOCKET_CONNECTED:
1795
- login(store);
1984
+ loginTask.sendLogin(store);
1796
1985
  return;
1797
1986
 
1798
1987
  case SOCKET_RECOVERED:
@@ -1823,7 +2012,7 @@ var createSideEffectsHandler = (function (_ref9) {
1823
2012
  return;
1824
2013
  }
1825
2014
 
1826
- sendRequestAction(store, sendRequest(UPDATE_CUSTOMER_PAGE$1, action.payload)).catch(dataUtils.noop);
2015
+ sendRequestAction(store, sendRequest(UPDATE_CUSTOMER_PAGE$1, action.payload))["catch"](dataUtils.noop);
1827
2016
  return;
1828
2017
 
1829
2018
  default:
@@ -1849,10 +2038,12 @@ var createChatHistoryIterator = function createChatHistoryIterator(sdk, chatId)
1849
2038
  switch (historyState.status) {
1850
2039
  case 'idle':
1851
2040
  historyState.status = 'fetching';
1852
- sdk.listThreads({
2041
+ sdk.listThreads(historyState.nextPageId ? {
2042
+ chatId: chatId,
2043
+ pageId: historyState.nextPageId
2044
+ } : {
1853
2045
  chatId: chatId,
1854
- minEventsCount: HISTORY_EVENT_COUNT_TARGET,
1855
- pageId: historyState.nextPageId || undefined
2046
+ minEventsCount: HISTORY_EVENT_COUNT_TARGET
1856
2047
  }).then(function (_ref) {
1857
2048
  var threads = _ref.threads,
1858
2049
  nextPageId = _ref.nextPageId;
@@ -1929,8 +2120,8 @@ var createChatHistoryIterator = function createChatHistoryIterator(sdk, chatId)
1929
2120
 
1930
2121
  var initialize = function initialize(store, emitter) {
1931
2122
  var state = store.getState();
1932
- var url = getServerUrl(state) + "/rtm/sjs";
1933
- return createPlatformClient(url, {
2123
+ var url = (getServerUrl(state) + "/rtm/ws").replace(/^https/, 'wss');
2124
+ return createPlatformClient__default['default'](url, {
1934
2125
  query: {
1935
2126
  license_id: state.licenseId
1936
2127
  },
@@ -1939,7 +2130,7 @@ var initialize = function initialize(store, emitter) {
1939
2130
  };
1940
2131
 
1941
2132
  var createSocketClient = function createSocketClient(store) {
1942
- var emitter = mitt();
2133
+ var emitter = mitt__default['default']();
1943
2134
  var client = initialize(store, emitter);
1944
2135
  return _extends({}, Object.keys(client).reduce(function (proxy, method) {
1945
2136
  proxy[method] = function () {
@@ -2000,16 +2191,14 @@ var parseCustomerPageUpdatedPush = function parseCustomerPageUpdatedPush(payload
2000
2191
  return {
2001
2192
  url: payload.url,
2002
2193
  title: payload.title,
2003
- timestamp: payload.timestamp * 1000
2194
+ openedAt: payload.opened_at
2004
2195
  };
2005
2196
  };
2006
2197
 
2007
2198
  var parseCustomerUpdatedPush = function parseCustomerUpdatedPush(payload) {
2008
- return {
2009
- customer: _extends({
2010
- id: payload.customer.id
2011
- }, parseCustomerOptionalProps(payload.customer))
2012
- };
2199
+ return _extends({
2200
+ id: payload.id
2201
+ }, parseCustomerOptionalProps(payload));
2013
2202
  };
2014
2203
 
2015
2204
  var parseEventPropertiesDeletedPush = function parseEventPropertiesDeletedPush(payload) {
@@ -2054,12 +2243,17 @@ var parseGreetingAcceptedPush = function parseGreetingAcceptedPush(payload) {
2054
2243
  };
2055
2244
 
2056
2245
  var parseGetChatResponse = function parseGetChatResponse(payload) {
2057
- return parseIncomingChat(payload);
2246
+ return _extends({}, parseChatCommon(payload), {
2247
+ thread: payload.thread ? parseThread(payload.id, payload.thread) : null
2248
+ });
2058
2249
  };
2059
2250
 
2060
2251
  var parseIncomingChatPush = function parseIncomingChatPush(payload) {
2252
+ var chat = payload.chat;
2061
2253
  return {
2062
- chat: parseIncomingChat(payload.chat)
2254
+ chat: _extends({}, parseChatCommon(chat), {
2255
+ thread: parseThread(chat.id, chat.thread)
2256
+ })
2063
2257
  };
2064
2258
  };
2065
2259
 
@@ -2175,20 +2369,21 @@ var parseTicketFormFields = function parseTicketFormFields(fields) {
2175
2369
  return parseFields(withFakeIds);
2176
2370
  };
2177
2371
 
2372
+ var parseForm$1 = function parseForm(form) {
2373
+ var isTicketForm = !('id' in form.fields[0]);
2374
+ return {
2375
+ id: form.id,
2376
+ fields: isTicketForm ? parseTicketFormFields(form.fields) : parseFields(form.fields)
2377
+ };
2378
+ };
2379
+
2178
2380
  var parseGetFormResponse = function parseGetFormResponse(payload) {
2179
2381
  if (!payload.enabled) {
2180
2382
  return payload;
2181
2383
  }
2182
2384
 
2183
2385
  return _extends({}, payload, {
2184
- form: 'id' in payload.form.fields[0] ? {
2185
- id: payload.form.id,
2186
- fields: parseFields(payload.form.fields)
2187
- } : {
2188
- // TODO: should we fake id for this one?
2189
- id: 'ticket',
2190
- fields: parseTicketFormFields(payload.form.fields)
2191
- }
2386
+ form: parseForm$1(payload.form)
2192
2387
  });
2193
2388
  };
2194
2389
 
@@ -2306,9 +2501,8 @@ var parseListThreadsResponse = function parseListThreadsResponse(request, payloa
2306
2501
 
2307
2502
  var parseLoginResponse = function parseLoginResponse(payload) {
2308
2503
  var dynamicConfig = payload.__priv_dynamic_config,
2309
- chats = payload.chats;
2310
- var greeting = payload.greeting || dynamicConfig.greeting; // TODO: remove the fallback after API release the new greeting object position to the prod env
2311
-
2504
+ chats = payload.chats,
2505
+ greeting = payload.greeting;
2312
2506
  return _extends({
2313
2507
  dynamicConfig: dynamicConfig,
2314
2508
  customer: parseCustomer(payload.customer),
@@ -2478,19 +2672,6 @@ var parsePush = function parsePush(push) {
2478
2672
  case USER_REMOVED_FROM_CHAT:
2479
2673
  return {
2480
2674
  action: push.action,
2481
- payload: parseUserRemovedFromChatPush(push.payload) // TODO: remove those once we sync with the API on prod
2482
-
2483
- };
2484
-
2485
- case 'chat_user_added':
2486
- return {
2487
- action: USER_ADDED_TO_CHAT,
2488
- payload: parseUserAddedToChatPush(push.payload)
2489
- };
2490
-
2491
- case 'chat_user_removed':
2492
- return {
2493
- action: USER_REMOVED_FROM_CHAT,
2494
2675
  payload: parseUserRemovedFromChatPush(push.payload)
2495
2676
  };
2496
2677
  }
@@ -2738,8 +2919,7 @@ var socketListener = (function (store, socket) {
2738
2919
  }
2739
2920
 
2740
2921
  switch (message.action) {
2741
- case ACTIVATE_CHAT:
2742
- case DEACTIVATE_CHAT:
2922
+ case RESUME_CHAT:
2743
2923
  case SEND_EVENT:
2744
2924
  case START_CHAT:
2745
2925
  // those are requests with indirect responses
@@ -2753,7 +2933,6 @@ var socketListener = (function (store, socket) {
2753
2933
 
2754
2934
  if ('request_id' in message) {
2755
2935
  switch (message.action) {
2756
- case CHAT_DEACTIVATED:
2757
2936
  case INCOMING_CHAT:
2758
2937
  case INCOMING_EVENT:
2759
2938
  // those are acting as indirect responses
@@ -2914,7 +3093,7 @@ var sendTicketForm = function sendTicketForm(store, auth, _ref2) {
2914
3093
  groupId: groupId,
2915
3094
  timeZone: timeZone
2916
3095
  });
2917
- return unfetch(url, {
3096
+ return unfetch__default['default'](url, {
2918
3097
  method: 'POST',
2919
3098
  headers: {
2920
3099
  'Content-Type': 'application/json'
@@ -2993,7 +3172,7 @@ var validateFile = function validateFile(file) {
2993
3172
  if (file.size > SIZE_LIMIT) {
2994
3173
  throw createError({
2995
3174
  message: "The file is too big (max size is " + formatBytes(SIZE_LIMIT) + ").",
2996
- code: 'TOO_BIG_FILE'
3175
+ code: TOO_BIG_FILE
2997
3176
  });
2998
3177
  }
2999
3178
  };
@@ -3021,7 +3200,7 @@ var uploadFile = function uploadFile(_ref, _ref2) {
3021
3200
  return;
3022
3201
  }
3023
3202
 
3024
- upload = rawUploadFile(url, payload, {
3203
+ upload = rawUploadFile__default['default'](url, payload, {
3025
3204
  headers: {
3026
3205
  Authorization: token.tokenType + " " + token.accessToken
3027
3206
  },
@@ -3061,14 +3240,14 @@ var uploadFile = function uploadFile(_ref, _ref2) {
3061
3240
  };
3062
3241
 
3063
3242
  var makeGraylogRequest = function makeGraylogRequest(url, body) {
3064
- return unfetch(url, {
3243
+ return unfetch__default['default'](url, {
3065
3244
  body: body,
3066
3245
  method: 'POST',
3067
3246
  headers: {
3068
3247
  Accept: '*/*',
3069
3248
  'Content-Type': 'application/x-www-form-urlencoded'
3070
3249
  }
3071
- }).catch(dataUtils.noop);
3250
+ })["catch"](dataUtils.noop);
3072
3251
  };
3073
3252
 
3074
3253
  /**
@@ -3089,7 +3268,7 @@ var log = function log(_ref) {
3089
3268
  var message = {
3090
3269
  event_name: eventName,
3091
3270
  severity: 'Informational',
3092
- sdkVersion: "2.0.4"
3271
+ sdkVersion: "3.1.1"
3093
3272
  };
3094
3273
  var body = {
3095
3274
  licence_id: licenseId,
@@ -3121,11 +3300,13 @@ var createDebuggedMethods = function createDebuggedMethods(methods, prefix) {
3121
3300
 
3122
3301
  var result = method.apply(void 0, args);
3123
3302
 
3124
- if (result && typeof result.then === 'function') {
3125
- result.then(function (data) {
3303
+ if (typeof (result == null ? void 0 : result.then) === 'function') {
3304
+ return result.then(function (data) {
3126
3305
  console.info(prefix + "." + methodName + "() <===", data);
3127
- }).catch(function (err) {
3306
+ return data;
3307
+ }, function (err) {
3128
3308
  console.error(prefix + "." + methodName + "() <===", err);
3309
+ throw err;
3129
3310
  });
3130
3311
  }
3131
3312
 
@@ -3197,17 +3378,19 @@ var debug = (function (_sdk) {
3197
3378
 
3198
3379
  (_console3 = console).info.apply(_console3, [logLabel + " ===>"].concat(args));
3199
3380
 
3200
- var result = history.next();
3201
- result.then(function (data) {
3381
+ return history.next().then(function (data) {
3202
3382
  var _console4;
3203
3383
 
3204
3384
  (_console4 = console).info.apply(_console4, [logLabel + " <==="].concat(args, [data]));
3205
- }).catch(function (err) {
3385
+
3386
+ return data;
3387
+ }, function (err) {
3206
3388
  var _console5;
3207
3389
 
3208
3390
  (_console5 = console).error.apply(_console5, [logLabel + " <==="].concat(args, [err]));
3391
+
3392
+ throw err;
3209
3393
  });
3210
- return result;
3211
3394
  }
3212
3395
  };
3213
3396
  },
@@ -3242,14 +3425,15 @@ var init = function init(config, env) {
3242
3425
  var _config$autoConnect = config.autoConnect,
3243
3426
  autoConnect = _config$autoConnect === void 0 ? true : _config$autoConnect,
3244
3427
  customerDataProvider = config.customerDataProvider,
3245
- instanceConfig = _objectWithoutPropertiesLoose(config, ["autoConnect", "customerDataProvider"]);
3428
+ identityProvider = config.identityProvider,
3429
+ instanceConfig = _objectWithoutPropertiesLoose(config, ["autoConnect", "customerDataProvider", "identityProvider"]);
3246
3430
 
3247
3431
  var store = finalCreateStore(_extends({}, instanceConfig, {
3248
3432
  env: env
3249
3433
  }));
3250
- var emitter = mitt();
3434
+ var emitter = mitt__default['default']();
3251
3435
  var socket = createSocketClient(store);
3252
- var auth = createAuth__default(instanceConfig, env);
3436
+ var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth__default['default'](instanceConfig, env);
3253
3437
  store.addSideEffectsHandler(createSideEffectsHandler({
3254
3438
  emitter: emitter,
3255
3439
  socket: socket,
@@ -3258,7 +3442,7 @@ var init = function init(config, env) {
3258
3442
  }));
3259
3443
  socketListener(store, socket);
3260
3444
 
3261
- var sendRequestAction$$1 = sendRequestAction.bind(null, store);
3445
+ var sendRequestAction$1 = sendRequestAction.bind(null, store);
3262
3446
 
3263
3447
  var startConnection = function startConnection() {
3264
3448
  store.dispatch({
@@ -3270,23 +3454,15 @@ var init = function init(config, env) {
3270
3454
  acceptGreeting: function acceptGreeting(_ref) {
3271
3455
  var greetingId = _ref.greetingId,
3272
3456
  uniqueId = _ref.uniqueId;
3273
- return sendRequestAction$$1(sendRequest(ACCEPT_GREETING, {
3457
+ return sendRequestAction$1(sendRequest(ACCEPT_GREETING, {
3274
3458
  greeting_id: greetingId,
3275
3459
  unique_id: uniqueId
3276
3460
  }));
3277
3461
  },
3278
- activateChat: function activateChat(data) {
3279
- log({
3280
- env: env,
3281
- licenseId: config.licenseId,
3282
- eventName: 'chat_started'
3283
- });
3284
- return sendRequestAction$$1(sendRequest(ACTIVATE_CHAT, parseActivateChatData(data)));
3285
- },
3286
3462
  auth: auth,
3287
3463
  cancelGreeting: function cancelGreeting(_ref2) {
3288
3464
  var uniqueId = _ref2.uniqueId;
3289
- return sendRequestAction$$1(sendRequest(CANCEL_GREETING, {
3465
+ return sendRequestAction$1(sendRequest(CANCEL_GREETING, {
3290
3466
  unique_id: uniqueId
3291
3467
  }));
3292
3468
  },
@@ -3317,16 +3493,16 @@ var init = function init(config, env) {
3317
3493
  },
3318
3494
  connect: startConnection,
3319
3495
  deactivateChat: function deactivateChat(_ref4) {
3320
- var chatId = _ref4.chatId;
3321
- return sendRequestAction$$1(sendRequest(DEACTIVATE_CHAT, {
3322
- chat_id: chatId
3496
+ var id = _ref4.id;
3497
+ return sendRequestAction$1(sendRequest(DEACTIVATE_CHAT, {
3498
+ id: id
3323
3499
  }));
3324
3500
  },
3325
3501
  deleteChatProperties: function deleteChatProperties(_ref5) {
3326
- var chatId = _ref5.chatId,
3502
+ var id = _ref5.id,
3327
3503
  properties = _ref5.properties;
3328
- return sendRequestAction$$1(sendRequest(DELETE_CHAT_PROPERTIES, {
3329
- chat_id: chatId,
3504
+ return sendRequestAction$1(sendRequest(DELETE_CHAT_PROPERTIES, {
3505
+ id: id,
3330
3506
  properties: properties
3331
3507
  }));
3332
3508
  },
@@ -3335,7 +3511,7 @@ var init = function init(config, env) {
3335
3511
  threadId = _ref6.threadId,
3336
3512
  eventId = _ref6.eventId,
3337
3513
  properties = _ref6.properties;
3338
- return sendRequestAction$$1(sendRequest(DELETE_EVENT_PROPERTIES, {
3514
+ return sendRequestAction$1(sendRequest(DELETE_EVENT_PROPERTIES, {
3339
3515
  chat_id: chatId,
3340
3516
  thread_id: threadId,
3341
3517
  event_id: eventId,
@@ -3346,24 +3522,22 @@ var init = function init(config, env) {
3346
3522
  var chatId = _ref7.chatId,
3347
3523
  threadId = _ref7.threadId,
3348
3524
  properties = _ref7.properties;
3349
- return sendRequestAction$$1(sendRequest(DELETE_THREAD_PROPERTIES, {
3525
+ return sendRequestAction$1(sendRequest(DELETE_THREAD_PROPERTIES, {
3350
3526
  chat_id: chatId,
3351
3527
  thread_id: threadId,
3352
3528
  properties: properties
3353
3529
  }));
3354
3530
  },
3355
- destroy: function destroy$$1() {
3531
+ destroy: function destroy$1() {
3356
3532
  store.dispatch(destroy('manual'));
3357
3533
  },
3358
3534
  disconnect: function disconnect() {
3359
- store.dispatch({
3360
- type: PAUSE_CONNECTION
3361
- });
3535
+ store.dispatch(pauseConnection('manual'));
3362
3536
  },
3363
3537
  getChat: function getChat(_ref8) {
3364
3538
  var chatId = _ref8.chatId,
3365
3539
  threadId = _ref8.threadId;
3366
- return sendRequestAction$$1(sendRequest(GET_CHAT, {
3540
+ return sendRequestAction$1(sendRequest(GET_CHAT, {
3367
3541
  chat_id: chatId,
3368
3542
  thread_id: threadId
3369
3543
  }));
@@ -3373,12 +3547,12 @@ var init = function init(config, env) {
3373
3547
  return createChatHistoryIterator(api, chatId);
3374
3548
  },
3375
3549
  getCustomer: function getCustomer() {
3376
- return sendRequestAction$$1(sendRequest(GET_CUSTOMER, {}));
3550
+ return sendRequestAction$1(sendRequest(GET_CUSTOMER, {}));
3377
3551
  },
3378
3552
  getForm: function getForm(_ref10) {
3379
3553
  var groupId = _ref10.groupId,
3380
3554
  type = _ref10.type;
3381
- return sendRequestAction$$1(sendRequest(GET_FORM, {
3555
+ return sendRequestAction$1(sendRequest(GET_FORM, {
3382
3556
  group_id: groupId,
3383
3557
  type: type
3384
3558
  }));
@@ -3390,60 +3564,56 @@ var init = function init(config, env) {
3390
3564
 
3391
3565
  var _params = params,
3392
3566
  groupId = _params.groupId;
3393
- return sendRequestAction$$1(sendRequest(GET_PREDICTED_AGENT, typeof groupId === 'number' ? {
3567
+ return sendRequestAction$1(sendRequest(GET_PREDICTED_AGENT, typeof groupId === 'number' ? {
3394
3568
  group_id: groupId
3395
3569
  } : {}));
3396
3570
  },
3397
3571
  getUrlInfo: function getUrlInfo(_ref11) {
3398
3572
  var url = _ref11.url;
3399
- return sendRequestAction$$1(sendRequest(GET_URL_INFO, {
3573
+ return sendRequestAction$1(sendRequest(GET_URL_INFO, {
3400
3574
  url: url
3401
3575
  }));
3402
3576
  },
3403
- listChats: function listChats(_temp) {
3404
- var _ref12 = _temp === void 0 ? {} : _temp,
3405
- _ref12$limit = _ref12.limit,
3406
- limit = _ref12$limit === void 0 ? 10 : _ref12$limit,
3407
- pageId = _ref12.pageId;
3577
+ listChats: function listChats(params) {
3578
+ if (params === void 0) {
3579
+ params = {};
3580
+ }
3408
3581
 
3409
- if (limit > CHATS_PAGINATION_MAX_LIMIT) {
3582
+ if ('limit' in params && typeof params.limit === 'number' && params.limit > CHATS_PAGINATION_MAX_LIMIT) {
3410
3583
  return Promise.reject(new Error("Specified limit is too high (max " + CHATS_PAGINATION_MAX_LIMIT + ")."));
3411
3584
  }
3412
3585
 
3413
- return sendRequestAction$$1(sendRequest(LIST_CHATS, {
3414
- limit: limit,
3415
- page_id: pageId
3586
+ return sendRequestAction$1(sendRequest(LIST_CHATS, params.pageId === undefined ? {
3587
+ limit: params.limit || 10
3588
+ } : {
3589
+ page_id: params.pageId
3416
3590
  }));
3417
3591
  },
3418
- listGroupStatuses: function listGroupStatuses(_temp2) {
3419
- var _ref13 = _temp2 === void 0 ? {} : _temp2,
3420
- groupIds = _ref13.groupIds;
3592
+ listGroupStatuses: function listGroupStatuses(_temp) {
3593
+ var _ref12 = _temp === void 0 ? {} : _temp,
3594
+ groupIds = _ref12.groupIds;
3421
3595
 
3422
- return sendRequestAction$$1(sendRequest(LIST_GROUP_STATUSES, groupIds ? {
3596
+ return sendRequestAction$1(sendRequest(LIST_GROUP_STATUSES, groupIds ? {
3423
3597
  group_ids: groupIds
3424
3598
  } : {
3425
3599
  all: true
3426
3600
  }));
3427
3601
  },
3428
- listThreads: function listThreads(_ref14) {
3429
- var chatId = _ref14.chatId,
3430
- _ref14$sortOrder = _ref14.sortOrder,
3431
- sortOrder = _ref14$sortOrder === void 0 ? DESC : _ref14$sortOrder,
3432
- limit = _ref14.limit,
3433
- pageId = _ref14.pageId,
3434
- minEventsCount = _ref14.minEventsCount;
3435
- return sendRequestAction$$1(sendRequest(LIST_THREADS, {
3436
- chat_id: chatId,
3437
- sort_order: sortOrder,
3438
- limit: limit,
3439
- page_id: pageId,
3440
- min_events_count: minEventsCount
3602
+ listThreads: function listThreads(params) {
3603
+ return sendRequestAction$1(sendRequest(LIST_THREADS, params.pageId === undefined ? {
3604
+ chat_id: params.chatId,
3605
+ sort_order: params.sortOrder,
3606
+ limit: params.limit,
3607
+ min_events_count: params.minEventsCount
3608
+ } : {
3609
+ chat_id: params.chatId,
3610
+ page_id: params.pageId
3441
3611
  }));
3442
3612
  },
3443
- markEventsAsSeen: function markEventsAsSeen(_ref15) {
3444
- var chatId = _ref15.chatId,
3445
- seenUpTo = _ref15.seenUpTo;
3446
- return sendRequestAction$$1(sendRequest(MARK_EVENTS_AS_SEEN, {
3613
+ markEventsAsSeen: function markEventsAsSeen(_ref13) {
3614
+ var chatId = _ref13.chatId,
3615
+ seenUpTo = _ref13.seenUpTo;
3616
+ return sendRequestAction$1(sendRequest(MARK_EVENTS_AS_SEEN, {
3447
3617
  chat_id: chatId,
3448
3618
  seen_up_to: seenUpTo
3449
3619
  }));
@@ -3456,8 +3626,8 @@ var init = function init(config, env) {
3456
3626
  rating = params.rating;
3457
3627
  return api.listThreads({
3458
3628
  chatId: chatId
3459
- }).then(function (_ref16) {
3460
- var threads = _ref16.threads;
3629
+ }).then(function (_ref14) {
3630
+ var threads = _ref14.threads;
3461
3631
 
3462
3632
  if (!threads.length) {
3463
3633
  throw createError({
@@ -3475,53 +3645,61 @@ var init = function init(config, env) {
3475
3645
  });
3476
3646
  });
3477
3647
  },
3648
+ resumeChat: function resumeChat(data) {
3649
+ log({
3650
+ env: env,
3651
+ licenseId: config.licenseId,
3652
+ eventName: 'chat_started'
3653
+ });
3654
+ return sendRequestAction$1(sendRequest(RESUME_CHAT, parseResumeChatData(data)));
3655
+ },
3478
3656
  sendEvent: function (_sendEvent) {
3479
- function sendEvent$$1(_x) {
3657
+ function sendEvent(_x) {
3480
3658
  return _sendEvent.apply(this, arguments);
3481
3659
  }
3482
3660
 
3483
- sendEvent$$1.toString = function () {
3661
+ sendEvent.toString = function () {
3484
3662
  return _sendEvent.toString();
3485
3663
  };
3486
3664
 
3487
- return sendEvent$$1;
3665
+ return sendEvent;
3488
3666
  }(function (params) {
3489
- return sendRequestAction$$1(sendEvent(params));
3667
+ return sendRequestAction$1(sendEvent(params));
3490
3668
  }),
3491
- sendTicketForm: function sendTicketForm$$1(options) {
3669
+ sendTicketForm: function sendTicketForm$1(options) {
3492
3670
  return sendTicketForm(store, auth, options);
3493
3671
  },
3494
- sendRichMessagePostback: function sendRichMessagePostback(_ref17) {
3495
- var chatId = _ref17.chatId,
3496
- threadId = _ref17.threadId,
3497
- eventId = _ref17.eventId,
3498
- postback = _ref17.postback;
3499
- return sendRequestAction$$1(sendRequest(SEND_RICH_MESSAGE_POSTBACK, {
3672
+ sendRichMessagePostback: function sendRichMessagePostback(_ref15) {
3673
+ var chatId = _ref15.chatId,
3674
+ threadId = _ref15.threadId,
3675
+ eventId = _ref15.eventId,
3676
+ postback = _ref15.postback;
3677
+ return sendRequestAction$1(sendRequest(SEND_RICH_MESSAGE_POSTBACK, {
3500
3678
  chat_id: chatId,
3501
3679
  event_id: eventId,
3502
3680
  thread_id: threadId,
3503
3681
  postback: postback
3504
3682
  }));
3505
3683
  },
3506
- setCustomerSessionFields: function setCustomerSessionFields(_ref18) {
3507
- var sessionFields = _ref18.sessionFields;
3508
- return sendRequestAction$$1(sendRequest(SET_CUSTOMER_SESSION_FIELDS, {
3684
+ setCustomerSessionFields: function setCustomerSessionFields(_ref16) {
3685
+ var sessionFields = _ref16.sessionFields;
3686
+ return sendRequestAction$1(sendRequest(SET_CUSTOMER_SESSION_FIELDS, {
3509
3687
  session_fields: parseCustomerSessionFields(sessionFields)
3510
3688
  }));
3511
3689
  },
3512
- setSneakPeek: function setSneakPeek(_ref19) {
3513
- var chatId = _ref19.chatId,
3514
- sneakPeekText = _ref19.sneakPeekText;
3690
+ setSneakPeek: function setSneakPeek(_ref17) {
3691
+ var chatId = _ref17.chatId,
3692
+ sneakPeekText = _ref17.sneakPeekText;
3515
3693
  var state = store.getState();
3516
3694
 
3517
3695
  if (!isChatActive(state, chatId) || !isConnected(state)) {
3518
3696
  return;
3519
3697
  }
3520
3698
 
3521
- sendRequestAction$$1(sendRequest(SEND_SNEAK_PEEK, {
3699
+ sendRequestAction$1(sendRequest(SEND_SNEAK_PEEK, {
3522
3700
  chat_id: chatId,
3523
3701
  sneak_peek_text: sneakPeekText
3524
- })).catch(dataUtils.noop);
3702
+ }))["catch"](dataUtils.noop);
3525
3703
  },
3526
3704
  startChat: function startChat(data) {
3527
3705
  if (data === void 0) {
@@ -3533,18 +3711,18 @@ var init = function init(config, env) {
3533
3711
  licenseId: config.licenseId,
3534
3712
  eventName: 'chat_started'
3535
3713
  });
3536
- return sendRequestAction$$1(sendRequest(START_CHAT, parseStartChatData(data)));
3714
+ return sendRequestAction$1(sendRequest(START_CHAT, parseStartChatData(data)));
3537
3715
  },
3538
- updateChatProperties: function updateChatProperties(_ref20) {
3539
- var chatId = _ref20.chatId,
3540
- properties = _ref20.properties;
3541
- return sendRequestAction$$1(sendRequest(UPDATE_CHAT_PROPERTIES, {
3542
- chat_id: chatId,
3716
+ updateChatProperties: function updateChatProperties(_ref18) {
3717
+ var id = _ref18.id,
3718
+ properties = _ref18.properties;
3719
+ return sendRequestAction$1(sendRequest(UPDATE_CHAT_PROPERTIES, {
3720
+ id: id,
3543
3721
  properties: properties
3544
3722
  }));
3545
3723
  },
3546
3724
  updateCustomer: function updateCustomer(update) {
3547
- return sendRequestAction$$1(sendRequest(UPDATE_CUSTOMER, parseCustomerUpdate(update)));
3725
+ return sendRequestAction$1(sendRequest(UPDATE_CUSTOMER, parseCustomerUpdate(update)));
3548
3726
  },
3549
3727
  updateCustomerPage: function updateCustomerPage(page) {
3550
3728
  store.dispatch({
@@ -3552,29 +3730,29 @@ var init = function init(config, env) {
3552
3730
  payload: dataUtils.pickOwn(['title', 'url'], page)
3553
3731
  });
3554
3732
  },
3555
- updateEventProperties: function updateEventProperties(_ref21) {
3556
- var chatId = _ref21.chatId,
3557
- threadId = _ref21.threadId,
3558
- eventId = _ref21.eventId,
3559
- properties = _ref21.properties;
3560
- return sendRequestAction$$1(sendRequest(UPDATE_EVENT_PROPERTIES, {
3733
+ updateEventProperties: function updateEventProperties(_ref19) {
3734
+ var chatId = _ref19.chatId,
3735
+ threadId = _ref19.threadId,
3736
+ eventId = _ref19.eventId,
3737
+ properties = _ref19.properties;
3738
+ return sendRequestAction$1(sendRequest(UPDATE_EVENT_PROPERTIES, {
3561
3739
  chat_id: chatId,
3562
3740
  event_id: eventId,
3563
3741
  thread_id: threadId,
3564
3742
  properties: properties
3565
3743
  }));
3566
3744
  },
3567
- updateThreadProperties: function updateThreadProperties(_ref22) {
3568
- var chatId = _ref22.chatId,
3569
- threadId = _ref22.threadId,
3570
- properties = _ref22.properties;
3571
- return sendRequestAction$$1(sendRequest(UPDATE_THREAD_PROPERTIES, {
3745
+ updateThreadProperties: function updateThreadProperties(_ref20) {
3746
+ var chatId = _ref20.chatId,
3747
+ threadId = _ref20.threadId,
3748
+ properties = _ref20.properties;
3749
+ return sendRequestAction$1(sendRequest(UPDATE_THREAD_PROPERTIES, {
3572
3750
  chat_id: chatId,
3573
3751
  thread_id: threadId,
3574
3752
  properties: properties
3575
3753
  }));
3576
3754
  },
3577
- uploadFile: function uploadFile$$1(options) {
3755
+ uploadFile: function uploadFile$1(options) {
3578
3756
  return uploadFile({
3579
3757
  auth: auth,
3580
3758
  store: store
@@ -3596,12 +3774,14 @@ var init = function init(config, env) {
3596
3774
  return api;
3597
3775
  };
3598
3776
 
3599
- exports.init = init;
3600
3777
  exports.debug = debug;
3778
+ exports.init = init;
3779
+ exports.parseCustomEvent = parseCustomEvent;
3780
+ exports.parseEvent = parseEvent$1;
3601
3781
  exports.parseFile = parseFile;
3602
3782
  exports.parseFilledForm = parseFilledForm;
3783
+ exports.parseForm = parseForm$1;
3784
+ exports.parseGreeting = parseGreeting;
3603
3785
  exports.parseMessage = parseMessage;
3604
3786
  exports.parseRichMessage = parseRichMessage;
3605
3787
  exports.parseSystemMessage = parseSystemMessage;
3606
- exports.parseEvent = parseEvent$1;
3607
- exports.parseGreeting = parseGreeting;