@voicenter-team/events-sdk 0.0.12 → 0.0.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.
- package/.eslintrc.cjs +17 -0
- package/.github/workflows/main.yml +16 -0
- package/.idea/VoicenterEventsSDK.iml +12 -0
- package/.idea/git_toolbox_prj.xml +15 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/jsLinters/eslint.xml +7 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.nvmrc +1 -0
- package/TODELETE_TEMP/events.json +69122 -0
- package/TODELETE_TEMP/temphelper.cjs +101 -0
- package/dist/index.d.ts +689 -11
- package/dist/voicenter-events-sdk.cjs.js +10 -10
- package/dist/voicenter-events-sdk.cjs.js.map +1 -1
- package/dist/voicenter-events-sdk.es.js +1856 -1818
- package/dist/voicenter-events-sdk.es.js.map +1 -1
- package/dist/voicenter-events-sdk.iife.js +17 -17
- package/dist/voicenter-events-sdk.iife.js.map +1 -1
- package/dist/voicenter-events-sdk.umd.js +16 -16
- package/dist/voicenter-events-sdk.umd.js.map +1 -1
- package/docs/package-lock.json +3820 -0
- package/docs/package.json +25 -0
- package/docs/src/.vuepress/client.js +8 -0
- package/docs/src/.vuepress/components/Demo.vue +191 -0
- package/docs/src/.vuepress/config.js +60 -0
- package/docs/src/.vuepress/public/favicon.ico +0 -0
- package/docs/src/.vuepress/public/images/logo.png +0 -0
- package/docs/src/.vuepress/styles/index.scss +0 -0
- package/docs/src/.vuepress/styles/index.styl +8 -0
- package/docs/src/.vuepress/styles/palette.styl +10 -0
- package/docs/src/demo.md +7 -0
- package/docs/src/index.md +4 -0
- package/interface.ts +261 -0
- package/jest.config.js +11 -0
- package/package.json +1 -4
- package/src/classes/auth/auth.class.ts +272 -0
- package/src/classes/auth/auth.urls.ts +8 -0
- package/src/classes/events-sdk/events-sdk-default-options.ts +60 -0
- package/src/classes/events-sdk/events-sdk.class.ts +250 -0
- package/src/classes/events-sdk/events-sdk.test.ts +9 -0
- package/src/classes/events-sdk/events-sdk.types.ts +71 -0
- package/src/classes/socket-io/socket-io.class.ts +172 -0
- package/src/classes/socket-io/versions/index.ts +52 -0
- package/src/classes/socket-io/versions/v1_3_7.js +2083 -0
- package/src/classes/storage/storage.class.ts +43 -0
- package/src/enum/auth.enum.ts +4 -0
- package/src/enum/events.enum.ts +98 -0
- package/src/index.ts +15 -0
- package/{dist → src}/types/auth.d.ts +12 -8
- package/{dist → src}/types/events.common.d.ts +1 -1
- package/{dist → src}/types/events.d.ts +1 -1
- package/{dist → src}/types/socket.d.ts +1 -1
- package/swagger/generated/Swagger.json +1 -0
- package/swagger/index.js +60 -0
- package/swagger/package.json +21 -0
- package/swagger/scripts/update-swagger-json.js +53 -0
- package/swagger/yarn.lock +2100 -0
- package/tsconfig.json +47 -0
- package/vite.config.ts +45 -0
- package/dist/classes/auth/auth.class.d.ts +0 -20
- package/dist/classes/auth/auth.urls.d.ts +0 -4
- package/dist/classes/events-sdk/events-sdk-default-options.d.ts +0 -2
- package/dist/classes/events-sdk/events-sdk.class.d.ts +0 -35
- package/dist/classes/events-sdk/events-sdk.test.d.ts +0 -1
- package/dist/classes/events-sdk/events-sdk.types.d.ts +0 -63
- package/dist/classes/socket-io/socket-io.class.d.ts +0 -23
- package/dist/classes/socket-io/versions/index.d.ts +0 -8
- package/dist/classes/storage/storage.class.d.ts +0 -6
- package/dist/enum/auth.enum.d.ts +0 -4
- package/dist/enum/events.enum.d.ts +0 -77
- /package/{dist → src}/classes/socket-io/socket-io.d.ts +0 -0
- /package/{dist → src}/types/listeners.d.ts +0 -0
- /package/{dist → src}/types/public-api.d.ts +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
}
|