@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.
Files changed (74) hide show
  1. package/.eslintrc.cjs +17 -0
  2. package/.github/workflows/main.yml +16 -0
  3. package/.idea/VoicenterEventsSDK.iml +12 -0
  4. package/.idea/git_toolbox_prj.xml +15 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  6. package/.idea/jsLibraryMappings.xml +6 -0
  7. package/.idea/jsLinters/eslint.xml +7 -0
  8. package/.idea/modules.xml +8 -0
  9. package/.idea/vcs.xml +6 -0
  10. package/.nvmrc +1 -0
  11. package/TODELETE_TEMP/events.json +69122 -0
  12. package/TODELETE_TEMP/temphelper.cjs +101 -0
  13. package/dist/index.d.ts +689 -11
  14. package/dist/voicenter-events-sdk.cjs.js +10 -10
  15. package/dist/voicenter-events-sdk.cjs.js.map +1 -1
  16. package/dist/voicenter-events-sdk.es.js +1856 -1818
  17. package/dist/voicenter-events-sdk.es.js.map +1 -1
  18. package/dist/voicenter-events-sdk.iife.js +17 -17
  19. package/dist/voicenter-events-sdk.iife.js.map +1 -1
  20. package/dist/voicenter-events-sdk.umd.js +16 -16
  21. package/dist/voicenter-events-sdk.umd.js.map +1 -1
  22. package/docs/package-lock.json +3820 -0
  23. package/docs/package.json +25 -0
  24. package/docs/src/.vuepress/client.js +8 -0
  25. package/docs/src/.vuepress/components/Demo.vue +191 -0
  26. package/docs/src/.vuepress/config.js +60 -0
  27. package/docs/src/.vuepress/public/favicon.ico +0 -0
  28. package/docs/src/.vuepress/public/images/logo.png +0 -0
  29. package/docs/src/.vuepress/styles/index.scss +0 -0
  30. package/docs/src/.vuepress/styles/index.styl +8 -0
  31. package/docs/src/.vuepress/styles/palette.styl +10 -0
  32. package/docs/src/demo.md +7 -0
  33. package/docs/src/index.md +4 -0
  34. package/interface.ts +261 -0
  35. package/jest.config.js +11 -0
  36. package/package.json +1 -4
  37. package/src/classes/auth/auth.class.ts +272 -0
  38. package/src/classes/auth/auth.urls.ts +8 -0
  39. package/src/classes/events-sdk/events-sdk-default-options.ts +60 -0
  40. package/src/classes/events-sdk/events-sdk.class.ts +250 -0
  41. package/src/classes/events-sdk/events-sdk.test.ts +9 -0
  42. package/src/classes/events-sdk/events-sdk.types.ts +71 -0
  43. package/src/classes/socket-io/socket-io.class.ts +172 -0
  44. package/src/classes/socket-io/versions/index.ts +52 -0
  45. package/src/classes/socket-io/versions/v1_3_7.js +2083 -0
  46. package/src/classes/storage/storage.class.ts +43 -0
  47. package/src/enum/auth.enum.ts +4 -0
  48. package/src/enum/events.enum.ts +98 -0
  49. package/src/index.ts +15 -0
  50. package/{dist → src}/types/auth.d.ts +12 -8
  51. package/{dist → src}/types/events.common.d.ts +1 -1
  52. package/{dist → src}/types/events.d.ts +1 -1
  53. package/{dist → src}/types/socket.d.ts +1 -1
  54. package/swagger/generated/Swagger.json +1 -0
  55. package/swagger/index.js +60 -0
  56. package/swagger/package.json +21 -0
  57. package/swagger/scripts/update-swagger-json.js +53 -0
  58. package/swagger/yarn.lock +2100 -0
  59. package/tsconfig.json +47 -0
  60. package/vite.config.ts +45 -0
  61. package/dist/classes/auth/auth.class.d.ts +0 -20
  62. package/dist/classes/auth/auth.urls.d.ts +0 -4
  63. package/dist/classes/events-sdk/events-sdk-default-options.d.ts +0 -2
  64. package/dist/classes/events-sdk/events-sdk.class.d.ts +0 -35
  65. package/dist/classes/events-sdk/events-sdk.test.d.ts +0 -1
  66. package/dist/classes/events-sdk/events-sdk.types.d.ts +0 -63
  67. package/dist/classes/socket-io/socket-io.class.d.ts +0 -23
  68. package/dist/classes/socket-io/versions/index.d.ts +0 -8
  69. package/dist/classes/storage/storage.class.d.ts +0 -6
  70. package/dist/enum/auth.enum.d.ts +0 -4
  71. package/dist/enum/events.enum.d.ts +0 -77
  72. /package/{dist → src}/classes/socket-io/socket-io.d.ts +0 -0
  73. /package/{dist → src}/types/listeners.d.ts +0 -0
  74. /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
+ }