@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
package/docs/package.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "name": "voicneter-events-sdk",
3
- "version": "0.0.1",
4
- "description": "",
5
- "main": "index.js",
6
- "authors": {
7
- "name": "",
8
- "email": "bohdan.ko@voicenter.com"
9
- },
10
- "scripts": {
11
- "dev": "vuepress dev src",
12
- "build": "vuepress build src"
13
- },
14
- "license": "MIT",
15
- "devDependencies": {
16
- "@vuepress/plugin-register-components": "^2.0.0-beta.62",
17
- "typedoc": "^0.24.8",
18
- "typedoc-plugin-markdown": "^3.15.3",
19
- "vuepress": "^2.0.0-beta.62",
20
- "vuepress-plugin-typedoc": "^0.12.1"
21
- },
22
- "dependencies": {
23
- "dotenv": "^16.3.1"
24
- }
25
- }
@@ -1,8 +0,0 @@
1
- import { defineClientConfig } from '@vuepress/client'
2
- import './styles/index.scss'
3
-
4
- export default defineClientConfig({
5
- enhance({ app, router, siteData }) {},
6
- setup() {},
7
- rootComponents: [],
8
- })
@@ -1,183 +0,0 @@
1
- <template>
2
- <div>
3
- <p v-if="loading">
4
- Loading...
5
- </p>
6
-
7
- <template v-else>
8
- <div>
9
- <pre><code style="color: black">{{ JSON.stringify(events, null, 4) }}</code></pre>
10
- </div>
11
-
12
- <div>
13
- <form @submit.prevent="login">
14
- <input type="text" v-model="token" placeholder="token"/>
15
-
16
- <button type="submit">Login</button>
17
- </form>
18
- </div>
19
- </template>
20
- </div>
21
- </template>
22
-
23
- <script lang="ts" setup>
24
- import {reactive, ref} from 'vue'
25
- import EventsSdkClass from '@/index'
26
- import {eventsSdkDefaultOptions} from '@/classes/events-sdk/events-sdk-default-options'
27
- import {EventsEnum} from '@/enum/events.enum'
28
- import {EventTypeData} from '@/types/events'
29
- import {LoginType} from "@/enum/auth.enum";
30
-
31
- /* Data */
32
- const token = ref('QMSVU9dwNYC9Le9VCBqx24AB9TYyWj9Xn5aCPV0GFHIWoShQqfPtnAPmnw24xpJIUSsDDtlac2OPpjx0t3MSkxH3AhiQGHCeGZ8e')
33
- const loading = ref(false)
34
- const loggedId = ref(false)
35
- const events = reactive<{ [K in EventsEnum]?: Array<EventTypeData<K>> }>({})
36
-
37
- /* Methods */
38
- async function login() {
39
- if (!token.value) {
40
- return alert('Token is required')
41
- }
42
-
43
- loading.value = true
44
-
45
- const sdk = new EventsSdkClass({
46
- ...eventsSdkDefaultOptions,
47
- token: token.value,
48
- loginType: LoginType.USER,
49
- })
50
-
51
- await sdk.init()
52
-
53
- sdk.on(
54
- EventsEnum.ALL_DIALER_STATUS,
55
- ({ data }) => {
56
-
57
- if (!events[EventsEnum.ALL_DIALER_STATUS]) {
58
- events[EventsEnum.ALL_DIALER_STATUS] = []
59
- }
60
-
61
- events[EventsEnum.ALL_DIALER_STATUS]?.push(data)
62
- }
63
- )
64
-
65
- sdk.on(
66
- EventsEnum.ALL_EXTENSION_STATUS,
67
- ({ data }) => {
68
-
69
- if (!events[EventsEnum.ALL_EXTENSION_STATUS]) {
70
- events[EventsEnum.ALL_EXTENSION_STATUS] = []
71
- }
72
-
73
- events[EventsEnum.ALL_EXTENSION_STATUS]?.push(data)
74
- }
75
- )
76
-
77
- sdk.on(
78
- EventsEnum.ALL_USERS_STATUS,
79
- ({ data }) => {
80
-
81
- if (!events[EventsEnum.ALL_USERS_STATUS]) {
82
- events[EventsEnum.ALL_USERS_STATUS] = []
83
- }
84
-
85
- events[EventsEnum.ALL_USERS_STATUS]?.push(data)
86
- }
87
- )
88
-
89
- sdk.on(
90
- EventsEnum.QUEUE_EVENT,
91
- ({ data }) => {
92
-
93
- if (!events[EventsEnum.QUEUE_EVENT]) {
94
- events[EventsEnum.QUEUE_EVENT] = []
95
- }
96
-
97
- events[EventsEnum.QUEUE_EVENT]?.push(data)
98
- }
99
- )
100
-
101
- sdk.on(
102
- EventsEnum.EXTENSION_EVENT,
103
- ({ data }) => {
104
-
105
- if (!events[EventsEnum.EXTENSION_EVENT]) {
106
- events[EventsEnum.EXTENSION_EVENT] = []
107
- }
108
-
109
- events[EventsEnum.EXTENSION_EVENT]?.push(data)
110
- }
111
- )
112
-
113
- sdk.on(
114
- EventsEnum.LOGIN_SUCCESS,
115
- ({ data }) => {
116
- if (!events[EventsEnum.LOGIN_SUCCESS]) {
117
- events[EventsEnum.LOGIN_SUCCESS] = []
118
- }
119
-
120
- loggedId.value = true
121
- loading.value = false
122
-
123
- events[EventsEnum.LOGIN_SUCCESS]?.push(data)
124
- }
125
- )
126
-
127
- sdk.on(
128
- EventsEnum.LOGIN_STATUS,
129
- ({ data }) => {
130
- if (!events[EventsEnum.LOGIN_STATUS]) {
131
- events[EventsEnum.LOGIN_STATUS] = []
132
- }
133
-
134
- events[EventsEnum.LOGIN_STATUS]?.push(data)
135
- }
136
- )
137
-
138
- sdk.on(
139
- '*',
140
- (data) => {
141
- switch (data.name) {
142
- case EventsEnum.ALL_DIALER_STATUS:
143
- console.log(`FROM ALL ${EventsEnum.ALL_DIALER_STATUS}`, data)
144
- break
145
- case EventsEnum.ALL_EXTENSION_STATUS:
146
- console.log(`FROM ALL ${EventsEnum.ALL_EXTENSION_STATUS}`, data)
147
- break
148
- case EventsEnum.ALL_USERS_STATUS:
149
- console.log(`FROM ALL ${EventsEnum.ALL_USERS_STATUS}`, data)
150
- break
151
- case EventsEnum.QUEUE_EVENT:
152
- console.log(`FROM ALL ${EventsEnum.QUEUE_EVENT}`, data)
153
- break
154
- case EventsEnum.EXTENSION_EVENT:
155
- console.log(`FROM ALL ${EventsEnum.EXTENSION_EVENT}`, data)
156
- break
157
- case EventsEnum.LOGIN_SUCCESS:
158
- console.log(`FROM ALL ${EventsEnum.LOGIN_SUCCESS}`, data)
159
- break
160
- case EventsEnum.LOGIN_STATUS:
161
- console.log(`FROM ALL ${EventsEnum.LOGIN_STATUS}`, data)
162
- break
163
- case EventsEnum.ONLINE_STATUS_EVENT:
164
- console.log(`FROM ALL ${EventsEnum.ONLINE_STATUS_EVENT}`, data)
165
- break
166
- default:
167
- console.log('Unknown event', data)
168
-
169
- }
170
- }
171
- )
172
-
173
- setTimeout(
174
- () => {
175
- if (!loggedId.value) {
176
- loading.value = false
177
- alert('Login failed')
178
- }
179
- },
180
- 5000
181
- )
182
- }
183
- </script>
@@ -1,60 +0,0 @@
1
- import { defineUserConfig, defaultTheme } from 'vuepress'
2
- import { description } from '../../package'
3
- import { registerComponentsPlugin } from '@vuepress/plugin-register-components'
4
- import { getDirname, path } from '@vuepress/utils'
5
- import { typedocPlugin } from 'vuepress-plugin-typedoc/next';
6
- import * as dotenv from 'dotenv'
7
- dotenv.config()
8
-
9
- const __dirname = getDirname(import.meta.url)
10
-
11
- export default defineUserConfig({
12
- description: description,
13
-
14
- head: [
15
- ['link', {rel: 'icon', href: '/favicon.ico'}],
16
- ['meta', {name: 'theme-color', content: '#2675FF'}],
17
- ['meta', {name: 'apple-mobile-web-app-capable', content: 'yes'}],
18
- ['meta', {name: 'apple-mobile-web-app-status-bar-style', content: '#2675FF'}]
19
- ],
20
-
21
- theme: defaultTheme({
22
- repo: '',
23
- editLinks: false,
24
- logo: '/images/logo.png',
25
- docsDir: '',
26
- editLinkText: '',
27
- colorMode: 'light',
28
- lastUpdated: false,
29
- sidebar: [
30
- {
31
- text: 'General',
32
- link: '/',
33
- collapsible: false,
34
- children: [
35
- 'demo',
36
- {
37
- text: 'API',
38
- link: 'api',
39
- rel: 'api'
40
- }
41
- ]
42
- }
43
- ]
44
- }),
45
-
46
- plugins: [
47
- registerComponentsPlugin({
48
- componentsDir: path.resolve(__dirname, './components')
49
- }),
50
- typedocPlugin({
51
- entryPoints: ['../src/types/public-api.d.ts'],
52
- tsconfig: '../tsconfig.json'
53
- })
54
- ],
55
-
56
- alias: {
57
- '@': path.resolve(__dirname, '../', '../', '../', 'src'),
58
- 'root': path.resolve(__dirname, '../', '../', '../'),
59
- }
60
- })
File without changes
@@ -1,8 +0,0 @@
1
- /**
2
- * Custom Styles here.
3
- *
4
- * ref:https://v1.vuepress.vuejs.org/config/#index-styl
5
- */
6
-
7
- .home .hero img
8
- max-width 450px!important
@@ -1,10 +0,0 @@
1
- /**
2
- * Custom palette here.
3
- *
4
- * ref:https://v1.vuepress.vuejs.org/zh/config/#palette-styl
5
- */
6
-
7
- $accentColor = #a5c544
8
- $textColor = #2c3e50
9
- $borderColor = #eaecef
10
- $codeBgColor = #282c34
package/docs/src/demo.md DELETED
@@ -1,7 +0,0 @@
1
- # Demo
2
-
3
- <ClientOnly>
4
- <div class="py-5">
5
- <Demo />
6
- </div>
7
- </ClientOnly>
package/docs/src/index.md DELETED
@@ -1,4 +0,0 @@
1
- # Voicenter Events SDK
2
-
3
- - [Demo](demo.md)
4
- - [API](api/modules.md)
package/jest.config.js DELETED
@@ -1,11 +0,0 @@
1
- // jest.config.js
2
- module.exports = {
3
- preset: 'ts-jest',
4
- testEnvironment: 'node',
5
- roots: [ '<rootDir>/src' ],
6
- transform: {
7
- '^.+\\.tsx?$': 'ts-jest',
8
- },
9
- testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
10
- moduleFileExtensions: [ 'ts', 'tsx', 'js', 'jsx', 'json', 'node' ],
11
- }
@@ -1,205 +0,0 @@
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
- ExternalLoginRequestBody,
7
- ExternalLoginResponse,
8
- LoginSessionData,
9
- LoginSessionPayload,
10
- Settings
11
- } from '@/types/auth'
12
- import { LoginType } from '@/enum/auth.enum'
13
- import { getSettingsUrl, newLoginUrl, refreshTokenUrl } from '@/classes/auth/auth.urls'
14
- import { StorageClass } from '@/classes/storage/storage.class'
15
-
16
- class AuthClass{
17
- constructor (private readonly eventsSdkClass: EventsSdkClass) {
18
- this.eventsSdkClass = eventsSdkClass
19
-
20
- this.storageKey = ''
21
- }
22
-
23
- private delay = 1000
24
- public lastLoginTimestamp: number | undefined
25
- public token: string | undefined
26
-
27
- private storageKey: string
28
-
29
- public async login (options: EventsSdkOptions) {
30
- const payload: LoginSessionPayload = {
31
- token: options.token,
32
- email: options.email,
33
- password: options.password
34
- }
35
-
36
- this.storageKey = md5(JSON.stringify(payload))
37
-
38
- if (this.lastLoginTimestamp && this.lastLoginTimestamp + this.delay > new Date().getTime()) {
39
- return
40
- }
41
-
42
- this.updateLastLoginTimestamp()
43
-
44
- const isLoggedIn = await this.checkLoginStatus(this.storageKey)
45
-
46
- if (!isLoggedIn) {
47
- await this.userLoginFunction(payload, this.storageKey, options.loginType)
48
- }
49
- }
50
-
51
- public updateLastLoginTimestamp () {
52
- this.lastLoginTimestamp = new Date().getTime()
53
- }
54
-
55
- private async checkLoginStatus (key: string): Promise<boolean> {
56
- const loginSessionData = await StorageClass.getSessionStorageDataByKey(key)
57
-
58
- if (loginSessionData) {
59
- this.onLoginResponse(loginSessionData)
60
-
61
- return true
62
- }
63
-
64
- return false
65
- }
66
-
67
- private async userLoginFunction (
68
- payload: LoginSessionPayload,
69
- key: string,
70
- loginType: LoginType,
71
- ) {
72
- const externalLoginResponse = await this.externalLogin(
73
- newLoginUrl,
74
- payload,
75
- loginType,
76
- )
77
-
78
- const settings = await this.getSettings(externalLoginResponse.Data.AccessToken)
79
-
80
- const loginSessionData: LoginSessionData = {
81
- ...externalLoginResponse.Data,
82
- ...settings
83
- }
84
-
85
- this.onLoginResponse(loginSessionData)
86
-
87
- await StorageClass.updateSessionStorageKey(key, loginSessionData)
88
- }
89
-
90
- private onLoginResponse (loginSessionData: LoginSessionData) {
91
- if (loginSessionData.MonitorList && loginSessionData.MonitorList.length) {
92
- this.eventsSdkClass.servers = [ ...loginSessionData.MonitorList ]
93
- this.eventsSdkClass.server = this.eventsSdkClass.servers.reduce((prev, current) =>
94
- (prev.Priority > current.Priority) ? prev : current
95
- )
96
- }
97
- if (this.eventsSdkClass.server) {
98
- this.eventsSdkClass.socketIoClass.getSocketIoFunction(`v=${this.eventsSdkClass.server.Version}`)
99
- }
100
- if (loginSessionData.IdentityCode) {
101
- this.token = loginSessionData.IdentityCode
102
- this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
103
- }
104
- if (loginSessionData.RefreshToken && loginSessionData.IdentityCodeExpiry && this.eventsSdkClass.options.loginType === LoginType.USER) {
105
- this.eventsSdkClass.options.refreshToken = loginSessionData.RefreshToken
106
- this.eventsSdkClass.options.tokenExpiry = loginSessionData.IdentityCodeExpiry
107
- this.handleTokenExpiry()
108
- }
109
- }
110
-
111
- public handleTokenExpiry () {
112
- let date: Date
113
-
114
- if (this.eventsSdkClass.options.tokenExpiry) {
115
- date = new Date(this.eventsSdkClass.options.tokenExpiry)
116
- } else {
117
- return
118
- }
119
-
120
- const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire
121
-
122
- const maxAllowedTimeout = Math.min(timeout, 0x7FFFFFFF)
123
-
124
- setTimeout(
125
- async () => {
126
- if (refreshTokenUrl && this.eventsSdkClass.options.refreshToken) {
127
- this.eventsSdkClass.socketIoClass.closeAllConnections()
128
-
129
- const refreshTokenResponse = await this.refreshToken(refreshTokenUrl, this.eventsSdkClass.options.refreshToken)
130
-
131
- const settings = await this.getSettings(refreshTokenResponse.Data.AccessToken)
132
-
133
- const loginSessionData: LoginSessionData = {
134
- ...refreshTokenResponse.Data,
135
- ...settings
136
- }
137
-
138
- this.onLoginResponse(loginSessionData)
139
-
140
- await StorageClass.updateSessionStorageKey(this.storageKey, loginSessionData)
141
- }
142
- },
143
- maxAllowedTimeout)
144
- }
145
-
146
- private async externalLogin (
147
- url: string,
148
- { password, token, email }: LoginSessionPayload,
149
- loginType: LoginType,
150
- ): Promise<ExternalLoginResponse> {
151
- let body: ExternalLoginRequestBody
152
-
153
- if (loginType === LoginType.TOKEN) {
154
- body = {
155
- identityType: LoginType.TOKEN,
156
- token
157
- }
158
- } else {
159
- body = {
160
- identityType: LoginType.USER,
161
- username: email,
162
- password,
163
- }
164
- }
165
-
166
- const res = await fetch(url, {
167
- method: 'POST',
168
- headers: {
169
- 'Content-Type': 'application/json'
170
- },
171
- body: JSON.stringify(body),
172
- })
173
-
174
- const data = await res.json()
175
-
176
- if (data.error) {
177
- throw new Error(data.error)
178
- }
179
- return data
180
- }
181
-
182
- private async getSettings (token: string): Promise<Settings> {
183
- const res = await fetch(getSettingsUrl, {
184
- headers: {
185
- Authorization: `Bearer ${token}`
186
- }
187
- })
188
-
189
- return res.json()
190
- }
191
-
192
- private async refreshToken (refreshTokenUrl: string, oldRefreshToken: string): Promise<ExternalLoginResponse> {
193
- const res = await fetch(refreshTokenUrl, {
194
- method: 'GET',
195
-
196
- headers: {
197
- 'Content-Type': 'application/json',
198
- Authorization: `Bearer ${oldRefreshToken}`
199
- }
200
- })
201
- return res.json()
202
- }
203
- }
204
-
205
- export default AuthClass
@@ -1,10 +0,0 @@
1
- const newLoginUrl = 'https://loginapidev.voicenter.co.il/Auth/Login/Voicenter/Monitor'
2
- const getSettingsUrl = 'https://loginapidev.voicenter.co.il/Application/GetSettings'
3
- const refreshTokenUrl = 'https://loginapidev.voicenter.co.il/Auth/RefreshToken'
4
-
5
-
6
- export {
7
- newLoginUrl,
8
- getSettingsUrl,
9
- refreshTokenUrl
10
- }
@@ -1,46 +0,0 @@
1
- import { EventsSdkOptions } from '@/classes/events-sdk/events-sdk.types'
2
- import { LoginType } from '@/enum/auth.enum'
3
-
4
- export const eventsSdkDefaultOptions: EventsSdkOptions = {
5
- fallbackServer: {
6
- Domain: 'monitor5.voicenter.co.il',
7
- Priority: 0,
8
- Version: '1.3.7',
9
- URLID: 1
10
- },
11
- token: '',
12
- loginType: LoginType.TOKEN,
13
- forceNew: true,
14
- reconnectionDelay: 10000,
15
- reconnectionDelayMax: 10000,
16
- maxReconnectAttempts: 5,
17
- timeout: 10000,
18
- keepAliveTimeout: 60000,
19
- idleInterval: 60000 * 5,
20
- protocol: 'https',
21
- transports: [ 'websocket' ],
22
- upgrade: false,
23
- serverFetchStrategy: 'static',
24
- serverType: 0,
25
- useLogger: false,
26
- loggerSocketConnection: '',
27
- loggerServer: 'http://127.0.0.1:3000/',
28
- loggerConfig: {
29
- logToConsole: true,
30
- overloadGlobalConsole: false,
31
- namespace: 'events-sdk',
32
- socketEmitInterval: 10000,
33
- },
34
- loggerConnectOptions: {
35
- reconnection: true,
36
- reconnectionDelay: 5000,
37
- reconnectionAttempts: 10,
38
- perMessageDeflate: false,
39
- upgrade: false,
40
- transports: [ 'websocket' ],
41
- debug: false
42
- },
43
- username: 'username',
44
- password: '78253050510',
45
- email: 'test2@status.com',
46
- }