@voicenter-team/events-sdk 0.0.1

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 (60) hide show
  1. package/.eslintrc.cjs +15 -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.cjs.js +48 -0
  14. package/dist/voicenter-events-sdk.cjs.js.map +1 -0
  15. package/dist/voicenter-events-sdk.d.ts +510 -0
  16. package/dist/voicenter-events-sdk.es.js +6350 -0
  17. package/dist/voicenter-events-sdk.es.js.map +1 -0
  18. package/dist/voicenter-events-sdk.iife.js +48 -0
  19. package/dist/voicenter-events-sdk.iife.js.map +1 -0
  20. package/dist/voicenter-events-sdk.umd.js +48 -0
  21. package/dist/voicenter-events-sdk.umd.js.map +1 -0
  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 +181 -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/jest.config.js +11 -0
  35. package/package.json +54 -0
  36. package/src/classes/auth/auth.class.ts +196 -0
  37. package/src/classes/auth/auth.test.ts +14 -0
  38. package/src/classes/events-sdk/events-sdk-default-options.ts +52 -0
  39. package/src/classes/events-sdk/events-sdk.class.ts +237 -0
  40. package/src/classes/events-sdk/events-sdk.test.ts +9 -0
  41. package/src/classes/events-sdk/events-sdk.types.ts +77 -0
  42. package/src/classes/socket-io/socket-io.class.ts +166 -0
  43. package/src/classes/socket-io/socket-io.d.ts +10 -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/enum/events.enum.ts +96 -0
  47. package/src/index.ts +3 -0
  48. package/src/types/auth.d.ts +18 -0
  49. package/src/types/events.common.d.ts +110 -0
  50. package/src/types/events.d.ts +160 -0
  51. package/src/types/listeners.d.ts +37 -0
  52. package/src/types/public-api.d.ts +39 -0
  53. package/src/types/socket.d.ts +5 -0
  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 +50 -0
  60. package/vite.config.ts +41 -0
@@ -0,0 +1,25 @@
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
+ }
@@ -0,0 +1,8 @@
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
+ })
@@ -0,0 +1,181 @@
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
+
30
+ /* Data */
31
+ const token = ref('QMSVU9dwNYC9Le9VCBqx24AB9TYyWj9Xn5aCPV0GFHIWoShQqfPtnAPmnw24xpJIUSsDDtlac2OPpjx0t3MSkxH3AhiQGHCeGZ8e')
32
+ const loading = ref(false)
33
+ const loggedId = ref(false)
34
+ const events = reactive<{ [K in EventsEnum]?: Array<EventTypeData<K>> }>({})
35
+
36
+ /* Methods */
37
+ async function login() {
38
+ if (!token.value) {
39
+ return alert('Token is required')
40
+ }
41
+
42
+ loading.value = true
43
+
44
+ const sdk = new EventsSdkClass({
45
+ ...eventsSdkDefaultOptions,
46
+ token: token.value,
47
+ })
48
+
49
+ await sdk.init()
50
+
51
+ sdk.on(
52
+ EventsEnum.ALL_DIALER_STATUS,
53
+ ({ data }) => {
54
+
55
+ if (!events[EventsEnum.ALL_DIALER_STATUS]) {
56
+ events[EventsEnum.ALL_DIALER_STATUS] = []
57
+ }
58
+
59
+ events[EventsEnum.ALL_DIALER_STATUS]?.push(data)
60
+ }
61
+ )
62
+
63
+ sdk.on(
64
+ EventsEnum.ALL_EXTENSION_STATUS,
65
+ ({ data }) => {
66
+
67
+ if (!events[EventsEnum.ALL_EXTENSION_STATUS]) {
68
+ events[EventsEnum.ALL_EXTENSION_STATUS] = []
69
+ }
70
+
71
+ events[EventsEnum.ALL_EXTENSION_STATUS]?.push(data)
72
+ }
73
+ )
74
+
75
+ sdk.on(
76
+ EventsEnum.ALL_USERS_STATUS,
77
+ ({ data }) => {
78
+
79
+ if (!events[EventsEnum.ALL_USERS_STATUS]) {
80
+ events[EventsEnum.ALL_USERS_STATUS] = []
81
+ }
82
+
83
+ events[EventsEnum.ALL_USERS_STATUS]?.push(data)
84
+ }
85
+ )
86
+
87
+ sdk.on(
88
+ EventsEnum.QUEUE_EVENT,
89
+ ({ data }) => {
90
+
91
+ if (!events[EventsEnum.QUEUE_EVENT]) {
92
+ events[EventsEnum.QUEUE_EVENT] = []
93
+ }
94
+
95
+ events[EventsEnum.QUEUE_EVENT]?.push(data)
96
+ }
97
+ )
98
+
99
+ sdk.on(
100
+ EventsEnum.EXTENSION_EVENT,
101
+ ({ data }) => {
102
+
103
+ if (!events[EventsEnum.EXTENSION_EVENT]) {
104
+ events[EventsEnum.EXTENSION_EVENT] = []
105
+ }
106
+
107
+ events[EventsEnum.EXTENSION_EVENT]?.push(data)
108
+ }
109
+ )
110
+
111
+ sdk.on(
112
+ EventsEnum.LOGIN_SUCCESS,
113
+ ({ data }) => {
114
+ if (!events[EventsEnum.LOGIN_SUCCESS]) {
115
+ events[EventsEnum.LOGIN_SUCCESS] = []
116
+ }
117
+
118
+ loggedId.value = true
119
+ loading.value = false
120
+
121
+ events[EventsEnum.LOGIN_SUCCESS]?.push(data)
122
+ }
123
+ )
124
+
125
+ sdk.on(
126
+ EventsEnum.LOGIN_STATUS,
127
+ ({ data }) => {
128
+ if (!events[EventsEnum.LOGIN_STATUS]) {
129
+ events[EventsEnum.LOGIN_STATUS] = []
130
+ }
131
+
132
+ events[EventsEnum.LOGIN_STATUS]?.push(data)
133
+ }
134
+ )
135
+
136
+ sdk.on(
137
+ '*',
138
+ (data) => {
139
+ switch (data.name) {
140
+ case EventsEnum.ALL_DIALER_STATUS:
141
+ console.log(`FROM ALL ${EventsEnum.ALL_DIALER_STATUS}`, data)
142
+ break
143
+ case EventsEnum.ALL_EXTENSION_STATUS:
144
+ console.log(`FROM ALL ${EventsEnum.ALL_EXTENSION_STATUS}`, data)
145
+ break
146
+ case EventsEnum.ALL_USERS_STATUS:
147
+ console.log(`FROM ALL ${EventsEnum.ALL_USERS_STATUS}`, data)
148
+ break
149
+ case EventsEnum.QUEUE_EVENT:
150
+ console.log(`FROM ALL ${EventsEnum.QUEUE_EVENT}`, data)
151
+ break
152
+ case EventsEnum.EXTENSION_EVENT:
153
+ console.log(`FROM ALL ${EventsEnum.EXTENSION_EVENT}`, data)
154
+ break
155
+ case EventsEnum.LOGIN_SUCCESS:
156
+ console.log(`FROM ALL ${EventsEnum.LOGIN_SUCCESS}`, data)
157
+ break
158
+ case EventsEnum.LOGIN_STATUS:
159
+ console.log(`FROM ALL ${EventsEnum.LOGIN_STATUS}`, data)
160
+ break
161
+ case EventsEnum.ONLINE_STATUS_EVENT:
162
+ console.log(`FROM ALL ${EventsEnum.ONLINE_STATUS_EVENT}`, data)
163
+ break
164
+ default:
165
+ console.log('Unknown event', data)
166
+
167
+ }
168
+ }
169
+ )
170
+
171
+ setTimeout(
172
+ () => {
173
+ if (!loggedId.value) {
174
+ loading.value = false
175
+ alert('Login failed')
176
+ }
177
+ },
178
+ 5000
179
+ )
180
+ }
181
+ </script>
@@ -0,0 +1,60 @@
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
@@ -0,0 +1,8 @@
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
@@ -0,0 +1,10 @@
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
@@ -0,0 +1,7 @@
1
+ # Demo
2
+
3
+ <ClientOnly>
4
+ <div class="py-5">
5
+ <Demo />
6
+ </div>
7
+ </ClientOnly>
@@ -0,0 +1,4 @@
1
+ # Voicenter Events SDK
2
+
3
+ - [Demo](demo.md)
4
+ - [API](api/modules.md)
package/jest.config.js ADDED
@@ -0,0 +1,11 @@
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
+ }
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@voicenter-team/events-sdk",
3
+ "version": "0.0.1",
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/voicenter-events-sdk.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.253",
30
+ "@types/jest": "^29.5.10",
31
+ "@types/js-md5": "^0.7.2",
32
+ "@types/lodash": "^4.14.200",
33
+ "@types/node": "^18.14.2",
34
+ "@typescript-eslint/eslint-plugin": "^5.53.0",
35
+ "@typescript-eslint/parser": "^5.53.0",
36
+ "@voicenter-team/eslint-config-ts": "^1.0.22",
37
+ "dotenv": "^16.0.3",
38
+ "eslint": "^8.35.0",
39
+ "eslint-plugin-jest": "^27.6.0",
40
+ "jest": "^29.7.0",
41
+ "pre-commit": "^1.2.2",
42
+ "socket.io-client": "^4.7.2",
43
+ "swagger-axios-codegen": "^0.14.0",
44
+ "ts-jest": "^29.1.1",
45
+ "tsc-alias": "^1.8.6",
46
+ "typescript": "^4.9.5",
47
+ "vite": "4.3.9",
48
+ "vite-plugin-dts": "^3.6.0"
49
+ },
50
+ "dependencies": {
51
+ "js-md5": "^0.7.3",
52
+ "lodash": "^4.17.21"
53
+ }
54
+ }
@@ -0,0 +1,196 @@
1
+ import md5 from 'js-md5'
2
+
3
+ import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
4
+ import { Environment, EventsSdkOptions, ServerParameter } from '@/classes/events-sdk/events-sdk.types'
5
+ import { LoginSessionData, LoginSessionPayload } from '@/types/auth'
6
+
7
+ class AuthClass{
8
+ constructor (private readonly eventsSdkClass: EventsSdkClass) {
9
+ this.eventsSdkClass = eventsSdkClass
10
+ }
11
+
12
+ private delay = 1000
13
+ public lastLoginTimestamp: number | undefined
14
+ public token: string | undefined
15
+
16
+ public async login (options: EventsSdkOptions) {
17
+ const payload: LoginSessionPayload = {
18
+ token: options.token,
19
+ email: options.email,
20
+ username: options.username,
21
+ password: options.password
22
+ }
23
+
24
+ const key = md5(JSON.stringify(payload))
25
+
26
+ if (this.lastLoginTimestamp && this.lastLoginTimestamp + this.delay > new Date().getTime()) {
27
+ return
28
+ }
29
+
30
+ this.updateLastLoginTimestamp()
31
+
32
+ const isLoggedIn = await this.checkLoginStatus(options, key)
33
+
34
+ if (!isLoggedIn) {
35
+ await this.userLoginFunction(payload, key)
36
+ }
37
+ }
38
+
39
+ public updateLastLoginTimestamp () {
40
+ this.lastLoginTimestamp = new Date().getTime()
41
+ }
42
+
43
+ private async checkLoginStatus (options: EventsSdkOptions, key: string): Promise<boolean> {
44
+ let loginSessionData: LoginSessionData
45
+ if (options.environment === Environment.BROWSER && window) {
46
+ const loginSessionKey = window.sessionStorage.getItem(key)
47
+
48
+ if (loginSessionKey) {
49
+ loginSessionData = JSON.parse(loginSessionKey)
50
+
51
+ this.onLoginResponse(loginSessionData)
52
+
53
+ return true
54
+ }
55
+ }
56
+ if (options.environment === Environment.CHROME_EXTENSION && chrome) {
57
+ const loginSessionKey = await chrome.storage.session.get(key)
58
+
59
+ if (loginSessionKey[key]) {
60
+ loginSessionData = JSON.parse(loginSessionKey[key])
61
+
62
+ this.onLoginResponse(loginSessionData)
63
+
64
+ return true
65
+ }
66
+ }
67
+ return false
68
+ }
69
+
70
+ private onLoginResponse (loginSessionData: LoginSessionData) {
71
+ if (loginSessionData.Client) {
72
+ this.eventsSdkClass.socketIoClass.getSocketIoFunction(loginSessionData.Client)
73
+ }
74
+ if (loginSessionData.Url) {
75
+ this.eventsSdkClass.server = {
76
+ Priority: 0,
77
+ Domain: loginSessionData.Url.replace('https://', '')
78
+ }
79
+ }
80
+ if (loginSessionData.URLList) {
81
+ this.eventsSdkClass.servers = loginSessionData.URLList.map((url, index) => {
82
+ return {
83
+ Priority: index,
84
+ Domain: url.replace('https://', '')
85
+ }
86
+ })
87
+ }
88
+ if (loginSessionData.Token) {
89
+ // this.options.token = loginSessionData.Token
90
+ this.token = loginSessionData.Token
91
+ this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
92
+ }
93
+ if (loginSessionData.RefreshToken && loginSessionData.TokenExpiry && this.eventsSdkClass.options.loginType === 'user') {
94
+ this.eventsSdkClass.options.refreshToken = loginSessionData.RefreshToken
95
+ this.eventsSdkClass.options.tokenExpiry = loginSessionData.TokenExpiry
96
+ this.handleTokenExpiry()
97
+ }
98
+ }
99
+
100
+ private async userLoginFunction (payload: LoginSessionPayload, key: string) {
101
+ const externalLoginUrl = this.getExternalLoginUrl(this.eventsSdkClass.options.loginUrl, this.eventsSdkClass.options.loginType)
102
+
103
+ const externalLoginResponse = await this.externalLogin(externalLoginUrl, payload, this.eventsSdkClass.options.loginType)
104
+
105
+ this.onLoginResponse(externalLoginResponse)
106
+
107
+ if (this.eventsSdkClass.options.environment === Environment.BROWSER) {
108
+ window.sessionStorage.setItem(key, JSON.stringify(externalLoginResponse))
109
+ }
110
+ if (this.eventsSdkClass.options.environment === Environment.CHROME_EXTENSION) {
111
+ await chrome.storage.session.set({ [key]: JSON.stringify(externalLoginResponse) })
112
+ }
113
+ }
114
+
115
+ public handleTokenExpiry () {
116
+ let date: Date
117
+
118
+ if (this.eventsSdkClass.options.tokenExpiry) {
119
+ date = new Date(this.eventsSdkClass.options.tokenExpiry)
120
+ } else {
121
+ return
122
+ }
123
+
124
+ const timeout = date.getTime() - new Date().getTime() - 5000 // 5 seconds before expire
125
+
126
+ const maxAllowedTimeout = Math.min(timeout, 0x7FFFFFFF)
127
+
128
+ setTimeout(
129
+ async () => {
130
+ if (this.eventsSdkClass.options.refreshTokenUrl && this.eventsSdkClass.options.refreshToken) {
131
+ let Socket = null
132
+ const res = await this.refreshToken(this.eventsSdkClass.options.refreshTokenUrl, this.eventsSdkClass.options.refreshToken)
133
+
134
+ if (res.Data) {
135
+ Socket = res.Data.Socket
136
+ return this.onLoginResponse(Socket)
137
+ }
138
+
139
+ throw new Error('Error on refreshToken')
140
+ }
141
+ },
142
+ maxAllowedTimeout)
143
+ }
144
+
145
+ private getExternalLoginUrl (baseUrl: string, loginType: string) {
146
+ if (loginType === 'user') {
147
+ return `${baseUrl}/User`
148
+ }
149
+ if (loginType === 'token') {
150
+ return `${baseUrl}/Token`
151
+ }
152
+ return baseUrl
153
+ }
154
+
155
+ private async externalLogin (url: string, { password, token, email }: LoginSessionPayload, loginType: string) {
156
+ let body: string
157
+
158
+ if (loginType === 'token') {
159
+ body = JSON.stringify({ token })
160
+ } else {
161
+ body = JSON.stringify({
162
+ email,
163
+ pin: password
164
+ })
165
+ }
166
+
167
+ const res = await fetch(url, {
168
+ method: 'POST',
169
+ headers: {
170
+ 'Content-Type': 'application/json'
171
+ },
172
+ body,
173
+ })
174
+
175
+ const data = await res.json()
176
+
177
+ if (data.error) {
178
+ throw new Error(data.error)
179
+ }
180
+ return data.Data.Socket
181
+ }
182
+
183
+ private async refreshToken (refreshTokenUrl: string, oldRefreshToken: string) {
184
+ const res = await fetch(refreshTokenUrl, {
185
+ method: 'GET',
186
+
187
+ headers: {
188
+ 'Content-Type': 'application/json',
189
+ Authorization: `Bearer ${oldRefreshToken}`
190
+ }
191
+ })
192
+ return res.json()
193
+ }
194
+ }
195
+
196
+ export default AuthClass
@@ -0,0 +1,14 @@
1
+ import AuthClass from '@/classes/auth/auth.class'
2
+ import { eventsSdkDefaultOptions } from '@/classes/events-sdk/events-sdk-default-options'
3
+ import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
4
+
5
+ describe('AuthClass', () => {
6
+ const sdk = new EventsSdkClass(eventsSdkDefaultOptions)
7
+
8
+ const authClass = new AuthClass(sdk)
9
+
10
+ it('should be cypher', () => {
11
+ const key = authClass.login(eventsSdkDefaultOptions)
12
+ expect(typeof key).toBe('string')
13
+ })
14
+ })
@@ -0,0 +1,52 @@
1
+ import { EventsSdkOptions, Environment } from '@/classes/events-sdk/events-sdk.types'
2
+
3
+ export const eventsSdkDefaultOptions: EventsSdkOptions = {
4
+ url: 'https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls',
5
+ environment: Environment.BROWSER,
6
+ fallbackServer: {
7
+ Domain: 'monitor5.voicenter.co.il',
8
+ Priority: 0,
9
+ },
10
+ loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',
11
+ refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',
12
+ // servers: defaultServers, // commented temporary
13
+ token: '',
14
+ loginType: 'token',
15
+ forceNew: true,
16
+ reconnectionDelay: 10000,
17
+ reconnectionDelayMax: 10000,
18
+ maxReconnectAttempts: 5,
19
+ timeout: 10000,
20
+ keepAliveTimeout: 60000,
21
+ idleInterval: 60000 * 5,
22
+ protocol: 'https',
23
+ transports: [ 'websocket' ],
24
+ upgrade: false,
25
+ store: '',
26
+ extensionsModuleName: 'sdkExtensions',
27
+ queuesModuleName: 'sdkQueues',
28
+ dialersModuleName: 'sdkDialers',
29
+ serverFetchStrategy: 'static',
30
+ serverType: 0,
31
+ useLogger: false,
32
+ loggerSocketConnection: '',
33
+ loggerServer: 'http://127.0.0.1:3000/',
34
+ loggerConfig: {
35
+ logToConsole: true,
36
+ overloadGlobalConsole: false,
37
+ namespace: 'events-sdk',
38
+ socketEmitInterval: 10000,
39
+ },
40
+ loggerConnectOptions: {
41
+ reconnection: true,
42
+ reconnectionDelay: 5000,
43
+ reconnectionAttempts: 10,
44
+ perMessageDeflate: false,
45
+ upgrade: false,
46
+ transports: [ 'websocket' ],
47
+ debug: false
48
+ },
49
+ username: 'username',
50
+ password: '53070875445',
51
+ email: 'FreshTest@Voicenter.com',
52
+ }