@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.
- package/.eslintrc.cjs +15 -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/voicenter-events-sdk.cjs.js +48 -0
- package/dist/voicenter-events-sdk.cjs.js.map +1 -0
- package/dist/voicenter-events-sdk.d.ts +510 -0
- package/dist/voicenter-events-sdk.es.js +6350 -0
- package/dist/voicenter-events-sdk.es.js.map +1 -0
- package/dist/voicenter-events-sdk.iife.js +48 -0
- package/dist/voicenter-events-sdk.iife.js.map +1 -0
- package/dist/voicenter-events-sdk.umd.js +48 -0
- package/dist/voicenter-events-sdk.umd.js.map +1 -0
- 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 +181 -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/jest.config.js +11 -0
- package/package.json +54 -0
- package/src/classes/auth/auth.class.ts +196 -0
- package/src/classes/auth/auth.test.ts +14 -0
- package/src/classes/events-sdk/events-sdk-default-options.ts +52 -0
- package/src/classes/events-sdk/events-sdk.class.ts +237 -0
- package/src/classes/events-sdk/events-sdk.test.ts +9 -0
- package/src/classes/events-sdk/events-sdk.types.ts +77 -0
- package/src/classes/socket-io/socket-io.class.ts +166 -0
- package/src/classes/socket-io/socket-io.d.ts +10 -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/enum/events.enum.ts +96 -0
- package/src/index.ts +3 -0
- package/src/types/auth.d.ts +18 -0
- package/src/types/events.common.d.ts +110 -0
- package/src/types/events.d.ts +160 -0
- package/src/types/listeners.d.ts +37 -0
- package/src/types/public-api.d.ts +39 -0
- package/src/types/socket.d.ts +5 -0
- 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 +50 -0
- 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,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
|
+
})
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
package/docs/src/demo.md
ADDED
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
|
+
}
|