@wildix/xbees-connect 1.1.1 → 1.1.2-alpha.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/dist-es/package.json +1 -1
- package/dist-es/src/Client.js +12 -0
- package/dist-es/src/helpers/LocalStorageManager.js +68 -0
- package/dist-types/src/Client.d.ts +6 -2
- package/dist-types/src/helpers/LocalStorageManager.d.ts +18 -0
- package/dist-types/types/index.d.ts +7 -0
- package/package.json +2 -2
package/dist-es/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wildix/xbees-connect",
|
|
3
|
-
"version": "1.1.0",
|
|
3
|
+
"version": "1.1.2-alpha.0",
|
|
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": "",
|
package/dist-es/src/Client.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import packageJson from '../package.json';
|
|
2
2
|
import { ClientEventType, DeprecatedUrlParams, EventType, UrlParams } from './enums';
|
|
3
|
+
import LocalStorageManager from './helpers/LocalStorageManager';
|
|
3
4
|
import PostMessageControllerNative from './helpers/PostMessageControllerNative';
|
|
4
5
|
import PostMessageControllerWeb from './helpers/PostMessageControllerWeb';
|
|
5
6
|
/**
|
|
@@ -36,6 +37,7 @@ export class Client {
|
|
|
36
37
|
needAuthorize;
|
|
37
38
|
iframeId;
|
|
38
39
|
variant = null;
|
|
40
|
+
localStorageManager = LocalStorageManager.getInstance();
|
|
39
41
|
constructor() {
|
|
40
42
|
const params = new URLSearchParams(window.location.search);
|
|
41
43
|
this.iframeId = (params.get(UrlParams.ID) ?? params.get(DeprecatedUrlParams.ID));
|
|
@@ -185,6 +187,7 @@ export class Client {
|
|
|
185
187
|
}
|
|
186
188
|
}
|
|
187
189
|
off(callback) {
|
|
190
|
+
this.localStorageManager.removeOnStorage(callback);
|
|
188
191
|
this.removeEventListener(null, callback);
|
|
189
192
|
}
|
|
190
193
|
onCallEnded(callback) {
|
|
@@ -239,4 +242,13 @@ export class Client {
|
|
|
239
242
|
onThemeChange(callback) {
|
|
240
243
|
this.addEventListener(EventType.USE_THEME, callback);
|
|
241
244
|
}
|
|
245
|
+
getFromStorage(key) {
|
|
246
|
+
this.localStorageManager.retrieve(key);
|
|
247
|
+
}
|
|
248
|
+
saveToStorage(key, value) {
|
|
249
|
+
this.localStorageManager.save(key, value);
|
|
250
|
+
}
|
|
251
|
+
onStorage(listener) {
|
|
252
|
+
this.localStorageManager.onStorage(listener);
|
|
253
|
+
}
|
|
242
254
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
class LocalStorageManager {
|
|
2
|
+
static instance = null;
|
|
3
|
+
static getInstance() {
|
|
4
|
+
if (!this.instance) {
|
|
5
|
+
this.instance = new LocalStorageManager();
|
|
6
|
+
}
|
|
7
|
+
return this.instance;
|
|
8
|
+
}
|
|
9
|
+
listeners = new Set();
|
|
10
|
+
integrationKey = '';
|
|
11
|
+
getStorageKey(key) {
|
|
12
|
+
return !this.integrationKey ? key : `${this.integrationKey}_${key}`;
|
|
13
|
+
}
|
|
14
|
+
getKey(key) {
|
|
15
|
+
return !this.integrationKey
|
|
16
|
+
? key
|
|
17
|
+
: key.slice(`${this.integrationKey}_`.length);
|
|
18
|
+
}
|
|
19
|
+
constructor() {
|
|
20
|
+
if (this.shouldUseIntegrationKey()) {
|
|
21
|
+
this.integrationKey = this.calculateIntegrationKey();
|
|
22
|
+
}
|
|
23
|
+
window.addEventListener('storage', (event) => {
|
|
24
|
+
if (!event.key)
|
|
25
|
+
return;
|
|
26
|
+
const key = this.getKey(event.key);
|
|
27
|
+
this.listeners.forEach((listener) => listener({ ...event, key }));
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
calculateIntegrationKey() {
|
|
31
|
+
const pattern = /^\/([^/]+)\/index\.html$/;
|
|
32
|
+
const match = window.location.pathname.match(pattern);
|
|
33
|
+
if (match && match[1]) {
|
|
34
|
+
const [, key] = match;
|
|
35
|
+
return key;
|
|
36
|
+
}
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
shouldUseIntegrationKey() {
|
|
40
|
+
return (window.location.host.endsWith('integrations.x-bees.com') ||
|
|
41
|
+
window.location.pathname.endsWith('/index.html'));
|
|
42
|
+
}
|
|
43
|
+
save(key, value) {
|
|
44
|
+
// Save data to localStorage
|
|
45
|
+
localStorage.setItem(this.getStorageKey(key), JSON.stringify(value));
|
|
46
|
+
}
|
|
47
|
+
retrieve(key) {
|
|
48
|
+
// Retrieve data from localStorage
|
|
49
|
+
const data = localStorage.getItem(this.getStorageKey(key));
|
|
50
|
+
try {
|
|
51
|
+
return !data ? data : JSON.parse(data);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error('parse data error', error);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
get(key) {
|
|
59
|
+
return localStorage.getItem(this.getStorageKey(key));
|
|
60
|
+
}
|
|
61
|
+
onStorage(listener) {
|
|
62
|
+
this.listeners.add(listener);
|
|
63
|
+
}
|
|
64
|
+
removeOnStorage(listener) {
|
|
65
|
+
this.listeners.delete(listener);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export default LocalStorageManager;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Callback, ConnectClient, Contact, ContactQuery, IPayloadAutoSuggestResult, IPayloadContactMatchResult, IPayloadViewPort, LookupAndMatchContactsResolver, Message, Reject, RemoveEventListener, ResponseMessage, SuggestContactsResolver } from '../types';
|
|
1
|
+
import { Callback, ConnectClient, Contact, ContactQuery, IPayloadAutoSuggestResult, IPayloadContactMatchResult, IPayloadViewPort, LookupAndMatchContactsResolver, Message, Reject, RemoveEventListener, ResponseMessage, StorageEventCallback, SuggestContactsResolver } from '../types';
|
|
2
2
|
import { ClientEventType, EventType } from './enums';
|
|
3
3
|
/**
|
|
4
4
|
* Client provides functionality of communication between xBees and integrated web applications via iFrame or ReactNative WebView
|
|
@@ -17,6 +17,7 @@ export declare class Client implements ConnectClient {
|
|
|
17
17
|
private readonly needAuthorize;
|
|
18
18
|
private readonly iframeId;
|
|
19
19
|
private readonly variant;
|
|
20
|
+
private readonly localStorageManager;
|
|
20
21
|
constructor();
|
|
21
22
|
private sendAsync;
|
|
22
23
|
private parseMessage;
|
|
@@ -43,11 +44,14 @@ export declare class Client implements ConnectClient {
|
|
|
43
44
|
sendContactMatch(payload: IPayloadContactMatchResult): Promise<Message<ClientEventType.CONTACT_LOOKUP_AND_MATCH>>;
|
|
44
45
|
addEventListener<T extends EventType = EventType>(eventName: T, callback: Callback<T>): RemoveEventListener;
|
|
45
46
|
removeEventListener<T extends EventType = EventType>(eventName: T | null, callback: Callback<T>): void;
|
|
46
|
-
off(callback: Callback): void;
|
|
47
|
+
off(callback: Callback | StorageEventCallback): void;
|
|
47
48
|
onCallEnded(callback: Callback<EventType.TERMINATE_CALL>): void;
|
|
48
49
|
onCallStarted(callback: Callback<EventType.ADD_CALL>): void;
|
|
49
50
|
onPbxTokenChange(callback: Callback<EventType.PBX_TOKEN>): void;
|
|
50
51
|
onSuggestContacts(callback: (query: string, resolve: SuggestContactsResolver, reject: Reject) => void): RemoveEventListener;
|
|
51
52
|
onLookupAndMatchContact(callback: (query: ContactQuery, resolve: LookupAndMatchContactsResolver, reject: Reject) => void): RemoveEventListener;
|
|
52
53
|
onThemeChange(callback: Callback<EventType.USE_THEME>): void;
|
|
54
|
+
getFromStorage(key: string): void;
|
|
55
|
+
saveToStorage(key: string, value: any): void;
|
|
56
|
+
onStorage(listener: StorageEventCallback): void;
|
|
53
57
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { StorageEventCallback } from '../../types';
|
|
2
|
+
declare class LocalStorageManager {
|
|
3
|
+
private static instance;
|
|
4
|
+
static getInstance(): LocalStorageManager;
|
|
5
|
+
private listeners;
|
|
6
|
+
private integrationKey;
|
|
7
|
+
getStorageKey(key: string): string;
|
|
8
|
+
getKey(key: string): string;
|
|
9
|
+
constructor();
|
|
10
|
+
private calculateIntegrationKey;
|
|
11
|
+
private shouldUseIntegrationKey;
|
|
12
|
+
save(key: string, value: any): void;
|
|
13
|
+
retrieve(key: string): any;
|
|
14
|
+
get(key: string): any;
|
|
15
|
+
onStorage(listener: StorageEventCallback): void;
|
|
16
|
+
removeOnStorage(listener: StorageEventCallback): void;
|
|
17
|
+
}
|
|
18
|
+
export default LocalStorageManager;
|
|
@@ -85,6 +85,7 @@ export type EventCallbackMap = {
|
|
|
85
85
|
[EventType.USE_THEME]: (theme: EventPayloadMap[EventType.USE_THEME]) => void;
|
|
86
86
|
[EventType.PBX_TOKEN]: (token: EventPayloadMap[EventType.PBX_TOKEN]) => void;
|
|
87
87
|
};
|
|
88
|
+
export type StorageEventCallback = (event: StorageEvent) => void;
|
|
88
89
|
export type Callback<T extends EventType = EventType> = T extends keyof EventCallbackMap ? EventCallbackMap[T] : DefaultCallback;
|
|
89
90
|
export interface Listener<T extends EventType = EventType> {
|
|
90
91
|
eventName: T;
|
|
@@ -190,5 +191,11 @@ export interface ConnectClient {
|
|
|
190
191
|
/**
|
|
191
192
|
* Removes particular callback from handling events */
|
|
192
193
|
off: (callback: Callback) => void;
|
|
194
|
+
/**
|
|
195
|
+
* saves data to localStorage */
|
|
196
|
+
saveToStorage: (key: string, value: any) => void;
|
|
197
|
+
/**
|
|
198
|
+
* Retrieves data from localStorage */
|
|
199
|
+
getFromStorage: (key: string) => void;
|
|
193
200
|
}
|
|
194
201
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wildix/xbees-connect",
|
|
3
|
-
"version": "1.1.1",
|
|
3
|
+
"version": "1.1.2-alpha.1",
|
|
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": "",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=16"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "a481bbfe4b0fdcba3b554a1af7015cedf6f6ba82"
|
|
46
46
|
}
|