@livechat/customer-sdk 3.1.5 → 4.0.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.
- package/README.md +26 -77
- package/dist/customer-sdk.cjs.js +208 -228
- package/dist/customer-sdk.cjs.native.js +208 -228
- package/dist/customer-sdk.esm.js +202 -227
- package/dist/customer-sdk.js +481 -399
- package/dist/customer-sdk.min.js +1 -1
- package/package.json +7 -8
- package/types/actions.d.ts +8 -8
- package/types/constants/organizationIds.d.ts +2 -0
- package/types/constants/serverDisconnectionReasons.d.ts +1 -0
- package/types/constants/serverPushActions.d.ts +1 -0
- package/types/createStore.d.ts +1 -1
- package/types/graylog/index.d.ts +2 -2
- package/types/index.d.ts +20 -7
- package/types/reducer.d.ts +14 -15
- package/types/sendTicketForm.d.ts +2 -1
- package/types/serverFrameParser.d.ts +10 -2
- package/types/sideEffects/index.d.ts +2 -1
- package/types/sideStorage.d.ts +2 -2
- package/types/socketListener.d.ts +6 -3
- package/types/types/clientEntities.d.ts +2 -0
- package/types/types/frames.d.ts +10 -1
- package/types/types/serverEntities.d.ts +1 -0
- package/types/types/state.d.ts +2 -2
package/dist/customer-sdk.js
CHANGED
|
@@ -105,43 +105,125 @@
|
|
|
105
105
|
|
|
106
106
|
var _ref = {},
|
|
107
107
|
hasOwnProperty = _ref.hasOwnProperty;
|
|
108
|
+
/**
|
|
109
|
+
* returns true or false depending if the provided property is present inside the provided object
|
|
110
|
+
* @example
|
|
111
|
+
* hasOwn('a', { a: 1, b: 2 })
|
|
112
|
+
* // returns true
|
|
113
|
+
*/
|
|
108
114
|
function hasOwn(prop, obj) {
|
|
109
115
|
return hasOwnProperty.call(obj, prop);
|
|
110
116
|
}
|
|
111
117
|
|
|
118
|
+
/**
|
|
119
|
+
* returns a new array formed by applying a given callback function to each element of the array, and then flattening the result by one level
|
|
120
|
+
* @example
|
|
121
|
+
* const arr = [{ a: [1, 2] }, { a: [3, 4] }, { a: [5, 6] }]
|
|
122
|
+
* flatMap(el => el.a, arr)
|
|
123
|
+
* // returns [1, 2, 3, 4, 5, 6]
|
|
124
|
+
*/
|
|
112
125
|
function flatMap(iteratee, arr) {
|
|
113
126
|
var _ref;
|
|
114
127
|
return (_ref = []).concat.apply(_ref, arr.map(iteratee));
|
|
115
128
|
}
|
|
116
129
|
|
|
117
|
-
|
|
130
|
+
/**
|
|
131
|
+
* determines whether provided value is an array
|
|
132
|
+
* @example
|
|
133
|
+
* isArray([1, 2])
|
|
134
|
+
* // returns true
|
|
135
|
+
* isArray('hello')
|
|
136
|
+
* // returns false
|
|
137
|
+
*/
|
|
138
|
+
function isArray(arr) {
|
|
139
|
+
return Array.isArray(arr);
|
|
140
|
+
}
|
|
118
141
|
|
|
142
|
+
/**
|
|
143
|
+
* returns true or false depending if the provided value is an object
|
|
144
|
+
* @example
|
|
145
|
+
* isObject({ a: 1 })
|
|
146
|
+
* // returns true
|
|
147
|
+
* isObject([1, 2])
|
|
148
|
+
* // returns false
|
|
149
|
+
*/
|
|
119
150
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
120
151
|
function isObject(obj) {
|
|
121
152
|
return typeof obj === 'object' && obj !== null && !isArray(obj);
|
|
122
153
|
}
|
|
123
154
|
|
|
155
|
+
/**
|
|
156
|
+
* returns an array of the provided object keys
|
|
157
|
+
* @example
|
|
158
|
+
* keys({ a: 1, b: 2, c: 3 })
|
|
159
|
+
* // returns ['a', 'b', 'c']
|
|
160
|
+
*/
|
|
161
|
+
function keys(obj) {
|
|
162
|
+
if ('keys' in Object && typeof Object.keys === 'function') {
|
|
163
|
+
return Object.keys(obj);
|
|
164
|
+
}
|
|
165
|
+
var keysArray = [];
|
|
166
|
+
for (var property in obj) {
|
|
167
|
+
if (Object.prototype.hasOwnProperty.call(obj, property)) {
|
|
168
|
+
keysArray.push(property);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return keysArray;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* maps values of the provided object
|
|
176
|
+
* @example
|
|
177
|
+
* mapValues(val => val.toUpperCase(), { a: 'foo', b: 'bar' })
|
|
178
|
+
* // returns { a: 'FOO', b: 'BAR' }
|
|
179
|
+
*/
|
|
124
180
|
function mapValues(mapper, obj) {
|
|
125
|
-
return
|
|
181
|
+
return keys(obj).reduce(function (acc, key) {
|
|
126
182
|
acc[key] = mapper(obj[key]);
|
|
127
183
|
return acc;
|
|
128
184
|
}, {});
|
|
129
185
|
}
|
|
130
186
|
|
|
187
|
+
/**
|
|
188
|
+
* returns the provided value
|
|
189
|
+
* @example
|
|
190
|
+
* identity('hello')
|
|
191
|
+
* // returns 'hello'
|
|
192
|
+
*/
|
|
131
193
|
function identity(value) {
|
|
132
194
|
return value;
|
|
133
195
|
}
|
|
134
196
|
|
|
197
|
+
/**
|
|
198
|
+
* generates a random id
|
|
199
|
+
* @example
|
|
200
|
+
* generateRandomId()
|
|
201
|
+
* // returns 'd1rjknhhch8'
|
|
202
|
+
*/
|
|
135
203
|
function generateRandomId() {
|
|
136
204
|
return Math.random().toString(36).substring(2);
|
|
137
205
|
}
|
|
138
206
|
|
|
207
|
+
/**
|
|
208
|
+
* generates an unique id based on the provided object keys
|
|
209
|
+
* @example
|
|
210
|
+
* generateUniqueId({ xuvarw8cao: 1, b837g2nba1d: 2 })
|
|
211
|
+
* // returns 'd1rjknhhch8'
|
|
212
|
+
*/
|
|
139
213
|
function generateUniqueId(map) {
|
|
140
214
|
var id = generateRandomId();
|
|
141
215
|
return hasOwn(id, map) ? generateUniqueId(map) : id;
|
|
142
216
|
}
|
|
143
217
|
|
|
144
|
-
|
|
218
|
+
/**
|
|
219
|
+
* returns the value from the specififed path from the provided object
|
|
220
|
+
* @example
|
|
221
|
+
* const obj = { a: { b: [1, 2, 3] } }
|
|
222
|
+
* get('a.b.1', obj)
|
|
223
|
+
* // returns 2
|
|
224
|
+
* get(['a', 'b', '1'], obj)
|
|
225
|
+
* // returns 2
|
|
226
|
+
*/
|
|
145
227
|
function get(propPath, obj) {
|
|
146
228
|
var arrPath = typeof propPath === 'string' ? propPath.split('.') : propPath;
|
|
147
229
|
var pathPartIndex = 0;
|
|
@@ -152,14 +234,30 @@
|
|
|
152
234
|
return result;
|
|
153
235
|
}
|
|
154
236
|
|
|
237
|
+
/**
|
|
238
|
+
* returns true or false depending if the provided value is present inside the provided array or string
|
|
239
|
+
* @example
|
|
240
|
+
* includes('a', ['a', 'b', 'c'])
|
|
241
|
+
* // returns true
|
|
242
|
+
* includes('d', 'abc')
|
|
243
|
+
* // returns false
|
|
244
|
+
*/
|
|
245
|
+
|
|
155
246
|
function includes(value, arrOrStr) {
|
|
156
247
|
return arrOrStr.indexOf(value) !== -1;
|
|
157
248
|
}
|
|
158
249
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
250
|
+
/**
|
|
251
|
+
* constructs an object from the provided array of objects, grouped by the value of the specified key
|
|
252
|
+
* @example
|
|
253
|
+
* const arr = [
|
|
254
|
+
* { a: 'foo', b: 'bar' },
|
|
255
|
+
* { a: 'foo', b: 'baz' },
|
|
256
|
+
* { a: 'test', b: 'bab' },
|
|
257
|
+
* ]
|
|
258
|
+
* keyBy('a', arr)
|
|
259
|
+
* // returns { foo: { a: 'foo', b: 'baz' }, test: { a: 'test', b: 'bab' } }
|
|
260
|
+
*/
|
|
163
261
|
function keyBy(prop, arr) {
|
|
164
262
|
return arr.reduce(function (acc, el) {
|
|
165
263
|
acc[el[prop]] = el;
|
|
@@ -167,20 +265,47 @@
|
|
|
167
265
|
}, {});
|
|
168
266
|
}
|
|
169
267
|
|
|
170
|
-
|
|
268
|
+
/**
|
|
269
|
+
* returns the last element of the provided array or undefined when array is empty
|
|
270
|
+
* @example
|
|
271
|
+
* last([1, 2, 3])
|
|
272
|
+
* // returns 3
|
|
273
|
+
*/
|
|
171
274
|
function last(arr) {
|
|
172
|
-
return arr.length > 0 ? arr[arr.length - 1] :
|
|
275
|
+
return arr.length > 0 ? arr[arr.length - 1] : undefined;
|
|
173
276
|
}
|
|
174
277
|
|
|
278
|
+
/**
|
|
279
|
+
* does literally nothing
|
|
280
|
+
* @example
|
|
281
|
+
* somethingAsyncAndDangerous().catch(noop)
|
|
282
|
+
*/
|
|
175
283
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
176
284
|
function noop() {}
|
|
177
285
|
|
|
286
|
+
/**
|
|
287
|
+
* returns an array of values of the provided object
|
|
288
|
+
* @example
|
|
289
|
+
* values({ a: 1, b: 2, c: 3 })
|
|
290
|
+
* // returns [1, 2, 3]
|
|
291
|
+
*/
|
|
178
292
|
function values(obj) {
|
|
179
|
-
return
|
|
293
|
+
return keys(obj).map(function (key) {
|
|
180
294
|
return obj[key];
|
|
181
295
|
});
|
|
182
296
|
}
|
|
183
297
|
|
|
298
|
+
/**
|
|
299
|
+
* sorts values of the provided object or array based on the provided mapping function or the provided prop string
|
|
300
|
+
* @example
|
|
301
|
+
* const obj = {
|
|
302
|
+
* a: { chats: 1 },
|
|
303
|
+
* b: { chats: 3 },
|
|
304
|
+
* c: { chats: 2 },
|
|
305
|
+
* }
|
|
306
|
+
* numericSortBy(el => el.chats * -1, obj)
|
|
307
|
+
* // returns [{ chats: 3 }, { chats: 2 }, { chats: 1 }]
|
|
308
|
+
*/
|
|
184
309
|
function numericSortBy(propOrMapper, collection) {
|
|
185
310
|
var mapper = typeof propOrMapper === 'function' ? propOrMapper : function (element) {
|
|
186
311
|
return get(propOrMapper, element);
|
|
@@ -190,13 +315,25 @@
|
|
|
190
315
|
});
|
|
191
316
|
}
|
|
192
317
|
|
|
193
|
-
|
|
194
|
-
|
|
318
|
+
/**
|
|
319
|
+
* picks specified properties from the object
|
|
320
|
+
* @example
|
|
321
|
+
* pick(['b'], { a: 1, b: 2 })
|
|
322
|
+
* // returns { b: 2 }
|
|
323
|
+
*/
|
|
324
|
+
function pick(keys, obj) {
|
|
325
|
+
return keys.reduce(function (acc, prop) {
|
|
195
326
|
acc[prop] = obj[prop];
|
|
196
327
|
return acc;
|
|
197
328
|
}, {});
|
|
198
329
|
}
|
|
199
330
|
|
|
331
|
+
/**
|
|
332
|
+
* picks specified props only if they exist on the provided object
|
|
333
|
+
* @example
|
|
334
|
+
* pickOwn(['b'], { a: 1, b: 2 })
|
|
335
|
+
* // returns { b: 2 }
|
|
336
|
+
*/
|
|
200
337
|
function pickOwn(props, obj) {
|
|
201
338
|
return props.reduce(function (acc, prop) {
|
|
202
339
|
if (hasOwn(prop, obj)) {
|
|
@@ -206,19 +343,41 @@
|
|
|
206
343
|
}, {});
|
|
207
344
|
}
|
|
208
345
|
|
|
209
|
-
|
|
210
|
-
|
|
346
|
+
/**
|
|
347
|
+
* returns an array of derived from the provided object key-value tuples
|
|
348
|
+
* @example
|
|
349
|
+
* toPairs({ a: 1, b: 2 })
|
|
350
|
+
* // returns [['a', 1], ['b', 2]]
|
|
351
|
+
*/
|
|
352
|
+
function toPairs(obj) {
|
|
353
|
+
return keys(obj).map(function (key) {
|
|
211
354
|
return [key, obj[key]];
|
|
212
355
|
});
|
|
213
|
-
}
|
|
356
|
+
}
|
|
214
357
|
|
|
215
|
-
|
|
358
|
+
/**
|
|
359
|
+
* returns 0 for matching strings
|
|
360
|
+
* return -1 for string with lower char code at some position
|
|
361
|
+
* return 1 for string with greater char code at some position
|
|
362
|
+
* @example
|
|
363
|
+
* stringCompare('abc', 'abc')
|
|
364
|
+
* // returns 0
|
|
365
|
+
* stringCompare('abc', 'abd')
|
|
366
|
+
* // returns -1
|
|
367
|
+
*/
|
|
368
|
+
function stringCompare(strA, strB) {
|
|
216
369
|
if (strA === strB) {
|
|
217
370
|
return 0;
|
|
218
371
|
}
|
|
219
372
|
return strA < strB ? -1 : 1;
|
|
220
|
-
}
|
|
373
|
+
}
|
|
221
374
|
|
|
375
|
+
/**
|
|
376
|
+
* returns an array with all the duplicates from the provided array removed based on the iteratee function
|
|
377
|
+
* @example
|
|
378
|
+
* uniqBy(el => el.toString(), [1, '1', 2, '3', 3])
|
|
379
|
+
* // returns [1, 2, '3']
|
|
380
|
+
*/
|
|
222
381
|
function uniqBy(iteratee, arr) {
|
|
223
382
|
// with polyfills this could be just: return Array.from(new Set(arr.map(iteratee)))
|
|
224
383
|
var seen = [];
|
|
@@ -309,25 +468,18 @@
|
|
|
309
468
|
});
|
|
310
469
|
}
|
|
311
470
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
function removeNode(node) {
|
|
326
|
-
var parentNode = node.parentNode;
|
|
327
|
-
if (parentNode) {
|
|
328
|
-
parentNode.removeChild(node);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
471
|
+
var ACCOUNTS_URL = "https://accounts.livechatinc.com";
|
|
472
|
+
var buildPath = function buildPath(_ref) {
|
|
473
|
+
var uniqueGroups = _ref.uniqueGroups,
|
|
474
|
+
organizationId = _ref.organizationId,
|
|
475
|
+
groupId = _ref.groupId;
|
|
476
|
+
return "" + (uniqueGroups ? "/v2/customer/" + organizationId + "/" + groupId + "/token" : '/v2/customer/token');
|
|
477
|
+
};
|
|
478
|
+
var buildRequestUrl = function buildRequestUrl(config, env) {
|
|
479
|
+
var url = env === 'production' ? ACCOUNTS_URL : ACCOUNTS_URL.replace('accounts.', "accounts." + env + ".");
|
|
480
|
+
var path = buildPath(config);
|
|
481
|
+
return "" + url + path;
|
|
482
|
+
};
|
|
331
483
|
|
|
332
484
|
var createError = function createError(_ref) {
|
|
333
485
|
var code = _ref.code,
|
|
@@ -337,7 +489,7 @@
|
|
|
337
489
|
return err;
|
|
338
490
|
};
|
|
339
491
|
|
|
340
|
-
var parseTokenResponse = function parseTokenResponse(token,
|
|
492
|
+
var parseTokenResponse = function parseTokenResponse(token, organizationId) {
|
|
341
493
|
if ('identity_exception' in token) {
|
|
342
494
|
throw createError({
|
|
343
495
|
code: 'SSO_IDENTITY_EXCEPTION',
|
|
@@ -356,119 +508,33 @@
|
|
|
356
508
|
expiresIn: token.expires_in * 1000,
|
|
357
509
|
tokenType: token.token_type,
|
|
358
510
|
creationDate: Date.now(),
|
|
359
|
-
|
|
360
|
-
};
|
|
361
|
-
};
|
|
362
|
-
|
|
363
|
-
var ACCOUNTS_URL = "https://accounts.livechatinc.com";
|
|
364
|
-
var buildPath = function buildPath(_ref) {
|
|
365
|
-
var uniqueGroups = _ref.uniqueGroups,
|
|
366
|
-
licenseId = _ref.licenseId,
|
|
367
|
-
groupId = _ref.groupId;
|
|
368
|
-
return (uniqueGroups ? "/licence/g" + licenseId + "_" + groupId : '') + "/customer";
|
|
369
|
-
};
|
|
370
|
-
var buildRequestUrl = function buildRequestUrl(config, env) {
|
|
371
|
-
var url = env === 'production' ? ACCOUNTS_URL : ACCOUNTS_URL.replace('accounts.', "accounts." + env + ".");
|
|
372
|
-
var path = buildPath(config);
|
|
373
|
-
return "" + url + path;
|
|
374
|
-
};
|
|
375
|
-
|
|
376
|
-
var POST_MESSAGE_ORIGIN = 'https://accounts.livechatinc.com';
|
|
377
|
-
var CUSTOMER_AUTH_FOOTPRINT = '@livechat/customer-auth';
|
|
378
|
-
var getPostMessageOrigin = function getPostMessageOrigin(env) {
|
|
379
|
-
return env === 'production' ? POST_MESSAGE_ORIGIN : POST_MESSAGE_ORIGIN.replace('accounts.', "accounts." + env + ".");
|
|
380
|
-
};
|
|
381
|
-
var buildParams = function buildParams(_ref, redirectUri) {
|
|
382
|
-
var clientId = _ref.clientId,
|
|
383
|
-
licenseId = _ref.licenseId;
|
|
384
|
-
return {
|
|
385
|
-
license_id: String(licenseId),
|
|
386
|
-
flow: 'button',
|
|
387
|
-
response_type: 'token',
|
|
388
|
-
client_id: clientId,
|
|
389
|
-
redirect_uri: redirectUri,
|
|
390
|
-
post_message_uri: redirectUri,
|
|
391
|
-
state: CUSTOMER_AUTH_FOOTPRINT
|
|
511
|
+
organizationId: organizationId
|
|
392
512
|
};
|
|
393
513
|
};
|
|
394
|
-
var buildIframe = function buildIframe(config, env) {
|
|
395
|
-
var redirectUri = getOrigin(String(window.location)) + window.location.pathname;
|
|
396
|
-
var params = buildParams(config, redirectUri);
|
|
397
|
-
var iframe = document.createElement('iframe');
|
|
398
|
-
iframe.style.display = 'none';
|
|
399
|
-
iframe.setAttribute('src', buildRequestUrl(config, env) + "?" + buildQueryString(params));
|
|
400
|
-
return iframe;
|
|
401
|
-
};
|
|
402
|
-
var isTokenResponse = function isTokenResponse(data) {
|
|
403
|
-
return data && data.state === CUSTOMER_AUTH_FOOTPRINT;
|
|
404
|
-
};
|
|
405
|
-
function fetchUsingIframe(config, env) {
|
|
406
|
-
var licenseId = config.licenseId;
|
|
407
|
-
var postMessageOrigin = getPostMessageOrigin(env);
|
|
408
|
-
return new Promise(function (resolve, reject) {
|
|
409
|
-
var iframe = buildIframe(config, env);
|
|
410
|
-
var cleanup = function cleanup() {
|
|
411
|
-
removeNode(iframe);
|
|
412
|
-
// eslint-disable-next-line no-use-before-define
|
|
413
|
-
window.removeEventListener('message', listener, false);
|
|
414
|
-
};
|
|
415
|
-
var timeoutId = setTimeout(function () {
|
|
416
|
-
cleanup();
|
|
417
|
-
reject(createError({
|
|
418
|
-
message: 'Request timed out.',
|
|
419
|
-
code: 'REQUEST_TIMEOUT'
|
|
420
|
-
}));
|
|
421
|
-
}, 15 * 1000);
|
|
422
|
-
var listener = function listener(_ref2) {
|
|
423
|
-
var origin = _ref2.origin,
|
|
424
|
-
data = _ref2.data;
|
|
425
|
-
if (origin !== postMessageOrigin) {
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
if (!isTokenResponse(data)) {
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
clearTimeout(timeoutId);
|
|
432
|
-
cleanup();
|
|
433
|
-
try {
|
|
434
|
-
resolve(parseTokenResponse(data, licenseId));
|
|
435
|
-
} catch (err) {
|
|
436
|
-
reject(err);
|
|
437
|
-
}
|
|
438
|
-
};
|
|
439
|
-
window.addEventListener('message', listener, false);
|
|
440
|
-
getRoot().then(function (body) {
|
|
441
|
-
body.appendChild(iframe);
|
|
442
|
-
});
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
514
|
|
|
446
515
|
var fetchToken = function fetchToken(config, env) {
|
|
447
|
-
|
|
448
|
-
return fetchUsingIframe(config, env);
|
|
449
|
-
}
|
|
450
|
-
return unfetch(buildRequestUrl(config, env) + "/token", {
|
|
516
|
+
return unfetch("" + buildRequestUrl(config, env), {
|
|
451
517
|
method: 'POST',
|
|
452
518
|
credentials: 'include',
|
|
453
519
|
body: JSON.stringify({
|
|
454
520
|
response_type: 'token',
|
|
455
521
|
grant_type: 'cookie',
|
|
456
522
|
client_id: config.clientId,
|
|
457
|
-
|
|
523
|
+
organization_id: config.organizationId,
|
|
458
524
|
redirect_uri: getOrigin(String(window.location)) + window.location.pathname
|
|
459
525
|
})
|
|
460
526
|
}).then(function (res) {
|
|
461
527
|
return res.json();
|
|
462
528
|
}).then(function (token) {
|
|
463
|
-
return parseTokenResponse(token, config.
|
|
529
|
+
return parseTokenResponse(token, config.organizationId);
|
|
464
530
|
});
|
|
465
531
|
};
|
|
466
532
|
|
|
467
533
|
var validateConfig = function validateConfig(_ref) {
|
|
468
|
-
var
|
|
534
|
+
var organizationId = _ref.organizationId,
|
|
469
535
|
clientId = _ref.clientId;
|
|
470
|
-
if (typeof
|
|
471
|
-
throw new Error('You need to pass valid configuration object: {
|
|
536
|
+
if (typeof organizationId !== 'string' || typeof clientId !== 'string') {
|
|
537
|
+
throw new Error('You need to pass valid configuration object: { organizationId, clientId }.');
|
|
472
538
|
}
|
|
473
539
|
};
|
|
474
540
|
|
|
@@ -477,25 +543,39 @@
|
|
|
477
543
|
expiresIn = _ref.expiresIn;
|
|
478
544
|
return Date.now() >= creationDate + expiresIn;
|
|
479
545
|
};
|
|
480
|
-
var createAuth = function createAuth(config, env) {
|
|
546
|
+
var createAuth = function createAuth(config, licenseId, env) {
|
|
481
547
|
validateConfig(config);
|
|
482
|
-
var
|
|
548
|
+
var tokenStoragePrefix = config.tokenStoragePrefix || "@@lc_auth_token:";
|
|
549
|
+
var oldCacheKey = "" + tokenStoragePrefix + licenseId + (config.uniqueGroups ? ":" + config.groupId : '');
|
|
550
|
+
var newCacheKey = "" + tokenStoragePrefix + config.organizationId + (config.uniqueGroups ? ":" + config.groupId : '');
|
|
483
551
|
var pendingTokenRequest = null;
|
|
484
552
|
var cachedToken = null;
|
|
485
|
-
var retrievingToken = storage.getItem(
|
|
553
|
+
var retrievingToken = storage.getItem(oldCacheKey).then(function (token) {
|
|
486
554
|
if (retrievingToken === null) {
|
|
487
555
|
return;
|
|
488
556
|
}
|
|
489
557
|
retrievingToken = null;
|
|
490
558
|
if (!token) {
|
|
559
|
+
storage.removeItem(oldCacheKey).then(function () {
|
|
560
|
+
return storage.getItem(newCacheKey).then(function (newKeyToken) {
|
|
561
|
+
if (!newKeyToken) {
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
cachedToken = JSON.parse(newKeyToken);
|
|
565
|
+
});
|
|
566
|
+
});
|
|
491
567
|
return;
|
|
492
568
|
}
|
|
493
|
-
|
|
569
|
+
storage.setItem(newCacheKey, token).then(function () {
|
|
570
|
+
storage.removeItem(oldCacheKey).then(function () {
|
|
571
|
+
cachedToken = JSON.parse(token);
|
|
572
|
+
});
|
|
573
|
+
});
|
|
494
574
|
});
|
|
495
575
|
var getFreshToken = function getFreshToken() {
|
|
496
576
|
pendingTokenRequest = fetchToken(config, env).then(function (token) {
|
|
497
577
|
pendingTokenRequest = null;
|
|
498
|
-
storage.setItem(
|
|
578
|
+
storage.setItem(newCacheKey, JSON.stringify(token));
|
|
499
579
|
cachedToken = token;
|
|
500
580
|
return token;
|
|
501
581
|
}, function (err) {
|
|
@@ -525,7 +605,7 @@
|
|
|
525
605
|
var invalidate = function invalidate() {
|
|
526
606
|
cachedToken = null;
|
|
527
607
|
retrievingToken = null;
|
|
528
|
-
return storage.removeItem(
|
|
608
|
+
return storage.removeItem(newCacheKey);
|
|
529
609
|
};
|
|
530
610
|
return {
|
|
531
611
|
getFreshToken: getFreshToken,
|
|
@@ -1094,13 +1174,62 @@
|
|
|
1094
1174
|
return sideEffectsMiddleware;
|
|
1095
1175
|
};
|
|
1096
1176
|
|
|
1097
|
-
function
|
|
1098
|
-
var
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1177
|
+
var createBackoff = function createBackoff(_ref) {
|
|
1178
|
+
var _ref$min = _ref.min,
|
|
1179
|
+
min = _ref$min === void 0 ? 1000 : _ref$min,
|
|
1180
|
+
_ref$max = _ref.max,
|
|
1181
|
+
max = _ref$max === void 0 ? 5000 : _ref$max,
|
|
1182
|
+
_ref$jitter = _ref.jitter,
|
|
1183
|
+
jitter = _ref$jitter === void 0 ? 0.5 : _ref$jitter;
|
|
1184
|
+
var attempts = 0;
|
|
1185
|
+
return {
|
|
1186
|
+
duration: function duration() {
|
|
1187
|
+
var ms = min * Math.pow(2, attempts++);
|
|
1188
|
+
if (jitter) {
|
|
1189
|
+
var rand = Math.random();
|
|
1190
|
+
var deviation = Math.floor(rand * jitter * ms);
|
|
1191
|
+
ms = (Math.floor(rand * 10) & 1) === 0 ? ms - deviation : ms + deviation;
|
|
1192
|
+
}
|
|
1193
|
+
return Math.min(ms, max) | 0;
|
|
1194
|
+
},
|
|
1195
|
+
reset: function reset() {
|
|
1196
|
+
attempts = 0;
|
|
1197
|
+
}
|
|
1198
|
+
};
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
/**
|
|
1202
|
+
* promiseTry allows us to move success / error handling to be promise based so we will handle both synchronous and asynchronous execution failures and success properly.
|
|
1203
|
+
* @param anyFunction - function to be called
|
|
1204
|
+
* @returns promise that resolves to the return value of the function
|
|
1205
|
+
* @example
|
|
1206
|
+
* const promise = promiseTry(() => 1)
|
|
1207
|
+
* promise.then(value => console.log(value)) // 1
|
|
1208
|
+
*/
|
|
1209
|
+
|
|
1210
|
+
function promiseTry(anyFunction) {
|
|
1211
|
+
return new Promise(function (resolve) {
|
|
1212
|
+
resolve(anyFunction());
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
/**
|
|
1217
|
+
* Creates a deferred object that can be resolved or rejected later.
|
|
1218
|
+
* @returns A deferred object with a promise and resolve and reject functions.
|
|
1219
|
+
* @example
|
|
1220
|
+
* const def = promiseDeferred()
|
|
1221
|
+
* const promise = def.promise
|
|
1222
|
+
* def.resolve(1)
|
|
1223
|
+
* return promise.then(res => console.log(res)) // 1
|
|
1224
|
+
*/
|
|
1225
|
+
|
|
1226
|
+
function promiseDeferred() {
|
|
1227
|
+
var deferred = {};
|
|
1228
|
+
deferred.promise = new Promise(function (resolve, reject) {
|
|
1229
|
+
deferred.resolve = resolve;
|
|
1230
|
+
deferred.reject = reject;
|
|
1102
1231
|
});
|
|
1103
|
-
return
|
|
1232
|
+
return deferred;
|
|
1104
1233
|
}
|
|
1105
1234
|
|
|
1106
1235
|
var createReducer = function createReducer(initialState, reducersMap) {
|
|
@@ -1121,9 +1250,26 @@
|
|
|
1121
1250
|
var PAUSED = 'paused';
|
|
1122
1251
|
var RECONNECTING = 'reconnecting';
|
|
1123
1252
|
|
|
1253
|
+
var connectionStatuses = /*#__PURE__*/Object.freeze({
|
|
1254
|
+
__proto__: null,
|
|
1255
|
+
CONNECTED: CONNECTED,
|
|
1256
|
+
DESTROYED: DESTROYED,
|
|
1257
|
+
DISCONNECTED: DISCONNECTED,
|
|
1258
|
+
PAUSED: PAUSED,
|
|
1259
|
+
RECONNECTING: RECONNECTING
|
|
1260
|
+
});
|
|
1261
|
+
|
|
1124
1262
|
var AGENT = 'agent';
|
|
1125
1263
|
var CUSTOMER = 'customer';
|
|
1126
1264
|
|
|
1265
|
+
var userTypes = /*#__PURE__*/Object.freeze({
|
|
1266
|
+
__proto__: null,
|
|
1267
|
+
AGENT: AGENT,
|
|
1268
|
+
CUSTOMER: CUSTOMER
|
|
1269
|
+
});
|
|
1270
|
+
|
|
1271
|
+
var LIVECHAT_ORGANIZATION_ID = 'feaf6c0e-9f43-48ff-9ad0-8e24e0350932';
|
|
1272
|
+
|
|
1127
1273
|
var getAllRequests = function getAllRequests(state) {
|
|
1128
1274
|
return state.requests;
|
|
1129
1275
|
};
|
|
@@ -1147,9 +1293,9 @@
|
|
|
1147
1293
|
return getConnectionStatus(state) === DESTROYED;
|
|
1148
1294
|
};
|
|
1149
1295
|
var getEnvPart = function getEnvPart(_ref) {
|
|
1150
|
-
var
|
|
1296
|
+
var organizationId = _ref.organizationId,
|
|
1151
1297
|
env = _ref.env;
|
|
1152
|
-
if (
|
|
1298
|
+
if (organizationId === LIVECHAT_ORGANIZATION_ID) {
|
|
1153
1299
|
return '.staging';
|
|
1154
1300
|
}
|
|
1155
1301
|
if (env === 'production') {
|
|
@@ -1163,12 +1309,12 @@
|
|
|
1163
1309
|
return "https://api" + regionPart + getEnvPart(state) + ".livechatinc.com";
|
|
1164
1310
|
};
|
|
1165
1311
|
var getServerUrl = function getServerUrl(state) {
|
|
1166
|
-
return getApiOrigin(state) + "/v3.
|
|
1312
|
+
return getApiOrigin(state) + "/v3.5/customer";
|
|
1167
1313
|
};
|
|
1168
1314
|
var createInitialState = function createInitialState(initialStateData) {
|
|
1169
1315
|
var _initialStateData$app = initialStateData.application,
|
|
1170
1316
|
application = _initialStateData$app === void 0 ? {} : _initialStateData$app,
|
|
1171
|
-
|
|
1317
|
+
organizationId = initialStateData.organizationId,
|
|
1172
1318
|
_initialStateData$gro = initialStateData.groupId,
|
|
1173
1319
|
groupId = _initialStateData$gro === void 0 ? null : _initialStateData$gro,
|
|
1174
1320
|
env = initialStateData.env,
|
|
@@ -1185,9 +1331,9 @@
|
|
|
1185
1331
|
return {
|
|
1186
1332
|
application: _extends({}, application, {
|
|
1187
1333
|
name: "customer_sdk",
|
|
1188
|
-
version: "
|
|
1334
|
+
version: "4.0.1"
|
|
1189
1335
|
}),
|
|
1190
|
-
|
|
1336
|
+
organizationId: organizationId,
|
|
1191
1337
|
env: env,
|
|
1192
1338
|
groupId: groupId,
|
|
1193
1339
|
chats: {},
|
|
@@ -1305,9 +1451,12 @@
|
|
|
1305
1451
|
}
|
|
1306
1452
|
|
|
1307
1453
|
var ACCESS_TOKEN_EXPIRED = 'access_token_expired';
|
|
1454
|
+
var CONNECTION_TIMEOUT = 'connection_timeout';
|
|
1308
1455
|
var CUSTOMER_BANNED = 'customer_banned';
|
|
1309
1456
|
// customer tried reconnecting too many times after they received too_many_connections error
|
|
1310
1457
|
var CUSTOMER_TEMPORARILY_BLOCKED = 'customer_temporarily_blocked';
|
|
1458
|
+
var INACTIVITY_TIMEOUT = 'inactivity_timeout';
|
|
1459
|
+
var INTERNAL_ERROR = 'internal_error';
|
|
1311
1460
|
var LICENSE_EXPIRED = 'license_expired';
|
|
1312
1461
|
var LICENSE_NOT_FOUND = 'license_not_found';
|
|
1313
1462
|
var MISDIRECTED_CONNECTION$1 = 'misdirected_connection';
|
|
@@ -1321,6 +1470,27 @@
|
|
|
1321
1470
|
// the limit of unauthorized connections is per IP
|
|
1322
1471
|
var TOO_MANY_UNAUTHORIZED_CONNECTIONS = 'too_many_unauthorized_connections';
|
|
1323
1472
|
var UNSUPPORTED_VERSION = 'unsupported_version';
|
|
1473
|
+
// introduced in 3.5 meaning the customer was logged out by the server
|
|
1474
|
+
var LOGGED_OUT_REMOTELY = 'logged_out_remotely';
|
|
1475
|
+
|
|
1476
|
+
var serverDisconnectionReasons = /*#__PURE__*/Object.freeze({
|
|
1477
|
+
__proto__: null,
|
|
1478
|
+
ACCESS_TOKEN_EXPIRED: ACCESS_TOKEN_EXPIRED,
|
|
1479
|
+
CONNECTION_TIMEOUT: CONNECTION_TIMEOUT,
|
|
1480
|
+
CUSTOMER_BANNED: CUSTOMER_BANNED,
|
|
1481
|
+
CUSTOMER_TEMPORARILY_BLOCKED: CUSTOMER_TEMPORARILY_BLOCKED,
|
|
1482
|
+
INACTIVITY_TIMEOUT: INACTIVITY_TIMEOUT,
|
|
1483
|
+
INTERNAL_ERROR: INTERNAL_ERROR,
|
|
1484
|
+
LICENSE_EXPIRED: LICENSE_EXPIRED,
|
|
1485
|
+
LICENSE_NOT_FOUND: LICENSE_NOT_FOUND,
|
|
1486
|
+
MISDIRECTED_CONNECTION: MISDIRECTED_CONNECTION$1,
|
|
1487
|
+
PRODUCT_VERSION_CHANGED: PRODUCT_VERSION_CHANGED,
|
|
1488
|
+
SERVICE_TEMPORARILY_UNAVAILABLE: SERVICE_TEMPORARILY_UNAVAILABLE$1,
|
|
1489
|
+
TOO_MANY_CONNECTIONS: TOO_MANY_CONNECTIONS,
|
|
1490
|
+
TOO_MANY_UNAUTHORIZED_CONNECTIONS: TOO_MANY_UNAUTHORIZED_CONNECTIONS,
|
|
1491
|
+
UNSUPPORTED_VERSION: UNSUPPORTED_VERSION,
|
|
1492
|
+
LOGGED_OUT_REMOTELY: LOGGED_OUT_REMOTELY
|
|
1493
|
+
});
|
|
1324
1494
|
|
|
1325
1495
|
var CHAT_DEACTIVATED = 'chat_deactivated';
|
|
1326
1496
|
var CHAT_PROPERTIES_DELETED = 'chat_properties_deleted';
|
|
@@ -1336,6 +1506,7 @@
|
|
|
1336
1506
|
var EVENTS_MARKED_AS_SEEN = 'events_marked_as_seen';
|
|
1337
1507
|
var GREETING_ACCEPTED = 'greeting_accepted';
|
|
1338
1508
|
var GREETING_CANCELED = 'greeting_canceled';
|
|
1509
|
+
var GROUPS_STATUS_UPDATED = 'groups_status_updated';
|
|
1339
1510
|
var INCOMING_CHAT = 'incoming_chat';
|
|
1340
1511
|
var INCOMING_EVENT = 'incoming_event';
|
|
1341
1512
|
var INCOMING_GREETING = 'incoming_greeting';
|
|
@@ -1364,6 +1535,7 @@
|
|
|
1364
1535
|
EVENTS_MARKED_AS_SEEN: EVENTS_MARKED_AS_SEEN,
|
|
1365
1536
|
GREETING_ACCEPTED: GREETING_ACCEPTED,
|
|
1366
1537
|
GREETING_CANCELED: GREETING_CANCELED,
|
|
1538
|
+
GROUPS_STATUS_UPDATED: GROUPS_STATUS_UPDATED,
|
|
1367
1539
|
INCOMING_CHAT: INCOMING_CHAT,
|
|
1368
1540
|
INCOMING_EVENT: INCOMING_EVENT,
|
|
1369
1541
|
INCOMING_GREETING: INCOMING_GREETING,
|
|
@@ -1385,6 +1557,17 @@
|
|
|
1385
1557
|
var SYSTEM_MESSAGE = 'system_message';
|
|
1386
1558
|
var CUSTOM = 'custom';
|
|
1387
1559
|
|
|
1560
|
+
var eventTypes = /*#__PURE__*/Object.freeze({
|
|
1561
|
+
__proto__: null,
|
|
1562
|
+
FILE: FILE,
|
|
1563
|
+
FORM: FORM,
|
|
1564
|
+
FILLED_FORM: FILLED_FORM,
|
|
1565
|
+
MESSAGE: MESSAGE,
|
|
1566
|
+
RICH_MESSAGE: RICH_MESSAGE,
|
|
1567
|
+
SYSTEM_MESSAGE: SYSTEM_MESSAGE,
|
|
1568
|
+
CUSTOM: CUSTOM
|
|
1569
|
+
});
|
|
1570
|
+
|
|
1388
1571
|
var createEventBase = function createEventBase(event) {
|
|
1389
1572
|
var base = {};
|
|
1390
1573
|
if (typeof event.customId === 'string') {
|
|
@@ -1641,10 +1824,10 @@
|
|
|
1641
1824
|
// TODO: this thing is not really well typed and should be improved
|
|
1642
1825
|
var sendRequestAction = function sendRequestAction(store, action) {
|
|
1643
1826
|
action.payload.id = generateUniqueId(store.getState().requests);
|
|
1644
|
-
var
|
|
1645
|
-
resolve =
|
|
1646
|
-
reject =
|
|
1647
|
-
promise =
|
|
1827
|
+
var _promiseDeferred = promiseDeferred(),
|
|
1828
|
+
resolve = _promiseDeferred.resolve,
|
|
1829
|
+
reject = _promiseDeferred.reject,
|
|
1830
|
+
promise = _promiseDeferred.promise;
|
|
1648
1831
|
action.payload.promise = promise;
|
|
1649
1832
|
action.payload.resolve = resolve;
|
|
1650
1833
|
action.payload.reject = reject;
|
|
@@ -1652,59 +1835,89 @@
|
|
|
1652
1835
|
return promise;
|
|
1653
1836
|
};
|
|
1654
1837
|
|
|
1655
|
-
var promiseTry = (function (fn) {
|
|
1656
|
-
return new Promise(function (resolve) {
|
|
1657
|
-
resolve(fn());
|
|
1658
|
-
});
|
|
1659
|
-
});
|
|
1660
|
-
|
|
1661
|
-
var createBackoff = function createBackoff(_ref) {
|
|
1662
|
-
var _ref$min = _ref.min,
|
|
1663
|
-
min = _ref$min === void 0 ? 1000 : _ref$min,
|
|
1664
|
-
_ref$max = _ref.max,
|
|
1665
|
-
max = _ref$max === void 0 ? 5000 : _ref$max,
|
|
1666
|
-
_ref$jitter = _ref.jitter,
|
|
1667
|
-
jitter = _ref$jitter === void 0 ? 0.5 : _ref$jitter;
|
|
1668
|
-
var attempts = 0;
|
|
1669
|
-
return {
|
|
1670
|
-
duration: function duration() {
|
|
1671
|
-
var ms = min * Math.pow(2, attempts++);
|
|
1672
|
-
if (jitter) {
|
|
1673
|
-
var rand = Math.random();
|
|
1674
|
-
var deviation = Math.floor(rand * jitter * ms);
|
|
1675
|
-
ms = (Math.floor(rand * 10) & 1) === 0 ? ms - deviation : ms + deviation;
|
|
1676
|
-
}
|
|
1677
|
-
return Math.min(ms, max) | 0;
|
|
1678
|
-
},
|
|
1679
|
-
reset: function reset() {
|
|
1680
|
-
attempts = 0;
|
|
1681
|
-
}
|
|
1682
|
-
};
|
|
1683
|
-
};
|
|
1684
|
-
|
|
1685
1838
|
var AUTHENTICATION = 'AUTHENTICATION';
|
|
1839
|
+
var AUTHORIZATION = 'AUTHORIZATION';
|
|
1840
|
+
var CHAT_ALREADY_ACTIVE = 'CHAT_ALREADY_ACTIVE';
|
|
1841
|
+
var CHAT_LIMIT_REACHED = 'CHAT_LIMIT_REACHED';
|
|
1686
1842
|
var CUSTOMER_BANNED$1 = 'CUSTOMER_BANNED';
|
|
1843
|
+
var CUSTOMER_SESSION_FIELDS_LIMIT_REACHED = 'CUSTOMER_SESSION_FIELDS_LIMIT_REACHED';
|
|
1844
|
+
var ENTITY_TOO_LARGE = 'ENTITY_TOO_LARGE';
|
|
1845
|
+
var GREETING_NOT_FOUND = 'GREETING_NOT_FOUND';
|
|
1846
|
+
var GROUP_OFFLINE = 'GROUP_OFFLINE';
|
|
1847
|
+
var GROUPS_OFFLINE = 'GROUPS_OFFLINE';
|
|
1848
|
+
var GROUP_NOT_FOUND = 'GROUP_NOT_FOUND';
|
|
1849
|
+
var GROUP_UNAVAILABLE = 'GROUP_UNAVAILABLE';
|
|
1850
|
+
var INTERNAL = 'INTERNAL';
|
|
1851
|
+
var LICENSE_EXPIRED$1 = 'LICENSE_EXPIRED';
|
|
1852
|
+
// actually this can happen only when using REST
|
|
1853
|
+
var MISDIRECTED_REQUEST = 'MISDIRECTED_REQUEST';
|
|
1854
|
+
var PENDING_REQUESTS_LIMIT_REACHED = 'PENDING_REQUESTS_LIMIT_REACHED';
|
|
1855
|
+
var REQUEST_TIMEOUT$1 = 'REQUEST_TIMEOUT';
|
|
1856
|
+
var SERVICE_UNAVAILABLE = 'SERVICE_UNAVAILABLE';
|
|
1857
|
+
var UNSUPPORTED_VERSION$1 = 'UNSUPPORTED_VERSION';
|
|
1687
1858
|
var USERS_LIMIT_REACHED = 'USERS_LIMIT_REACHED';
|
|
1859
|
+
var VALIDATION = 'VALIDATION';
|
|
1688
1860
|
var WRONG_PRODUCT_VERSION = 'WRONG_PRODUCT_VERSION';
|
|
1689
1861
|
|
|
1690
|
-
var
|
|
1862
|
+
var serverErrorCodes = /*#__PURE__*/Object.freeze({
|
|
1863
|
+
__proto__: null,
|
|
1864
|
+
AUTHENTICATION: AUTHENTICATION,
|
|
1865
|
+
AUTHORIZATION: AUTHORIZATION,
|
|
1866
|
+
CHAT_ALREADY_ACTIVE: CHAT_ALREADY_ACTIVE,
|
|
1867
|
+
CHAT_LIMIT_REACHED: CHAT_LIMIT_REACHED,
|
|
1868
|
+
CUSTOMER_BANNED: CUSTOMER_BANNED$1,
|
|
1869
|
+
CUSTOMER_SESSION_FIELDS_LIMIT_REACHED: CUSTOMER_SESSION_FIELDS_LIMIT_REACHED,
|
|
1870
|
+
ENTITY_TOO_LARGE: ENTITY_TOO_LARGE,
|
|
1871
|
+
GREETING_NOT_FOUND: GREETING_NOT_FOUND,
|
|
1872
|
+
GROUP_OFFLINE: GROUP_OFFLINE,
|
|
1873
|
+
GROUPS_OFFLINE: GROUPS_OFFLINE,
|
|
1874
|
+
GROUP_NOT_FOUND: GROUP_NOT_FOUND,
|
|
1875
|
+
GROUP_UNAVAILABLE: GROUP_UNAVAILABLE,
|
|
1876
|
+
INTERNAL: INTERNAL,
|
|
1877
|
+
LICENSE_EXPIRED: LICENSE_EXPIRED$1,
|
|
1878
|
+
MISDIRECTED_REQUEST: MISDIRECTED_REQUEST,
|
|
1879
|
+
PENDING_REQUESTS_LIMIT_REACHED: PENDING_REQUESTS_LIMIT_REACHED,
|
|
1880
|
+
REQUEST_TIMEOUT: REQUEST_TIMEOUT$1,
|
|
1881
|
+
SERVICE_UNAVAILABLE: SERVICE_UNAVAILABLE,
|
|
1882
|
+
UNSUPPORTED_VERSION: UNSUPPORTED_VERSION$1,
|
|
1883
|
+
USERS_LIMIT_REACHED: USERS_LIMIT_REACHED,
|
|
1884
|
+
VALIDATION: VALIDATION,
|
|
1885
|
+
WRONG_PRODUCT_VERSION: WRONG_PRODUCT_VERSION
|
|
1886
|
+
});
|
|
1887
|
+
|
|
1888
|
+
var getSideStorageKeyByLicense = function getSideStorageKeyByLicense(store, licenseId) {
|
|
1691
1889
|
var _store$getState = store.getState(),
|
|
1692
|
-
licenseId = _store$getState.licenseId,
|
|
1693
1890
|
groupId = _store$getState.groupId,
|
|
1694
1891
|
uniqueGroups = _store$getState.uniqueGroups;
|
|
1695
1892
|
return "side_storage_" + licenseId + (uniqueGroups ? ":" + groupId : '');
|
|
1696
1893
|
};
|
|
1697
|
-
var
|
|
1698
|
-
|
|
1699
|
-
|
|
1894
|
+
var getSideStorageKeyByOrganization = function getSideStorageKeyByOrganization(store) {
|
|
1895
|
+
var _store$getState2 = store.getState(),
|
|
1896
|
+
organizationId = _store$getState2.organizationId,
|
|
1897
|
+
groupId = _store$getState2.groupId,
|
|
1898
|
+
uniqueGroups = _store$getState2.uniqueGroups;
|
|
1899
|
+
return "side_storage_" + organizationId + (uniqueGroups ? ":" + groupId : '');
|
|
1900
|
+
};
|
|
1901
|
+
var getSideStorage = function getSideStorage(store, licenseId) {
|
|
1902
|
+
var sideStorageLicenseKey = getSideStorageKeyByLicense(store, licenseId);
|
|
1903
|
+
var sideStorageOrganizationKey = getSideStorageKeyByOrganization(store);
|
|
1904
|
+
return storage.getItem(sideStorageLicenseKey)["catch"](noop).then(function (sideStorage) {
|
|
1905
|
+
if (!sideStorage) {
|
|
1906
|
+
return storage.getItem(sideStorageOrganizationKey)["catch"](noop).then(function (organizationSideStorage) {
|
|
1907
|
+
return JSON.parse(organizationSideStorage || '{}');
|
|
1908
|
+
})["catch"](noop);
|
|
1909
|
+
}
|
|
1910
|
+
return storage.setItem(sideStorageOrganizationKey, sideStorage)["catch"](noop).then(function () {
|
|
1911
|
+
return storage.removeItem(sideStorageLicenseKey)["catch"](noop).then(function () {
|
|
1912
|
+
return JSON.parse(sideStorage);
|
|
1913
|
+
})["catch"](noop);
|
|
1914
|
+
});
|
|
1700
1915
|
})
|
|
1701
1916
|
// shouldnt get triggered, just a defensive measure against malformed storage entries
|
|
1702
|
-
["catch"](
|
|
1703
|
-
return {};
|
|
1704
|
-
});
|
|
1917
|
+
["catch"](noop);
|
|
1705
1918
|
};
|
|
1706
1919
|
var saveSideStorage = function saveSideStorage(store, sideStorage) {
|
|
1707
|
-
|
|
1920
|
+
storage.setItem(getSideStorageKeyByOrganization(store), JSON.stringify(sideStorage))["catch"](noop);
|
|
1708
1921
|
};
|
|
1709
1922
|
|
|
1710
1923
|
var taskChain = function taskChain(_ref, onSuccess, onError) {
|
|
@@ -1745,7 +1958,7 @@
|
|
|
1745
1958
|
setTimeout(resolve, ms);
|
|
1746
1959
|
});
|
|
1747
1960
|
};
|
|
1748
|
-
function createLoginTask(auth, customerDataProvider) {
|
|
1961
|
+
function createLoginTask(auth, customerDataProvider, licenseId) {
|
|
1749
1962
|
var store;
|
|
1750
1963
|
var sentPage = null;
|
|
1751
1964
|
var task;
|
|
@@ -1766,7 +1979,7 @@
|
|
|
1766
1979
|
return store.dispatch(reconnect(currentBackoffStrategy.duration()));
|
|
1767
1980
|
};
|
|
1768
1981
|
var getTokenAndSideStorage = function getTokenAndSideStorage() {
|
|
1769
|
-
return Promise.all([auth.getToken(), getSideStorage(store)]);
|
|
1982
|
+
return Promise.all([auth.getToken(), getSideStorage(store, licenseId)]);
|
|
1770
1983
|
};
|
|
1771
1984
|
var dispatchSelfId = function dispatchSelfId(_ref2) {
|
|
1772
1985
|
var token = _ref2[0],
|
|
@@ -1906,7 +2119,7 @@
|
|
|
1906
2119
|
return;
|
|
1907
2120
|
}
|
|
1908
2121
|
var query = buildQueryString({
|
|
1909
|
-
|
|
2122
|
+
organization_id: state.organizationId
|
|
1910
2123
|
});
|
|
1911
2124
|
var payload = {
|
|
1912
2125
|
session_fields: parseCustomerSessionFields(sessionFields || {}),
|
|
@@ -2405,11 +2618,11 @@
|
|
|
2405
2618
|
{
|
|
2406
2619
|
var upgradedPushes = [];
|
|
2407
2620
|
socket.emit(_extends({}, frame, {
|
|
2408
|
-
version: '3.
|
|
2621
|
+
version: '3.5',
|
|
2409
2622
|
payload: _extends({}, frame.payload, {
|
|
2410
2623
|
pushes: {
|
|
2411
|
-
// '3.
|
|
2412
|
-
'3.
|
|
2624
|
+
// '3.6': upgradedPushes,
|
|
2625
|
+
'3.5': values(serverPushActions).filter(function (pushAction) {
|
|
2413
2626
|
return (
|
|
2414
2627
|
// `customer_disconnected` can be sent immediately after opening the connection, before it even received login request
|
|
2415
2628
|
// therefore it's not possible to subscribe for a particular version of this push - the "connection version" is always used
|
|
@@ -2441,25 +2654,10 @@
|
|
|
2441
2654
|
emit('user_data', user);
|
|
2442
2655
|
});
|
|
2443
2656
|
};
|
|
2444
|
-
var
|
|
2445
|
-
var
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
return;
|
|
2449
|
-
}
|
|
2450
|
-
if (content.name === 'groups_update' && 'groups' in content && !isEmpty(content.groups)) {
|
|
2451
|
-
var _content$groups = content.groups,
|
|
2452
|
-
group = _content$groups[0];
|
|
2453
|
-
var availability = parseGroupStatus(group.status);
|
|
2454
|
-
emit('availability_updated', {
|
|
2455
|
-
availability: availability
|
|
2456
|
-
});
|
|
2457
|
-
}
|
|
2458
|
-
};
|
|
2459
|
-
var handlePush = function handlePush(_ref5, _ref6) {
|
|
2460
|
-
var emit = _ref5.emit,
|
|
2461
|
-
store = _ref5.store;
|
|
2462
|
-
var payload = _ref6.payload;
|
|
2657
|
+
var handlePush = function handlePush(_ref4, _ref5) {
|
|
2658
|
+
var emit = _ref4.emit,
|
|
2659
|
+
store = _ref4.store;
|
|
2660
|
+
var payload = _ref5.payload;
|
|
2463
2661
|
switch (payload.action) {
|
|
2464
2662
|
case THREAD_PROPERTIES_UPDATED:
|
|
2465
2663
|
if (payload.payload.properties.lc2 && 'queue_pos' in payload.payload.properties.lc2) {
|
|
@@ -2499,6 +2697,7 @@
|
|
|
2499
2697
|
case PRODUCT_VERSION_CHANGED:
|
|
2500
2698
|
case TOO_MANY_CONNECTIONS:
|
|
2501
2699
|
case UNSUPPORTED_VERSION:
|
|
2700
|
+
case LOGGED_OUT_REMOTELY:
|
|
2502
2701
|
// this also emits `disconnected` event - but it's handled in response to this action by destroy handler
|
|
2503
2702
|
store.dispatch(destroy(payload.payload.reason));
|
|
2504
2703
|
break;
|
|
@@ -2521,6 +2720,16 @@
|
|
|
2521
2720
|
break;
|
|
2522
2721
|
}
|
|
2523
2722
|
return;
|
|
2723
|
+
case GROUPS_STATUS_UPDATED:
|
|
2724
|
+
{
|
|
2725
|
+
var _payload$payload$grou = payload.payload.groups,
|
|
2726
|
+
group = _payload$payload$grou[0];
|
|
2727
|
+
var availability = parseGroupStatus(group.status);
|
|
2728
|
+
emit('availability_updated', {
|
|
2729
|
+
availability: availability
|
|
2730
|
+
});
|
|
2731
|
+
return;
|
|
2732
|
+
}
|
|
2524
2733
|
case INCOMING_CHAT:
|
|
2525
2734
|
emitUsers(emit, payload.payload.chat.users);
|
|
2526
2735
|
emit(payload.action, payload.payload);
|
|
@@ -2534,11 +2743,6 @@
|
|
|
2534
2743
|
case INCOMING_TYPING_INDICATOR:
|
|
2535
2744
|
emit(payload.action, payload.payload);
|
|
2536
2745
|
return;
|
|
2537
|
-
case INCOMING_MULTICAST:
|
|
2538
|
-
handleMulticast(emit, payload.payload);
|
|
2539
|
-
// we passthrough this action even if it was already handled above
|
|
2540
|
-
emit(payload.action, payload.payload);
|
|
2541
|
-
return;
|
|
2542
2746
|
case USER_ADDED_TO_CHAT:
|
|
2543
2747
|
emitUsers(emit, [payload.payload.user]);
|
|
2544
2748
|
emit(payload.action, payload.payload);
|
|
@@ -2548,9 +2752,9 @@
|
|
|
2548
2752
|
return;
|
|
2549
2753
|
}
|
|
2550
2754
|
};
|
|
2551
|
-
var handleResponse = function handleResponse(
|
|
2552
|
-
var emit =
|
|
2553
|
-
var payload =
|
|
2755
|
+
var handleResponse = function handleResponse(_ref6, _ref7) {
|
|
2756
|
+
var emit = _ref6.emit;
|
|
2757
|
+
var payload = _ref7.payload;
|
|
2554
2758
|
switch (payload.action) {
|
|
2555
2759
|
case CHAT_DEACTIVATED:
|
|
2556
2760
|
payload.resolve(SUCCESS);
|
|
@@ -2575,13 +2779,14 @@
|
|
|
2575
2779
|
return;
|
|
2576
2780
|
}
|
|
2577
2781
|
};
|
|
2578
|
-
var createSideEffectsHandler = (function (
|
|
2579
|
-
var auth =
|
|
2580
|
-
customerDataProvider =
|
|
2581
|
-
emitter =
|
|
2582
|
-
socket =
|
|
2782
|
+
var createSideEffectsHandler = (function (_ref8) {
|
|
2783
|
+
var auth = _ref8.auth,
|
|
2784
|
+
customerDataProvider = _ref8.customerDataProvider,
|
|
2785
|
+
emitter = _ref8.emitter,
|
|
2786
|
+
socket = _ref8.socket,
|
|
2787
|
+
licenseId = _ref8.licenseId;
|
|
2583
2788
|
var emit = emitter.emit;
|
|
2584
|
-
var loginTask = createLoginTask(auth, customerDataProvider);
|
|
2789
|
+
var loginTask = createLoginTask(auth, customerDataProvider, licenseId);
|
|
2585
2790
|
|
|
2586
2791
|
// TODO: using Store type here is a lie, middleware only provides MiddlewareAPI here
|
|
2587
2792
|
return function (action, store) {
|
|
@@ -2604,6 +2809,7 @@
|
|
|
2604
2809
|
case CUSTOMER_BANNED:
|
|
2605
2810
|
case LICENSE_EXPIRED:
|
|
2606
2811
|
case PRODUCT_VERSION_CHANGED:
|
|
2812
|
+
case LOGGED_OUT_REMOTELY:
|
|
2607
2813
|
// normalize those to CONNECTION_LOST as the handling on the consumer's side should be the same
|
|
2608
2814
|
failAllRequests(store, CONNECTION_LOST);
|
|
2609
2815
|
emit('disconnected', payload);
|
|
@@ -2674,9 +2880,9 @@
|
|
|
2674
2880
|
if (!hasToken) {
|
|
2675
2881
|
return auth.getToken();
|
|
2676
2882
|
}
|
|
2677
|
-
return auth.getToken().then(function (
|
|
2678
|
-
var creationDate =
|
|
2679
|
-
expiresIn =
|
|
2883
|
+
return auth.getToken().then(function (_ref9) {
|
|
2884
|
+
var creationDate = _ref9.creationDate,
|
|
2885
|
+
expiresIn = _ref9.expiresIn;
|
|
2680
2886
|
var ONE_HOUR = 60 * 60 * 1000;
|
|
2681
2887
|
// check if the token is worth reusing
|
|
2682
2888
|
// we don't want to get disconnected in a moment because of expired token
|
|
@@ -2993,14 +3199,14 @@
|
|
|
2993
3199
|
resolve = noop;
|
|
2994
3200
|
},
|
|
2995
3201
|
check: function check() {
|
|
2996
|
-
var deferred
|
|
2997
|
-
resolve = deferred
|
|
3202
|
+
var deferred = promiseDeferred();
|
|
3203
|
+
resolve = deferred.resolve;
|
|
2998
3204
|
timer = setTimeout(function () {
|
|
2999
3205
|
var err = new Error('Timeout.');
|
|
3000
3206
|
err.code = 'TIMEOUT';
|
|
3001
|
-
deferred
|
|
3207
|
+
deferred.reject(err);
|
|
3002
3208
|
}, 2000);
|
|
3003
|
-
return deferred
|
|
3209
|
+
return deferred.promise;
|
|
3004
3210
|
},
|
|
3005
3211
|
resolve: function (_resolve) {
|
|
3006
3212
|
function resolve() {
|
|
@@ -3102,7 +3308,7 @@
|
|
|
3102
3308
|
var url = (getServerUrl(state) + "/rtm/ws").replace(/^https/, 'wss');
|
|
3103
3309
|
return createPlatformClient(url, {
|
|
3104
3310
|
query: {
|
|
3105
|
-
|
|
3311
|
+
organization_id: state.organizationId
|
|
3106
3312
|
},
|
|
3107
3313
|
emitter: emitter
|
|
3108
3314
|
});
|
|
@@ -3394,16 +3600,17 @@
|
|
|
3394
3600
|
var lastEventSummary = last(lastEventSummariesArray.sort(function (eventSummaryA, eventSummaryB) {
|
|
3395
3601
|
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);
|
|
3396
3602
|
}));
|
|
3397
|
-
if (lastEventSummary) {
|
|
3603
|
+
if (lastEventSummary && chatSummary.lastEventsPerType) {
|
|
3398
3604
|
chatSummary.lastEvent = chatSummary.lastEventsPerType[lastEventSummary.event.type];
|
|
3399
3605
|
}
|
|
3400
3606
|
return chatSummary;
|
|
3401
3607
|
});
|
|
3402
3608
|
return {
|
|
3403
3609
|
chatsSummary: numericSortBy(function (_ref4) {
|
|
3610
|
+
var _ref5;
|
|
3404
3611
|
var lastEvent = _ref4.lastEvent,
|
|
3405
3612
|
order = _ref4.order;
|
|
3406
|
-
return -1 * (lastEvent !== undefined ? lastEvent.timestamp : order);
|
|
3613
|
+
return -1 * ((_ref5 = lastEvent !== undefined ? lastEvent.timestamp : order) != null ? _ref5 : 0);
|
|
3407
3614
|
}, chatsSummary),
|
|
3408
3615
|
totalChats: payload.total_chats,
|
|
3409
3616
|
users: uniqBy(function (user) {
|
|
@@ -3523,6 +3730,11 @@
|
|
|
3523
3730
|
// 'greeting_canceled' has the same payload as `greeting_accepted`
|
|
3524
3731
|
payload: parseGreetingAcceptedPush(push.payload)
|
|
3525
3732
|
};
|
|
3733
|
+
case GROUPS_STATUS_UPDATED:
|
|
3734
|
+
return {
|
|
3735
|
+
action: push.action,
|
|
3736
|
+
payload: push.payload
|
|
3737
|
+
};
|
|
3526
3738
|
case INCOMING_CHAT:
|
|
3527
3739
|
return {
|
|
3528
3740
|
action: push.action,
|
|
@@ -3580,9 +3792,9 @@
|
|
|
3580
3792
|
};
|
|
3581
3793
|
}
|
|
3582
3794
|
};
|
|
3583
|
-
var parseResponse = function parseResponse(
|
|
3584
|
-
var request =
|
|
3585
|
-
response =
|
|
3795
|
+
var parseResponse = function parseResponse(_ref6) {
|
|
3796
|
+
var request = _ref6.request,
|
|
3797
|
+
response = _ref6.response;
|
|
3586
3798
|
switch (response.action) {
|
|
3587
3799
|
case ACCEPT_GREETING:
|
|
3588
3800
|
return {
|
|
@@ -3827,150 +4039,6 @@
|
|
|
3827
4039
|
return socket.off;
|
|
3828
4040
|
});
|
|
3829
4041
|
|
|
3830
|
-
var INCORRECT_REQUESTER_STRUCTURE = 'incorrect requester structure';
|
|
3831
|
-
var appendString = function appendString(input, str) {
|
|
3832
|
-
return input.length ? input + "\n" + str : str;
|
|
3833
|
-
};
|
|
3834
|
-
var createTicketBody = function createTicketBody(state, _ref) {
|
|
3835
|
-
var fields = _ref.fields,
|
|
3836
|
-
customerId = _ref.customerId,
|
|
3837
|
-
_ref$groupId = _ref.groupId,
|
|
3838
|
-
groupId = _ref$groupId === void 0 ? state.groupId : _ref$groupId,
|
|
3839
|
-
timeZone = _ref.timeZone;
|
|
3840
|
-
var ticketBody = _extends({
|
|
3841
|
-
licence_id: state.licenseId,
|
|
3842
|
-
ticket_message: '',
|
|
3843
|
-
offline_message: '',
|
|
3844
|
-
visitor_id: customerId,
|
|
3845
|
-
requester: {}
|
|
3846
|
-
}, typeof groupId === 'number' && {
|
|
3847
|
-
group: groupId
|
|
3848
|
-
}, state.page && {
|
|
3849
|
-
source: {
|
|
3850
|
-
url: state.page.url
|
|
3851
|
-
}
|
|
3852
|
-
}, timeZone && {
|
|
3853
|
-
timezone: timeZone
|
|
3854
|
-
});
|
|
3855
|
-
return fields.reduce(function (body, field) {
|
|
3856
|
-
switch (field.type) {
|
|
3857
|
-
case 'subject':
|
|
3858
|
-
{
|
|
3859
|
-
var value = field.answer;
|
|
3860
|
-
var text = value ? field.label + " " + value : field.label;
|
|
3861
|
-
if (value) {
|
|
3862
|
-
body.subject = value;
|
|
3863
|
-
}
|
|
3864
|
-
body.offline_message = appendString(body.offline_message, text);
|
|
3865
|
-
return body;
|
|
3866
|
-
}
|
|
3867
|
-
case 'name':
|
|
3868
|
-
{
|
|
3869
|
-
var _value = field.answer;
|
|
3870
|
-
var _text = _value ? field.label + " " + _value : field.label;
|
|
3871
|
-
if (_value) {
|
|
3872
|
-
body.requester.name = _value;
|
|
3873
|
-
}
|
|
3874
|
-
body.offline_message = appendString(body.offline_message, _text);
|
|
3875
|
-
return body;
|
|
3876
|
-
}
|
|
3877
|
-
case 'email':
|
|
3878
|
-
{
|
|
3879
|
-
var _value2 = field.answer;
|
|
3880
|
-
var _text2 = _value2 ? field.label + " " + _value2 : field.label;
|
|
3881
|
-
body.requester.mail = _value2;
|
|
3882
|
-
body.offline_message = appendString(body.offline_message, _text2);
|
|
3883
|
-
return body;
|
|
3884
|
-
}
|
|
3885
|
-
case 'question':
|
|
3886
|
-
case 'textarea':
|
|
3887
|
-
{
|
|
3888
|
-
var _value3 = field.answer;
|
|
3889
|
-
var _text3 = _value3 ? field.label + " " + _value3 : field.label;
|
|
3890
|
-
body.offline_message = appendString(body.offline_message, _text3);
|
|
3891
|
-
body.ticket_message = appendString(body.ticket_message, _text3);
|
|
3892
|
-
return body;
|
|
3893
|
-
}
|
|
3894
|
-
case 'radio':
|
|
3895
|
-
case 'select':
|
|
3896
|
-
{
|
|
3897
|
-
var _value4 = field.answer && field.answer.label;
|
|
3898
|
-
var _text4 = _value4 ? field.label + " " + _value4 : field.label;
|
|
3899
|
-
body.offline_message = appendString(body.offline_message, _text4);
|
|
3900
|
-
body.ticket_message = appendString(body.ticket_message, _text4);
|
|
3901
|
-
return body;
|
|
3902
|
-
}
|
|
3903
|
-
case 'checkbox':
|
|
3904
|
-
{
|
|
3905
|
-
var _value5 = field.answers && field.answers.map(function (answer) {
|
|
3906
|
-
return answer.label;
|
|
3907
|
-
}).join(', ');
|
|
3908
|
-
var _text5 = _value5 ? field.label + " " + _value5 : field.label;
|
|
3909
|
-
body.offline_message = appendString(body.offline_message, _text5);
|
|
3910
|
-
body.ticket_message = appendString(body.ticket_message, _text5);
|
|
3911
|
-
return body;
|
|
3912
|
-
}
|
|
3913
|
-
default:
|
|
3914
|
-
return body;
|
|
3915
|
-
}
|
|
3916
|
-
}, ticketBody);
|
|
3917
|
-
};
|
|
3918
|
-
var sendTicketForm = function sendTicketForm(store, auth, _ref2) {
|
|
3919
|
-
var filledForm = _ref2.filledForm,
|
|
3920
|
-
groupId = _ref2.groupId,
|
|
3921
|
-
timeZone = _ref2.timeZone;
|
|
3922
|
-
return auth.getToken().then(function (token) {
|
|
3923
|
-
var state = store.getState();
|
|
3924
|
-
if (getSelfId(state) === null) {
|
|
3925
|
-
store.dispatch(setSelfId(token.entityId));
|
|
3926
|
-
}
|
|
3927
|
-
var url = getApiOrigin(state) + "/v2/tickets/new";
|
|
3928
|
-
var body = createTicketBody(state, {
|
|
3929
|
-
fields: filledForm.fields,
|
|
3930
|
-
customerId: token.entityId,
|
|
3931
|
-
groupId: groupId,
|
|
3932
|
-
timeZone: timeZone
|
|
3933
|
-
});
|
|
3934
|
-
return unfetch(url, {
|
|
3935
|
-
method: 'POST',
|
|
3936
|
-
headers: {
|
|
3937
|
-
'Content-Type': 'application/json'
|
|
3938
|
-
},
|
|
3939
|
-
body: JSON.stringify(body)
|
|
3940
|
-
}).then(function (response) {
|
|
3941
|
-
if (response.ok) {
|
|
3942
|
-
return response.json().then(function (res) {
|
|
3943
|
-
return _extends({}, res, {
|
|
3944
|
-
text: body.ticket_message
|
|
3945
|
-
});
|
|
3946
|
-
});
|
|
3947
|
-
}
|
|
3948
|
-
|
|
3949
|
-
// we actually should normalize this somehow
|
|
3950
|
-
if (response.status === 400 || response.status === 422) {
|
|
3951
|
-
var errHandler = function errHandler(error) {
|
|
3952
|
-
if (!error || !error.errors) {
|
|
3953
|
-
// TODO: I honestly don't know if this can even be reached and even if it is - What error should be thrown here
|
|
3954
|
-
throw new Error();
|
|
3955
|
-
}
|
|
3956
|
-
// we receive some hardcore aggregate error here 😱
|
|
3957
|
-
var firstError = error.errors[0];
|
|
3958
|
-
var type = Object.keys(firstError)[0];
|
|
3959
|
-
if (type === INCORRECT_REQUESTER_STRUCTURE) {
|
|
3960
|
-
throw createError$1({
|
|
3961
|
-
message: firstError[INCORRECT_REQUESTER_STRUCTURE][0],
|
|
3962
|
-
code: 'VALIDATION'
|
|
3963
|
-
});
|
|
3964
|
-
}
|
|
3965
|
-
throw new Error();
|
|
3966
|
-
};
|
|
3967
|
-
return response.json().then(errHandler, errHandler);
|
|
3968
|
-
}
|
|
3969
|
-
throw new Error();
|
|
3970
|
-
});
|
|
3971
|
-
});
|
|
3972
|
-
};
|
|
3973
|
-
|
|
3974
4042
|
var toFormData = function toFormData(object) {
|
|
3975
4043
|
var formData = new FormData();
|
|
3976
4044
|
Object.keys(object).forEach(function (key) {
|
|
@@ -4080,7 +4148,7 @@
|
|
|
4080
4148
|
validateFile(file);
|
|
4081
4149
|
var state = store.getState();
|
|
4082
4150
|
var query = buildQueryString({
|
|
4083
|
-
|
|
4151
|
+
organization_id: state.organizationId
|
|
4084
4152
|
});
|
|
4085
4153
|
var url = getServerUrl(state) + "/action/" + UPLOAD_FILE + "?" + query;
|
|
4086
4154
|
var payload = {
|
|
@@ -4146,7 +4214,7 @@
|
|
|
4146
4214
|
*/
|
|
4147
4215
|
var log = function log(_ref) {
|
|
4148
4216
|
var env = _ref.env,
|
|
4149
|
-
|
|
4217
|
+
organizationId = _ref.organizationId,
|
|
4150
4218
|
eventName = _ref.eventName;
|
|
4151
4219
|
if (env !== 'production' || "customer_sdk" !== 'customer_sdk') {
|
|
4152
4220
|
return Promise.resolve();
|
|
@@ -4154,10 +4222,10 @@
|
|
|
4154
4222
|
var message = {
|
|
4155
4223
|
event_name: eventName,
|
|
4156
4224
|
severity: 'Informational',
|
|
4157
|
-
sdkVersion: "
|
|
4225
|
+
sdkVersion: "4.0.1"
|
|
4158
4226
|
};
|
|
4159
4227
|
var body = {
|
|
4160
|
-
|
|
4228
|
+
organizationId: organizationId,
|
|
4161
4229
|
event_id: 'chat_widget_customer_sdk',
|
|
4162
4230
|
message: JSON.stringify(message)
|
|
4163
4231
|
};
|
|
@@ -4271,8 +4339,17 @@
|
|
|
4271
4339
|
}));
|
|
4272
4340
|
});
|
|
4273
4341
|
|
|
4342
|
+
var ASC = 'asc';
|
|
4343
|
+
var DESC = 'desc';
|
|
4344
|
+
|
|
4345
|
+
var sortOrders = /*#__PURE__*/Object.freeze({
|
|
4346
|
+
__proto__: null,
|
|
4347
|
+
ASC: ASC,
|
|
4348
|
+
DESC: DESC
|
|
4349
|
+
});
|
|
4350
|
+
|
|
4274
4351
|
var CHATS_PAGINATION_MAX_LIMIT = 25;
|
|
4275
|
-
var init = function init(config, env) {
|
|
4352
|
+
var init = function init(config, env, licenseId) {
|
|
4276
4353
|
if (env === void 0) {
|
|
4277
4354
|
env = 'production';
|
|
4278
4355
|
}
|
|
@@ -4287,12 +4364,13 @@
|
|
|
4287
4364
|
}));
|
|
4288
4365
|
var emitter = createMitt();
|
|
4289
4366
|
var socket = createSocketClient(store);
|
|
4290
|
-
var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth(instanceConfig, env);
|
|
4367
|
+
var auth = typeof identityProvider === 'function' ? identityProvider() : createAuth(instanceConfig, licenseId, env);
|
|
4291
4368
|
store.addSideEffectsHandler(createSideEffectsHandler({
|
|
4292
4369
|
emitter: emitter,
|
|
4293
4370
|
socket: socket,
|
|
4294
4371
|
auth: auth,
|
|
4295
|
-
customerDataProvider: customerDataProvider
|
|
4372
|
+
customerDataProvider: customerDataProvider,
|
|
4373
|
+
licenseId: licenseId
|
|
4296
4374
|
}));
|
|
4297
4375
|
socketListener(store, socket);
|
|
4298
4376
|
var sendRequestAction$1 = sendRequestAction.bind(null, store);
|
|
@@ -4491,7 +4569,7 @@
|
|
|
4491
4569
|
resumeChat: function resumeChat(data) {
|
|
4492
4570
|
log({
|
|
4493
4571
|
env: env,
|
|
4494
|
-
|
|
4572
|
+
organizationId: config.organizationId,
|
|
4495
4573
|
eventName: 'chat_started'
|
|
4496
4574
|
});
|
|
4497
4575
|
return sendRequestAction$1(sendRequest(RESUME_CHAT, parseResumeChatData(data)));
|
|
@@ -4507,9 +4585,6 @@
|
|
|
4507
4585
|
}(function (params) {
|
|
4508
4586
|
return sendRequestAction$1(sendEvent(params));
|
|
4509
4587
|
}),
|
|
4510
|
-
sendTicketForm: function sendTicketForm$1(options) {
|
|
4511
|
-
return sendTicketForm(store, auth, options);
|
|
4512
|
-
},
|
|
4513
4588
|
sendRichMessagePostback: function sendRichMessagePostback(_ref15) {
|
|
4514
4589
|
var chatId = _ref15.chatId,
|
|
4515
4590
|
threadId = _ref15.threadId,
|
|
@@ -4546,7 +4621,7 @@
|
|
|
4546
4621
|
}
|
|
4547
4622
|
log({
|
|
4548
4623
|
env: env,
|
|
4549
|
-
|
|
4624
|
+
organizationId: config.organizationId,
|
|
4550
4625
|
eventName: 'chat_started'
|
|
4551
4626
|
});
|
|
4552
4627
|
return sendRequestAction$1(sendRequest(START_CHAT, parseStartChatData(data)));
|
|
@@ -4610,7 +4685,9 @@
|
|
|
4610
4685
|
return api;
|
|
4611
4686
|
};
|
|
4612
4687
|
|
|
4688
|
+
exports.connectionStatuses = connectionStatuses;
|
|
4613
4689
|
exports.debug = debug;
|
|
4690
|
+
exports.eventTypes = eventTypes;
|
|
4614
4691
|
exports.init = init;
|
|
4615
4692
|
exports.parseCustomEvent = parseCustomEvent;
|
|
4616
4693
|
exports.parseEvent = parseEvent$1;
|
|
@@ -4621,6 +4698,11 @@
|
|
|
4621
4698
|
exports.parseMessage = parseMessage;
|
|
4622
4699
|
exports.parseRichMessage = parseRichMessage;
|
|
4623
4700
|
exports.parseSystemMessage = parseSystemMessage;
|
|
4701
|
+
exports.serverDisconnectionReasons = serverDisconnectionReasons;
|
|
4702
|
+
exports.serverErrorCodes = serverErrorCodes;
|
|
4703
|
+
exports.serverPushActions = serverPushActions;
|
|
4704
|
+
exports.sortOrders = sortOrders;
|
|
4705
|
+
exports.userTypes = userTypes;
|
|
4624
4706
|
|
|
4625
4707
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4626
4708
|
|