@voicenter-team/events-sdk 0.0.22 → 0.0.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voicenter-team/events-sdk",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "description": "",
5
5
  "main": "dist/voicenter-events-sdk.cjs.js",
6
6
  "jsdelivr": "dist/voicenter-events-sdk.umd.js",
@@ -34,7 +34,10 @@ class AuthClass{
34
34
  password: options.password
35
35
  }
36
36
 
37
- this.storageKey = md5(JSON.stringify(options))
37
+ this.storageKey = md5(JSON.stringify({
38
+ ...options,
39
+ loggerSocketConnection: null
40
+ }))
38
41
 
39
42
  if (this.lastLoginTimestamp && this.lastLoginTimestamp + this.delay > new Date().getTime()) {
40
43
  return
@@ -59,6 +62,8 @@ class AuthClass{
59
62
  const loginSessionData = await StorageClass.getSessionStorageDataByKey<LoginSessionData>(key)
60
63
 
61
64
  if (loginSessionData) {
65
+ this.eventsSdkClass.loggerClass.log(LoggerTypeEnum.INFO, 'got data from session', loginSessionData)
66
+
62
67
  this.onLoginResponse(loginSessionData)
63
68
 
64
69
  return true
@@ -0,0 +1,72 @@
1
+ import {
2
+ EventCallbackListenersMap,
3
+ EventSpecificCallback,
4
+ EventTypeData,
5
+ EventTypeNames,
6
+ GenericEventWrapper
7
+ } from '@/types/events'
8
+ import { EventsEnum } from '@/enum/events.enum'
9
+ import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
10
+
11
+ export class EventEmitterClass{
12
+ private listeners: EventCallbackListenersMap = {
13
+ [EventsEnum.ALL_EXTENSION_STATUS]: [],
14
+ [EventsEnum.ALL_DIALER_STATUS]: [],
15
+ [EventsEnum.ALL_USERS_STATUS]: [],
16
+ [EventsEnum.QUEUE_EVENT]: [],
17
+ [EventsEnum.EXTENSION_EVENT]: [],
18
+ [EventsEnum.DIALER_EVENT]: [],
19
+ [EventsEnum.LOGIN_SUCCESS]: [],
20
+ [EventsEnum.LOGIN_STATUS]: [],
21
+ [EventsEnum.KEEP_ALIVE_RESPONSE]: [],
22
+ [EventsEnum.ONLINE_STATUS_EVENT]: []
23
+ }
24
+ private allListeners: Array<(data: GenericEventWrapper) => void> = []
25
+
26
+ constructor (private readonly eventsSdkClass: EventsSdkClass) {
27
+ this.eventsSdkClass = eventsSdkClass
28
+ }
29
+
30
+ public on<T extends EventTypeNames> (event: T, callback: EventSpecificCallback<T>): void
31
+ public on (event: '*', callback: (data: GenericEventWrapper) => void): void
32
+ public on (event: unknown, callback: unknown) {
33
+ if (event === '*') {
34
+ this.allListeners.push(callback as (data: GenericEventWrapper) => void)
35
+ } else {
36
+ // Handle specific event type with strong typing
37
+ this.listeners[event as EventTypeNames].push(callback as EventSpecificCallback<EventTypeNames>)
38
+ }
39
+ }
40
+
41
+ public off<T extends EventTypeNames> (event: T, callback: EventSpecificCallback<T>): void
42
+ public off (event: '*', callback: (data: GenericEventWrapper) => void): void
43
+ public off (event: unknown, callback: unknown) {
44
+ if (event === '*') {
45
+ this.allListeners = this.allListeners.filter(item => item !== callback)
46
+ } else {
47
+ const data = this.listeners[event as EventTypeNames] as Array<EventSpecificCallback<EventTypeNames>>
48
+ const filtered = data.filter(item => item !== callback)
49
+
50
+ this.listeners = {
51
+ ...this.listeners,
52
+ [event as EventTypeNames]: filtered
53
+ }
54
+ }
55
+ }
56
+
57
+ public emit <T extends EventTypeNames> (event: T, data: EventTypeData<T>) {
58
+ this.eventsSdkClass.socketIoClass.lastEventTimestamp = new Date().getTime()
59
+
60
+ this.listeners[event].forEach(callback => callback({
61
+ name: event,
62
+ data
63
+ }))
64
+
65
+ const allEventData: GenericEventWrapper = {
66
+ name: event,
67
+ data: data as any
68
+ }
69
+
70
+ this.allListeners.forEach((callback) => callback(allEventData))
71
+ }
72
+ }
@@ -5,14 +5,13 @@ import { SocketIoClass } from '@/classes/socket-io/socket-io.class'
5
5
  import { EventsSdkOptions, ReconnectOptions, Server, ServerParameter } from '@/classes/events-sdk/events-sdk.types'
6
6
  import { SocketTyped } from '@/types/socket'
7
7
  import {
8
- EventCallbackListenersMap,
9
8
  EventSpecificCallback,
10
- EventTypeData,
11
9
  EventTypeNames,
12
10
  GenericEventWrapper,
13
11
  } from '@/types/events'
14
12
  import { EventsEnum } from '@/enum/events.enum'
15
13
  import { LoggerClass } from '@/classes/logger/logger.class'
14
+ import { EventEmitterClass } from '@/classes/event-emitter/event-emitter.class'
16
15
 
17
16
  class EventsSdkClass{
18
17
  private argumentOptions: EventsSdkOptions
@@ -29,25 +28,12 @@ class EventsSdkClass{
29
28
  public authClass = new AuthClass(this)
30
29
  public socketIoClass = new SocketIoClass(this)
31
30
  public loggerClass = new LoggerClass(this)
31
+ public eventEmitterClass = new EventEmitterClass(this)
32
32
 
33
33
  public reconnectOptions: ReconnectOptions
34
34
 
35
35
  public retryConnection
36
36
 
37
- private listeners: EventCallbackListenersMap = {
38
- [EventsEnum.ALL_EXTENSION_STATUS]: [],
39
- [EventsEnum.ALL_DIALER_STATUS]: [],
40
- [EventsEnum.ALL_USERS_STATUS]: [],
41
- [EventsEnum.QUEUE_EVENT]: [],
42
- [EventsEnum.EXTENSION_EVENT]: [],
43
- [EventsEnum.DIALER_EVENT]: [],
44
- [EventsEnum.LOGIN_SUCCESS]: [],
45
- [EventsEnum.LOGIN_STATUS]: [],
46
- [EventsEnum.KEEP_ALIVE_RESPONSE]: [],
47
- [EventsEnum.ONLINE_STATUS_EVENT]: []
48
- }
49
- private allListeners: Array<(data: GenericEventWrapper) => void> = []
50
-
51
37
  constructor (options: EventsSdkOptions) {
52
38
  this.options = {
53
39
  ...eventsSdkDefaultOptions,
@@ -75,48 +61,16 @@ class EventsSdkClass{
75
61
  }
76
62
 
77
63
  public on<T extends EventTypeNames> (event: T, callback: EventSpecificCallback<T>): void
78
- public on (event: '*', callback: (data: GenericEventWrapper) => void): void
79
- public on (event: unknown, callback: unknown) {
80
- if (event === '*') {
81
- this.allListeners.push(callback as (data: GenericEventWrapper) => void)
82
- } else {
83
- // Handle specific event type with strong typing
84
- this.listeners[event as EventTypeNames].push(callback as EventSpecificCallback<EventTypeNames>)
85
- }
64
+ public on (event: '*', callback: (data: GenericEventWrapper) => void): void {
65
+ this.eventEmitterClass.on(event, callback)
86
66
  }
87
67
 
88
- public off<T extends EventTypeNames> (event: T, callback: EventSpecificCallback<T>): void
89
- public off (event: '*', callback: (data: GenericEventWrapper) => void): void
90
- public off (event: unknown, callback: unknown) {
91
- if (event === '*') {
92
- this.allListeners = this.allListeners.filter(item => item !== callback)
93
- } else {
94
- const data = this.listeners[event as EventTypeNames] as Array<EventSpecificCallback<EventTypeNames>>
95
- const filtered = data.filter(item => item !== callback)
96
-
97
- this.listeners = {
98
- ...this.listeners,
99
- [event as EventTypeNames]: filtered
100
- }
68
+ public emit (event: EventsEnum, data: unknown) {
69
+ if (this.socketIoClass.io) {
70
+ this.socketIoClass.io.emit(event, data)
101
71
  }
102
72
  }
103
73
 
104
- public emit <T extends EventTypeNames> (event: T, data: EventTypeData<T>) {
105
- this.socketIoClass.lastEventTimestamp = new Date().getTime()
106
-
107
- this.listeners[event].forEach(callback => callback({
108
- name: event,
109
- data
110
- }))
111
-
112
- const allEventData: GenericEventWrapper = {
113
- name: event,
114
- data: data as any
115
- }
116
-
117
- this.allListeners.forEach((callback) => callback(allEventData))
118
- }
119
-
120
74
  public connect (serverParameter: ServerParameter) {
121
75
  // if (server === ServerParameter.DEFAULT) {
122
76
  // serverToConnect = this.findCurrentServer()
@@ -230,22 +184,6 @@ class EventsSdkClass{
230
184
  }
231
185
  }
232
186
 
233
- public getServerWithHighestPriority (servers: Server[]): Server {
234
- let chosenServer: Server | undefined
235
-
236
- let maxPriority = Number.MAX_SAFE_INTEGER
237
-
238
- chosenServer = servers.find(server => {
239
- if (server.Priority < maxPriority) {
240
- maxPriority = server.Priority
241
-
242
- chosenServer = server
243
- }
244
- })
245
-
246
- return chosenServer ? chosenServer : this.server
247
- }
248
-
249
187
  public async init () {
250
188
  if (this.socket) {
251
189
  // this.emit(eventTypes.CLOSE);
@@ -1,4 +1,4 @@
1
- import { ManagerOptions, SocketOptions } from 'socket.io-client'
1
+ import { ManagerOptions, Socket, SocketOptions } from 'socket.io-client'
2
2
  import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
3
3
  import sockets, { TypedSocketIo } from '@/classes/socket-io/versions'
4
4
  import { SocketTyped } from '@/types/socket'
@@ -6,6 +6,7 @@ import { ServerParameter } from '@/classes/events-sdk/events-sdk.types'
6
6
  import { EventsEnum } from '@/enum/events.enum'
7
7
  import { KeepAliveResponseEvent } from '@/types/events'
8
8
  import { StorageClass } from '@/classes/storage/storage.class'
9
+ import { LoggerTypeEnum } from '@/enum/logger.enum'
9
10
  // import { LoggerTypeEnum } from '@/enum/logger.enum'
10
11
 
11
12
  export class SocketIoClass{
@@ -43,14 +44,13 @@ export class SocketIoClass{
43
44
 
44
45
  const url = server ? `${protocol}://${domain}` : this.eventsSdkClass.URL
45
46
 
46
- // this.eventsSdkClass.loggerClass.log(
47
- // LoggerTypeEnum.INFO,
48
- // EventsEnum.CONNECT,
49
- // 'Connecting to..',
50
- // url
51
- // )
47
+ this.eventsSdkClass.loggerClass.log(
48
+ LoggerTypeEnum.INFO,
49
+ 'Connecting to..',
50
+ url
51
+ )
52
52
 
53
- this.eventsSdkClass.emit(
53
+ this.eventsSdkClass.eventEmitterClass.emit(
54
54
  EventsEnum.ONLINE_STATUS_EVENT,
55
55
  {
56
56
  isSocketConnected: false,
@@ -80,30 +80,25 @@ export class SocketIoClass{
80
80
  } else {
81
81
  throw new Error('Socket server url no defined')
82
82
  }
83
- } catch (e) {
84
- // this.log(ERROR, e);
83
+ } catch (error) {
84
+ this.eventsSdkClass.loggerClass.log(LoggerTypeEnum.ERROR, 'init socket connection error', error)
85
85
  }
86
86
  }
87
87
 
88
88
  public initSocketEvents () {
89
89
  if (this.io) {
90
90
  this.io
91
- .on(EventsEnum.LOGIN_SUCCESS, (data) => this.eventsSdkClass.emit(EventsEnum.LOGIN_SUCCESS, data))
92
- .on(EventsEnum.QUEUE_EVENT, (data) => this.eventsSdkClass.emit(EventsEnum.QUEUE_EVENT, data))
93
- .on(EventsEnum.EXTENSION_EVENT, (data) => this.eventsSdkClass.emit(EventsEnum.EXTENSION_EVENT, data))
94
- .on(EventsEnum.DIALER_EVENT, (data) => this.eventsSdkClass.emit(EventsEnum.DIALER_EVENT, data))
95
- .on(EventsEnum.LOGIN_STATUS, (data) => this.eventsSdkClass.emit(EventsEnum.LOGIN_STATUS, data))
96
- .on(EventsEnum.ALL_EXTENSION_STATUS, (data) => this.eventsSdkClass.emit(EventsEnum.ALL_EXTENSION_STATUS, data))
97
- .on(EventsEnum.ALL_DIALER_STATUS, (data) => this.eventsSdkClass.emit(EventsEnum.ALL_DIALER_STATUS, data))
91
+ .on(EventsEnum.LOGIN_SUCCESS, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.LOGIN_SUCCESS, data))
92
+ .on(EventsEnum.QUEUE_EVENT, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.QUEUE_EVENT, data))
93
+ .on(EventsEnum.EXTENSION_EVENT, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.EXTENSION_EVENT, data))
94
+ .on(EventsEnum.DIALER_EVENT, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.DIALER_EVENT, data))
95
+ .on(EventsEnum.LOGIN_STATUS, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.LOGIN_STATUS, data))
96
+ .on(EventsEnum.ALL_EXTENSION_STATUS, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.ALL_EXTENSION_STATUS, data))
97
+ .on(EventsEnum.ALL_DIALER_STATUS, (data) => this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.ALL_DIALER_STATUS, data))
98
98
  .on(EventsEnum.KEEP_ALIVE_RESPONSE, (data) => this.onKeepAliveResponse(data))
99
99
  .on(EventsEnum.CONNECT, () => this.onConnect())
100
- .on(EventsEnum.DISCONNECT, () => this.onDisconnect())
101
- .on(EventsEnum.CONNECT_ERROR_EVENT, () => {
102
- this.eventsSdkClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: false })
103
- setTimeout(() => {
104
- this.eventsSdkClass.connect(ServerParameter.NEXT)
105
- },this.eventsSdkClass.options.reconnectionDelay)
106
- })
100
+ .on(EventsEnum.DISCONNECT, (data) => this.onDisconnect(data))
101
+ .on(EventsEnum.CONNECT_ERROR_EVENT, (data) => this.onConnectError(data))
107
102
  }
108
103
  }
109
104
 
@@ -132,7 +127,9 @@ export class SocketIoClass{
132
127
  // }
133
128
 
134
129
  if (now > this.lastEventTimestamp + this.eventsSdkClass.options.keepAliveTimeout && this.io) {
135
- this.io.emit(EventsEnum.KEEP_ALIVE, this.eventsSdkClass.authClass.token)
130
+ this.eventsSdkClass.emit(EventsEnum.KEEP_ALIVE, this.eventsSdkClass.authClass.token)
131
+
132
+ this.eventsSdkClass.loggerClass.log(LoggerTypeEnum.INFO, `EMIT -> ${EventsEnum.KEEP_ALIVE}`, this.eventsSdkClass.authClass.token)
136
133
 
137
134
  return
138
135
  }
@@ -153,6 +150,8 @@ export class SocketIoClass{
153
150
  }
154
151
 
155
152
  private onKeepAliveResponse (data: KeepAliveResponseEvent) {
153
+ this.eventsSdkClass.loggerClass.log(LoggerTypeEnum.INFO, EventsEnum.KEEP_ALIVE_RESPONSE)
154
+
156
155
  if (data.errorCode) {
157
156
  this.initSocketConnection()
158
157
 
@@ -173,15 +172,27 @@ export class SocketIoClass{
173
172
 
174
173
  this.connected = true
175
174
 
176
- this.eventsSdkClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: true })
175
+ this.eventsSdkClass.loggerClass.log(
176
+ LoggerTypeEnum.INFO,
177
+ EventsEnum.CONNECT,
178
+ this.eventsSdkClass.reconnectOptions
179
+ )
180
+
181
+ this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: true })
177
182
  }
178
183
 
179
- private onDisconnect () {
184
+ private onDisconnect (reason: Socket.DisconnectReason) {
180
185
  this.connected = false
181
186
 
187
+ this.eventsSdkClass.loggerClass.log(
188
+ LoggerTypeEnum.INFO,
189
+ EventsEnum.DISCONNECT,
190
+ reason
191
+ )
192
+
182
193
  this.closeAllConnections()
183
194
 
184
- this.eventsSdkClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: false })
195
+ this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: false })
185
196
 
186
197
  if (!this.doReconnect) {
187
198
  return
@@ -190,4 +201,18 @@ export class SocketIoClass{
190
201
  console.log('attempt to connect...')
191
202
  this.eventsSdkClass.connect(ServerParameter.NEXT)
192
203
  }
204
+
205
+ private onConnectError (data: Error) {
206
+ this.eventsSdkClass.eventEmitterClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: false })
207
+
208
+ this.eventsSdkClass.loggerClass.log(
209
+ LoggerTypeEnum.ERROR,
210
+ EventsEnum.CONNECT_ERROR_EVENT,
211
+ data
212
+ )
213
+
214
+ setTimeout(() => {
215
+ this.eventsSdkClass.connect(ServerParameter.NEXT)
216
+ },this.eventsSdkClass.options.reconnectionDelay)
217
+ }
193
218
  }