@livechat/customer-sdk 3.1.2 → 3.1.3
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.
- package/README.md +18 -10
- package/dist/customer-sdk.cjs.js +68 -48
- package/dist/customer-sdk.cjs.native.js +68 -48
- package/dist/customer-sdk.esm.js +67 -45
- package/dist/customer-sdk.js +347 -215
- package/dist/customer-sdk.min.js +1 -1
- package/package.json +6 -7
- package/types/constants/organizationIds.d.ts +2 -0
- package/types/createStore.d.ts +1 -1
- package/types/graylog/index.d.ts +2 -2
- package/types/index.d.ts +9 -3
- package/types/sendTicketForm.d.ts +2 -1
- package/types/serverFrameParser.d.ts +1 -1
- package/types/sideEffects/index.d.ts +2 -1
- package/types/sideStorage.d.ts +2 -2
- package/types/socketListener.d.ts +4 -1
- package/types/types/clientEntities.d.ts +2 -0
- package/types/types/serverEntities.d.ts +1 -0
- package/types/types/state.d.ts +2 -2
|
@@ -7,8 +7,7 @@ var mitt = require('@livechat/mitt');
|
|
|
7
7
|
var dataUtils = require('@livechat/data-utils');
|
|
8
8
|
var redux = require('redux');
|
|
9
9
|
var createSideEffectsMiddleware = require('@livechat/side-effects-middleware');
|
|
10
|
-
var
|
|
11
|
-
var promiseTry = require('@livechat/promise-try');
|
|
10
|
+
var promiseUtils = require('@livechat/promise-utils');
|
|
12
11
|
var createBackoff = require('@livechat/backoff');
|
|
13
12
|
var storage = require('@livechat/isomorphic-storage');
|
|
14
13
|
var unfetch = require('unfetch');
|
|
@@ -21,8 +20,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
21
20
|
var createAuth__default = /*#__PURE__*/_interopDefaultLegacy(createAuth);
|
|
22
21
|
var mitt__default = /*#__PURE__*/_interopDefaultLegacy(mitt);
|
|
23
22
|
var createSideEffectsMiddleware__default = /*#__PURE__*/_interopDefaultLegacy(createSideEffectsMiddleware);
|
|
24
|
-
var deferred__default = /*#__PURE__*/_interopDefaultLegacy(deferred);
|
|
25
|
-
var promiseTry__default = /*#__PURE__*/_interopDefaultLegacy(promiseTry);
|
|
26
23
|
var createBackoff__default = /*#__PURE__*/_interopDefaultLegacy(createBackoff);
|
|
27
24
|
var storage__default = /*#__PURE__*/_interopDefaultLegacy(storage);
|
|
28
25
|
var unfetch__default = /*#__PURE__*/_interopDefaultLegacy(unfetch);
|
|
@@ -157,6 +154,8 @@ var RECONNECTING = 'reconnecting';
|
|
|
157
154
|
var AGENT = 'agent';
|
|
158
155
|
var CUSTOMER = 'customer';
|
|
159
156
|
|
|
157
|
+
var LIVECHAT_ORGANIZATION_ID = 'feaf6c0e-9f43-48ff-9ad0-8e24e0350932';
|
|
158
|
+
|
|
160
159
|
var getAllRequests = function getAllRequests(state) {
|
|
161
160
|
return state.requests;
|
|
162
161
|
};
|
|
@@ -180,9 +179,9 @@ var isDestroyed = function isDestroyed(state) {
|
|
|
180
179
|
return getConnectionStatus(state) === DESTROYED;
|
|
181
180
|
};
|
|
182
181
|
var getEnvPart = function getEnvPart(_ref) {
|
|
183
|
-
var
|
|
182
|
+
var organizationId = _ref.organizationId,
|
|
184
183
|
env = _ref.env;
|
|
185
|
-
if (
|
|
184
|
+
if (organizationId === LIVECHAT_ORGANIZATION_ID) {
|
|
186
185
|
return '.staging';
|
|
187
186
|
}
|
|
188
187
|
if (env === 'production') {
|
|
@@ -196,12 +195,12 @@ var getApiOrigin = function getApiOrigin(state) {
|
|
|
196
195
|
return "https://api" + regionPart + getEnvPart(state) + ".livechatinc.com";
|
|
197
196
|
};
|
|
198
197
|
var getServerUrl = function getServerUrl(state) {
|
|
199
|
-
return getApiOrigin(state) + "/v3.
|
|
198
|
+
return getApiOrigin(state) + "/v3.4/customer";
|
|
200
199
|
};
|
|
201
200
|
var createInitialState = function createInitialState(initialStateData) {
|
|
202
201
|
var _initialStateData$app = initialStateData.application,
|
|
203
202
|
application = _initialStateData$app === void 0 ? {} : _initialStateData$app,
|
|
204
|
-
|
|
203
|
+
organizationId = initialStateData.organizationId,
|
|
205
204
|
_initialStateData$gro = initialStateData.groupId,
|
|
206
205
|
groupId = _initialStateData$gro === void 0 ? null : _initialStateData$gro,
|
|
207
206
|
env = initialStateData.env,
|
|
@@ -218,9 +217,9 @@ var createInitialState = function createInitialState(initialStateData) {
|
|
|
218
217
|
return {
|
|
219
218
|
application: _extends({}, application, {
|
|
220
219
|
name: "customer_sdk",
|
|
221
|
-
version: "3.1.
|
|
220
|
+
version: "3.1.3"
|
|
222
221
|
}),
|
|
223
|
-
|
|
222
|
+
organizationId: organizationId,
|
|
224
223
|
env: env,
|
|
225
224
|
groupId: groupId,
|
|
226
225
|
chats: {},
|
|
@@ -674,10 +673,10 @@ var socketDisconnected = function socketDisconnected() {
|
|
|
674
673
|
// TODO: this thing is not really well typed and should be improved
|
|
675
674
|
var sendRequestAction = function sendRequestAction(store, action) {
|
|
676
675
|
action.payload.id = dataUtils.generateUniqueId(store.getState().requests);
|
|
677
|
-
var
|
|
678
|
-
resolve =
|
|
679
|
-
reject =
|
|
680
|
-
promise =
|
|
676
|
+
var _promiseDeferred = promiseUtils.promiseDeferred(),
|
|
677
|
+
resolve = _promiseDeferred.resolve,
|
|
678
|
+
reject = _promiseDeferred.reject,
|
|
679
|
+
promise = _promiseDeferred.promise;
|
|
681
680
|
action.payload.promise = promise;
|
|
682
681
|
action.payload.resolve = resolve;
|
|
683
682
|
action.payload.reject = reject;
|
|
@@ -690,24 +689,39 @@ var CUSTOMER_BANNED$1 = 'CUSTOMER_BANNED';
|
|
|
690
689
|
var USERS_LIMIT_REACHED = 'USERS_LIMIT_REACHED';
|
|
691
690
|
var WRONG_PRODUCT_VERSION = 'WRONG_PRODUCT_VERSION';
|
|
692
691
|
|
|
693
|
-
var
|
|
692
|
+
var getSideStorageKeyByLicense = function getSideStorageKeyByLicense(store, licenseId) {
|
|
694
693
|
var _store$getState = store.getState(),
|
|
695
|
-
licenseId = _store$getState.licenseId,
|
|
696
694
|
groupId = _store$getState.groupId,
|
|
697
695
|
uniqueGroups = _store$getState.uniqueGroups;
|
|
698
696
|
return "side_storage_" + licenseId + (uniqueGroups ? ":" + groupId : '');
|
|
699
697
|
};
|
|
700
|
-
var
|
|
701
|
-
|
|
702
|
-
|
|
698
|
+
var getSideStorageKeyByOrganization = function getSideStorageKeyByOrganization(store) {
|
|
699
|
+
var _store$getState2 = store.getState(),
|
|
700
|
+
organizationId = _store$getState2.organizationId,
|
|
701
|
+
groupId = _store$getState2.groupId,
|
|
702
|
+
uniqueGroups = _store$getState2.uniqueGroups;
|
|
703
|
+
return "side_storage_" + organizationId + (uniqueGroups ? ":" + groupId : '');
|
|
704
|
+
};
|
|
705
|
+
var getSideStorage = function getSideStorage(store, licenseId) {
|
|
706
|
+
var sideStorageLicenseKey = getSideStorageKeyByLicense(store, licenseId);
|
|
707
|
+
var sideStorageOrganizationKey = getSideStorageKeyByOrganization(store);
|
|
708
|
+
return storage__default['default'].getItem(sideStorageLicenseKey)["catch"](dataUtils.noop).then(function (sideStorage) {
|
|
709
|
+
if (!sideStorage) {
|
|
710
|
+
return storage__default['default'].getItem(sideStorageOrganizationKey)["catch"](dataUtils.noop).then(function (organizationSideStorage) {
|
|
711
|
+
return JSON.parse(organizationSideStorage || '{}');
|
|
712
|
+
})["catch"](dataUtils.noop);
|
|
713
|
+
}
|
|
714
|
+
return storage__default['default'].setItem(sideStorageOrganizationKey, sideStorage)["catch"](dataUtils.noop).then(function () {
|
|
715
|
+
return storage__default['default'].removeItem(sideStorageLicenseKey)["catch"](dataUtils.noop).then(function () {
|
|
716
|
+
return JSON.parse(sideStorage);
|
|
717
|
+
})["catch"](dataUtils.noop);
|
|
718
|
+
});
|
|
703
719
|
})
|
|
704
720
|
// shouldnt get triggered, just a defensive measure against malformed storage entries
|
|
705
|
-
["catch"](
|
|
706
|
-
return {};
|
|
707
|
-
});
|
|
721
|
+
["catch"](dataUtils.noop);
|
|
708
722
|
};
|
|
709
723
|
var saveSideStorage = function saveSideStorage(store, sideStorage) {
|
|
710
|
-
|
|
724
|
+
storage__default['default'].setItem(getSideStorageKeyByOrganization(store), JSON.stringify(sideStorage))["catch"](dataUtils.noop);
|
|
711
725
|
};
|
|
712
726
|
|
|
713
727
|
var taskChain = function taskChain(_ref, onSuccess, onError) {
|
|
@@ -715,7 +729,7 @@ var taskChain = function taskChain(_ref, onSuccess, onError) {
|
|
|
715
729
|
var cancelled = false;
|
|
716
730
|
var next = function next(intermediateResult) {
|
|
717
731
|
var step = steps.shift();
|
|
718
|
-
|
|
732
|
+
promiseUtils.promiseTry(function () {
|
|
719
733
|
return step(intermediateResult);
|
|
720
734
|
}).then(function (result) {
|
|
721
735
|
if (cancelled) {
|
|
@@ -748,7 +762,7 @@ var delay = function delay(ms) {
|
|
|
748
762
|
setTimeout(resolve, ms);
|
|
749
763
|
});
|
|
750
764
|
};
|
|
751
|
-
function createLoginTask(auth, customerDataProvider) {
|
|
765
|
+
function createLoginTask(auth, customerDataProvider, licenseId) {
|
|
752
766
|
var store;
|
|
753
767
|
var sentPage = null;
|
|
754
768
|
var task;
|
|
@@ -769,7 +783,7 @@ function createLoginTask(auth, customerDataProvider) {
|
|
|
769
783
|
return store.dispatch(reconnect(currentBackoffStrategy.duration()));
|
|
770
784
|
};
|
|
771
785
|
var getTokenAndSideStorage = function getTokenAndSideStorage() {
|
|
772
|
-
return Promise.all([auth.getToken(), getSideStorage(store)]);
|
|
786
|
+
return Promise.all([auth.getToken(), getSideStorage(store, licenseId)]);
|
|
773
787
|
};
|
|
774
788
|
var dispatchSelfId = function dispatchSelfId(_ref2) {
|
|
775
789
|
var token = _ref2[0],
|
|
@@ -909,7 +923,7 @@ var checkGoals = function checkGoals(store, auth, sessionFields) {
|
|
|
909
923
|
return;
|
|
910
924
|
}
|
|
911
925
|
var query = urlUtils.buildQueryString({
|
|
912
|
-
|
|
926
|
+
organization_id: state.organizationId
|
|
913
927
|
});
|
|
914
928
|
var payload = {
|
|
915
929
|
session_fields: parseCustomerSessionFields(sessionFields || {}),
|
|
@@ -1408,11 +1422,11 @@ var sendRequest$1 = function sendRequest(socket, _ref3) {
|
|
|
1408
1422
|
{
|
|
1409
1423
|
var upgradedPushes = [];
|
|
1410
1424
|
socket.emit(_extends({}, frame, {
|
|
1411
|
-
version: '3.
|
|
1425
|
+
version: '3.4',
|
|
1412
1426
|
payload: _extends({}, frame.payload, {
|
|
1413
1427
|
pushes: {
|
|
1414
|
-
// '3.
|
|
1415
|
-
'3.
|
|
1428
|
+
// '3.5': upgradedPushes,
|
|
1429
|
+
'3.4': dataUtils.values(serverPushActions).filter(function (pushAction) {
|
|
1416
1430
|
return (
|
|
1417
1431
|
// `customer_disconnected` can be sent immediately after opening the connection, before it even received login request
|
|
1418
1432
|
// therefore it's not possible to subscribe for a particular version of this push - the "connection version" is always used
|
|
@@ -1582,9 +1596,10 @@ var createSideEffectsHandler = (function (_ref9) {
|
|
|
1582
1596
|
var auth = _ref9.auth,
|
|
1583
1597
|
customerDataProvider = _ref9.customerDataProvider,
|
|
1584
1598
|
emitter = _ref9.emitter,
|
|
1585
|
-
socket = _ref9.socket
|
|
1599
|
+
socket = _ref9.socket,
|
|
1600
|
+
licenseId = _ref9.licenseId;
|
|
1586
1601
|
var emit = emitter.emit;
|
|
1587
|
-
var loginTask = createLoginTask(auth, customerDataProvider);
|
|
1602
|
+
var loginTask = createLoginTask(auth, customerDataProvider, licenseId);
|
|
1588
1603
|
|
|
1589
1604
|
// TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
|
|
1590
1605
|
return function (action, store) {
|
|
@@ -1881,7 +1896,7 @@ var initialize = function initialize(store, emitter) {
|
|
|
1881
1896
|
var url = (getServerUrl(state) + "/rtm/ws").replace(/^https/, 'wss');
|
|
1882
1897
|
return createPlatformClient__default['default'](url, {
|
|
1883
1898
|
query: {
|
|
1884
|
-
|
|
1899
|
+
organization_id: state.organizationId
|
|
1885
1900
|
},
|
|
1886
1901
|
emitter: emitter
|
|
1887
1902
|
});
|
|
@@ -2173,16 +2188,17 @@ var parseListChatsResponse = function parseListChatsResponse(payload) {
|
|
|
2173
2188
|
var lastEventSummary = dataUtils.last(lastEventSummariesArray.sort(function (eventSummaryA, eventSummaryB) {
|
|
2174
2189
|
return eventSummaryA.thread_id === eventSummaryB.thread_id ? dataUtils.stringCompare(eventSummaryA.event.created_at, eventSummaryB.event.created_at) : dataUtils.stringCompare(eventSummaryA.thread_created_at, eventSummaryB.thread_created_at);
|
|
2175
2190
|
}));
|
|
2176
|
-
if (lastEventSummary) {
|
|
2191
|
+
if (lastEventSummary && chatSummary.lastEventsPerType) {
|
|
2177
2192
|
chatSummary.lastEvent = chatSummary.lastEventsPerType[lastEventSummary.event.type];
|
|
2178
2193
|
}
|
|
2179
2194
|
return chatSummary;
|
|
2180
2195
|
});
|
|
2181
2196
|
return {
|
|
2182
2197
|
chatsSummary: dataUtils.numericSortBy(function (_ref4) {
|
|
2198
|
+
var _ref5;
|
|
2183
2199
|
var lastEvent = _ref4.lastEvent,
|
|
2184
2200
|
order = _ref4.order;
|
|
2185
|
-
return -1 * (lastEvent !== undefined ? lastEvent.timestamp : order);
|
|
2201
|
+
return -1 * ((_ref5 = lastEvent !== undefined ? lastEvent.timestamp : order) != null ? _ref5 : 0);
|
|
2186
2202
|
}, chatsSummary),
|
|
2187
2203
|
totalChats: payload.total_chats,
|
|
2188
2204
|
users: dataUtils.uniqBy(function (user) {
|
|
@@ -2359,9 +2375,9 @@ var parsePush = function parsePush(push) {
|
|
|
2359
2375
|
};
|
|
2360
2376
|
}
|
|
2361
2377
|
};
|
|
2362
|
-
var parseResponse = function parseResponse(
|
|
2363
|
-
var request =
|
|
2364
|
-
response =
|
|
2378
|
+
var parseResponse = function parseResponse(_ref6) {
|
|
2379
|
+
var request = _ref6.request,
|
|
2380
|
+
response = _ref6.response;
|
|
2365
2381
|
switch (response.action) {
|
|
2366
2382
|
case ACCEPT_GREETING:
|
|
2367
2383
|
return {
|
|
@@ -2615,9 +2631,10 @@ var createTicketBody = function createTicketBody(state, _ref) {
|
|
|
2615
2631
|
customerId = _ref.customerId,
|
|
2616
2632
|
_ref$groupId = _ref.groupId,
|
|
2617
2633
|
groupId = _ref$groupId === void 0 ? state.groupId : _ref$groupId,
|
|
2634
|
+
licenseId = _ref.licenseId,
|
|
2618
2635
|
timeZone = _ref.timeZone;
|
|
2619
2636
|
var ticketBody = _extends({
|
|
2620
|
-
licence_id:
|
|
2637
|
+
licence_id: licenseId,
|
|
2621
2638
|
ticket_message: '',
|
|
2622
2639
|
offline_message: '',
|
|
2623
2640
|
visitor_id: customerId,
|
|
@@ -2697,6 +2714,7 @@ var createTicketBody = function createTicketBody(state, _ref) {
|
|
|
2697
2714
|
var sendTicketForm = function sendTicketForm(store, auth, _ref2) {
|
|
2698
2715
|
var filledForm = _ref2.filledForm,
|
|
2699
2716
|
groupId = _ref2.groupId,
|
|
2717
|
+
licenseId = _ref2.licenseId,
|
|
2700
2718
|
timeZone = _ref2.timeZone;
|
|
2701
2719
|
return auth.getToken().then(function (token) {
|
|
2702
2720
|
var state = store.getState();
|
|
@@ -2708,6 +2726,7 @@ var sendTicketForm = function sendTicketForm(store, auth, _ref2) {
|
|
|
2708
2726
|
fields: filledForm.fields,
|
|
2709
2727
|
customerId: token.entityId,
|
|
2710
2728
|
groupId: groupId,
|
|
2729
|
+
licenseId: licenseId,
|
|
2711
2730
|
timeZone: timeZone
|
|
2712
2731
|
});
|
|
2713
2732
|
return unfetch__default['default'](url, {
|
|
@@ -2792,7 +2811,7 @@ var uploadFile = function uploadFile(_ref, _ref2) {
|
|
|
2792
2811
|
validateFile(file);
|
|
2793
2812
|
var state = store.getState();
|
|
2794
2813
|
var query = urlUtils.buildQueryString({
|
|
2795
|
-
|
|
2814
|
+
organization_id: state.organizationId
|
|
2796
2815
|
});
|
|
2797
2816
|
var url = getServerUrl(state) + "/action/" + UPLOAD_FILE + "?" + query;
|
|
2798
2817
|
var payload = {
|
|
@@ -2858,7 +2877,7 @@ var makeGraylogRequest = function makeGraylogRequest(url, body) {
|
|
|
2858
2877
|
*/
|
|
2859
2878
|
var log = function log(_ref) {
|
|
2860
2879
|
var env = _ref.env,
|
|
2861
|
-
|
|
2880
|
+
organizationId = _ref.organizationId,
|
|
2862
2881
|
eventName = _ref.eventName;
|
|
2863
2882
|
if (env !== 'production' || "customer_sdk" !== 'customer_sdk') {
|
|
2864
2883
|
return Promise.resolve();
|
|
@@ -2866,10 +2885,10 @@ var log = function log(_ref) {
|
|
|
2866
2885
|
var message = {
|
|
2867
2886
|
event_name: eventName,
|
|
2868
2887
|
severity: 'Informational',
|
|
2869
|
-
sdkVersion: "3.1.
|
|
2888
|
+
sdkVersion: "3.1.3"
|
|
2870
2889
|
};
|
|
2871
2890
|
var body = {
|
|
2872
|
-
|
|
2891
|
+
organizationId: organizationId,
|
|
2873
2892
|
event_id: 'chat_widget_customer_sdk',
|
|
2874
2893
|
message: JSON.stringify(message)
|
|
2875
2894
|
};
|
|
@@ -2987,7 +3006,7 @@ var debug = (function (_sdk) {
|
|
|
2987
3006
|
});
|
|
2988
3007
|
|
|
2989
3008
|
var CHATS_PAGINATION_MAX_LIMIT = 25;
|
|
2990
|
-
var init = function init(config, env) {
|
|
3009
|
+
var init = function init(config, env, licenseId) {
|
|
2991
3010
|
if (env === void 0) {
|
|
2992
3011
|
env = 'production';
|
|
2993
3012
|
}
|
|
@@ -3002,12 +3021,13 @@ var init = function init(config, env) {
|
|
|
3002
3021
|
}));
|
|
3003
3022
|
var emitter = mitt__default['default']();
|
|
3004
3023
|
var socket = createSocketClient(store);
|
|
3005
|
-
var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth__default['default'](instanceConfig, env);
|
|
3024
|
+
var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth__default['default'](instanceConfig, licenseId, env);
|
|
3006
3025
|
store.addSideEffectsHandler(createSideEffectsHandler({
|
|
3007
3026
|
emitter: emitter,
|
|
3008
3027
|
socket: socket,
|
|
3009
3028
|
auth: auth,
|
|
3010
|
-
customerDataProvider: customerDataProvider
|
|
3029
|
+
customerDataProvider: customerDataProvider,
|
|
3030
|
+
licenseId: licenseId
|
|
3011
3031
|
}));
|
|
3012
3032
|
socketListener(store, socket);
|
|
3013
3033
|
var sendRequestAction$1 = sendRequestAction.bind(null, store);
|
|
@@ -3206,7 +3226,7 @@ var init = function init(config, env) {
|
|
|
3206
3226
|
resumeChat: function resumeChat(data) {
|
|
3207
3227
|
log({
|
|
3208
3228
|
env: env,
|
|
3209
|
-
|
|
3229
|
+
organizationId: config.organizationId,
|
|
3210
3230
|
eventName: 'chat_started'
|
|
3211
3231
|
});
|
|
3212
3232
|
return sendRequestAction$1(sendRequest(RESUME_CHAT, parseResumeChatData(data)));
|
|
@@ -3261,7 +3281,7 @@ var init = function init(config, env) {
|
|
|
3261
3281
|
}
|
|
3262
3282
|
log({
|
|
3263
3283
|
env: env,
|
|
3264
|
-
|
|
3284
|
+
organizationId: config.organizationId,
|
|
3265
3285
|
eventName: 'chat_started'
|
|
3266
3286
|
});
|
|
3267
3287
|
return sendRequestAction$1(sendRequest(START_CHAT, parseStartChatData(data)));
|
package/dist/customer-sdk.esm.js
CHANGED
|
@@ -3,8 +3,7 @@ import mitt from '@livechat/mitt';
|
|
|
3
3
|
import { hasOwn, identity, toPairs, pickOwn, isObject, generateUniqueId, noop, pick, mapValues, keyBy, values, includes, isEmpty, numericSortBy, uniqBy, flatMap, last, stringCompare } from '@livechat/data-utils';
|
|
4
4
|
import { createStore, applyMiddleware } from 'redux';
|
|
5
5
|
import createSideEffectsMiddleware from '@livechat/side-effects-middleware';
|
|
6
|
-
import
|
|
7
|
-
import promiseTry from '@livechat/promise-try';
|
|
6
|
+
import { promiseDeferred, promiseTry } from '@livechat/promise-utils';
|
|
8
7
|
import createBackoff from '@livechat/backoff';
|
|
9
8
|
import storage from '@livechat/isomorphic-storage';
|
|
10
9
|
import unfetch from 'unfetch';
|
|
@@ -140,6 +139,8 @@ var RECONNECTING = 'reconnecting';
|
|
|
140
139
|
var AGENT = 'agent';
|
|
141
140
|
var CUSTOMER = 'customer';
|
|
142
141
|
|
|
142
|
+
var LIVECHAT_ORGANIZATION_ID = 'feaf6c0e-9f43-48ff-9ad0-8e24e0350932';
|
|
143
|
+
|
|
143
144
|
var getAllRequests = function getAllRequests(state) {
|
|
144
145
|
return state.requests;
|
|
145
146
|
};
|
|
@@ -163,9 +164,9 @@ var isDestroyed = function isDestroyed(state) {
|
|
|
163
164
|
return getConnectionStatus(state) === DESTROYED;
|
|
164
165
|
};
|
|
165
166
|
var getEnvPart = function getEnvPart(_ref) {
|
|
166
|
-
var
|
|
167
|
+
var organizationId = _ref.organizationId,
|
|
167
168
|
env = _ref.env;
|
|
168
|
-
if (
|
|
169
|
+
if (organizationId === LIVECHAT_ORGANIZATION_ID) {
|
|
169
170
|
return '.staging';
|
|
170
171
|
}
|
|
171
172
|
if (env === 'production') {
|
|
@@ -179,12 +180,12 @@ var getApiOrigin = function getApiOrigin(state) {
|
|
|
179
180
|
return "https://api" + regionPart + getEnvPart(state) + ".livechatinc.com";
|
|
180
181
|
};
|
|
181
182
|
var getServerUrl = function getServerUrl(state) {
|
|
182
|
-
return getApiOrigin(state) + "/v3.
|
|
183
|
+
return getApiOrigin(state) + "/v3.4/customer";
|
|
183
184
|
};
|
|
184
185
|
var createInitialState = function createInitialState(initialStateData) {
|
|
185
186
|
var _initialStateData$app = initialStateData.application,
|
|
186
187
|
application = _initialStateData$app === void 0 ? {} : _initialStateData$app,
|
|
187
|
-
|
|
188
|
+
organizationId = initialStateData.organizationId,
|
|
188
189
|
_initialStateData$gro = initialStateData.groupId,
|
|
189
190
|
groupId = _initialStateData$gro === void 0 ? null : _initialStateData$gro,
|
|
190
191
|
env = initialStateData.env,
|
|
@@ -201,9 +202,9 @@ var createInitialState = function createInitialState(initialStateData) {
|
|
|
201
202
|
return {
|
|
202
203
|
application: _extends({}, application, {
|
|
203
204
|
name: "customer_sdk",
|
|
204
|
-
version: "3.1.
|
|
205
|
+
version: "3.1.3"
|
|
205
206
|
}),
|
|
206
|
-
|
|
207
|
+
organizationId: organizationId,
|
|
207
208
|
env: env,
|
|
208
209
|
groupId: groupId,
|
|
209
210
|
chats: {},
|
|
@@ -657,10 +658,10 @@ var socketDisconnected = function socketDisconnected() {
|
|
|
657
658
|
// TODO: this thing is not really well typed and should be improved
|
|
658
659
|
var sendRequestAction = function sendRequestAction(store, action) {
|
|
659
660
|
action.payload.id = generateUniqueId(store.getState().requests);
|
|
660
|
-
var
|
|
661
|
-
resolve =
|
|
662
|
-
reject =
|
|
663
|
-
promise =
|
|
661
|
+
var _promiseDeferred = promiseDeferred(),
|
|
662
|
+
resolve = _promiseDeferred.resolve,
|
|
663
|
+
reject = _promiseDeferred.reject,
|
|
664
|
+
promise = _promiseDeferred.promise;
|
|
664
665
|
action.payload.promise = promise;
|
|
665
666
|
action.payload.resolve = resolve;
|
|
666
667
|
action.payload.reject = reject;
|
|
@@ -673,24 +674,39 @@ var CUSTOMER_BANNED$1 = 'CUSTOMER_BANNED';
|
|
|
673
674
|
var USERS_LIMIT_REACHED = 'USERS_LIMIT_REACHED';
|
|
674
675
|
var WRONG_PRODUCT_VERSION = 'WRONG_PRODUCT_VERSION';
|
|
675
676
|
|
|
676
|
-
var
|
|
677
|
+
var getSideStorageKeyByLicense = function getSideStorageKeyByLicense(store, licenseId) {
|
|
677
678
|
var _store$getState = store.getState(),
|
|
678
|
-
licenseId = _store$getState.licenseId,
|
|
679
679
|
groupId = _store$getState.groupId,
|
|
680
680
|
uniqueGroups = _store$getState.uniqueGroups;
|
|
681
681
|
return "side_storage_" + licenseId + (uniqueGroups ? ":" + groupId : '');
|
|
682
682
|
};
|
|
683
|
-
var
|
|
684
|
-
|
|
685
|
-
|
|
683
|
+
var getSideStorageKeyByOrganization = function getSideStorageKeyByOrganization(store) {
|
|
684
|
+
var _store$getState2 = store.getState(),
|
|
685
|
+
organizationId = _store$getState2.organizationId,
|
|
686
|
+
groupId = _store$getState2.groupId,
|
|
687
|
+
uniqueGroups = _store$getState2.uniqueGroups;
|
|
688
|
+
return "side_storage_" + organizationId + (uniqueGroups ? ":" + groupId : '');
|
|
689
|
+
};
|
|
690
|
+
var getSideStorage = function getSideStorage(store, licenseId) {
|
|
691
|
+
var sideStorageLicenseKey = getSideStorageKeyByLicense(store, licenseId);
|
|
692
|
+
var sideStorageOrganizationKey = getSideStorageKeyByOrganization(store);
|
|
693
|
+
return storage.getItem(sideStorageLicenseKey)["catch"](noop).then(function (sideStorage) {
|
|
694
|
+
if (!sideStorage) {
|
|
695
|
+
return storage.getItem(sideStorageOrganizationKey)["catch"](noop).then(function (organizationSideStorage) {
|
|
696
|
+
return JSON.parse(organizationSideStorage || '{}');
|
|
697
|
+
})["catch"](noop);
|
|
698
|
+
}
|
|
699
|
+
return storage.setItem(sideStorageOrganizationKey, sideStorage)["catch"](noop).then(function () {
|
|
700
|
+
return storage.removeItem(sideStorageLicenseKey)["catch"](noop).then(function () {
|
|
701
|
+
return JSON.parse(sideStorage);
|
|
702
|
+
})["catch"](noop);
|
|
703
|
+
});
|
|
686
704
|
})
|
|
687
705
|
// shouldnt get triggered, just a defensive measure against malformed storage entries
|
|
688
|
-
["catch"](
|
|
689
|
-
return {};
|
|
690
|
-
});
|
|
706
|
+
["catch"](noop);
|
|
691
707
|
};
|
|
692
708
|
var saveSideStorage = function saveSideStorage(store, sideStorage) {
|
|
693
|
-
|
|
709
|
+
storage.setItem(getSideStorageKeyByOrganization(store), JSON.stringify(sideStorage))["catch"](noop);
|
|
694
710
|
};
|
|
695
711
|
|
|
696
712
|
var taskChain = function taskChain(_ref, onSuccess, onError) {
|
|
@@ -731,7 +747,7 @@ var delay = function delay(ms) {
|
|
|
731
747
|
setTimeout(resolve, ms);
|
|
732
748
|
});
|
|
733
749
|
};
|
|
734
|
-
function createLoginTask(auth, customerDataProvider) {
|
|
750
|
+
function createLoginTask(auth, customerDataProvider, licenseId) {
|
|
735
751
|
var store;
|
|
736
752
|
var sentPage = null;
|
|
737
753
|
var task;
|
|
@@ -752,7 +768,7 @@ function createLoginTask(auth, customerDataProvider) {
|
|
|
752
768
|
return store.dispatch(reconnect(currentBackoffStrategy.duration()));
|
|
753
769
|
};
|
|
754
770
|
var getTokenAndSideStorage = function getTokenAndSideStorage() {
|
|
755
|
-
return Promise.all([auth.getToken(), getSideStorage(store)]);
|
|
771
|
+
return Promise.all([auth.getToken(), getSideStorage(store, licenseId)]);
|
|
756
772
|
};
|
|
757
773
|
var dispatchSelfId = function dispatchSelfId(_ref2) {
|
|
758
774
|
var token = _ref2[0],
|
|
@@ -892,7 +908,7 @@ var checkGoals = function checkGoals(store, auth, sessionFields) {
|
|
|
892
908
|
return;
|
|
893
909
|
}
|
|
894
910
|
var query = buildQueryString({
|
|
895
|
-
|
|
911
|
+
organization_id: state.organizationId
|
|
896
912
|
});
|
|
897
913
|
var payload = {
|
|
898
914
|
session_fields: parseCustomerSessionFields(sessionFields || {}),
|
|
@@ -1391,11 +1407,11 @@ var sendRequest$1 = function sendRequest(socket, _ref3) {
|
|
|
1391
1407
|
{
|
|
1392
1408
|
var upgradedPushes = [];
|
|
1393
1409
|
socket.emit(_extends({}, frame, {
|
|
1394
|
-
version: '3.
|
|
1410
|
+
version: '3.4',
|
|
1395
1411
|
payload: _extends({}, frame.payload, {
|
|
1396
1412
|
pushes: {
|
|
1397
|
-
// '3.
|
|
1398
|
-
'3.
|
|
1413
|
+
// '3.5': upgradedPushes,
|
|
1414
|
+
'3.4': values(serverPushActions).filter(function (pushAction) {
|
|
1399
1415
|
return (
|
|
1400
1416
|
// `customer_disconnected` can be sent immediately after opening the connection, before it even received login request
|
|
1401
1417
|
// therefore it's not possible to subscribe for a particular version of this push - the "connection version" is always used
|
|
@@ -1565,9 +1581,10 @@ var createSideEffectsHandler = (function (_ref9) {
|
|
|
1565
1581
|
var auth = _ref9.auth,
|
|
1566
1582
|
customerDataProvider = _ref9.customerDataProvider,
|
|
1567
1583
|
emitter = _ref9.emitter,
|
|
1568
|
-
socket = _ref9.socket
|
|
1584
|
+
socket = _ref9.socket,
|
|
1585
|
+
licenseId = _ref9.licenseId;
|
|
1569
1586
|
var emit = emitter.emit;
|
|
1570
|
-
var loginTask = createLoginTask(auth, customerDataProvider);
|
|
1587
|
+
var loginTask = createLoginTask(auth, customerDataProvider, licenseId);
|
|
1571
1588
|
|
|
1572
1589
|
// TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
|
|
1573
1590
|
return function (action, store) {
|
|
@@ -1864,7 +1881,7 @@ var initialize = function initialize(store, emitter) {
|
|
|
1864
1881
|
var url = (getServerUrl(state) + "/rtm/ws").replace(/^https/, 'wss');
|
|
1865
1882
|
return createPlatformClient(url, {
|
|
1866
1883
|
query: {
|
|
1867
|
-
|
|
1884
|
+
organization_id: state.organizationId
|
|
1868
1885
|
},
|
|
1869
1886
|
emitter: emitter
|
|
1870
1887
|
});
|
|
@@ -2156,16 +2173,17 @@ var parseListChatsResponse = function parseListChatsResponse(payload) {
|
|
|
2156
2173
|
var lastEventSummary = last(lastEventSummariesArray.sort(function (eventSummaryA, eventSummaryB) {
|
|
2157
2174
|
return eventSummaryA.thread_id === eventSummaryB.thread_id ? stringCompare(eventSummaryA.event.created_at, eventSummaryB.event.created_at) : stringCompare(eventSummaryA.thread_created_at, eventSummaryB.thread_created_at);
|
|
2158
2175
|
}));
|
|
2159
|
-
if (lastEventSummary) {
|
|
2176
|
+
if (lastEventSummary && chatSummary.lastEventsPerType) {
|
|
2160
2177
|
chatSummary.lastEvent = chatSummary.lastEventsPerType[lastEventSummary.event.type];
|
|
2161
2178
|
}
|
|
2162
2179
|
return chatSummary;
|
|
2163
2180
|
});
|
|
2164
2181
|
return {
|
|
2165
2182
|
chatsSummary: numericSortBy(function (_ref4) {
|
|
2183
|
+
var _ref5;
|
|
2166
2184
|
var lastEvent = _ref4.lastEvent,
|
|
2167
2185
|
order = _ref4.order;
|
|
2168
|
-
return -1 * (lastEvent !== undefined ? lastEvent.timestamp : order);
|
|
2186
|
+
return -1 * ((_ref5 = lastEvent !== undefined ? lastEvent.timestamp : order) != null ? _ref5 : 0);
|
|
2169
2187
|
}, chatsSummary),
|
|
2170
2188
|
totalChats: payload.total_chats,
|
|
2171
2189
|
users: uniqBy(function (user) {
|
|
@@ -2342,9 +2360,9 @@ var parsePush = function parsePush(push) {
|
|
|
2342
2360
|
};
|
|
2343
2361
|
}
|
|
2344
2362
|
};
|
|
2345
|
-
var parseResponse = function parseResponse(
|
|
2346
|
-
var request =
|
|
2347
|
-
response =
|
|
2363
|
+
var parseResponse = function parseResponse(_ref6) {
|
|
2364
|
+
var request = _ref6.request,
|
|
2365
|
+
response = _ref6.response;
|
|
2348
2366
|
switch (response.action) {
|
|
2349
2367
|
case ACCEPT_GREETING:
|
|
2350
2368
|
return {
|
|
@@ -2598,9 +2616,10 @@ var createTicketBody = function createTicketBody(state, _ref) {
|
|
|
2598
2616
|
customerId = _ref.customerId,
|
|
2599
2617
|
_ref$groupId = _ref.groupId,
|
|
2600
2618
|
groupId = _ref$groupId === void 0 ? state.groupId : _ref$groupId,
|
|
2619
|
+
licenseId = _ref.licenseId,
|
|
2601
2620
|
timeZone = _ref.timeZone;
|
|
2602
2621
|
var ticketBody = _extends({
|
|
2603
|
-
licence_id:
|
|
2622
|
+
licence_id: licenseId,
|
|
2604
2623
|
ticket_message: '',
|
|
2605
2624
|
offline_message: '',
|
|
2606
2625
|
visitor_id: customerId,
|
|
@@ -2680,6 +2699,7 @@ var createTicketBody = function createTicketBody(state, _ref) {
|
|
|
2680
2699
|
var sendTicketForm = function sendTicketForm(store, auth, _ref2) {
|
|
2681
2700
|
var filledForm = _ref2.filledForm,
|
|
2682
2701
|
groupId = _ref2.groupId,
|
|
2702
|
+
licenseId = _ref2.licenseId,
|
|
2683
2703
|
timeZone = _ref2.timeZone;
|
|
2684
2704
|
return auth.getToken().then(function (token) {
|
|
2685
2705
|
var state = store.getState();
|
|
@@ -2691,6 +2711,7 @@ var sendTicketForm = function sendTicketForm(store, auth, _ref2) {
|
|
|
2691
2711
|
fields: filledForm.fields,
|
|
2692
2712
|
customerId: token.entityId,
|
|
2693
2713
|
groupId: groupId,
|
|
2714
|
+
licenseId: licenseId,
|
|
2694
2715
|
timeZone: timeZone
|
|
2695
2716
|
});
|
|
2696
2717
|
return unfetch(url, {
|
|
@@ -2775,7 +2796,7 @@ var uploadFile = function uploadFile(_ref, _ref2) {
|
|
|
2775
2796
|
validateFile(file);
|
|
2776
2797
|
var state = store.getState();
|
|
2777
2798
|
var query = buildQueryString({
|
|
2778
|
-
|
|
2799
|
+
organization_id: state.organizationId
|
|
2779
2800
|
});
|
|
2780
2801
|
var url = getServerUrl(state) + "/action/" + UPLOAD_FILE + "?" + query;
|
|
2781
2802
|
var payload = {
|
|
@@ -2841,7 +2862,7 @@ var makeGraylogRequest = function makeGraylogRequest(url, body) {
|
|
|
2841
2862
|
*/
|
|
2842
2863
|
var log = function log(_ref) {
|
|
2843
2864
|
var env = _ref.env,
|
|
2844
|
-
|
|
2865
|
+
organizationId = _ref.organizationId,
|
|
2845
2866
|
eventName = _ref.eventName;
|
|
2846
2867
|
if (env !== 'production' || "customer_sdk" !== 'customer_sdk') {
|
|
2847
2868
|
return Promise.resolve();
|
|
@@ -2849,10 +2870,10 @@ var log = function log(_ref) {
|
|
|
2849
2870
|
var message = {
|
|
2850
2871
|
event_name: eventName,
|
|
2851
2872
|
severity: 'Informational',
|
|
2852
|
-
sdkVersion: "3.1.
|
|
2873
|
+
sdkVersion: "3.1.3"
|
|
2853
2874
|
};
|
|
2854
2875
|
var body = {
|
|
2855
|
-
|
|
2876
|
+
organizationId: organizationId,
|
|
2856
2877
|
event_id: 'chat_widget_customer_sdk',
|
|
2857
2878
|
message: JSON.stringify(message)
|
|
2858
2879
|
};
|
|
@@ -2970,7 +2991,7 @@ var debug = (function (_sdk) {
|
|
|
2970
2991
|
});
|
|
2971
2992
|
|
|
2972
2993
|
var CHATS_PAGINATION_MAX_LIMIT = 25;
|
|
2973
|
-
var init = function init(config, env) {
|
|
2994
|
+
var init = function init(config, env, licenseId) {
|
|
2974
2995
|
if (env === void 0) {
|
|
2975
2996
|
env = 'production';
|
|
2976
2997
|
}
|
|
@@ -2985,12 +3006,13 @@ var init = function init(config, env) {
|
|
|
2985
3006
|
}));
|
|
2986
3007
|
var emitter = mitt();
|
|
2987
3008
|
var socket = createSocketClient(store);
|
|
2988
|
-
var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth(instanceConfig, env);
|
|
3009
|
+
var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth(instanceConfig, licenseId, env);
|
|
2989
3010
|
store.addSideEffectsHandler(createSideEffectsHandler({
|
|
2990
3011
|
emitter: emitter,
|
|
2991
3012
|
socket: socket,
|
|
2992
3013
|
auth: auth,
|
|
2993
|
-
customerDataProvider: customerDataProvider
|
|
3014
|
+
customerDataProvider: customerDataProvider,
|
|
3015
|
+
licenseId: licenseId
|
|
2994
3016
|
}));
|
|
2995
3017
|
socketListener(store, socket);
|
|
2996
3018
|
var sendRequestAction$1 = sendRequestAction.bind(null, store);
|
|
@@ -3189,7 +3211,7 @@ var init = function init(config, env) {
|
|
|
3189
3211
|
resumeChat: function resumeChat(data) {
|
|
3190
3212
|
log({
|
|
3191
3213
|
env: env,
|
|
3192
|
-
|
|
3214
|
+
organizationId: config.organizationId,
|
|
3193
3215
|
eventName: 'chat_started'
|
|
3194
3216
|
});
|
|
3195
3217
|
return sendRequestAction$1(sendRequest(RESUME_CHAT, parseResumeChatData(data)));
|
|
@@ -3244,7 +3266,7 @@ var init = function init(config, env) {
|
|
|
3244
3266
|
}
|
|
3245
3267
|
log({
|
|
3246
3268
|
env: env,
|
|
3247
|
-
|
|
3269
|
+
organizationId: config.organizationId,
|
|
3248
3270
|
eventName: 'chat_started'
|
|
3249
3271
|
});
|
|
3250
3272
|
return sendRequestAction$1(sendRequest(START_CHAT, parseStartChatData(data)));
|