@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
  },
@@ -3090,7 +3269,7 @@ var log = function log(_ref) {
3090
3269
  var message = {
3091
3270
  event_name: eventName,
3092
3271
  severity: 'Informational',
3093
- sdkVersion: "2.0.4"
3272
+ sdkVersion: "3.1.1"
3094
3273
  };
3095
3274
  var body = {
3096
3275
  licence_id: licenseId,
@@ -3122,11 +3301,13 @@ var createDebuggedMethods = function createDebuggedMethods(methods, prefix) {
3122
3301
 
3123
3302
  var result = method.apply(void 0, args);
3124
3303
 
3125
- if (result && typeof result.then === 'function') {
3126
- result.then(function (data) {
3304
+ if (typeof (result == null ? void 0 : result.then) === 'function') {
3305
+ return result.then(function (data) {
3127
3306
  console.info(prefix + "." + methodName + "() <===", data);
3128
- }).catch(function (err) {
3307
+ return data;
3308
+ }, function (err) {
3129
3309
  console.error(prefix + "." + methodName + "() <===", err);
3310
+ throw err;
3130
3311
  });
3131
3312
  }
3132
3313
 
@@ -3198,17 +3379,19 @@ var debug = (function (_sdk) {
3198
3379
 
3199
3380
  (_console3 = console).info.apply(_console3, [logLabel + " ===>"].concat(args));
3200
3381
 
3201
- var result = history.next();
3202
- result.then(function (data) {
3382
+ return history.next().then(function (data) {
3203
3383
  var _console4;
3204
3384
 
3205
3385
  (_console4 = console).info.apply(_console4, [logLabel + " <==="].concat(args, [data]));
3206
- }).catch(function (err) {
3386
+
3387
+ return data;
3388
+ }, function (err) {
3207
3389
  var _console5;
3208
3390
 
3209
3391
  (_console5 = console).error.apply(_console5, [logLabel + " <==="].concat(args, [err]));
3392
+
3393
+ throw err;
3210
3394
  });
3211
- return result;
3212
3395
  }
3213
3396
  };
3214
3397
  },
@@ -3243,14 +3426,15 @@ var init = function init(config, env) {
3243
3426
  var _config$autoConnect = config.autoConnect,
3244
3427
  autoConnect = _config$autoConnect === void 0 ? true : _config$autoConnect,
3245
3428
  customerDataProvider = config.customerDataProvider,
3246
- instanceConfig = _objectWithoutPropertiesLoose(config, ["autoConnect", "customerDataProvider"]);
3429
+ identityProvider = config.identityProvider,
3430
+ instanceConfig = _objectWithoutPropertiesLoose(config, ["autoConnect", "customerDataProvider", "identityProvider"]);
3247
3431
 
3248
3432
  var store = finalCreateStore(_extends({}, instanceConfig, {
3249
3433
  env: env
3250
3434
  }));
3251
- var emitter = mitt();
3435
+ var emitter = mitt__default['default']();
3252
3436
  var socket = createSocketClient(store);
3253
- var auth = createAuth__default(instanceConfig, env);
3437
+ var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth__default['default'](instanceConfig, env);
3254
3438
  store.addSideEffectsHandler(createSideEffectsHandler({
3255
3439
  emitter: emitter,
3256
3440
  socket: socket,
@@ -3259,7 +3443,7 @@ var init = function init(config, env) {
3259
3443
  }));
3260
3444
  socketListener(store, socket);
3261
3445
 
3262
- var sendRequestAction$$1 = sendRequestAction.bind(null, store);
3446
+ var sendRequestAction$1 = sendRequestAction.bind(null, store);
3263
3447
 
3264
3448
  var startConnection = function startConnection() {
3265
3449
  store.dispatch({
@@ -3271,23 +3455,15 @@ var init = function init(config, env) {
3271
3455
  acceptGreeting: function acceptGreeting(_ref) {
3272
3456
  var greetingId = _ref.greetingId,
3273
3457
  uniqueId = _ref.uniqueId;
3274
- return sendRequestAction$$1(sendRequest(ACCEPT_GREETING, {
3458
+ return sendRequestAction$1(sendRequest(ACCEPT_GREETING, {
3275
3459
  greeting_id: greetingId,
3276
3460
  unique_id: uniqueId
3277
3461
  }));
3278
3462
  },
3279
- activateChat: function activateChat(data) {
3280
- log({
3281
- env: env,
3282
- licenseId: config.licenseId,
3283
- eventName: 'chat_started'
3284
- });
3285
- return sendRequestAction$$1(sendRequest(ACTIVATE_CHAT, parseActivateChatData(data)));
3286
- },
3287
3463
  auth: auth,
3288
3464
  cancelGreeting: function cancelGreeting(_ref2) {
3289
3465
  var uniqueId = _ref2.uniqueId;
3290
- return sendRequestAction$$1(sendRequest(CANCEL_GREETING, {
3466
+ return sendRequestAction$1(sendRequest(CANCEL_GREETING, {
3291
3467
  unique_id: uniqueId
3292
3468
  }));
3293
3469
  },
@@ -3318,16 +3494,16 @@ var init = function init(config, env) {
3318
3494
  },
3319
3495
  connect: startConnection,
3320
3496
  deactivateChat: function deactivateChat(_ref4) {
3321
- var chatId = _ref4.chatId;
3322
- return sendRequestAction$$1(sendRequest(DEACTIVATE_CHAT, {
3323
- chat_id: chatId
3497
+ var id = _ref4.id;
3498
+ return sendRequestAction$1(sendRequest(DEACTIVATE_CHAT, {
3499
+ id: id
3324
3500
  }));
3325
3501
  },
3326
3502
  deleteChatProperties: function deleteChatProperties(_ref5) {
3327
- var chatId = _ref5.chatId,
3503
+ var id = _ref5.id,
3328
3504
  properties = _ref5.properties;
3329
- return sendRequestAction$$1(sendRequest(DELETE_CHAT_PROPERTIES, {
3330
- chat_id: chatId,
3505
+ return sendRequestAction$1(sendRequest(DELETE_CHAT_PROPERTIES, {
3506
+ id: id,
3331
3507
  properties: properties
3332
3508
  }));
3333
3509
  },
@@ -3336,7 +3512,7 @@ var init = function init(config, env) {
3336
3512
  threadId = _ref6.threadId,
3337
3513
  eventId = _ref6.eventId,
3338
3514
  properties = _ref6.properties;
3339
- return sendRequestAction$$1(sendRequest(DELETE_EVENT_PROPERTIES, {
3515
+ return sendRequestAction$1(sendRequest(DELETE_EVENT_PROPERTIES, {
3340
3516
  chat_id: chatId,
3341
3517
  thread_id: threadId,
3342
3518
  event_id: eventId,
@@ -3347,24 +3523,22 @@ var init = function init(config, env) {
3347
3523
  var chatId = _ref7.chatId,
3348
3524
  threadId = _ref7.threadId,
3349
3525
  properties = _ref7.properties;
3350
- return sendRequestAction$$1(sendRequest(DELETE_THREAD_PROPERTIES, {
3526
+ return sendRequestAction$1(sendRequest(DELETE_THREAD_PROPERTIES, {
3351
3527
  chat_id: chatId,
3352
3528
  thread_id: threadId,
3353
3529
  properties: properties
3354
3530
  }));
3355
3531
  },
3356
- destroy: function destroy$$1() {
3532
+ destroy: function destroy$1() {
3357
3533
  store.dispatch(destroy('manual'));
3358
3534
  },
3359
3535
  disconnect: function disconnect() {
3360
- store.dispatch({
3361
- type: PAUSE_CONNECTION
3362
- });
3536
+ store.dispatch(pauseConnection('manual'));
3363
3537
  },
3364
3538
  getChat: function getChat(_ref8) {
3365
3539
  var chatId = _ref8.chatId,
3366
3540
  threadId = _ref8.threadId;
3367
- return sendRequestAction$$1(sendRequest(GET_CHAT, {
3541
+ return sendRequestAction$1(sendRequest(GET_CHAT, {
3368
3542
  chat_id: chatId,
3369
3543
  thread_id: threadId
3370
3544
  }));
@@ -3374,12 +3548,12 @@ var init = function init(config, env) {
3374
3548
  return createChatHistoryIterator(api, chatId);
3375
3549
  },
3376
3550
  getCustomer: function getCustomer() {
3377
- return sendRequestAction$$1(sendRequest(GET_CUSTOMER, {}));
3551
+ return sendRequestAction$1(sendRequest(GET_CUSTOMER, {}));
3378
3552
  },
3379
3553
  getForm: function getForm(_ref10) {
3380
3554
  var groupId = _ref10.groupId,
3381
3555
  type = _ref10.type;
3382
- return sendRequestAction$$1(sendRequest(GET_FORM, {
3556
+ return sendRequestAction$1(sendRequest(GET_FORM, {
3383
3557
  group_id: groupId,
3384
3558
  type: type
3385
3559
  }));
@@ -3391,60 +3565,56 @@ var init = function init(config, env) {
3391
3565
 
3392
3566
  var _params = params,
3393
3567
  groupId = _params.groupId;
3394
- return sendRequestAction$$1(sendRequest(GET_PREDICTED_AGENT, typeof groupId === 'number' ? {
3568
+ return sendRequestAction$1(sendRequest(GET_PREDICTED_AGENT, typeof groupId === 'number' ? {
3395
3569
  group_id: groupId
3396
3570
  } : {}));
3397
3571
  },
3398
3572
  getUrlInfo: function getUrlInfo(_ref11) {
3399
3573
  var url = _ref11.url;
3400
- return sendRequestAction$$1(sendRequest(GET_URL_INFO, {
3574
+ return sendRequestAction$1(sendRequest(GET_URL_INFO, {
3401
3575
  url: url
3402
3576
  }));
3403
3577
  },
3404
- listChats: function listChats(_temp) {
3405
- var _ref12 = _temp === void 0 ? {} : _temp,
3406
- _ref12$limit = _ref12.limit,
3407
- limit = _ref12$limit === void 0 ? 10 : _ref12$limit,
3408
- pageId = _ref12.pageId;
3578
+ listChats: function listChats(params) {
3579
+ if (params === void 0) {
3580
+ params = {};
3581
+ }
3409
3582
 
3410
- if (limit > CHATS_PAGINATION_MAX_LIMIT) {
3583
+ if ('limit' in params && typeof params.limit === 'number' && params.limit > CHATS_PAGINATION_MAX_LIMIT) {
3411
3584
  return Promise.reject(new Error("Specified limit is too high (max " + CHATS_PAGINATION_MAX_LIMIT + ")."));
3412
3585
  }
3413
3586
 
3414
- return sendRequestAction$$1(sendRequest(LIST_CHATS, {
3415
- limit: limit,
3416
- page_id: pageId
3587
+ return sendRequestAction$1(sendRequest(LIST_CHATS, params.pageId === undefined ? {
3588
+ limit: params.limit || 10
3589
+ } : {
3590
+ page_id: params.pageId
3417
3591
  }));
3418
3592
  },
3419
- listGroupStatuses: function listGroupStatuses(_temp2) {
3420
- var _ref13 = _temp2 === void 0 ? {} : _temp2,
3421
- groupIds = _ref13.groupIds;
3593
+ listGroupStatuses: function listGroupStatuses(_temp) {
3594
+ var _ref12 = _temp === void 0 ? {} : _temp,
3595
+ groupIds = _ref12.groupIds;
3422
3596
 
3423
- return sendRequestAction$$1(sendRequest(LIST_GROUP_STATUSES, groupIds ? {
3597
+ return sendRequestAction$1(sendRequest(LIST_GROUP_STATUSES, groupIds ? {
3424
3598
  group_ids: groupIds
3425
3599
  } : {
3426
3600
  all: true
3427
3601
  }));
3428
3602
  },
3429
- listThreads: function listThreads(_ref14) {
3430
- var chatId = _ref14.chatId,
3431
- _ref14$sortOrder = _ref14.sortOrder,
3432
- sortOrder = _ref14$sortOrder === void 0 ? DESC : _ref14$sortOrder,
3433
- limit = _ref14.limit,
3434
- pageId = _ref14.pageId,
3435
- minEventsCount = _ref14.minEventsCount;
3436
- return sendRequestAction$$1(sendRequest(LIST_THREADS, {
3437
- chat_id: chatId,
3438
- sort_order: sortOrder,
3439
- limit: limit,
3440
- page_id: pageId,
3441
- min_events_count: minEventsCount
3603
+ listThreads: function listThreads(params) {
3604
+ return sendRequestAction$1(sendRequest(LIST_THREADS, params.pageId === undefined ? {
3605
+ chat_id: params.chatId,
3606
+ sort_order: params.sortOrder,
3607
+ limit: params.limit,
3608
+ min_events_count: params.minEventsCount
3609
+ } : {
3610
+ chat_id: params.chatId,
3611
+ page_id: params.pageId
3442
3612
  }));
3443
3613
  },
3444
- markEventsAsSeen: function markEventsAsSeen(_ref15) {
3445
- var chatId = _ref15.chatId,
3446
- seenUpTo = _ref15.seenUpTo;
3447
- return sendRequestAction$$1(sendRequest(MARK_EVENTS_AS_SEEN, {
3614
+ markEventsAsSeen: function markEventsAsSeen(_ref13) {
3615
+ var chatId = _ref13.chatId,
3616
+ seenUpTo = _ref13.seenUpTo;
3617
+ return sendRequestAction$1(sendRequest(MARK_EVENTS_AS_SEEN, {
3448
3618
  chat_id: chatId,
3449
3619
  seen_up_to: seenUpTo
3450
3620
  }));
@@ -3457,8 +3627,8 @@ var init = function init(config, env) {
3457
3627
  rating = params.rating;
3458
3628
  return api.listThreads({
3459
3629
  chatId: chatId
3460
- }).then(function (_ref16) {
3461
- var threads = _ref16.threads;
3630
+ }).then(function (_ref14) {
3631
+ var threads = _ref14.threads;
3462
3632
 
3463
3633
  if (!threads.length) {
3464
3634
  throw createError({
@@ -3476,53 +3646,61 @@ var init = function init(config, env) {
3476
3646
  });
3477
3647
  });
3478
3648
  },
3649
+ resumeChat: function resumeChat(data) {
3650
+ log({
3651
+ env: env,
3652
+ licenseId: config.licenseId,
3653
+ eventName: 'chat_started'
3654
+ });
3655
+ return sendRequestAction$1(sendRequest(RESUME_CHAT, parseResumeChatData(data)));
3656
+ },
3479
3657
  sendEvent: function (_sendEvent) {
3480
- function sendEvent$$1(_x) {
3658
+ function sendEvent(_x) {
3481
3659
  return _sendEvent.apply(this, arguments);
3482
3660
  }
3483
3661
 
3484
- sendEvent$$1.toString = function () {
3662
+ sendEvent.toString = function () {
3485
3663
  return _sendEvent.toString();
3486
3664
  };
3487
3665
 
3488
- return sendEvent$$1;
3666
+ return sendEvent;
3489
3667
  }(function (params) {
3490
- return sendRequestAction$$1(sendEvent(params));
3668
+ return sendRequestAction$1(sendEvent(params));
3491
3669
  }),
3492
- sendTicketForm: function sendTicketForm$$1(options) {
3670
+ sendTicketForm: function sendTicketForm$1(options) {
3493
3671
  return sendTicketForm(store, auth, options);
3494
3672
  },
3495
- sendRichMessagePostback: function sendRichMessagePostback(_ref17) {
3496
- var chatId = _ref17.chatId,
3497
- threadId = _ref17.threadId,
3498
- eventId = _ref17.eventId,
3499
- postback = _ref17.postback;
3500
- return sendRequestAction$$1(sendRequest(SEND_RICH_MESSAGE_POSTBACK, {
3673
+ sendRichMessagePostback: function sendRichMessagePostback(_ref15) {
3674
+ var chatId = _ref15.chatId,
3675
+ threadId = _ref15.threadId,
3676
+ eventId = _ref15.eventId,
3677
+ postback = _ref15.postback;
3678
+ return sendRequestAction$1(sendRequest(SEND_RICH_MESSAGE_POSTBACK, {
3501
3679
  chat_id: chatId,
3502
3680
  event_id: eventId,
3503
3681
  thread_id: threadId,
3504
3682
  postback: postback
3505
3683
  }));
3506
3684
  },
3507
- setCustomerSessionFields: function setCustomerSessionFields(_ref18) {
3508
- var sessionFields = _ref18.sessionFields;
3509
- return sendRequestAction$$1(sendRequest(SET_CUSTOMER_SESSION_FIELDS, {
3685
+ setCustomerSessionFields: function setCustomerSessionFields(_ref16) {
3686
+ var sessionFields = _ref16.sessionFields;
3687
+ return sendRequestAction$1(sendRequest(SET_CUSTOMER_SESSION_FIELDS, {
3510
3688
  session_fields: parseCustomerSessionFields(sessionFields)
3511
3689
  }));
3512
3690
  },
3513
- setSneakPeek: function setSneakPeek(_ref19) {
3514
- var chatId = _ref19.chatId,
3515
- sneakPeekText = _ref19.sneakPeekText;
3691
+ setSneakPeek: function setSneakPeek(_ref17) {
3692
+ var chatId = _ref17.chatId,
3693
+ sneakPeekText = _ref17.sneakPeekText;
3516
3694
  var state = store.getState();
3517
3695
 
3518
3696
  if (!isChatActive(state, chatId) || !isConnected(state)) {
3519
3697
  return;
3520
3698
  }
3521
3699
 
3522
- sendRequestAction$$1(sendRequest(SEND_SNEAK_PEEK, {
3700
+ sendRequestAction$1(sendRequest(SEND_SNEAK_PEEK, {
3523
3701
  chat_id: chatId,
3524
3702
  sneak_peek_text: sneakPeekText
3525
- })).catch(dataUtils.noop);
3703
+ }))["catch"](dataUtils.noop);
3526
3704
  },
3527
3705
  startChat: function startChat(data) {
3528
3706
  if (data === void 0) {
@@ -3534,18 +3712,18 @@ var init = function init(config, env) {
3534
3712
  licenseId: config.licenseId,
3535
3713
  eventName: 'chat_started'
3536
3714
  });
3537
- return sendRequestAction$$1(sendRequest(START_CHAT, parseStartChatData(data)));
3715
+ return sendRequestAction$1(sendRequest(START_CHAT, parseStartChatData(data)));
3538
3716
  },
3539
- updateChatProperties: function updateChatProperties(_ref20) {
3540
- var chatId = _ref20.chatId,
3541
- properties = _ref20.properties;
3542
- return sendRequestAction$$1(sendRequest(UPDATE_CHAT_PROPERTIES, {
3543
- chat_id: chatId,
3717
+ updateChatProperties: function updateChatProperties(_ref18) {
3718
+ var id = _ref18.id,
3719
+ properties = _ref18.properties;
3720
+ return sendRequestAction$1(sendRequest(UPDATE_CHAT_PROPERTIES, {
3721
+ id: id,
3544
3722
  properties: properties
3545
3723
  }));
3546
3724
  },
3547
3725
  updateCustomer: function updateCustomer(update) {
3548
- return sendRequestAction$$1(sendRequest(UPDATE_CUSTOMER, parseCustomerUpdate(update)));
3726
+ return sendRequestAction$1(sendRequest(UPDATE_CUSTOMER, parseCustomerUpdate(update)));
3549
3727
  },
3550
3728
  updateCustomerPage: function updateCustomerPage(page) {
3551
3729
  store.dispatch({
@@ -3553,29 +3731,29 @@ var init = function init(config, env) {
3553
3731
  payload: dataUtils.pickOwn(['title', 'url'], page)
3554
3732
  });
3555
3733
  },
3556
- updateEventProperties: function updateEventProperties(_ref21) {
3557
- var chatId = _ref21.chatId,
3558
- threadId = _ref21.threadId,
3559
- eventId = _ref21.eventId,
3560
- properties = _ref21.properties;
3561
- return sendRequestAction$$1(sendRequest(UPDATE_EVENT_PROPERTIES, {
3734
+ updateEventProperties: function updateEventProperties(_ref19) {
3735
+ var chatId = _ref19.chatId,
3736
+ threadId = _ref19.threadId,
3737
+ eventId = _ref19.eventId,
3738
+ properties = _ref19.properties;
3739
+ return sendRequestAction$1(sendRequest(UPDATE_EVENT_PROPERTIES, {
3562
3740
  chat_id: chatId,
3563
3741
  event_id: eventId,
3564
3742
  thread_id: threadId,
3565
3743
  properties: properties
3566
3744
  }));
3567
3745
  },
3568
- updateThreadProperties: function updateThreadProperties(_ref22) {
3569
- var chatId = _ref22.chatId,
3570
- threadId = _ref22.threadId,
3571
- properties = _ref22.properties;
3572
- return sendRequestAction$$1(sendRequest(UPDATE_THREAD_PROPERTIES, {
3746
+ updateThreadProperties: function updateThreadProperties(_ref20) {
3747
+ var chatId = _ref20.chatId,
3748
+ threadId = _ref20.threadId,
3749
+ properties = _ref20.properties;
3750
+ return sendRequestAction$1(sendRequest(UPDATE_THREAD_PROPERTIES, {
3573
3751
  chat_id: chatId,
3574
3752
  thread_id: threadId,
3575
3753
  properties: properties
3576
3754
  }));
3577
3755
  },
3578
- uploadFile: function uploadFile$$1(options) {
3756
+ uploadFile: function uploadFile$1(options) {
3579
3757
  return uploadFile({
3580
3758
  auth: auth,
3581
3759
  store: store
@@ -3597,12 +3775,14 @@ var init = function init(config, env) {
3597
3775
  return api;
3598
3776
  };
3599
3777
 
3600
- exports.init = init;
3601
3778
  exports.debug = debug;
3779
+ exports.init = init;
3780
+ exports.parseCustomEvent = parseCustomEvent;
3781
+ exports.parseEvent = parseEvent$1;
3602
3782
  exports.parseFile = parseFile;
3603
3783
  exports.parseFilledForm = parseFilledForm;
3784
+ exports.parseForm = parseForm$1;
3785
+ exports.parseGreeting = parseGreeting;
3604
3786
  exports.parseMessage = parseMessage;
3605
3787
  exports.parseRichMessage = parseRichMessage;
3606
3788
  exports.parseSystemMessage = parseSystemMessage;
3607
- exports.parseEvent = parseEvent$1;
3608
- exports.parseGreeting = parseGreeting;