@voicenter-team/events-sdk 0.0.13 → 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 (63) 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/{voicenter-events-sdk.d.ts → index.d.ts} +192 -38
  14. package/dist/voicenter-events-sdk.cjs.js +15 -15
  15. package/dist/voicenter-events-sdk.cjs.js.map +1 -1
  16. package/dist/voicenter-events-sdk.es.js +1809 -1795
  17. package/dist/voicenter-events-sdk.es.js.map +1 -1
  18. package/dist/voicenter-events-sdk.iife.js +15 -15
  19. package/dist/voicenter-events-sdk.iife.js.map +1 -1
  20. package/dist/voicenter-events-sdk.umd.js +14 -14
  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 +54 -57
  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/socket-io.d.ts +10 -0
  45. package/src/classes/socket-io/versions/index.ts +52 -0
  46. package/src/classes/socket-io/versions/v1_3_7.js +2083 -0
  47. package/src/classes/storage/storage.class.ts +43 -0
  48. package/src/enum/auth.enum.ts +4 -0
  49. package/src/enum/events.enum.ts +98 -0
  50. package/src/index.ts +15 -0
  51. package/src/types/auth.d.ts +53 -0
  52. package/src/types/events.common.d.ts +110 -0
  53. package/src/types/events.d.ts +175 -0
  54. package/src/types/listeners.d.ts +37 -0
  55. package/src/types/public-api.d.ts +39 -0
  56. package/src/types/socket.d.ts +5 -0
  57. package/swagger/generated/Swagger.json +1 -0
  58. package/swagger/index.js +60 -0
  59. package/swagger/package.json +21 -0
  60. package/swagger/scripts/update-swagger-json.js +53 -0
  61. package/swagger/yarn.lock +2100 -0
  62. package/tsconfig.json +47 -0
  63. package/vite.config.ts +45 -0
package/package.json CHANGED
@@ -1,57 +1,54 @@
1
- {
2
- "name": "@voicenter-team/events-sdk",
3
- "version": "0.0.13",
4
- "description": "",
5
- "main": "dist/voicenter-events-sdk.cjs.js",
6
- "jsdelivr": "dist/voicenter-events-sdk.umd.js",
7
- "module": "dist/voicenter-events-sdk.es.js",
8
- "unpkg": "dist/voicenter-events-sdk.umd.js",
9
- "types": "dist/index.d.ts",
10
- "type": "module",
11
- "scripts": {
12
- "build": "vite build",
13
- "dev": "cd docs && yarn && yarn run dev",
14
- "build:documentation": "cd docs && npm install && npm run build",
15
- "test": "echo \"Error: no test specified\" && exit 1",
16
- "ts-check": "tsc --noEmit",
17
- "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts --fix --ignore-path .gitignore"
18
- },
19
- "engines": {
20
- "node": ">= 16",
21
- "npm": ">= 9.6.7",
22
- "yarn": ">= 1.22.4"
23
- },
24
- "files": [
25
- "dist"
26
- ],
27
- "precommit": "ts-check, lint",
28
- "keywords": [],
29
- "author": "",
30
- "license": "ISC",
31
- "devDependencies": {
32
- "@types/chrome": "0.0.259",
33
- "@types/jest": "29.5.11",
34
- "@types/js-md5": "^0.7.2",
35
- "@types/lodash": "^4.14.200",
36
- "@types/node": "20.11.13",
37
- "@typescript-eslint/eslint-plugin": "6.20.0",
38
- "@typescript-eslint/parser": "6.20.0",
39
- "@voicenter-team/eslint-config-ts": "^1.0.22",
40
- "dotenv": "16.4.1",
41
- "eslint": "8.56.0",
42
- "eslint-plugin-jest": "27.6.3",
43
- "jest": "^29.7.0",
44
- "pre-commit": "^1.2.2",
45
- "socket.io-client": "4.7.4",
46
- "swagger-axios-codegen": "0.16.8",
47
- "ts-jest": "29.1.2",
48
- "tsc-alias": "^1.8.6",
49
- "typescript": "5.3.3",
50
- "vite": "5.0.12",
51
- "vite-plugin-dts": "3.7.2"
52
- },
53
- "dependencies": {
54
- "js-md5": "0.8.3",
55
- "lodash": "^4.17.21"
56
- }
57
- }
1
+ {
2
+ "name": "@voicenter-team/events-sdk",
3
+ "version": "0.0.14",
4
+ "description": "",
5
+ "main": "dist/voicenter-events-sdk.cjs.js",
6
+ "jsdelivr": "dist/voicenter-events-sdk.umd.js",
7
+ "module": "dist/voicenter-events-sdk.es.js",
8
+ "unpkg": "dist/voicenter-events-sdk.umd.js",
9
+ "types": "dist/index.d.ts",
10
+ "type": "module",
11
+ "scripts": {
12
+ "build": "vite build",
13
+ "dev": "cd docs && yarn && yarn run dev",
14
+ "build:documentation": "cd docs && npm install && npm run build",
15
+ "test": "echo \"Error: no test specified\" && exit 1",
16
+ "ts-check": "tsc --noEmit",
17
+ "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts --fix --ignore-path .gitignore"
18
+ },
19
+ "engines": {
20
+ "node": ">= 16",
21
+ "npm": ">= 9.6.7",
22
+ "yarn": ">= 1.22.4"
23
+ },
24
+ "precommit": "ts-check, lint",
25
+ "keywords": [],
26
+ "author": "",
27
+ "license": "ISC",
28
+ "devDependencies": {
29
+ "@types/chrome": "0.0.259",
30
+ "@types/jest": "29.5.11",
31
+ "@types/js-md5": "^0.7.2",
32
+ "@types/lodash": "^4.14.200",
33
+ "@types/node": "20.11.13",
34
+ "@typescript-eslint/eslint-plugin": "6.20.0",
35
+ "@typescript-eslint/parser": "6.20.0",
36
+ "@voicenter-team/eslint-config-ts": "^1.0.22",
37
+ "dotenv": "16.4.1",
38
+ "eslint": "8.56.0",
39
+ "eslint-plugin-jest": "27.6.3",
40
+ "jest": "^29.7.0",
41
+ "pre-commit": "^1.2.2",
42
+ "socket.io-client": "4.7.4",
43
+ "swagger-axios-codegen": "0.16.8",
44
+ "ts-jest": "29.1.2",
45
+ "tsc-alias": "^1.8.6",
46
+ "typescript": "5.3.3",
47
+ "vite": "5.0.12",
48
+ "vite-plugin-dts": "3.7.2"
49
+ },
50
+ "dependencies": {
51
+ "js-md5": "0.8.3",
52
+ "lodash": "^4.17.21"
53
+ }
54
+ }
@@ -0,0 +1,272 @@
1
+ import md5 from 'js-md5'
2
+
3
+ import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
4
+ import { EventsSdkOptions, ServerParameter } from '@/classes/events-sdk/events-sdk.types'
5
+ import {
6
+ ExternalLoginNewStackResponseData,
7
+ ExternalLoginOldStackResponseData,
8
+ ExternalLoginResponse,
9
+ LoginSessionData,
10
+ LoginSessionPayload,
11
+ Settings
12
+ } from '@/types/auth'
13
+ import { LoginType } from '@/enum/auth.enum'
14
+ import { getSettingsUrl } from '@/classes/auth/auth.urls'
15
+ import { StorageClass } from '@/classes/storage/storage.class'
16
+
17
+ class AuthClass{
18
+ constructor (private readonly eventsSdkClass: EventsSdkClass) {
19
+ this.eventsSdkClass = eventsSdkClass
20
+
21
+ this.storageKey = ''
22
+ }
23
+
24
+ private delay = 1000
25
+ public lastLoginTimestamp: number | undefined
26
+ public token: string | undefined
27
+
28
+ private storageKey: string
29
+
30
+ public async login (options: EventsSdkOptions) {
31
+ const payload: LoginSessionPayload = {
32
+ token: options.token,
33
+ email: options.email,
34
+ password: options.password
35
+ }
36
+
37
+ this.storageKey = md5(JSON.stringify(payload))
38
+
39
+ if (this.lastLoginTimestamp && this.lastLoginTimestamp + this.delay > new Date().getTime()) {
40
+ return
41
+ }
42
+
43
+ this.updateLastLoginTimestamp()
44
+
45
+ const isLoggedIn = await this.checkLoginStatus(this.storageKey)
46
+
47
+ if (!isLoggedIn) {
48
+ await this.userLoginFunction(payload, this.storageKey, options.loginType)
49
+ }
50
+ }
51
+
52
+ public updateLastLoginTimestamp () {
53
+ this.lastLoginTimestamp = new Date().getTime()
54
+ }
55
+
56
+ private async checkLoginStatus (key: string): Promise<boolean> {
57
+ const loginSessionData = await StorageClass.getSessionStorageDataByKey(key)
58
+
59
+ if (loginSessionData) {
60
+ this.onLoginResponse(loginSessionData)
61
+
62
+ return true
63
+ }
64
+
65
+ return false
66
+ }
67
+
68
+ private async userLoginFunction (
69
+ payload: LoginSessionPayload,
70
+ key: string,
71
+ loginType: LoginType,
72
+ ) {
73
+ let externalLoginResponse
74
+
75
+ let settings
76
+
77
+ let loginSessionData: Partial<LoginSessionData>
78
+
79
+ if (this.eventsSdkClass.options.isNewStack) {
80
+ externalLoginResponse = await this.externalLogin<ExternalLoginNewStackResponseData>(
81
+ this.eventsSdkClass.options.loginUrl,
82
+ payload,
83
+ loginType,
84
+ )
85
+
86
+ settings = await this.getSettings(externalLoginResponse.Data.AccessToken)
87
+
88
+ loginSessionData = {
89
+ ...externalLoginResponse.Data,
90
+ ...settings
91
+ }
92
+ } else {
93
+ externalLoginResponse = await this.externalLogin<ExternalLoginOldStackResponseData>(
94
+ this.eventsSdkClass.options.loginUrl,
95
+ payload,
96
+ loginType,
97
+ )
98
+
99
+ loginSessionData = {
100
+ ...externalLoginResponse.Data.Socket,
101
+ }
102
+ }
103
+
104
+ this.onLoginResponse(loginSessionData)
105
+
106
+ await StorageClass.updateSessionStorageKey(key, loginSessionData)
107
+ }
108
+
109
+ private onLoginResponse (loginSessionData: Partial<LoginSessionData>) {
110
+ if (loginSessionData.MonitorList && loginSessionData.MonitorList.length) {
111
+ this.eventsSdkClass.servers = [ ...loginSessionData.MonitorList ]
112
+ this.eventsSdkClass.server = this.eventsSdkClass.servers.reduce((prev, current) =>
113
+ (prev.Priority > current.Priority) ? prev : current
114
+ )
115
+ }
116
+ if (!this.eventsSdkClass.options.isNewStack && this.eventsSdkClass.options.servers) {
117
+ this.eventsSdkClass.servers = [ ...this.eventsSdkClass.options.servers ]
118
+ this.eventsSdkClass.server = this.eventsSdkClass.servers.reduce((prev, current) =>
119
+ (prev.Priority > current.Priority) ? prev : current
120
+ )
121
+ }
122
+ if (this.eventsSdkClass.server) {
123
+ this.eventsSdkClass.socketIoClass.getSocketIoFunction(`v=${this.eventsSdkClass.server.Version}`)
124
+ }
125
+ if (loginSessionData.IdentityCode) {
126
+ this.token = loginSessionData.IdentityCode
127
+ this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
128
+ }
129
+ if (loginSessionData.Token) {
130
+ this.token = loginSessionData.Token
131
+ this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
132
+ }
133
+ if (loginSessionData.RefreshToken && loginSessionData.IdentityCodeExpiry && this.eventsSdkClass.options.loginType === LoginType.USER) {
134
+ this.eventsSdkClass.options.refreshToken = loginSessionData.RefreshToken
135
+ this.eventsSdkClass.options.tokenExpiry = loginSessionData.IdentityCodeExpiry
136
+ this.handleTokenExpiry()
137
+ }
138
+ if (loginSessionData.RefreshToken && loginSessionData.TokenExpiry) {
139
+ this.eventsSdkClass.options.refreshToken = loginSessionData.RefreshToken
140
+ this.eventsSdkClass.options.tokenExpiry = loginSessionData.TokenExpiry
141
+ this.handleTokenExpiry()
142
+ }
143
+ }
144
+
145
+ public handleTokenExpiry () {
146
+ let date: Date
147
+
148
+ if (this.eventsSdkClass.options.tokenExpiry) {
149
+ date = new Date(this.eventsSdkClass.options.tokenExpiry)
150
+ } else {
151
+ return
152
+ }
153
+
154
+ const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire
155
+
156
+ const maxAllowedTimeout = Math.min(timeout, 0x7FFFFFFF)
157
+
158
+ setTimeout(
159
+ async () => {
160
+ if (this.eventsSdkClass.options.refreshToken) {
161
+ this.eventsSdkClass.socketIoClass.closeAllConnections()
162
+
163
+ let settings
164
+
165
+ let loginSessionData: Partial<LoginSessionData>
166
+
167
+ if (this.eventsSdkClass.options.isNewStack) {
168
+ const refreshTokenResponse = await this.refreshToken<ExternalLoginNewStackResponseData>(
169
+ this.eventsSdkClass.options.refreshTokenUrl,
170
+ this.eventsSdkClass.options.refreshToken
171
+ )
172
+
173
+ settings = await this.getSettings(refreshTokenResponse.Data.AccessToken)
174
+
175
+ loginSessionData = {
176
+ ...refreshTokenResponse.Data,
177
+ ...settings
178
+ }
179
+ } else {
180
+ const refreshTokenResponse = await this.refreshToken<ExternalLoginOldStackResponseData>(
181
+ this.eventsSdkClass.options.refreshTokenUrl,
182
+ this.eventsSdkClass.options.refreshToken
183
+ )
184
+
185
+ loginSessionData = {
186
+ ...refreshTokenResponse.Data.Socket,
187
+ }
188
+ }
189
+
190
+ this.onLoginResponse(loginSessionData)
191
+
192
+ await StorageClass.updateSessionStorageKey(this.storageKey, loginSessionData)
193
+ }
194
+ },
195
+ maxAllowedTimeout)
196
+ }
197
+
198
+ private async externalLogin<T> (
199
+ url: string,
200
+ { password, token, email }: LoginSessionPayload,
201
+ loginType: LoginType,
202
+ ): Promise<ExternalLoginResponse<T>> {
203
+ let body: string
204
+
205
+ if (this.eventsSdkClass.options.isNewStack) {
206
+ if (loginType === LoginType.TOKEN) {
207
+ body = JSON.stringify({
208
+ identityType: LoginType.TOKEN,
209
+ token
210
+ })
211
+ } else {
212
+ body = JSON.stringify({
213
+ identityType: LoginType.USER,
214
+ username: email,
215
+ password,
216
+ })
217
+ }
218
+ } else {
219
+ if (token) {
220
+ body = JSON.stringify({ token })
221
+
222
+ url = `${url}/Token`
223
+ } else {
224
+ body = JSON.stringify({
225
+ email,
226
+ pin: password
227
+ })
228
+
229
+ url = `${url}/User`
230
+ }
231
+ }
232
+
233
+ const res = await fetch(url, {
234
+ method: 'POST',
235
+ headers: {
236
+ 'Content-Type': 'application/json'
237
+ },
238
+ body,
239
+ })
240
+
241
+ const data = await res.json()
242
+
243
+ if (data.error) {
244
+ throw new Error(data.error)
245
+ }
246
+ return data
247
+ }
248
+
249
+ private async getSettings (token: string): Promise<Settings> {
250
+ const res = await fetch(getSettingsUrl, {
251
+ headers: {
252
+ Authorization: `Bearer ${token}`
253
+ }
254
+ })
255
+
256
+ return res.json()
257
+ }
258
+
259
+ private async refreshToken<T> (refreshTokenUrl: string, oldRefreshToken: string): Promise<ExternalLoginResponse<T>> {
260
+ const res = await fetch(refreshTokenUrl, {
261
+ method: 'GET',
262
+
263
+ headers: {
264
+ 'Content-Type': 'application/json',
265
+ Authorization: `Bearer ${oldRefreshToken}`
266
+ }
267
+ })
268
+ return res.json()
269
+ }
270
+ }
271
+
272
+ export default AuthClass
@@ -0,0 +1,8 @@
1
+ const getSettingsUrl = 'https://loginapidev.voicenter.co.il/Application/GetSettings'
2
+ const refreshTokenUrl = 'https://loginapidev.voicenter.co.il/Auth/RefreshToken'
3
+
4
+
5
+ export {
6
+ getSettingsUrl,
7
+ refreshTokenUrl
8
+ }
@@ -0,0 +1,60 @@
1
+ import { EventsSdkOptions } from '@/classes/events-sdk/events-sdk.types'
2
+ import { LoginType } from '@/enum/auth.enum'
3
+
4
+ export const eventsSdkDefaultOptions: EventsSdkOptions = {
5
+ isNewStack: false,
6
+ servers: [ {
7
+ URLID: 1,
8
+ Priority: 5,
9
+ Version: '1.3.7',
10
+ Domain: 'monitor1.comms24x7.com'
11
+ },{
12
+ URLID: 2,
13
+ Priority: 4,
14
+ Version: '1.3.7',
15
+ Domain: 'monitor2.comms24x7.com'
16
+ } ],
17
+ loginUrl: 'https://loginapi.comms24x7.com/monitorAPI/Login',
18
+ refreshTokenUrl: 'https://loginapi.comms24x7.com/monitorAPI/RefreshIdentityToken',
19
+ fallbackServer: {
20
+ Domain: 'monitor5.voicenter.co.il',
21
+ Priority: 0,
22
+ Version: '1.3.7',
23
+ URLID: 1
24
+ },
25
+ token: '',
26
+ loginType: LoginType.TOKEN,
27
+ forceNew: true,
28
+ reconnectionDelay: 10000,
29
+ reconnectionDelayMax: 10000,
30
+ maxReconnectAttempts: 5,
31
+ timeout: 10000,
32
+ keepAliveTimeout: 60000,
33
+ idleInterval: 60000 * 5,
34
+ protocol: 'https',
35
+ transports: [ 'websocket' ],
36
+ upgrade: false,
37
+ serverFetchStrategy: 'static',
38
+ serverType: 0,
39
+ useLogger: false,
40
+ loggerSocketConnection: '',
41
+ loggerServer: 'http://127.0.0.1:3000/',
42
+ loggerConfig: {
43
+ logToConsole: true,
44
+ overloadGlobalConsole: false,
45
+ namespace: 'events-sdk',
46
+ socketEmitInterval: 10000,
47
+ },
48
+ loggerConnectOptions: {
49
+ reconnection: true,
50
+ reconnectionDelay: 5000,
51
+ reconnectionAttempts: 10,
52
+ perMessageDeflate: false,
53
+ upgrade: false,
54
+ transports: [ 'websocket' ],
55
+ debug: false
56
+ },
57
+ username: 'username',
58
+ password: '92455783085',
59
+ email: 'sasha.za@starkey.co.il',
60
+ }