@wildix/xbees-connect 1.0.4-alpha.0

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 ADDED
@@ -0,0 +1,11 @@
1
+ # `xbees-connect`
2
+
3
+ > TODO: description
4
+
5
+ ## Usage
6
+
7
+ ```
8
+ const xbeesConnect = require('xbees-connect');
9
+
10
+ // TODO: DEMONSTRATE API....
11
+ ```
@@ -0,0 +1,6 @@
1
+ import { Client } from './src/Client';
2
+ (function () {
3
+ // @ts-expect-error window.xBeesConnect will be used inside another app
4
+ window.xBeesConnect = Client;
5
+ })();
6
+ export default Client;
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "xbees-connect",
3
+ "version": "1.0.0",
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
+ "license": "UNLICENSED",
8
+ "main": "./dist-cjs/index.js",
9
+ "types": "./dist-types/index.d.ts",
10
+ "module": "./dist-es/index.js",
11
+ "type": "module",
12
+ "scripts": {
13
+ "build:es": "tsc -p tsconfig.es.json",
14
+ "build:types": "tsc -p tsconfig.types.json",
15
+ "build:docs": "typedoc",
16
+ "clean": "rimraf ./dist-* && rimraf *.tsbuildinfo"
17
+ },
18
+ "files": [
19
+ "dist-*/**"
20
+ ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git@git.wildix.com:dimitri.chernykh/sdk-ui.git"
24
+ },
25
+ "engines": {
26
+ "node": ">=18"
27
+ },
28
+ "dependencies": {
29
+ "typescript": "^5.2.2"
30
+ },
31
+ "devDependencies": {
32
+ "rimraf": "^5.0.5"
33
+ }
34
+ }
@@ -0,0 +1,169 @@
1
+ import { ClientEventType, EventType, } from './types';
2
+ import PostMessageControllerNative from './PostMessageControllerNative';
3
+ import PostMessageControllerWeb from './PostMessageControllerWeb';
4
+ import packageJson from '../package.json';
5
+ /**
6
+ * Client provides functionality of communication between xBees and integrated web applications via iFrame or ReactNative WebView
7
+ * integration creates na instance with new Client()
8
+ * */
9
+ export class Client {
10
+ static getInstance() {
11
+ if (!this.instance) {
12
+ this.instance = new Client();
13
+ }
14
+ return this.instance;
15
+ }
16
+ constructor() {
17
+ this.listeners = [];
18
+ this.useSubscription = false;
19
+ this.iframeId = null;
20
+ this.variant = null;
21
+ const params = new URLSearchParams(window.location.search);
22
+ this.iframeId = params.get('iframeId');
23
+ this.variant = params.get('variant');
24
+ // @ts-expect-error window.ReactNativeWebView will be provided by ReactNative WebView
25
+ this.worker = window.ReactNativeWebView ? new PostMessageControllerNative() : new PostMessageControllerWeb();
26
+ }
27
+ async sendAsync(data) {
28
+ return this.worker.sendAsync({
29
+ ...data,
30
+ iframeId: this.iframeId,
31
+ });
32
+ }
33
+ parseMessage(message) {
34
+ try {
35
+ const data = message?.data && JSON.parse(message?.data);
36
+ if (!data?.type) {
37
+ return null;
38
+ }
39
+ return data;
40
+ }
41
+ catch (e) {
42
+ return null;
43
+ }
44
+ }
45
+ onMessage(message) {
46
+ const data = this.parseMessage(message);
47
+ if (!data) {
48
+ return;
49
+ }
50
+ const { type, payload } = data;
51
+ this.listeners.forEach(({ eventName, callback }) => {
52
+ if (eventName === type) {
53
+ if (type === EventType.ADD_CALL) {
54
+ const cb = callback;
55
+ cb(payload);
56
+ }
57
+ else {
58
+ // @ts-expect-error TODO: check the type for Callback<?>
59
+ const cb = callback;
60
+ cb(payload);
61
+ }
62
+ }
63
+ });
64
+ }
65
+ async ready() {
66
+ return this.sendAsync({ type: ClientEventType.READY, payload: { version: this.version() } });
67
+ }
68
+ version() {
69
+ return packageJson.version;
70
+ }
71
+ isDaemon() {
72
+ return this.variant === 'daemon';
73
+ }
74
+ showsUi() {
75
+ return !this.isDaemon();
76
+ }
77
+ async getContext() {
78
+ return this.sendAsync({ type: ClientEventType.CONTEXT });
79
+ }
80
+ async getCurrentContact() {
81
+ return this.sendAsync({ type: ClientEventType.CURRENT_CONTACT });
82
+ }
83
+ async getThemeMode() {
84
+ return this.sendAsync({ type: ClientEventType.THEME_MODE });
85
+ }
86
+ async getTheme() {
87
+ return this.sendAsync({ type: ClientEventType.THEME });
88
+ }
89
+ async startCall(phoneNumber) {
90
+ return this.sendAsync({ type: ClientEventType.START_CALL, payload: { phoneNumber } });
91
+ }
92
+ async reboot() {
93
+ return this.sendAsync({ type: ClientEventType.REBOOT });
94
+ }
95
+ async setViewport(payload) {
96
+ return this.sendAsync({ type: ClientEventType.VIEW_PORT, payload });
97
+ }
98
+ async toClipboard(payload) {
99
+ return this.sendAsync({ type: ClientEventType.TO_CLIPBOARD, payload });
100
+ }
101
+ async isNotAuthorized(payload) {
102
+ return this.sendAsync({ type: ClientEventType.NOT_AUTHORIZED, payload });
103
+ }
104
+ async isAuthorized(payload) {
105
+ return this.sendAsync({ type: ClientEventType.AUTHORIZED, payload });
106
+ }
107
+ async getContactsAutoSuggest(payload) {
108
+ return this.sendAsync({
109
+ type: ClientEventType.CONTACTS_AUTO_SUGGEST,
110
+ payload: payload,
111
+ });
112
+ }
113
+ addEventListener(eventName, callback) {
114
+ if (!this.useSubscription) {
115
+ this.useSubscription = true;
116
+ window.addEventListener('message', this.onMessage.bind(this));
117
+ }
118
+ const foundThisEvent = this.listeners.find(({ eventName: _eventName, callback: _callback }) => eventName === _eventName && Object.is(callback, _callback));
119
+ if (!foundThisEvent) {
120
+ this.listeners.push({ eventName, callback });
121
+ }
122
+ return () => { this.removeEventListener(eventName, callback); };
123
+ }
124
+ removeEventListener(eventName, callback) {
125
+ this.listeners = this.listeners.filter(({ eventName: _eventName, callback: _callback }) => !(Object.is(callback, _callback) && (!eventName ? true : eventName === _eventName)));
126
+ if (this.useSubscription && !this.listeners.length) {
127
+ this.useSubscription = false;
128
+ window.removeEventListener('message', this.onMessage.bind(this));
129
+ }
130
+ }
131
+ off(callback) {
132
+ this.removeEventListener(null, callback);
133
+ }
134
+ onCallEnded(callback) {
135
+ this.addEventListener(EventType.TERMINATE_CALL, callback);
136
+ }
137
+ onCallStarted(callback) {
138
+ this.addEventListener(EventType.ADD_CALL, callback);
139
+ }
140
+ onPbxTokenChange(callback) {
141
+ this.addEventListener(EventType.PBX_TOKEN, callback);
142
+ }
143
+ onSuggestContacts(callback) {
144
+ return this.addEventListener(EventType.GET_CONTACTS_AUTO_SUGGEST, (query) => {
145
+ const resolve = (contacts) => {
146
+ return this.sendAsync({
147
+ type: ClientEventType.CONTACTS_AUTO_SUGGEST,
148
+ payload: {
149
+ contacts,
150
+ query
151
+ },
152
+ });
153
+ };
154
+ const reject = (reason) => {
155
+ console.debug(reason);
156
+ };
157
+ try {
158
+ callback(query, resolve, reject);
159
+ }
160
+ catch (e) {
161
+ reject(e.toString());
162
+ }
163
+ });
164
+ }
165
+ onThemeChange(callback) {
166
+ this.addEventListener(EventType.USE_THEME, callback);
167
+ }
168
+ }
169
+ Client.instance = null;
@@ -0,0 +1,43 @@
1
+ export default class PostMessageControllerNative {
2
+ constructor() {
3
+ this.timeout = 10000;
4
+ // @ts-expect-error window.ReactNativeWebView will be provided by ReactNative WebView
5
+ this.target = window.ReactNativeWebView;
6
+ }
7
+ async sendAsync(data) {
8
+ if (!this.target) {
9
+ return Promise.reject('xBeesConnect should be wrapped within iframe to perform the connection');
10
+ }
11
+ return this.send(this.target, data);
12
+ }
13
+ send(target, payload) {
14
+ return new Promise((res, rej) => {
15
+ const channel = new MessageChannel();
16
+ const listener = (event) => {
17
+ try {
18
+ const parsedData = JSON.parse(event.data);
19
+ if (parsedData?.type === payload.type) {
20
+ clearTimeout(timeout);
21
+ window.removeEventListener('message', listener);
22
+ if (!parsedData.errorMessage) {
23
+ res(parsedData);
24
+ }
25
+ else {
26
+ rej(parsedData);
27
+ }
28
+ }
29
+ }
30
+ catch (e) {
31
+ console.error("on receive response Error", e);
32
+ }
33
+ };
34
+ window.addEventListener('message', listener);
35
+ const timeout = setTimeout(() => {
36
+ channel.port1.close();
37
+ window.removeEventListener('message', listener);
38
+ rej({ errorMessage: 'timeout', type: payload.type });
39
+ }, this.timeout);
40
+ target.postMessage(JSON.stringify(payload));
41
+ });
42
+ }
43
+ }
@@ -0,0 +1,32 @@
1
+ export default class PostMessageControllerWeb {
2
+ constructor() {
3
+ this.timeout = 10000;
4
+ this.target = parent;
5
+ }
6
+ async sendAsync(data) {
7
+ if (!this.target || this.target === window) {
8
+ return Promise.reject('xBeesConnect should be wrapped within iframe to perform the connection');
9
+ }
10
+ return this.send(this.target, data);
11
+ }
12
+ send(target, payload) {
13
+ return new Promise((res, rej) => {
14
+ const channel = new MessageChannel();
15
+ const timeout = setTimeout(() => {
16
+ channel.port1.close();
17
+ rej({ errorMessage: 'timeout', type: payload.type });
18
+ }, this.timeout);
19
+ channel.port1.onmessage = ({ data }) => {
20
+ clearTimeout(timeout);
21
+ channel.port1.close();
22
+ if (!data.errorMessage) {
23
+ res(data);
24
+ }
25
+ else {
26
+ rej(data);
27
+ }
28
+ };
29
+ target.postMessage(payload, '*', [channel.port2]);
30
+ });
31
+ }
32
+ }
@@ -0,0 +1,23 @@
1
+ export var EventType;
2
+ (function (EventType) {
3
+ EventType["GET_CONTACTS_AUTO_SUGGEST"] = "xBeesGetContactsAutoSuggest";
4
+ EventType["ADD_CALL"] = "xBeesAddCall";
5
+ EventType["TERMINATE_CALL"] = "xBeesTerminateCall";
6
+ EventType["USE_THEME"] = "xBeesUseTheme";
7
+ EventType["PBX_TOKEN"] = "xBeesPbxToken";
8
+ })(EventType || (EventType = {}));
9
+ export var ClientEventType;
10
+ (function (ClientEventType) {
11
+ ClientEventType["READY"] = "xBeesReady";
12
+ ClientEventType["CONTEXT"] = "xBeesContext";
13
+ ClientEventType["CURRENT_CONTACT"] = "xBeesCurrentContact";
14
+ ClientEventType["THEME_MODE"] = "xBeesThemeMode";
15
+ ClientEventType["THEME"] = "xBeesTheme";
16
+ ClientEventType["START_CALL"] = "xBeesStartCall";
17
+ ClientEventType["VIEW_PORT"] = "xBeesViewPort";
18
+ ClientEventType["REBOOT"] = "xBeesReboot";
19
+ ClientEventType["TO_CLIPBOARD"] = "xBeesToClipboard";
20
+ ClientEventType["NOT_AUTHORIZED"] = "xBeesNotAuthorized";
21
+ ClientEventType["AUTHORIZED"] = "xBeesAuthorized";
22
+ ClientEventType["CONTACTS_AUTO_SUGGEST"] = "xBeesContactsAutoSuggest";
23
+ })(ClientEventType || (ClientEventType = {}));
@@ -0,0 +1,2 @@
1
+ import { Client } from './src/Client';
2
+ export default Client;
@@ -0,0 +1,44 @@
1
+ import { AutoSuggestResult, Callback, ClientConnect, EventType, Reject, RemoveEventListener, Resolve, Response } from './types';
2
+ /**
3
+ * Client provides functionality of communication between xBees and integrated web applications via iFrame or ReactNative WebView
4
+ * integration creates na instance with new Client()
5
+ * */
6
+ export declare class Client implements ClientConnect {
7
+ private static instance;
8
+ static getInstance(): Client;
9
+ private worker;
10
+ private listeners;
11
+ private useSubscription;
12
+ private readonly iframeId;
13
+ private readonly variant;
14
+ constructor();
15
+ private sendAsync;
16
+ private parseMessage;
17
+ private onMessage;
18
+ ready(): Promise<Response>;
19
+ version(): string;
20
+ isDaemon(): boolean;
21
+ showsUi(): boolean;
22
+ getContext(): Promise<Response>;
23
+ getCurrentContact(): Promise<Response>;
24
+ getThemeMode(): Promise<Response>;
25
+ getTheme(): Promise<Response>;
26
+ startCall(phoneNumber: string): Promise<Response>;
27
+ reboot(): Promise<Response>;
28
+ setViewport(payload: {
29
+ height: number;
30
+ width: number;
31
+ }): Promise<Response>;
32
+ toClipboard(payload: string): Promise<Response>;
33
+ isNotAuthorized(payload: string): Promise<Response>;
34
+ isAuthorized(payload: string): Promise<Response>;
35
+ getContactsAutoSuggest(payload: AutoSuggestResult): Promise<Response>;
36
+ addEventListener<T extends EventType = EventType>(eventName: T, callback: Callback<T>): RemoveEventListener;
37
+ removeEventListener<T extends EventType = EventType>(eventName: T | null, callback: Callback<T>): void;
38
+ off(callback: Callback): void;
39
+ onCallEnded(callback: Callback<EventType.TERMINATE_CALL>): void;
40
+ onCallStarted(callback: Callback<EventType.ADD_CALL>): void;
41
+ onPbxTokenChange(callback: Callback<EventType.PBX_TOKEN>): void;
42
+ onSuggestContacts(callback: (query: string, resolve: Resolve, reject: Reject) => void): RemoveEventListener;
43
+ onThemeChange(callback: Callback<EventType.USE_THEME>): void;
44
+ }
@@ -0,0 +1,8 @@
1
+ import { SendData, Response } from './types';
2
+ export default class PostMessageControllerNative implements SendData {
3
+ private readonly target;
4
+ private timeout;
5
+ constructor();
6
+ sendAsync(data: any): Promise<Response>;
7
+ private send;
8
+ }
@@ -0,0 +1,8 @@
1
+ import { SendData, Response } from './types';
2
+ export default class PostMessageControllerWeb implements SendData {
3
+ private readonly target;
4
+ private timeout;
5
+ constructor();
6
+ sendAsync(data: any): Promise<Response>;
7
+ private send;
8
+ }
@@ -0,0 +1,183 @@
1
+ interface ContactShape {
2
+ id: string;
3
+ name: string;
4
+ email?: string;
5
+ phone?: string;
6
+ mobileNumber?: string;
7
+ officeNumber?: string;
8
+ faxNumber?: string;
9
+ homeNumber?: string;
10
+ homeMobileNumber?: string;
11
+ extension?: string;
12
+ organization?: string;
13
+ }
14
+ export type Contact = ContactShape & {
15
+ email: string;
16
+ } | ContactShape & {
17
+ phone: string;
18
+ };
19
+ export type Message<T extends EventType = EventType> = {
20
+ type: T;
21
+ payload: EventPayload<T>;
22
+ };
23
+ export type Response = {
24
+ type?: string;
25
+ message?: string;
26
+ errorMessage?: string;
27
+ payload?: any;
28
+ };
29
+ export declare enum EventType {
30
+ GET_CONTACTS_AUTO_SUGGEST = "xBeesGetContactsAutoSuggest",
31
+ ADD_CALL = "xBeesAddCall",
32
+ TERMINATE_CALL = "xBeesTerminateCall",
33
+ USE_THEME = "xBeesUseTheme",
34
+ PBX_TOKEN = "xBeesPbxToken"
35
+ }
36
+ export declare enum ClientEventType {
37
+ READY = "xBeesReady",
38
+ CONTEXT = "xBeesContext",
39
+ CURRENT_CONTACT = "xBeesCurrentContact",
40
+ THEME_MODE = "xBeesThemeMode",
41
+ THEME = "xBeesTheme",
42
+ START_CALL = "xBeesStartCall",
43
+ VIEW_PORT = "xBeesViewPort",
44
+ REBOOT = "xBeesReboot",
45
+ TO_CLIPBOARD = "xBeesToClipboard",
46
+ NOT_AUTHORIZED = "xBeesNotAuthorized",
47
+ AUTHORIZED = "xBeesAuthorized",
48
+ CONTACTS_AUTO_SUGGEST = "xBeesContactsAutoSuggest"
49
+ }
50
+ export type MessageType = ClientEventType | EventType;
51
+ export type ThemeChangePayload = {
52
+ mode: "light" | "dark";
53
+ themeOptions?: {
54
+ typography?: unknown;
55
+ palette?: unknown;
56
+ };
57
+ };
58
+ export type ThemeChangeListenerCallback = (payload: ThemeChangePayload | unknown) => void;
59
+ export type ListenerCallback = (payload: unknown) => void;
60
+ export type DefaultCallback = (...args: unknown[]) => void;
61
+ type CallStartInfo = {
62
+ destination: string;
63
+ video: boolean;
64
+ };
65
+ type EventPayload<T extends EventType> = T extends EventType.GET_CONTACTS_AUTO_SUGGEST ? string : T extends EventType.ADD_CALL ? CallStartInfo : T extends EventType.USE_THEME ? string : T extends EventType.PBX_TOKEN ? string : never;
66
+ export type EventPayloadMap = {
67
+ [EventType.GET_CONTACTS_AUTO_SUGGEST]: string;
68
+ [EventType.ADD_CALL]: CallStartInfo;
69
+ [EventType.USE_THEME]: string;
70
+ [EventType.PBX_TOKEN]: string;
71
+ };
72
+ export type EventCallbackMap = {
73
+ [EventType.GET_CONTACTS_AUTO_SUGGEST]: (query: EventPayloadMap[EventType.GET_CONTACTS_AUTO_SUGGEST]) => void;
74
+ [EventType.ADD_CALL]: (callStartInfo: EventPayloadMap[EventType.ADD_CALL]) => void;
75
+ [EventType.USE_THEME]: (themeName: EventPayloadMap[EventType.USE_THEME]) => void;
76
+ [EventType.PBX_TOKEN]: (token: EventPayloadMap[EventType.PBX_TOKEN]) => void;
77
+ };
78
+ export type ClientEventCallbackMap = {
79
+ [ClientEventType.READY]: () => void;
80
+ [ClientEventType.CONTEXT]: (context: any) => void;
81
+ [ClientEventType.CURRENT_CONTACT]: (contact: Contact) => void;
82
+ [ClientEventType.THEME_MODE]: (themeMode: string) => void;
83
+ [ClientEventType.REBOOT]: () => void;
84
+ [ClientEventType.TO_CLIPBOARD]: (text: string) => void;
85
+ [ClientEventType.NOT_AUTHORIZED]: () => void;
86
+ [ClientEventType.AUTHORIZED]: () => void;
87
+ [ClientEventType.CONTACTS_AUTO_SUGGEST]: (suggestions: string[]) => void;
88
+ };
89
+ export interface ReactNativeWebView {
90
+ postMessage: (payload: unknown, origin?: string, d?: unknown[]) => void;
91
+ }
92
+ export interface Listener<T extends EventType = EventType> {
93
+ eventName: T;
94
+ callback: Callback<T>;
95
+ }
96
+ export type WorkVariants = 'info-frame' | 'daemon' | 'dialog';
97
+ export interface AutoSuggestResult {
98
+ contacts: Contact[];
99
+ query: string;
100
+ }
101
+ export interface SendData {
102
+ sendAsync(data: any): Promise<Response>;
103
+ }
104
+ export type Resolve = (contacts: Contact[]) => void;
105
+ export type Reject = (reason: string) => void;
106
+ export type Callback<T extends EventType = EventType> = T extends keyof EventCallbackMap ? EventCallbackMap[T] : DefaultCallback;
107
+ export type RemoveEventListener = () => void;
108
+ export interface ClientConnect {
109
+ /**
110
+ * Sends to x-bees signal that iFrame is ready to be shown. iFrame should send it when the application starts and ready */
111
+ ready: () => Promise<Response>;
112
+ /**
113
+ * Retrieves the version of xBeesConnect */
114
+ version: () => string;
115
+ /**
116
+ * Determines x-bees is using this connect for messages only and this integration will not be shown on UI */
117
+ isDaemon: () => boolean;
118
+ /**
119
+ * Determines x-bees is using this connect for representation on UI and this integration will be shown on UI
120
+ * this opposite to {@link isDaemon} */
121
+ showsUi: () => boolean;
122
+ /**
123
+ * Retrieves current x-bees context data */
124
+ getContext: () => Promise<Response>;
125
+ /**
126
+ * Retrieves current opened in x-bees contact data */
127
+ getCurrentContact: () => Promise<Response>;
128
+ /**
129
+ * Retrieves current theme mode (light or dark) */
130
+ getThemeMode: () => Promise<Response>;
131
+ /**
132
+ * Retrieves current theme with mode (light or dark) and theme options like typography settings and palette */
133
+ getTheme: () => Promise<Response>;
134
+ /**
135
+ * Sends request to x-bees to start a call with the number */
136
+ startCall: (phoneNumber: string) => Promise<Response>;
137
+ /**
138
+ * Sends request to x-bees to restart the iFrame, reload with actual params and token */
139
+ reboot: () => Promise<Response>;
140
+ /**
141
+ * Sends request to x-bees about current frame size change */
142
+ setViewport: (payload: {
143
+ height: number;
144
+ width: number;
145
+ }) => Promise<Response>;
146
+ /**
147
+ * Sends request to x-bees to put string to the users clipboard */
148
+ toClipboard: (payload: string) => Promise<Response>;
149
+ /**
150
+ * Sends a response to x-bees for contacts autoSuggest */
151
+ getContactsAutoSuggest: (payload: AutoSuggestResult) => Promise<Response>;
152
+ /**
153
+ * pushes to x-bees message that user is authorized and no more actions required */
154
+ isAuthorized: (payload: string) => Promise<Response>;
155
+ /**
156
+ * pushes to x-bees message that user actions required */
157
+ isNotAuthorized: (payload: string) => Promise<Response>;
158
+ /**
159
+ * Starts listen for one of the events of the x-bees and handle with the provided callback */
160
+ addEventListener: <T extends EventType = EventType>(eventName: T, callback: Callback<T>) => RemoveEventListener;
161
+ /**
162
+ * Stops listen for one of the events of the x-bees with this particular callback */
163
+ removeEventListener: <T extends EventType = EventType>(eventName: T, callback: Callback<T>) => void;
164
+ /**
165
+ * Starts listen for the events of changing theme and handle with the provided callback */
166
+ onThemeChange: (callback: Callback<EventType.USE_THEME>) => void;
167
+ /**
168
+ * Starts listen for the events of changing pbx token and handle with the provided callback */
169
+ onPbxTokenChange: (callback: Callback<EventType.PBX_TOKEN>) => void;
170
+ /**
171
+ * Starts listen for the events of searching contacts and handle autosuggestion with the provided callback */
172
+ onSuggestContacts: (callback: (query: string, resolve: Resolve, reject: Reject) => void) => RemoveEventListener;
173
+ /**
174
+ * Starts listen for the events of starting the call and handle with the provided callback */
175
+ onCallStarted: (callback: Callback<EventType.ADD_CALL>) => void;
176
+ /**
177
+ * Starts listen for the events of ending the call and handle with the provided callback */
178
+ onCallEnded: (callback: Callback<EventType.TERMINATE_CALL>) => void;
179
+ /**
180
+ * Removes particular callback from handling events */
181
+ off: (callback: Callback) => void;
182
+ }
183
+ export {};
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@wildix/xbees-connect",
3
+ "version": "1.0.4-alpha.0",
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
+ "license": "MIT",
8
+ "main": "./dist-cjs/index.js",
9
+ "types": "./dist-types/index.d.ts",
10
+ "module": "./dist-es/index.js",
11
+ "type": "module",
12
+ "scripts": {
13
+ "build:es": "tsc -p tsconfig.es.json",
14
+ "build:types": "tsc -p tsconfig.types.json",
15
+ "build:docs": "typedoc",
16
+ "clean": "rimraf ./dist-* && rimraf *.tsbuildinfo"
17
+ },
18
+ "files": [
19
+ "dist-*/**"
20
+ ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git@git.wildix.com:dimitri.chernykh/sdk-ui.git"
24
+ },
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "dependencies": {
32
+ "typescript": "^5.2.2"
33
+ },
34
+ "devDependencies": {
35
+ "rimraf": "^5.0.5"
36
+ },
37
+ "gitHead": "88d4593f7ab0adcff767df0f6297531a632558aa"
38
+ }