@voicenter-team/events-sdk 0.0.8 → 0.0.9

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 (54) hide show
  1. package/dist/voicenter-events-sdk.d.ts +179 -30
  2. package/package.json +4 -1
  3. package/.eslintrc.cjs +0 -16
  4. package/.github/workflows/main.yml +0 -16
  5. package/.idea/VoicenterEventsSDK.iml +0 -12
  6. package/.idea/git_toolbox_prj.xml +0 -15
  7. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  8. package/.idea/jsLibraryMappings.xml +0 -6
  9. package/.idea/jsLinters/eslint.xml +0 -7
  10. package/.idea/modules.xml +0 -8
  11. package/.idea/vcs.xml +0 -6
  12. package/.nvmrc +0 -1
  13. package/TODELETE_TEMP/events.json +0 -69122
  14. package/TODELETE_TEMP/temphelper.cjs +0 -101
  15. package/docs/package-lock.json +0 -3820
  16. package/docs/package.json +0 -25
  17. package/docs/src/.vuepress/client.js +0 -8
  18. package/docs/src/.vuepress/components/Demo.vue +0 -183
  19. package/docs/src/.vuepress/config.js +0 -60
  20. package/docs/src/.vuepress/public/favicon.ico +0 -0
  21. package/docs/src/.vuepress/public/images/logo.png +0 -0
  22. package/docs/src/.vuepress/styles/index.scss +0 -0
  23. package/docs/src/.vuepress/styles/index.styl +0 -8
  24. package/docs/src/.vuepress/styles/palette.styl +0 -10
  25. package/docs/src/demo.md +0 -7
  26. package/docs/src/index.md +0 -4
  27. package/jest.config.js +0 -11
  28. package/src/classes/auth/auth.class.ts +0 -205
  29. package/src/classes/auth/auth.urls.ts +0 -10
  30. package/src/classes/events-sdk/events-sdk-default-options.ts +0 -46
  31. package/src/classes/events-sdk/events-sdk.class.ts +0 -250
  32. package/src/classes/events-sdk/events-sdk.test.ts +0 -9
  33. package/src/classes/events-sdk/events-sdk.types.ts +0 -69
  34. package/src/classes/socket-io/socket-io.class.ts +0 -172
  35. package/src/classes/socket-io/socket-io.d.ts +0 -10
  36. package/src/classes/socket-io/versions/index.ts +0 -52
  37. package/src/classes/socket-io/versions/v1_3_7.js +0 -2083
  38. package/src/classes/storage/storage.class.ts +0 -43
  39. package/src/enum/auth.enum.ts +0 -4
  40. package/src/enum/events.enum.ts +0 -98
  41. package/src/index.ts +0 -6
  42. package/src/types/auth.d.ts +0 -49
  43. package/src/types/events.common.d.ts +0 -110
  44. package/src/types/events.d.ts +0 -175
  45. package/src/types/listeners.d.ts +0 -37
  46. package/src/types/public-api.d.ts +0 -39
  47. package/src/types/socket.d.ts +0 -5
  48. package/swagger/generated/Swagger.json +0 -1
  49. package/swagger/index.js +0 -60
  50. package/swagger/package.json +0 -21
  51. package/swagger/scripts/update-swagger-json.js +0 -53
  52. package/swagger/yarn.lock +0 -2100
  53. package/tsconfig.json +0 -50
  54. package/vite.config.ts +0 -41
@@ -1,250 +0,0 @@
1
- import AuthClass from '@/classes/auth/auth.class'
2
- import { debounce } from 'lodash'
3
- import { eventsSdkDefaultOptions } from '@/classes/events-sdk/events-sdk-default-options'
4
- import { SocketIoClass } from '@/classes/socket-io/socket-io.class'
5
- import { EventsSdkOptions, ReconnectOptions, Server, ServerParameter } from '@/classes/events-sdk/events-sdk.types'
6
- import { SocketTyped } from '@/types/socket'
7
- import {
8
- GenericEventWrapper,
9
- EventSpecificCallback,
10
- EventCallbackListenersMap,
11
- EventTypeData,
12
- EventTypeNames,
13
- } from '@/types/events'
14
- import { EventsEnum } from '@/enum/events.enum'
15
-
16
- class EventsSdkClass{
17
- constructor (options: EventsSdkOptions) {
18
- this.options = {
19
- ...eventsSdkDefaultOptions,
20
- ...options
21
- }
22
-
23
- this.server = this.options.fallbackServer
24
-
25
- this.argumentOptions = {
26
- ...options
27
- }
28
- }
29
-
30
- private argumentOptions: EventsSdkOptions
31
- public readonly options: EventsSdkOptions = {
32
- ...eventsSdkDefaultOptions
33
- }
34
- public servers: Server[] = []
35
- public server: Server
36
- public socket: SocketTyped | undefined
37
-
38
- public authClass = new AuthClass(this)
39
- public socketIoClass = new SocketIoClass(this)
40
-
41
- public reconnectOptions: ReconnectOptions = {
42
- retryCount: 1,
43
- maxReconnectAttempts: this.options.maxReconnectAttempts,
44
- reconnectionDelay: this.options.reconnectionDelay, // 10 seconds. After each re-connection attempt this number will increase (minReconnectionDelay * attempts) => 10, 20, 30, 40 seconds ... up to 5min
45
- minReconnectionDelay: this.options.reconnectionDelay, // 10 seconds
46
- maxReconnectionDelay: 60000 * 5 // 5 minutes
47
- }
48
-
49
- public retryConnection = debounce(this.connect.bind(this), this.reconnectOptions.reconnectionDelay, {
50
- leading: true,
51
- trailing: false
52
- })
53
-
54
- private listeners: EventCallbackListenersMap = {
55
- [EventsEnum.ALL_EXTENSION_STATUS]: [],
56
- [EventsEnum.ALL_DIALER_STATUS]: [],
57
- [EventsEnum.ALL_USERS_STATUS]: [],
58
- [EventsEnum.QUEUE_EVENT]: [],
59
- [EventsEnum.EXTENSION_EVENT]: [],
60
- [EventsEnum.DIALER_EVENT]: [],
61
- [EventsEnum.LOGIN_SUCCESS]: [],
62
- [EventsEnum.LOGIN_STATUS]: [],
63
- [EventsEnum.KEEP_ALIVE_RESPONSE]: [],
64
- [EventsEnum.ONLINE_STATUS_EVENT]: []
65
- }
66
- private allListeners: Array<(data: GenericEventWrapper) => void> = []
67
-
68
- public on<T extends EventTypeNames> (event: T, callback: EventSpecificCallback<T>): void
69
- public on (event: '*', callback: (data: GenericEventWrapper) => void): void
70
- public on (event: unknown, callback: unknown) {
71
- if (event === '*') {
72
- this.allListeners.push(callback as (data: GenericEventWrapper) => void)
73
- } else {
74
- // Handle specific event type with strong typing
75
- this.listeners[event as EventTypeNames].push(callback as EventSpecificCallback<EventTypeNames>)
76
- }
77
- }
78
-
79
- public off<T extends EventTypeNames> (event: T, callback: EventSpecificCallback<T>): void
80
- public off (event: '*', callback: (data: GenericEventWrapper) => void): void
81
- public off (event: unknown, callback: unknown) {
82
- if (event === '*') {
83
- this.allListeners = this.allListeners.filter(item => item !== callback)
84
- } else {
85
- const data = this.listeners[event as EventTypeNames] as Array<EventSpecificCallback<EventTypeNames>>
86
- const filtered = data.filter(item => item !== callback)
87
-
88
- this.listeners = {
89
- ...this.listeners,
90
- [event as EventTypeNames]: filtered
91
- }
92
- }
93
- }
94
-
95
- public emit <T extends EventTypeNames> (event: T, data: EventTypeData<T>) {
96
- this.socketIoClass.lastEventTimestamp = new Date().getTime()
97
-
98
- this.listeners[event].forEach(callback => callback({
99
- name: event,
100
- data
101
- }))
102
-
103
- const allEventData: GenericEventWrapper = {
104
- name: event,
105
- data: data as any
106
- }
107
-
108
- this.allListeners.forEach((callback) => callback(allEventData))
109
- }
110
-
111
- public connect (server: ServerParameter = ServerParameter.DEFAULT, skipLogin = false) {
112
- let serverToConnect: Server | undefined
113
-
114
- if (server === ServerParameter.DEFAULT) {
115
- serverToConnect = this.findCurrentServer()
116
- }
117
-
118
- if (server === ServerParameter.NEXT) {
119
- serverToConnect = this.findNextAvailableServer()
120
- }
121
-
122
- if (server === ServerParameter.PREVIOUS) {
123
- serverToConnect = this.findMaxPriorityServer()
124
- }
125
-
126
- if (!serverToConnect) {
127
- this.server = this.findCurrentServer()
128
- }
129
-
130
- this.socketIoClass.doReconnect = true
131
-
132
- this.socketIoClass.initSocketConnection()
133
-
134
- this.socketIoClass.initSocketEvents()
135
-
136
- this.socketIoClass.initKeepAlive()
137
-
138
- // TODO: check if it is needed here
139
- if (skipLogin) {
140
- return
141
- }
142
- }
143
-
144
- public disconnect () {
145
- this.socketIoClass.doReconnect = false
146
- this.socketIoClass.closeAllConnections()
147
- }
148
-
149
- public clearKeepAliveInterval () {
150
- this.socketIoClass.clearKeepAliveInterval()
151
- }
152
-
153
- private findCurrentServer (): Server {
154
- if (this.servers.length) {
155
- this.server = this.servers[0]
156
- }
157
- if (!this.server) {
158
- this.server = this.options.fallbackServer
159
- }
160
- return this.server
161
- }
162
-
163
- private findNextAvailableServer (): Server {
164
- // this.log(INFO, 'Failover -> Trying to find another server');
165
-
166
- const currentServerPriority = this.server.Priority
167
-
168
- const nextServerPriority = currentServerPriority + 1
169
-
170
- const nextServer = this.servers.find(server => server.Priority === nextServerPriority) || this.findMinPriorityServer()
171
-
172
- this.server = { ...nextServer }
173
-
174
- // this.log(INFO, 'Failover -> Found new server. Connecting to it...', this.server);
175
-
176
- return this.server
177
- }
178
-
179
- private findMaxPriorityServer (): Server {
180
- // this.log(INFO, 'Fallback -> Trying to find previous server');
181
-
182
- const maxPriorityServer = this.getServerWithHighestPriority(this.servers)
183
-
184
- if (!this.server) {
185
- this.server = maxPriorityServer
186
-
187
- return this.server
188
- }
189
-
190
- if (this.server && maxPriorityServer.Domain !== this.server.Domain) {
191
- this.server = maxPriorityServer
192
-
193
- // this.log(INFO, 'Fallback -> Trying to find previous server');
194
-
195
- return this.server
196
- }
197
-
198
- return this.server
199
- }
200
-
201
- private findMinPriorityServer (): Server {
202
- const minPriority = Math.min(...this.servers.map(server => server.Priority))
203
-
204
- const server = this.servers.find(server => server.Priority === minPriority)
205
-
206
- if (server) {
207
- this.server = server
208
-
209
- return this.server
210
- }
211
-
212
- return this.server
213
- }
214
-
215
- public getServerWithHighestPriority (servers: Server[]): Server {
216
- let chosenServer: Server | undefined
217
-
218
- let maxPriority = Number.MAX_SAFE_INTEGER
219
-
220
- chosenServer = servers.find(server => {
221
- if (server.Priority < maxPriority) {
222
- maxPriority = server.Priority
223
-
224
- chosenServer = server
225
- }
226
- })
227
-
228
- return chosenServer ? chosenServer : this.server
229
- }
230
-
231
- public async init () {
232
- if (this.socket) {
233
- // this.emit(eventTypes.CLOSE);
234
- }
235
-
236
- await this.authClass.login(this.options)
237
-
238
- this.getServers()
239
-
240
- return true
241
- }
242
-
243
- private getServers () {
244
- if (this.options.serverFetchStrategy === 'static' && this.argumentOptions.servers && Array.isArray(this.argumentOptions.servers) && this.argumentOptions.servers.length > 1) {
245
- this.servers = this.argumentOptions.servers
246
- }
247
- }
248
- }
249
-
250
- export default EventsSdkClass
@@ -1,9 +0,0 @@
1
- import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
2
- import { eventsSdkDefaultOptions } from '@/classes/events-sdk/events-sdk-default-options'
3
-
4
- describe('EventsSdkClass', () => {
5
- it('should be true', () => {
6
- const eventsSdkClass = new EventsSdkClass(eventsSdkDefaultOptions)
7
- expect(eventsSdkClass.init()).toBe(true)
8
- })
9
- })
@@ -1,69 +0,0 @@
1
- import { LoginType } from 'enum/auth.enum'
2
-
3
- export interface EventsSdkOptions {
4
- fallbackServer: Server,
5
- refreshTokenUrl?: string,
6
- refreshToken?: string,
7
- servers?: string,
8
- token: string,
9
- tokenExpiry?: Date,
10
- loginType: LoginType,
11
- forceNew?: boolean,
12
- reconnectionDelay: number,
13
- reconnectionDelayMax?: number,
14
- maxReconnectAttempts: number,
15
- timeout?: number,
16
- keepAliveTimeout: number,
17
- idleInterval?: number,
18
- protocol: string,
19
- transports?: string[],
20
- upgrade?: boolean,
21
- serverFetchStrategy?: string,
22
- serverType?: number,
23
- useLogger?: boolean,
24
- loggerSocketConnection?: string,
25
- loggerServer?: string,
26
- loggerConfig?: LoggerConfig,
27
- loggerConnectOptions?: LoggerConnectOptions,
28
- email: string,
29
- password: string,
30
- username: string,
31
- }
32
-
33
- export interface Server {
34
- Priority: number,
35
- Domain: string,
36
- URLID: number,
37
- Version: string,
38
- }
39
-
40
- export interface LoggerConfig {
41
- logToConsole?: boolean,
42
- overloadGlobalConsole?: boolean,
43
- namespace?: string,
44
- socketEmitInterval?: number
45
- }
46
-
47
- export interface LoggerConnectOptions {
48
- reconnection?: boolean,
49
- reconnectionDelay?: number,
50
- reconnectionAttempts?: number,
51
- perMessageDeflate?: boolean,
52
- upgrade?: boolean,
53
- transports?: string[],
54
- debug?: boolean
55
- }
56
-
57
- export interface ReconnectOptions {
58
- retryCount: number,
59
- maxReconnectAttempts: number,
60
- reconnectionDelay: number,
61
- minReconnectionDelay: number,
62
- maxReconnectionDelay: number
63
- }
64
-
65
- export enum ServerParameter {
66
- DEFAULT = 'default',
67
- NEXT = 'next',
68
- PREVIOUS = 'previous'
69
- }
@@ -1,172 +0,0 @@
1
- import { ManagerOptions, SocketOptions } from 'socket.io-client'
2
- import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
3
- import sockets, { TypedSocketIo } from '@/classes/socket-io/versions'
4
- import { SocketTyped } from '@/types/socket'
5
- import { ServerParameter } from '@/classes/events-sdk/events-sdk.types'
6
- import { EventsEnum } from '@/enum/events.enum'
7
- import { KeepAliveResponseEvent } from '@/types/events'
8
- import { StorageClass } from '@/classes/storage/storage.class'
9
-
10
- export class SocketIoClass{
11
- constructor (private readonly eventsSdkClass: EventsSdkClass) {
12
- this.eventsSdkClass = eventsSdkClass
13
- }
14
-
15
- public io: SocketTyped | undefined
16
- public ioFunction: TypedSocketIo | undefined
17
- public lastEventTimestamp = new Date().getTime()
18
- public doReconnect = true
19
- private keepAliveInterval: ReturnType<typeof setInterval> | undefined
20
- private keepReconnectInterval: ReturnType<typeof setInterval> | undefined
21
- private connected = false
22
-
23
- public getSocketIoFunction (Client: string) {
24
- const parsedArray = Client.split('v=')
25
-
26
- const version = 'v'
27
- .concat(parsedArray[parsedArray.length - 1])
28
- .replaceAll('.', '_')
29
-
30
- this.ioFunction = sockets.getSocketVersion(version)
31
- }
32
-
33
- public initSocketConnection () {
34
- const token = this.eventsSdkClass.authClass.token
35
-
36
- const protocol = this.eventsSdkClass.options.protocol
37
-
38
- const server = this.eventsSdkClass.server
39
-
40
- try {
41
- const domain = server.Domain
42
-
43
- const url = `${protocol}://${domain}`
44
-
45
- // this.log(INFO, 'Connecting to..', url);
46
-
47
- const options: Partial<ManagerOptions & SocketOptions> = {
48
- reconnection: false,
49
- upgrade: false,
50
- transports: [ 'websocket' ],
51
- forceNew: true,
52
- query: {
53
- token
54
- }
55
- }
56
-
57
- if (token) {
58
- options.query = {
59
- token
60
- }
61
- }
62
-
63
- if (this.ioFunction) {
64
- this.io = this.ioFunction(url, options)
65
- }
66
- } catch (e) {
67
- // this.log(ERROR, e);
68
- }
69
- }
70
-
71
- public initSocketEvents () {
72
- if (this.io) {
73
- this.io
74
- .on(EventsEnum.LOGIN_SUCCESS, (data) => this.eventsSdkClass.emit(EventsEnum.LOGIN_SUCCESS, data))
75
- .on(EventsEnum.QUEUE_EVENT, (data) => this.eventsSdkClass.emit(EventsEnum.QUEUE_EVENT, data))
76
- .on(EventsEnum.EXTENSION_EVENT, (data) => this.eventsSdkClass.emit(EventsEnum.EXTENSION_EVENT, data))
77
- .on(EventsEnum.DIALER_EVENT, (data) => this.eventsSdkClass.emit(EventsEnum.DIALER_EVENT, data))
78
- .on(EventsEnum.LOGIN_STATUS, (data) => this.eventsSdkClass.emit(EventsEnum.LOGIN_STATUS, data))
79
- .on(EventsEnum.ALL_EXTENSION_STATUS, (data) => this.eventsSdkClass.emit(EventsEnum.ALL_EXTENSION_STATUS, data))
80
- .on(EventsEnum.ALL_DIALER_STATUS, (data) => this.eventsSdkClass.emit(EventsEnum.ALL_DIALER_STATUS, data))
81
- .on(EventsEnum.KEEP_ALIVE_RESPONSE, (data) => this.onKeepAliveResponse(data))
82
- .on(EventsEnum.CONNECT, () => this.onConnect())
83
- .on(EventsEnum.DISCONNECT, () => this.onDisconnect())
84
- }
85
- }
86
-
87
- public clearKeepAliveInterval () {
88
- if (this.keepAliveInterval) {
89
- clearInterval(this.keepAliveInterval)
90
- }
91
- }
92
-
93
- public initKeepAlive () {
94
- this.clearKeepAliveInterval()
95
-
96
- this.keepAliveInterval = setInterval(async () => {
97
- const now = new Date().getTime()
98
-
99
- // if (now > this.lastEventTimestamp + delta) {
100
- // this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
101
- //
102
- // return
103
- // }
104
- //
105
- // if (!this.io) {
106
- // this.initSocketConnection()
107
- //
108
- // return
109
- // }
110
-
111
- if (now > this.lastEventTimestamp + this.eventsSdkClass.options.keepAliveTimeout && this.io) {
112
- this.io.emit(EventsEnum.KEEP_ALIVE, this.eventsSdkClass.authClass.token)
113
-
114
- return
115
- }
116
-
117
- }, this.eventsSdkClass.options.keepAliveTimeout)
118
- }
119
-
120
- public closeAllConnections () {
121
- if (this.io) {
122
- this.io.close()
123
-
124
- this.io?.disconnect()
125
-
126
- this.io = undefined
127
- }
128
-
129
- StorageClass.clearSessionStorage()
130
- }
131
-
132
- private onKeepAliveResponse (data: KeepAliveResponseEvent) {
133
- if (data.errorCode) {
134
- this.initSocketConnection()
135
-
136
- return
137
- }
138
-
139
- if (this.connected) {
140
- this.lastEventTimestamp = new Date().getTime()
141
- } else {
142
- this.initSocketConnection()
143
- }
144
- }
145
-
146
- private onConnect () {
147
- if (this.keepReconnectInterval) {
148
- clearInterval(this.keepReconnectInterval)
149
- }
150
-
151
- this.connected = true
152
-
153
- this.eventsSdkClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: true })
154
- }
155
-
156
- private onDisconnect () {
157
- this.connected = false
158
-
159
- this.closeAllConnections()
160
-
161
- this.eventsSdkClass.emit(EventsEnum.ONLINE_STATUS_EVENT, { isSocketConnected: false })
162
-
163
- if (!this.doReconnect) {
164
- return
165
- }
166
-
167
- this.keepReconnectInterval = setInterval(() => {
168
- console.log('attempt to connect...')
169
- this.eventsSdkClass.connect(ServerParameter.NEXT, true)
170
- }, 15000)
171
- }
172
- }
@@ -1,10 +0,0 @@
1
- export interface SocketIoOptions {
2
- reconnection: boolean,
3
- perMessageDeflate: boolean,
4
- upgrade: boolean,
5
- transports: string[],
6
- debug: boolean,
7
- query: {
8
- token: string
9
- }
10
- }
@@ -1,52 +0,0 @@
1
- import { io } from 'socket.io-client'
2
- import { SocketTyped } from '@/types/socket'
3
-
4
- const importModules: Record<string, { default?: unknown }> = import.meta.glob(
5
- './v*.js',
6
- { eager: true }
7
- )
8
-
9
- const SOCKET_NAME_REGEX = /v\d+_\d+_\d+/
10
-
11
- export type TypedSocketIo = (...args: Parameters<typeof io>) => SocketTyped
12
-
13
- type SocketIoFn = () => TypedSocketIo
14
-
15
- function isSocketIoFn (socket: unknown): socket is SocketIoFn {
16
- return typeof socket === 'function'
17
- }
18
-
19
- const sockets = Object.entries(importModules)
20
- .reduce<Record<string, TypedSocketIo>>(
21
- (acc, currentValue) => {
22
- const module = currentValue[1].default
23
- const moduleName = currentValue[0].match(SOCKET_NAME_REGEX)?.[0]
24
-
25
- if (isSocketIoFn(module) && moduleName) {
26
- acc[moduleName] = module()
27
- }
28
-
29
- return acc
30
- },
31
- {}
32
- )
33
-
34
- const getSocketVersion = (version: string) => {
35
- if (version in sockets) {
36
- return sockets[version]
37
- } else {
38
- throw new Error(`Socket version ${version} not found`)
39
- }
40
- }
41
-
42
- const makeSocketVersion = (version: string, ...args: Parameters<typeof io>) => {
43
- const socket = getSocketVersion(version)
44
-
45
- return socket(...args)
46
- }
47
-
48
- export default {
49
- ...sockets,
50
- getSocketVersion,
51
- makeSocketVersion
52
- }