@wildix/xbees-connect 1.2.12 → 1.2.14

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.
Files changed (40) hide show
  1. package/dist-cjs/index.js +26 -0
  2. package/dist-cjs/package.json +49 -0
  3. package/dist-cjs/src/Client.js +358 -0
  4. package/dist-cjs/src/enums/index.js +52 -0
  5. package/dist-cjs/src/helpers/ClientParams.js +35 -0
  6. package/dist-cjs/src/helpers/LocalStorageManager.js +74 -0
  7. package/dist-cjs/src/helpers/MessageListener.js +85 -0
  8. package/dist-cjs/src/helpers/PostMessageController.js +48 -0
  9. package/dist-cjs/src/helpers/PostMessageControllerNative.js +47 -0
  10. package/dist-cjs/src/helpers/PostMessageControllerWeb.js +36 -0
  11. package/dist-cjs/src/helpers/TechnicalSupport.js +30 -0
  12. package/dist-cjs/src/utils/getPbxDomainFromJwt.js +18 -0
  13. package/dist-cjs/src/utils/url/getUrlSearchParamsMap.js +7 -0
  14. package/dist-cjs/types/Callback.js +2 -0
  15. package/dist-cjs/types/Client.js +2 -0
  16. package/dist-cjs/types/Contact.js +2 -0
  17. package/dist-cjs/types/Event.js +3 -0
  18. package/dist-cjs/types/Json.js +2 -0
  19. package/dist-cjs/types/Listener.js +2 -0
  20. package/dist-cjs/types/Message.js +2 -0
  21. package/dist-cjs/types/MessageSender.js +2 -0
  22. package/dist-cjs/types/Payload.js +2 -0
  23. package/dist-cjs/types/Platform.js +9 -0
  24. package/dist-cjs/types/Resolver.js +2 -0
  25. package/dist-cjs/types/Storage.js +2 -0
  26. package/dist-cjs/types/Toast.js +2 -0
  27. package/dist-cjs/types/WorkVariant.js +2 -0
  28. package/dist-cjs/types/conversation.js +2 -0
  29. package/dist-cjs/types/index.js +5 -0
  30. package/dist-es/package.json +3 -2
  31. package/dist-es/src/Client.js +4 -5
  32. package/dist-es/types/Platform.js +6 -1
  33. package/dist-es/types/index.js +1 -1
  34. package/dist-types/src/Client.d.ts +2 -1
  35. package/dist-types/types/Client.d.ts +2 -1
  36. package/dist-types/types/Event.d.ts +5 -0
  37. package/dist-types/types/Payload.d.ts +1 -0
  38. package/dist-types/types/Platform.d.ts +5 -1
  39. package/dist-types/types/index.d.ts +1 -1
  40. package/package.json +4 -3
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.UrlParams = exports.ClientEventType = exports.EventType = void 0;
18
+ const Client_1 = require("./src/Client");
19
+ var enums_1 = require("./src/enums");
20
+ Object.defineProperty(exports, "EventType", { enumerable: true, get: function () { return enums_1.EventType; } });
21
+ var enums_2 = require("./src/enums");
22
+ Object.defineProperty(exports, "ClientEventType", { enumerable: true, get: function () { return enums_2.ClientEventType; } });
23
+ var enums_3 = require("./src/enums");
24
+ Object.defineProperty(exports, "UrlParams", { enumerable: true, get: function () { return enums_3.UrlParams; } });
25
+ __exportStar(require("./types"), exports);
26
+ exports.default = Client_1.Client;
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@wildix/xbees-connect",
3
+ "version": "1.2.14",
4
+ "description": "This library provides easy communication between x-bees and integrated web applications",
5
+ "author": "dimitri.chernykh <dimitri.chernykh@wildix.com>",
6
+ "homepage": "",
7
+ "sideEffects": false,
8
+ "license": "MIT",
9
+ "main": "./dist-cjs/index.js",
10
+ "types": "./dist-types/index.d.ts",
11
+ "module": "./dist-es/index.js",
12
+ "scripts": {
13
+ "build": "yarn clean && yarn build:es && yarn build:cjs && yarn build:types",
14
+ "build:es": "tsc -p tsconfig.es.json",
15
+ "build:cjs": "tsc -p tsconfig.cjs.json",
16
+ "build:types": "tsc -p tsconfig.types.json",
17
+ "build:docs": "typedoc",
18
+ "lint": "eslint . && tsc --noEmit",
19
+ "lint:fix": "eslint . --fix",
20
+ "clean": "rimraf ./dist-* && rimraf *.tsbuildinfo"
21
+ },
22
+ "files": [
23
+ "dist-*/**"
24
+ ],
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git@git.wildix.com:xbs/sdk-ui.git"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "devDependencies": {
33
+ "@wildix/eslint-config-style-guide": "^1.2.2",
34
+ "eslint": "^8.55.0",
35
+ "rimraf": "^5.0.5",
36
+ "typescript": "^5.3.3"
37
+ },
38
+ "parserOptions": {
39
+ "project": [
40
+ "./tsconfig.json"
41
+ ]
42
+ },
43
+ "engines": {
44
+ "node": ">=16"
45
+ },
46
+ "dependencies": {
47
+ "jwt-decode": "^4.0.0"
48
+ }
49
+ }
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Client = void 0;
7
+ const package_json_1 = __importDefault(require("../package.json"));
8
+ const types_1 = require("../types");
9
+ const enums_1 = require("./enums");
10
+ const LocalStorageManager_1 = __importDefault(require("./helpers/LocalStorageManager"));
11
+ const MessageListener_1 = require("./helpers/MessageListener");
12
+ const PostMessageControllerNative_1 = __importDefault(require("./helpers/PostMessageControllerNative"));
13
+ const PostMessageControllerWeb_1 = __importDefault(require("./helpers/PostMessageControllerWeb"));
14
+ const TechnicalSupport_1 = __importDefault(require("./helpers/TechnicalSupport"));
15
+ const getPbxDomainFromJwt_1 = require("./utils/getPbxDomainFromJwt");
16
+ const getUrlSearchParamsMap_1 = require("./utils/url/getUrlSearchParamsMap");
17
+ /**
18
+ * Client provides functionality of communication between xBees and integrated web applications via iFrame or ReactNative WebView
19
+ * integration creates na instance with new Client()
20
+ * */
21
+ class Client {
22
+ static instance = null;
23
+ static getInstance() {
24
+ if (!this.instance) {
25
+ this.instance = new Client();
26
+ }
27
+ return this.instance;
28
+ }
29
+ static initialize(renderer) {
30
+ if (this.getInstance().showsUi()) {
31
+ try {
32
+ void renderer();
33
+ }
34
+ catch (error) {
35
+ console.error('Error on init rendering widget:', error);
36
+ }
37
+ }
38
+ }
39
+ worker;
40
+ listeners = [];
41
+ useSubscription = false;
42
+ userToken = '';
43
+ pbxDomain = '';
44
+ visible = false;
45
+ userEmail;
46
+ referrer;
47
+ needAuthorize;
48
+ isParentReactNativeWebView;
49
+ iframeId;
50
+ variant = null;
51
+ localStorageManager = LocalStorageManager_1.default.getInstance();
52
+ userExtension;
53
+ constructor() {
54
+ const params = (0, getUrlSearchParamsMap_1.getUrlSearchParamsMap)();
55
+ this.iframeId = params.get(enums_1.UrlParams.ID);
56
+ this.variant = params.get(enums_1.UrlParams.VARIANT);
57
+ this.userEmail = params.get(enums_1.UrlParams.USER);
58
+ this.userExtension = params.get(enums_1.UrlParams.EXTENSION);
59
+ this.referrer = params.get(enums_1.UrlParams.REFERRER);
60
+ this.needAuthorize = params.has(enums_1.UrlParams.AUTHORIZE);
61
+ // @ts-expect-error window.ReactNativeWebView will be provided by ReactNative WebView
62
+ this.isParentReactNativeWebView = !!window.ReactNativeWebView;
63
+ this.worker = this.isParentReactNativeWebView ? new PostMessageControllerNative_1.default() : new PostMessageControllerWeb_1.default();
64
+ this.addEventListener(enums_1.EventType.PBX_TOKEN, (token) => {
65
+ this.userToken = token;
66
+ this.pbxDomain = (0, getPbxDomainFromJwt_1.getPbxDomainFromJwt)(token);
67
+ });
68
+ this.addEventListener(enums_1.EventType.VISIBILITY, (isActive) => (this.visible = isActive));
69
+ }
70
+ sendAsync(data) {
71
+ return this.worker.sendAsync({
72
+ ...data,
73
+ iframeId: this.iframeId,
74
+ });
75
+ }
76
+ async sendAsyncErrorSafe(data) {
77
+ try {
78
+ return await this.sendAsync(data);
79
+ }
80
+ catch (error) {
81
+ console.debug('send error - type:', error);
82
+ }
83
+ }
84
+ parseMessage(message) {
85
+ try {
86
+ const data = typeof message.data === 'string' ? MessageListener_1.MessageListener.parseJSON(message.data) : message.data;
87
+ if (!data?.type) {
88
+ return null;
89
+ }
90
+ return data;
91
+ }
92
+ catch (error) {
93
+ console.error('parse message error', error);
94
+ return null;
95
+ }
96
+ }
97
+ onMessage(message) {
98
+ const data = this.parseMessage(message);
99
+ if (!data) {
100
+ return;
101
+ }
102
+ const { type, payload } = data;
103
+ this.listeners.forEach(({ eventName, callback }) => {
104
+ if (eventName === type) {
105
+ if (type === enums_1.EventType.ADD_CALL) {
106
+ const callbackFn = callback;
107
+ callbackFn(payload);
108
+ }
109
+ else {
110
+ // @ts-expect-error TODO: check the type for Callback<?>
111
+ const callbackFn = callback;
112
+ callbackFn(payload);
113
+ }
114
+ }
115
+ });
116
+ }
117
+ sendDailyIntegrationUsageAnalytics() {
118
+ const sendedUsageAnalyticsDate = this.getFromStorage('sendedUsageAnalyticsDate');
119
+ const today = new Date().toDateString();
120
+ if (sendedUsageAnalyticsDate !== today) {
121
+ this.sendAnalytics('xBeesIntegrationUsage');
122
+ this.saveToStorage('sendedUsageAnalyticsDate', today);
123
+ }
124
+ }
125
+ ready(props = types_1.SupportedPlatformVariant.ALL) {
126
+ const payload = typeof props === 'string' ? { version: this.version(), platform: props } : { version: this.version(), ...props };
127
+ return this.sendAsync({
128
+ type: enums_1.ClientEventType.READY,
129
+ payload,
130
+ });
131
+ }
132
+ version() {
133
+ return package_json_1.default.version;
134
+ }
135
+ isPlatformNative() {
136
+ return this.isParentReactNativeWebView;
137
+ }
138
+ isPlatformWeb() {
139
+ return !this.isParentReactNativeWebView;
140
+ }
141
+ isOpenedFromXBees() {
142
+ return this.isParentReactNativeWebView || (!!parent && parent !== window);
143
+ }
144
+ getUserPbxToken() {
145
+ return this.userToken;
146
+ }
147
+ getUserEmail() {
148
+ return this.userEmail;
149
+ }
150
+ getPbxDomain() {
151
+ return this.pbxDomain;
152
+ }
153
+ getUserExtension() {
154
+ return this.userExtension;
155
+ }
156
+ getReferrer() {
157
+ return this.referrer;
158
+ }
159
+ isVisible() {
160
+ return this.visible;
161
+ }
162
+ getBackToAppUrl() {
163
+ if (Client.getInstance().isPlatformNative()) {
164
+ return `com.wildix.rnc://integrations/${this.iframeId}`;
165
+ }
166
+ return `${this.referrer}/integrations/${this.iframeId}`;
167
+ }
168
+ isDataOnly() {
169
+ return this.variant === 'no-ui' || this.variant === 'daemon';
170
+ }
171
+ isSetupDialog() {
172
+ return this.variant === 'd' || this.variant === 'dialog';
173
+ }
174
+ showsUi() {
175
+ return !this.isDataOnly();
176
+ }
177
+ isActivationOnly() {
178
+ return this.needAuthorize;
179
+ }
180
+ getContext() {
181
+ return this.sendAsync({ type: enums_1.ClientEventType.CONTEXT });
182
+ }
183
+ getCurrentContact() {
184
+ return this.sendAsync({ type: enums_1.ClientEventType.CURRENT_CONTACT });
185
+ }
186
+ getCurrentConversation() {
187
+ return this.sendAsync({ type: enums_1.ClientEventType.CURRENT_CONVERSATION });
188
+ }
189
+ contactUpdated(query, contact) {
190
+ return this.sendAsync({ type: enums_1.ClientEventType.CONTACT_CREATE_OR_UPDATE, payload: { query, contact } });
191
+ }
192
+ contactMatchUpdated(query, contact) {
193
+ return this.sendAsync({ type: enums_1.ClientEventType.CONTACT_MATCH_UPDATE, payload: { query, contact } });
194
+ }
195
+ getThemeMode() {
196
+ return this.sendAsync({ type: enums_1.ClientEventType.THEME_MODE });
197
+ }
198
+ getTheme() {
199
+ return this.sendAsync({ type: enums_1.ClientEventType.THEME });
200
+ }
201
+ startCall(phoneNumber) {
202
+ return this.sendAsync({
203
+ type: enums_1.ClientEventType.START_CALL,
204
+ payload: { phoneNumber },
205
+ });
206
+ }
207
+ reboot() {
208
+ return this.sendAsync({ type: enums_1.ClientEventType.REBOOT });
209
+ }
210
+ setViewport(payload) {
211
+ return this.sendAsync({ type: enums_1.ClientEventType.VIEW_PORT, payload });
212
+ }
213
+ toClipboard(payload) {
214
+ return this.sendAsync({ type: enums_1.ClientEventType.TO_CLIPBOARD, payload });
215
+ }
216
+ showToast(message, severity = 'INFO') {
217
+ return this.sendAsync({ type: enums_1.ClientEventType.TOAST, payload: { message, severity } });
218
+ }
219
+ isNotAuthorized() {
220
+ return this.sendAsync({ type: enums_1.ClientEventType.NOT_AUTHORIZED });
221
+ }
222
+ isAuthorized() {
223
+ this.sendDailyIntegrationUsageAnalytics();
224
+ return this.sendAsync({ type: enums_1.ClientEventType.AUTHORIZED });
225
+ }
226
+ addEventListener(eventName, callback) {
227
+ if (!this.useSubscription) {
228
+ this.useSubscription = true;
229
+ window.addEventListener('message', this.onMessage.bind(this));
230
+ }
231
+ const foundThisEvent = this.listeners.find(({ eventName: _eventName, callback: _callback }) => eventName === _eventName && Object.is(callback, _callback));
232
+ if (!foundThisEvent) {
233
+ this.listeners.push({ eventName, callback });
234
+ }
235
+ return () => {
236
+ this.removeEventListener(eventName, callback);
237
+ };
238
+ }
239
+ removeEventListener(eventName, callback) {
240
+ this.listeners = this.listeners.filter(({ eventName: _eventName, callback: _callback }) => !(Object.is(callback, _callback) && (!eventName ? true : eventName === _eventName)));
241
+ if (this.useSubscription && !this.listeners.length) {
242
+ this.useSubscription = false;
243
+ window.removeEventListener('message', this.onMessage.bind(this));
244
+ }
245
+ }
246
+ off(callback) {
247
+ this.localStorageManager.removeOnStorage(callback);
248
+ this.removeEventListener(null, callback);
249
+ }
250
+ onRedirectQuery(callback) {
251
+ return this.addEventListener(enums_1.EventType.REDIRECT_QUERY, callback);
252
+ }
253
+ onCallEnded(callback) {
254
+ return this.addEventListener(enums_1.EventType.TERMINATE_CALL, callback);
255
+ }
256
+ onCallStarted(callback) {
257
+ return this.addEventListener(enums_1.EventType.ADD_CALL, callback);
258
+ }
259
+ onPbxTokenChange(callback) {
260
+ return this.addEventListener(enums_1.EventType.PBX_TOKEN, callback);
261
+ }
262
+ getXBeesToken() {
263
+ return this.sendAsync({ type: enums_1.ClientEventType.TOKEN });
264
+ }
265
+ onSuggestContacts(callback) {
266
+ // send event to x-bees
267
+ void this.sendAsyncErrorSafe({
268
+ type: enums_1.ClientEventType.CONTACTS_AUTO_SUGGEST_IS_SUPPORTED,
269
+ });
270
+ return this.addEventListener(enums_1.EventType.GET_CONTACTS_AUTO_SUGGEST, (query) => {
271
+ const resolve = (contacts) => this.sendAsync({
272
+ type: enums_1.ClientEventType.CONTACTS_AUTO_SUGGEST,
273
+ payload: {
274
+ contacts,
275
+ query,
276
+ },
277
+ });
278
+ const reject = (reason) => {
279
+ console.debug(reason);
280
+ };
281
+ try {
282
+ callback(query, resolve, reject);
283
+ }
284
+ catch (error) {
285
+ reject(`${error}`);
286
+ }
287
+ });
288
+ }
289
+ onLookupAndMatchContact(callback) {
290
+ // send event to x-bees
291
+ void this.sendAsyncErrorSafe({
292
+ type: enums_1.ClientEventType.CONTACT_LOOK_UP_AND_MATCH_IS_SUPPORTED,
293
+ });
294
+ return this.addEventListener(enums_1.EventType.GET_LOOK_UP_AND_MATCH, (query) => {
295
+ const resolve = (contact) => this.sendAsync({
296
+ type: enums_1.ClientEventType.CONTACT_LOOKUP_AND_MATCH,
297
+ payload: {
298
+ contact,
299
+ query,
300
+ },
301
+ });
302
+ const reject = (reason) => {
303
+ console.debug(reason);
304
+ void this.sendAsync({
305
+ type: enums_1.ClientEventType.CONTACT_LOOKUP_AND_MATCH_NOT_FOUND,
306
+ payload: { query },
307
+ });
308
+ };
309
+ try {
310
+ callback(query, resolve, reject);
311
+ }
312
+ catch (error) {
313
+ reject(`${error}`);
314
+ }
315
+ });
316
+ }
317
+ onThemeChange(callback) {
318
+ return this.addEventListener(enums_1.EventType.USE_THEME, callback);
319
+ }
320
+ getFromStorage(key) {
321
+ return this.localStorageManager.retrieve(key);
322
+ }
323
+ saveToStorage(key, value) {
324
+ this.localStorageManager.save(key, value);
325
+ }
326
+ deleteFromStorage(key) {
327
+ this.localStorageManager.delete(key);
328
+ }
329
+ onStorage(listener) {
330
+ return this.localStorageManager.onStorage(listener);
331
+ }
332
+ onLogout(callback) {
333
+ // send event to x-bees
334
+ void this.sendAsync({
335
+ type: enums_1.ClientEventType.LOGOUT_IS_SUPPORTED,
336
+ });
337
+ return this.addEventListener(enums_1.EventType.LOGOUT, callback);
338
+ }
339
+ sendAnalytics(eventName, params) {
340
+ void this.sendAsync({
341
+ type: enums_1.ClientEventType.SEND_ANALYTICS,
342
+ payload: {
343
+ eventName,
344
+ params,
345
+ },
346
+ });
347
+ }
348
+ setIntegrationStorageKey(integrationKey) {
349
+ this.localStorageManager.setIntegrationKey(integrationKey);
350
+ }
351
+ getTechnicalSupport() {
352
+ return TechnicalSupport_1.default.getInstance();
353
+ }
354
+ onVisibilityChange(callback) {
355
+ return this.addEventListener(enums_1.EventType.VISIBILITY, callback);
356
+ }
357
+ }
358
+ exports.Client = Client;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UrlParams = exports.ClientEventType = exports.EventType = void 0;
4
+ var EventType;
5
+ (function (EventType) {
6
+ EventType["GET_CONTACTS_AUTO_SUGGEST"] = "xBeesGetContactsAutoSuggest";
7
+ EventType["GET_LOOK_UP_AND_MATCH"] = "xBeesGetLookUpAndMatch";
8
+ EventType["ADD_CALL"] = "xBeesAddCall";
9
+ EventType["TERMINATE_CALL"] = "xBeesTerminateCall";
10
+ EventType["USE_THEME"] = "xBeesUseTheme";
11
+ EventType["PBX_TOKEN"] = "xBeesPbxToken";
12
+ EventType["REDIRECT_QUERY"] = "xBeesRedirectQuery";
13
+ EventType["LOGOUT"] = "xBeesLogout";
14
+ EventType["VISIBILITY"] = "xBeesVisibility";
15
+ })(EventType || (exports.EventType = EventType = {}));
16
+ var ClientEventType;
17
+ (function (ClientEventType) {
18
+ ClientEventType["READY"] = "xBeesReady";
19
+ ClientEventType["CONTEXT"] = "xBeesContext";
20
+ ClientEventType["CURRENT_CONTACT"] = "xBeesCurrentContact";
21
+ ClientEventType["CURRENT_CONVERSATION"] = "xBeesCurrentConversation";
22
+ ClientEventType["THEME_MODE"] = "xBeesThemeMode";
23
+ ClientEventType["THEME"] = "xBeesTheme";
24
+ ClientEventType["START_CALL"] = "xBeesStartCall";
25
+ ClientEventType["VIEW_PORT"] = "xBeesViewPort";
26
+ ClientEventType["REBOOT"] = "xBeesReboot";
27
+ ClientEventType["TO_CLIPBOARD"] = "xBeesToClipboard";
28
+ ClientEventType["TOAST"] = "xBeesShowToast";
29
+ ClientEventType["NOT_AUTHORIZED"] = "xBeesNotAuthorized";
30
+ ClientEventType["AUTHORIZED"] = "xBeesAuthorized";
31
+ ClientEventType["TOKEN"] = "xBeesToken";
32
+ ClientEventType["CONTACTS_AUTO_SUGGEST"] = "xBeesContactsAutoSuggest";
33
+ ClientEventType["CONTACT_LOOKUP_AND_MATCH"] = "xBeesContactLookupAndMatch";
34
+ ClientEventType["CONTACT_LOOKUP_AND_MATCH_NOT_FOUND"] = "xBeesContactLookupAndMatchNotFound";
35
+ ClientEventType["CONTACT_CREATE_OR_UPDATE"] = "xBeesContactCreateOrUpdate";
36
+ ClientEventType["CONTACT_MATCH_UPDATE"] = "xBeesContactMatchUpdate";
37
+ ClientEventType["CONTACTS_AUTO_SUGGEST_IS_SUPPORTED"] = "xBeesContactsAutoSuggestIsSupported";
38
+ ClientEventType["CONTACT_LOOK_UP_AND_MATCH_IS_SUPPORTED"] = "xBeesContactLookupAndMatchIsSupported";
39
+ ClientEventType["LOGOUT_IS_SUPPORTED"] = "xBeesLogoutIsSupported";
40
+ ClientEventType["SEND_ANALYTICS"] = "xBeesSendAnalytics";
41
+ ClientEventType["SEND_TECHNICAL_SUPPORT_INFORMATION"] = "xBeesSendTechInfo";
42
+ })(ClientEventType || (exports.ClientEventType = ClientEventType = {}));
43
+ var UrlParams;
44
+ (function (UrlParams) {
45
+ UrlParams["TOKEN"] = "t";
46
+ UrlParams["ID"] = "i";
47
+ UrlParams["VARIANT"] = "v";
48
+ UrlParams["USER"] = "u";
49
+ UrlParams["EXTENSION"] = "e";
50
+ UrlParams["REFERRER"] = "r";
51
+ UrlParams["AUTHORIZE"] = "a";
52
+ })(UrlParams || (exports.UrlParams = UrlParams = {}));
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const enums_1 = require("../enums");
4
+ const getUrlSearchParamsMap_1 = require("../utils/url/getUrlSearchParamsMap");
5
+ class ClientParams {
6
+ static instance = null;
7
+ static getInstance() {
8
+ if (!this.instance) {
9
+ this.instance = new ClientParams();
10
+ }
11
+ return this.instance;
12
+ }
13
+ userToken;
14
+ userEmail;
15
+ referrer;
16
+ needAuthorize;
17
+ iframeId;
18
+ variant = null;
19
+ userExtension = null;
20
+ constructor() {
21
+ const params = (0, getUrlSearchParamsMap_1.getUrlSearchParamsMap)();
22
+ this.iframeId = params.get(enums_1.UrlParams.ID);
23
+ this.variant = params.get(enums_1.UrlParams.VARIANT);
24
+ this.userEmail = params.get(enums_1.UrlParams.USER);
25
+ this.userExtension = params.get(enums_1.UrlParams.EXTENSION);
26
+ this.userToken = params.get(enums_1.UrlParams.TOKEN);
27
+ this.referrer = params.get(enums_1.UrlParams.REFERRER);
28
+ this.needAuthorize = params.has(enums_1.UrlParams.AUTHORIZE);
29
+ }
30
+ toString() {
31
+ const { userToken, ...props } = this;
32
+ return JSON.stringify({ ...props, userToken: userToken && `...${userToken.slice(-5)}` });
33
+ }
34
+ }
35
+ exports.default = ClientParams;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class LocalStorageManager {
4
+ static instance = null;
5
+ static getInstance() {
6
+ if (!this.instance) {
7
+ this.instance = new LocalStorageManager();
8
+ }
9
+ return this.instance;
10
+ }
11
+ listeners = new Set();
12
+ integrationKey = '';
13
+ setIntegrationKey(integrationKey) {
14
+ this.integrationKey = integrationKey;
15
+ }
16
+ getStorageKey(key) {
17
+ return !this.integrationKey ? key : `${this.integrationKey}_${key}`;
18
+ }
19
+ getKey(key) {
20
+ return !this.integrationKey ? key : key.slice(`${this.integrationKey}_`.length);
21
+ }
22
+ constructor() {
23
+ if (this.shouldUseIntegrationKey()) {
24
+ this.integrationKey = this.calculateIntegrationKey();
25
+ }
26
+ window.addEventListener('storage', (event) => {
27
+ if (!event.key)
28
+ return;
29
+ const key = this.getKey(event.key);
30
+ this.listeners.forEach((listener) => listener({ ...event, key }));
31
+ });
32
+ }
33
+ calculateIntegrationKey() {
34
+ const pattern = /^\/([^/]+)\/index\.html$/;
35
+ const match = window.location.pathname.match(pattern);
36
+ if (match && match[1]) {
37
+ const [, key] = match;
38
+ return key;
39
+ }
40
+ return '';
41
+ }
42
+ shouldUseIntegrationKey() {
43
+ return window.location.host.endsWith('integrations.x-bees.com');
44
+ }
45
+ save(key, value) {
46
+ // Save data to localStorage
47
+ localStorage.setItem(this.getStorageKey(key), typeof value === 'string' ? value : JSON.stringify(value));
48
+ }
49
+ delete(key) {
50
+ // Save data to localStorage
51
+ localStorage.removeItem(this.getStorageKey(key));
52
+ }
53
+ retrieve(key) {
54
+ // Retrieve data from localStorage
55
+ const data = localStorage.getItem(this.getStorageKey(key));
56
+ try {
57
+ return !data ? data : JSON.parse(data);
58
+ }
59
+ catch (error) {
60
+ return data;
61
+ }
62
+ }
63
+ get(key) {
64
+ return localStorage.getItem(this.getStorageKey(key));
65
+ }
66
+ onStorage(listener) {
67
+ this.listeners.add(listener);
68
+ return () => this.removeOnStorage(listener);
69
+ }
70
+ removeOnStorage(listener) {
71
+ this.listeners.delete(listener);
72
+ }
73
+ }
74
+ exports.default = LocalStorageManager;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageListener = void 0;
4
+ const enums_1 = require("../enums");
5
+ class MessageListener {
6
+ static instance = null;
7
+ static getInstance() {
8
+ if (!this.instance) {
9
+ this.instance = new MessageListener();
10
+ }
11
+ return this.instance;
12
+ }
13
+ listeners = [];
14
+ useSubscription = false;
15
+ // eslint-disable-next-line
16
+ constructor() { }
17
+ parseMessage(message) {
18
+ try {
19
+ const data = typeof message.data === 'string' ? MessageListener.parseJSON(message.data) : message.data;
20
+ if (!data?.type) {
21
+ return null;
22
+ }
23
+ return data;
24
+ }
25
+ catch (error) {
26
+ console.error('parse message error', error);
27
+ return null;
28
+ }
29
+ }
30
+ static parseJSON(messageData) {
31
+ const trimmedData = messageData.trim();
32
+ if (!trimmedData || !trimmedData.startsWith('{') || !trimmedData.endsWith('}')) {
33
+ return null;
34
+ }
35
+ return JSON.parse(trimmedData);
36
+ }
37
+ onMessage = (message) => {
38
+ if (window.location.host === message.origin || window === message.source) {
39
+ console.debug(`onMessage skipped ${window.location.host} - ${message.origin} - ${window === message.source} - ${message}`);
40
+ // skip events started from integration itself if any
41
+ return;
42
+ }
43
+ const data = this.parseMessage(message);
44
+ if (!data) {
45
+ console.debug('onMessage skipped', message);
46
+ return;
47
+ }
48
+ const { type, payload } = data;
49
+ console.debug(`onMessage call - ${type} - ${payload}`);
50
+ this.listeners.forEach(({ eventName, callback }) => {
51
+ if (eventName === type) {
52
+ if (type === enums_1.EventType.ADD_CALL) {
53
+ const callbackFn = callback;
54
+ callbackFn(payload);
55
+ }
56
+ else {
57
+ // @ts-expect-error TODO: check the type for Callback<?>
58
+ const callbackFn = callback;
59
+ callbackFn(payload);
60
+ }
61
+ }
62
+ });
63
+ };
64
+ listen(eventName, callback) {
65
+ if (!this.useSubscription) {
66
+ this.useSubscription = true;
67
+ window.addEventListener('message', this.onMessage);
68
+ }
69
+ const foundThisEvent = this.listeners.find(({ eventName: _eventName, callback: _callback }) => eventName === _eventName && Object.is(callback, _callback));
70
+ if (!foundThisEvent) {
71
+ this.listeners.push({ eventName, callback });
72
+ }
73
+ return () => {
74
+ this.off(eventName, callback);
75
+ };
76
+ }
77
+ off(eventName, callback) {
78
+ this.listeners = this.listeners.filter(({ eventName: _eventName, callback: _callback }) => !(Object.is(callback, _callback) && (!eventName ? true : eventName === _eventName)));
79
+ if (this.useSubscription && !this.listeners.length) {
80
+ this.useSubscription = false;
81
+ window.removeEventListener('message', this.onMessage);
82
+ }
83
+ }
84
+ }
85
+ exports.MessageListener = MessageListener;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ClientParams_1 = __importDefault(require("./ClientParams"));
7
+ const PostMessageControllerNative_1 = __importDefault(require("./PostMessageControllerNative"));
8
+ const PostMessageControllerWeb_1 = __importDefault(require("./PostMessageControllerWeb"));
9
+ class PostMessageController {
10
+ static instance = null;
11
+ static getInstance() {
12
+ if (!this.instance) {
13
+ this.instance = new PostMessageController();
14
+ }
15
+ return this.instance;
16
+ }
17
+ worker;
18
+ isParentReactNativeWebView;
19
+ constructor() {
20
+ // @ts-expect-error window.ReactNativeWebView will be provided by ReactNative WebView
21
+ this.isParentReactNativeWebView = !!window.ReactNativeWebView;
22
+ this.worker = this.isParentReactNativeWebView ? new PostMessageControllerNative_1.default() : new PostMessageControllerWeb_1.default();
23
+ }
24
+ sendAsync(data) {
25
+ return this.worker.sendAsync({
26
+ ...data,
27
+ iframeId: ClientParams_1.default.getInstance().iframeId,
28
+ });
29
+ }
30
+ async sendAsyncErrorSafe(data) {
31
+ try {
32
+ return await this.sendAsync(data);
33
+ }
34
+ catch (error) {
35
+ console.debug('send error - type:', error);
36
+ }
37
+ }
38
+ isPlatformNative() {
39
+ return this.isParentReactNativeWebView;
40
+ }
41
+ isPlatformWeb() {
42
+ return !this.isParentReactNativeWebView;
43
+ }
44
+ isOpenedFromXBees() {
45
+ return this.isParentReactNativeWebView || (!!parent && parent !== window);
46
+ }
47
+ }
48
+ exports.default = PostMessageController;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class PostMessageControllerNative {
4
+ target;
5
+ timeout = 10000;
6
+ constructor() {
7
+ // @ts-expect-error window.ReactNativeWebView will be provided by ReactNative WebView
8
+ this.target = window.ReactNativeWebView;
9
+ }
10
+ sendAsync(data) {
11
+ if (!this.target) {
12
+ return Promise.reject('your application should be wrapped within iframe to xbees-connect perform the connection');
13
+ }
14
+ return this.send(this.target, data);
15
+ }
16
+ send(target, message) {
17
+ return new Promise((resolve, reject) => {
18
+ const channel = new MessageChannel();
19
+ const listener = (event) => {
20
+ try {
21
+ const parsedData = JSON.parse(event.data);
22
+ if (parsedData?.type === message.type) {
23
+ clearTimeout(timeout);
24
+ window.removeEventListener('message', listener);
25
+ if (!parsedData.errorMessage) {
26
+ resolve(parsedData);
27
+ }
28
+ else {
29
+ reject(parsedData);
30
+ }
31
+ }
32
+ }
33
+ catch (error) {
34
+ console.error('on receive response Error', error);
35
+ }
36
+ };
37
+ window.addEventListener('message', listener);
38
+ const timeout = setTimeout(() => {
39
+ channel.port1.close();
40
+ window.removeEventListener('message', listener);
41
+ reject({ errorMessage: 'timeout', type: message.type });
42
+ }, this.timeout);
43
+ target.postMessage(JSON.stringify(message));
44
+ });
45
+ }
46
+ }
47
+ exports.default = PostMessageControllerNative;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class PostMessageControllerWeb {
4
+ target;
5
+ timeout = 10000;
6
+ constructor() {
7
+ this.target = parent;
8
+ }
9
+ sendAsync(data) {
10
+ if (!this.target || this.target === window) {
11
+ return Promise.reject('your application should be wrapped within iframe to xbees-connect perform the connection');
12
+ }
13
+ return this.send(this.target, data);
14
+ }
15
+ send(target, payload) {
16
+ return new Promise((resolve, reject) => {
17
+ const channel = new MessageChannel();
18
+ const timeout = setTimeout(() => {
19
+ channel.port1.close();
20
+ reject({ errorMessage: 'timeout', type: payload.type });
21
+ }, this.timeout);
22
+ channel.port1.onmessage = ({ data }) => {
23
+ clearTimeout(timeout);
24
+ channel.port1.close();
25
+ if (!data.errorMessage) {
26
+ resolve(data);
27
+ }
28
+ else {
29
+ reject(data);
30
+ }
31
+ };
32
+ target.postMessage(payload, '*', [channel.port2]);
33
+ });
34
+ }
35
+ }
36
+ exports.default = PostMessageControllerWeb;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const enums_1 = require("../enums");
7
+ const ClientParams_1 = __importDefault(require("./ClientParams"));
8
+ const PostMessageController_1 = __importDefault(require("./PostMessageController"));
9
+ class TechnicalSupport {
10
+ static instance = null;
11
+ static getInstance() {
12
+ if (!this.instance) {
13
+ this.instance = new TechnicalSupport();
14
+ }
15
+ return this.instance;
16
+ }
17
+ // eslint-disable-next-line
18
+ constructor() { }
19
+ sendTechnicalInformation(message, data) {
20
+ return PostMessageController_1.default.getInstance().sendAsyncErrorSafe({
21
+ type: enums_1.ClientEventType.SEND_TECHNICAL_SUPPORT_INFORMATION,
22
+ payload: {
23
+ 'x-iframe-params': ClientParams_1.default.getInstance(),
24
+ message,
25
+ data,
26
+ },
27
+ });
28
+ }
29
+ }
30
+ exports.default = TechnicalSupport;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPbxDomainFromJwt = void 0;
4
+ const jwt_decode_1 = require("jwt-decode");
5
+ function getPbxDomainFromJwt(jwt) {
6
+ try {
7
+ if (!jwt) {
8
+ return '';
9
+ }
10
+ const tokenDecode = (0, jwt_decode_1.jwtDecode)(jwt);
11
+ return tokenDecode['custom:pbx_domain'] || '';
12
+ }
13
+ catch (error) {
14
+ console.error('Failed to decode JWT:', error);
15
+ return '';
16
+ }
17
+ }
18
+ exports.getPbxDomainFromJwt = getPbxDomainFromJwt;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUrlSearchParamsMap = void 0;
4
+ function getUrlSearchParamsMap() {
5
+ return new URLSearchParams(window.location.search);
6
+ }
7
+ exports.getUrlSearchParamsMap = getUrlSearchParamsMap;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const enums_1 = require("../src/enums");
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SupportedPlatformVariant = void 0;
4
+ var SupportedPlatformVariant;
5
+ (function (SupportedPlatformVariant) {
6
+ SupportedPlatformVariant["ALL"] = "all";
7
+ SupportedPlatformVariant["MOBILE"] = "mobile";
8
+ SupportedPlatformVariant["WEB"] = "web";
9
+ })(SupportedPlatformVariant || (exports.SupportedPlatformVariant = SupportedPlatformVariant = {}));
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SupportedPlatformVariant = void 0;
4
+ var Platform_1 = require("./Platform");
5
+ Object.defineProperty(exports, "SupportedPlatformVariant", { enumerable: true, get: function () { return Platform_1.SupportedPlatformVariant; } });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wildix/xbees-connect",
3
- "version": "1.2.12",
3
+ "version": "1.2.14",
4
4
  "description": "This library provides easy communication between x-bees and integrated web applications",
5
5
  "author": "dimitri.chernykh <dimitri.chernykh@wildix.com>",
6
6
  "homepage": "",
@@ -10,8 +10,9 @@
10
10
  "types": "./dist-types/index.d.ts",
11
11
  "module": "./dist-es/index.js",
12
12
  "scripts": {
13
- "build": "yarn clean && yarn build:es && yarn build:types",
13
+ "build": "yarn clean && yarn build:es && yarn build:cjs && yarn build:types",
14
14
  "build:es": "tsc -p tsconfig.es.json",
15
+ "build:cjs": "tsc -p tsconfig.cjs.json",
15
16
  "build:types": "tsc -p tsconfig.types.json",
16
17
  "build:docs": "typedoc",
17
18
  "lint": "eslint . && tsc --noEmit",
@@ -1,4 +1,5 @@
1
1
  import packageJson from '../package.json';
2
+ import { SupportedPlatformVariant, } from '../types';
2
3
  import { ClientEventType, EventType, UrlParams } from './enums';
3
4
  import LocalStorageManager from './helpers/LocalStorageManager';
4
5
  import { MessageListener } from './helpers/MessageListener';
@@ -28,9 +29,6 @@ export class Client {
28
29
  console.error('Error on init rendering widget:', error);
29
30
  }
30
31
  }
31
- else {
32
- void this.getInstance().ready();
33
- }
34
32
  }
35
33
  worker;
36
34
  listeners = [];
@@ -118,10 +116,11 @@ export class Client {
118
116
  this.saveToStorage('sendedUsageAnalyticsDate', today);
119
117
  }
120
118
  }
121
- ready(platform = 'all') {
119
+ ready(props = SupportedPlatformVariant.ALL) {
120
+ const payload = typeof props === 'string' ? { version: this.version(), platform: props } : { version: this.version(), ...props };
122
121
  return this.sendAsync({
123
122
  type: ClientEventType.READY,
124
- payload: { version: this.version(), platform },
123
+ payload,
125
124
  });
126
125
  }
127
126
  version() {
@@ -1 +1,6 @@
1
- export {};
1
+ export var SupportedPlatformVariant;
2
+ (function (SupportedPlatformVariant) {
3
+ SupportedPlatformVariant["ALL"] = "all";
4
+ SupportedPlatformVariant["MOBILE"] = "mobile";
5
+ SupportedPlatformVariant["WEB"] = "web";
6
+ })(SupportedPlatformVariant || (SupportedPlatformVariant = {}));
@@ -1 +1 @@
1
- export {};
1
+ export { SupportedPlatformVariant } from './Platform';
@@ -1,4 +1,5 @@
1
1
  import { Callback, ConnectClient, Contact, ContactQuery, IPayloadViewPort, LookupAndMatchContactsResolver, Message, Reject, RemoveEventListener, ResponseMessage, StorageEventCallback, SuggestContactsResolver, SupportedPlatformVariant, ToastSeverity } from '../types';
2
+ import { ReadyExtendedProps } from '../types/Event';
2
3
  import { ClientEventType, EventType } from './enums';
3
4
  import TechnicalSupport from './helpers/TechnicalSupport';
4
5
  /**
@@ -29,7 +30,7 @@ export declare class Client implements ConnectClient {
29
30
  private parseMessage;
30
31
  private onMessage;
31
32
  private sendDailyIntegrationUsageAnalytics;
32
- ready(platform?: SupportedPlatformVariant | undefined): Promise<ResponseMessage>;
33
+ ready(props?: SupportedPlatformVariant | ReadyExtendedProps | undefined): Promise<ResponseMessage>;
33
34
  version(): string;
34
35
  isPlatformNative(): boolean;
35
36
  isPlatformWeb(): boolean;
@@ -2,6 +2,7 @@ import { ClientEventType, EventType } from '../src/enums';
2
2
  import TechnicalSupport from '../src/helpers/TechnicalSupport';
3
3
  import { Callback } from './Callback';
4
4
  import { Contact, ContactQuery } from './Contact';
5
+ import { ReadyExtendedProps } from './Event';
5
6
  import { RemoveEventListener } from './Listener';
6
7
  import { ResponseMessage } from './Message';
7
8
  import { IPayloadViewPort } from './Payload';
@@ -12,7 +13,7 @@ import { ToastSeverity } from './Toast';
12
13
  export interface ConnectClient {
13
14
  /**
14
15
  * Sends to x-bees signal that iFrame is ready to be shown. iFrame should send it when the application starts and ready */
15
- ready: (platform?: SupportedPlatformVariant) => Promise<ResponseMessage>;
16
+ ready: (props?: SupportedPlatformVariant | ReadyExtendedProps) => Promise<ResponseMessage>;
16
17
  /**
17
18
  * Retrieves current pbx token */
18
19
  getUserPbxToken: () => string;
@@ -2,6 +2,7 @@ import { ClientEventType, EventType } from '../src/enums';
2
2
  import { ContactQuery } from './Contact';
3
3
  import { Message, MessageType } from './Message';
4
4
  import { IPayloadAutoSuggestResult, IPayloadCallStart, IPayloadCallStartedInfo, IPayloadContactMatchResult, IPayloadContactMatchResultNotFound, IPayloadContactResult, IPayloadContextResult, IPayloadConversationResult, IPayloadSendAnalytics, IPayloadTechSupport, IPayloadThemeChange, IPayloadToast, IPayloadVersion, IPayloadViewPort } from './Payload';
5
+ import { SupportedPlatformVariant } from './Platform';
5
6
  export type EventPayload<T extends MessageType> = T extends EventType.GET_CONTACTS_AUTO_SUGGEST ? string : T extends ClientEventType.CONTACTS_AUTO_SUGGEST ? IPayloadAutoSuggestResult : T extends ClientEventType.CONTACT_LOOKUP_AND_MATCH | ClientEventType.CONTACT_CREATE_OR_UPDATE | ClientEventType.CONTACT_MATCH_UPDATE ? IPayloadContactMatchResult : T extends ClientEventType.CONTACT_LOOKUP_AND_MATCH_NOT_FOUND ? IPayloadContactMatchResultNotFound : T extends ClientEventType.CONTEXT ? IPayloadContextResult : T extends ClientEventType.CURRENT_CONTACT ? IPayloadContactResult : T extends ClientEventType.CURRENT_CONVERSATION ? IPayloadConversationResult : T extends EventType.ADD_CALL ? IPayloadCallStartedInfo : T extends ClientEventType.START_CALL ? IPayloadCallStart : T extends ClientEventType.READY ? IPayloadVersion : T extends ClientEventType.VIEW_PORT ? IPayloadViewPort : T extends ClientEventType.THEME ? IPayloadThemeChange : T extends EventType.USE_THEME ? IPayloadThemeChange : T extends ClientEventType.TOAST ? IPayloadToast : T extends ClientEventType.SEND_ANALYTICS ? IPayloadSendAnalytics : T extends ClientEventType.SEND_TECHNICAL_SUPPORT_INFORMATION ? IPayloadTechSupport : T extends EventType.PBX_TOKEN ? string : T extends ClientEventType.TOKEN ? string : T extends ClientEventType.TO_CLIPBOARD ? string : T extends EventType.GET_LOOK_UP_AND_MATCH ? ContactQuery : T extends EventType.VISIBILITY ? boolean : never;
6
7
  export type EventPayloadMap = {
7
8
  [EventType.GET_CONTACTS_AUTO_SUGGEST]: string;
@@ -22,3 +23,7 @@ export type EventCallbackMap = {
22
23
  [EventType.REDIRECT_QUERY]: (query: EventPayloadMap[EventType.REDIRECT_QUERY]) => void;
23
24
  };
24
25
  export type RawMessageEvent = MessageEvent<string | Message>;
26
+ export type ReadyExtendedProps = {
27
+ templateId?: string;
28
+ platform?: SupportedPlatformVariant;
29
+ };
@@ -10,6 +10,7 @@ export interface IPayloadViewPort {
10
10
  }
11
11
  export interface IPayloadVersion {
12
12
  version: string;
13
+ templateId?: string;
13
14
  platform?: SupportedPlatformVariant;
14
15
  }
15
16
  export interface IPayloadToast {
@@ -1 +1,5 @@
1
- export type SupportedPlatformVariant = 'all' | 'web' | 'mobile';
1
+ export declare enum SupportedPlatformVariant {
2
+ ALL = "all",
3
+ MOBILE = "mobile",
4
+ WEB = "web"
5
+ }
@@ -7,7 +7,7 @@ export type { Listener, RemoveEventListener } from './Listener';
7
7
  export type { Message, MessageIFrameResponse, MessageType, ResponseMessage } from './Message';
8
8
  export type { MessageSender } from './MessageSender';
9
9
  export type { IPayloadAutoSuggestResult, IPayloadCallStart, IPayloadCallStartedInfo, IPayloadContactMatchResult, IPayloadContactMatchResultNotFound, IPayloadContactResult, IPayloadContextResult, IPayloadConversationResult, IPayloadSendAnalytics, IPayloadTechSupport, IPayloadThemeChange, IPayloadToast, IPayloadVersion, IPayloadViewPort, } from './Payload';
10
- export type { SupportedPlatformVariant } from './Platform';
10
+ export { SupportedPlatformVariant } from './Platform';
11
11
  export type { LookupAndMatchContactsResolver, Reject, SuggestContactsResolver } from './Resolver';
12
12
  export type { StorageEventCallback } from './Storage';
13
13
  export type { ToastSeverity } from './Toast';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wildix/xbees-connect",
3
- "version": "1.2.12",
3
+ "version": "1.2.14",
4
4
  "description": "This library provides easy communication between x-bees and integrated web applications",
5
5
  "author": "dimitri.chernykh <dimitri.chernykh@wildix.com>",
6
6
  "homepage": "",
@@ -10,8 +10,9 @@
10
10
  "types": "./dist-types/index.d.ts",
11
11
  "module": "./dist-es/index.js",
12
12
  "scripts": {
13
- "build": "yarn clean && yarn build:es && yarn build:types",
13
+ "build": "yarn clean && yarn build:es && yarn build:cjs && yarn build:types",
14
14
  "build:es": "tsc -p tsconfig.es.json",
15
+ "build:cjs": "tsc -p tsconfig.cjs.json",
15
16
  "build:types": "tsc -p tsconfig.types.json",
16
17
  "build:docs": "typedoc",
17
18
  "lint": "eslint . && tsc --noEmit",
@@ -45,5 +46,5 @@
45
46
  "dependencies": {
46
47
  "jwt-decode": "^4.0.0"
47
48
  },
48
- "gitHead": "b2a29cf3ed4144e5393a08e7527c1e32d60c4cc2"
49
+ "gitHead": "206439b991196810aa57e016b74508fe287cda02"
49
50
  }