@voicenter-team/events-sdk 0.0.4 → 0.0.6
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/dist/voicenter-events-sdk.cjs.js +20 -20
- package/dist/voicenter-events-sdk.cjs.js.map +1 -1
- package/dist/voicenter-events-sdk.d.ts +16 -3
- package/dist/voicenter-events-sdk.es.js +1495 -1440
- package/dist/voicenter-events-sdk.es.js.map +1 -1
- package/dist/voicenter-events-sdk.iife.js +20 -20
- package/dist/voicenter-events-sdk.iife.js.map +1 -1
- package/dist/voicenter-events-sdk.umd.js +20 -20
- package/dist/voicenter-events-sdk.umd.js.map +1 -1
- package/docs/src/.vuepress/components/Demo.vue +3 -0
- package/package.json +1 -1
- package/src/classes/auth/auth.class.ts +144 -31
- package/src/classes/auth/auth.urls.ts +10 -0
- package/src/classes/events-sdk/events-sdk-default-options.ts +6 -5
- package/src/classes/events-sdk/events-sdk.types.ts +9 -5
- package/src/classes/socket-io/socket-io.class.ts +1 -1
- package/src/enum/auth.enum.ts +9 -0
- package/src/types/auth.d.ts +30 -2
- package/src/types/events.common.d.ts +1 -1
- package/src/classes/auth/auth.test.ts +0 -14
|
@@ -26,6 +26,7 @@ import EventsSdkClass from '@/index'
|
|
|
26
26
|
import {eventsSdkDefaultOptions} from '@/classes/events-sdk/events-sdk-default-options'
|
|
27
27
|
import {EventsEnum} from '@/enum/events.enum'
|
|
28
28
|
import {EventTypeData} from '@/types/events'
|
|
29
|
+
import {LoginTypeNewStackEnum, LoginTypeOldStackEnum} from "@/enum/auth.enum";
|
|
29
30
|
|
|
30
31
|
/* Data */
|
|
31
32
|
const token = ref('QMSVU9dwNYC9Le9VCBqx24AB9TYyWj9Xn5aCPV0GFHIWoShQqfPtnAPmnw24xpJIUSsDDtlac2OPpjx0t3MSkxH3AhiQGHCeGZ8e')
|
|
@@ -44,6 +45,8 @@ async function login() {
|
|
|
44
45
|
const sdk = new EventsSdkClass({
|
|
45
46
|
...eventsSdkDefaultOptions,
|
|
46
47
|
token: token.value,
|
|
48
|
+
loginType: LoginTypeNewStackEnum.USER,
|
|
49
|
+
newStack: true
|
|
47
50
|
})
|
|
48
51
|
|
|
49
52
|
await sdk.init()
|
package/package.json
CHANGED
|
@@ -2,7 +2,16 @@ import md5 from 'js-md5'
|
|
|
2
2
|
|
|
3
3
|
import EventsSdkClass from '@/classes/events-sdk/events-sdk.class'
|
|
4
4
|
import { Environment, EventsSdkOptions, ServerParameter } from '@/classes/events-sdk/events-sdk.types'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
ExternalLoginResponse,
|
|
7
|
+
ExternalLoginResponseDataNewStack,
|
|
8
|
+
ExternalLoginResponseDataOldStack,
|
|
9
|
+
LoginSessionData,
|
|
10
|
+
LoginSessionPayload,
|
|
11
|
+
Settings
|
|
12
|
+
} from '@/types/auth'
|
|
13
|
+
import { LoginTypeNewStackEnum, LoginTypeOldStackEnum } from '@/enum/auth.enum'
|
|
14
|
+
import { getSettingsUrl, newLoginUrl, oldLoginUrl } from '@/classes/auth/auth.urls'
|
|
6
15
|
|
|
7
16
|
class AuthClass{
|
|
8
17
|
constructor (private readonly eventsSdkClass: EventsSdkClass) {
|
|
@@ -29,10 +38,10 @@ class AuthClass{
|
|
|
29
38
|
|
|
30
39
|
this.updateLastLoginTimestamp()
|
|
31
40
|
|
|
32
|
-
const isLoggedIn = await this.checkLoginStatus(options, key)
|
|
41
|
+
const isLoggedIn = await this.checkLoginStatus(options.environment, key)
|
|
33
42
|
|
|
34
43
|
if (!isLoggedIn) {
|
|
35
|
-
await this.userLoginFunction(payload, key)
|
|
44
|
+
await this.userLoginFunction(payload, key, options.loginType, options.newStack)
|
|
36
45
|
}
|
|
37
46
|
}
|
|
38
47
|
|
|
@@ -40,9 +49,9 @@ class AuthClass{
|
|
|
40
49
|
this.lastLoginTimestamp = new Date().getTime()
|
|
41
50
|
}
|
|
42
51
|
|
|
43
|
-
private async checkLoginStatus (
|
|
52
|
+
private async checkLoginStatus (environment: Environment, key: string): Promise<boolean> {
|
|
44
53
|
let loginSessionData: LoginSessionData
|
|
45
|
-
if (
|
|
54
|
+
if (environment === Environment.BROWSER && window) {
|
|
46
55
|
const loginSessionKey = window.sessionStorage.getItem(key)
|
|
47
56
|
|
|
48
57
|
if (loginSessionKey) {
|
|
@@ -53,7 +62,7 @@ class AuthClass{
|
|
|
53
62
|
return true
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
|
-
if (
|
|
65
|
+
if (environment === Environment.CHROME_EXTENSION && chrome) {
|
|
57
66
|
const loginSessionKey = await chrome.storage.session.get(key)
|
|
58
67
|
|
|
59
68
|
if (loginSessionKey[key]) {
|
|
@@ -67,7 +76,7 @@ class AuthClass{
|
|
|
67
76
|
return false
|
|
68
77
|
}
|
|
69
78
|
|
|
70
|
-
private onLoginResponse (loginSessionData: LoginSessionData) {
|
|
79
|
+
private onLoginResponse (loginSessionData: Partial<LoginSessionData>) {
|
|
71
80
|
if (loginSessionData.Client) {
|
|
72
81
|
this.eventsSdkClass.socketIoClass.getSocketIoFunction(loginSessionData.Client)
|
|
73
82
|
}
|
|
@@ -85,30 +94,96 @@ class AuthClass{
|
|
|
85
94
|
}
|
|
86
95
|
})
|
|
87
96
|
}
|
|
97
|
+
if (loginSessionData.MonitorList) {
|
|
98
|
+
this.eventsSdkClass.servers = [ ...loginSessionData.MonitorList ]
|
|
99
|
+
}
|
|
100
|
+
if (!loginSessionData.Url) {
|
|
101
|
+
this.eventsSdkClass.server = this.eventsSdkClass.servers[0]
|
|
102
|
+
}
|
|
103
|
+
if (!loginSessionData.Client) {
|
|
104
|
+
this.eventsSdkClass.socketIoClass.getSocketIoFunction(`v=${this.eventsSdkClass.server.Version}`)
|
|
105
|
+
}
|
|
88
106
|
if (loginSessionData.Token) {
|
|
89
107
|
// this.options.token = loginSessionData.Token
|
|
90
108
|
this.token = loginSessionData.Token
|
|
91
109
|
this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
|
|
92
110
|
}
|
|
111
|
+
if (loginSessionData.IdentityCode) {
|
|
112
|
+
this.token = loginSessionData.IdentityCode
|
|
113
|
+
this.eventsSdkClass.connect(ServerParameter.DEFAULT, true)
|
|
114
|
+
}
|
|
93
115
|
if (loginSessionData.RefreshToken && loginSessionData.TokenExpiry && this.eventsSdkClass.options.loginType === 'user') {
|
|
94
116
|
this.eventsSdkClass.options.refreshToken = loginSessionData.RefreshToken
|
|
95
117
|
this.eventsSdkClass.options.tokenExpiry = loginSessionData.TokenExpiry
|
|
96
118
|
this.handleTokenExpiry()
|
|
97
119
|
}
|
|
120
|
+
if (loginSessionData.RefreshToken && loginSessionData.IdentityCodeExpiry && this.eventsSdkClass.options.loginType === LoginTypeNewStackEnum.USER) {
|
|
121
|
+
this.eventsSdkClass.options.refreshToken = loginSessionData.RefreshToken
|
|
122
|
+
this.eventsSdkClass.options.tokenExpiry = loginSessionData.IdentityCodeExpiry
|
|
123
|
+
this.handleTokenExpiry()
|
|
124
|
+
}
|
|
98
125
|
}
|
|
99
126
|
|
|
100
|
-
private async userLoginFunction (
|
|
101
|
-
|
|
127
|
+
private async userLoginFunction (
|
|
128
|
+
payload: LoginSessionPayload,
|
|
129
|
+
key: string,
|
|
130
|
+
loginType: LoginTypeNewStackEnum | LoginTypeOldStackEnum,
|
|
131
|
+
newStack: boolean
|
|
132
|
+
) {
|
|
133
|
+
const externalLoginUrl = this.getExternalLoginUrl(
|
|
134
|
+
loginType,
|
|
135
|
+
newStack
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
if (!externalLoginUrl) {
|
|
139
|
+
throw new Error('External login url not found. Check provided options')
|
|
140
|
+
}
|
|
102
141
|
|
|
103
|
-
|
|
142
|
+
if (newStack) {
|
|
143
|
+
const externalLoginResponse = await this.externalLogin<ExternalLoginResponseDataNewStack>(
|
|
144
|
+
externalLoginUrl,
|
|
145
|
+
payload,
|
|
146
|
+
loginType,
|
|
147
|
+
newStack
|
|
148
|
+
)
|
|
104
149
|
|
|
105
|
-
|
|
150
|
+
const settings = await this.getSettings(externalLoginResponse.Data.AccessToken)
|
|
106
151
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
152
|
+
this.onLoginResponse({
|
|
153
|
+
...externalLoginResponse.Data,
|
|
154
|
+
...settings
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
if (this.eventsSdkClass.options.environment === Environment.BROWSER) {
|
|
158
|
+
window.sessionStorage.setItem(key, JSON.stringify({
|
|
159
|
+
...externalLoginResponse.Data,
|
|
160
|
+
...settings
|
|
161
|
+
}))
|
|
162
|
+
}
|
|
163
|
+
if (this.eventsSdkClass.options.environment === Environment.CHROME_EXTENSION) {
|
|
164
|
+
await chrome.storage.session.set({
|
|
165
|
+
[key]: JSON.stringify({
|
|
166
|
+
...externalLoginResponse.Data,
|
|
167
|
+
...settings
|
|
168
|
+
})
|
|
169
|
+
})
|
|
170
|
+
}
|
|
171
|
+
} else {
|
|
172
|
+
const externalLoginResponse = await this.externalLogin<ExternalLoginResponseDataOldStack>(
|
|
173
|
+
externalLoginUrl,
|
|
174
|
+
payload,
|
|
175
|
+
loginType,
|
|
176
|
+
newStack
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
this.onLoginResponse(externalLoginResponse.Data.Socket)
|
|
180
|
+
|
|
181
|
+
if (this.eventsSdkClass.options.environment === Environment.BROWSER) {
|
|
182
|
+
window.sessionStorage.setItem(key, JSON.stringify(externalLoginResponse.Data.Socket))
|
|
183
|
+
}
|
|
184
|
+
if (this.eventsSdkClass.options.environment === Environment.CHROME_EXTENSION) {
|
|
185
|
+
await chrome.storage.session.set({ [key]: JSON.stringify(externalLoginResponse.Data.Socket) })
|
|
186
|
+
}
|
|
112
187
|
}
|
|
113
188
|
}
|
|
114
189
|
|
|
@@ -142,26 +217,54 @@ class AuthClass{
|
|
|
142
217
|
maxAllowedTimeout)
|
|
143
218
|
}
|
|
144
219
|
|
|
145
|
-
private getExternalLoginUrl (
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if (
|
|
150
|
-
return
|
|
220
|
+
private getExternalLoginUrl (
|
|
221
|
+
loginType: LoginTypeNewStackEnum | LoginTypeOldStackEnum,
|
|
222
|
+
newStack: boolean
|
|
223
|
+
) {
|
|
224
|
+
if (newStack) {
|
|
225
|
+
return newLoginUrl
|
|
226
|
+
} else {
|
|
227
|
+
if (loginType === LoginTypeOldStackEnum.TOKEN) {
|
|
228
|
+
return `${oldLoginUrl}/Token`
|
|
229
|
+
}
|
|
230
|
+
if (loginType === LoginTypeOldStackEnum.USER) {
|
|
231
|
+
return `${oldLoginUrl}/User`
|
|
232
|
+
}
|
|
151
233
|
}
|
|
152
|
-
return baseUrl
|
|
153
234
|
}
|
|
154
235
|
|
|
155
|
-
private async externalLogin (
|
|
236
|
+
private async externalLogin<T> (
|
|
237
|
+
url: string,
|
|
238
|
+
{ password, token, email }: LoginSessionPayload,
|
|
239
|
+
loginType: LoginTypeNewStackEnum | LoginTypeOldStackEnum,
|
|
240
|
+
newStack: boolean
|
|
241
|
+
): Promise<ExternalLoginResponse<T>> {
|
|
156
242
|
let body: string
|
|
157
243
|
|
|
158
|
-
if (
|
|
159
|
-
|
|
244
|
+
if (newStack) {
|
|
245
|
+
if (loginType === LoginTypeNewStackEnum.TOKEN) {
|
|
246
|
+
body = JSON.stringify({
|
|
247
|
+
type: Number(LoginTypeNewStackEnum.TOKEN),
|
|
248
|
+
token
|
|
249
|
+
})
|
|
250
|
+
} else {
|
|
251
|
+
body = JSON.stringify({
|
|
252
|
+
type: Number(LoginTypeNewStackEnum.USER),
|
|
253
|
+
username: email,
|
|
254
|
+
password,
|
|
255
|
+
})
|
|
256
|
+
}
|
|
160
257
|
} else {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
258
|
+
if (loginType === LoginTypeOldStackEnum.TOKEN) {
|
|
259
|
+
body = JSON.stringify({
|
|
260
|
+
token
|
|
261
|
+
})
|
|
262
|
+
} else {
|
|
263
|
+
body = JSON.stringify({
|
|
264
|
+
email,
|
|
265
|
+
pin: password
|
|
266
|
+
})
|
|
267
|
+
}
|
|
165
268
|
}
|
|
166
269
|
|
|
167
270
|
const res = await fetch(url, {
|
|
@@ -177,7 +280,17 @@ class AuthClass{
|
|
|
177
280
|
if (data.error) {
|
|
178
281
|
throw new Error(data.error)
|
|
179
282
|
}
|
|
180
|
-
return data
|
|
283
|
+
return data
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
private async getSettings (token: string): Promise<Settings> {
|
|
287
|
+
const res = await fetch(getSettingsUrl, {
|
|
288
|
+
headers: {
|
|
289
|
+
Authorization: `Bearer ${token}`
|
|
290
|
+
}
|
|
291
|
+
})
|
|
292
|
+
|
|
293
|
+
return res.json()
|
|
181
294
|
}
|
|
182
295
|
|
|
183
296
|
private async refreshToken (refreshTokenUrl: string, oldRefreshToken: string) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const oldLoginUrl = 'https://loginapi.voicenter.co.il/monitorAPI/Login'
|
|
2
|
+
const newLoginUrl = 'http://loginapidev.voicenter.co.il/Auth/Login/Voicenter/Monitor'
|
|
3
|
+
const getSettingsUrl = 'http://loginapidev.voicenter.co.il/Application/GetSettings'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
oldLoginUrl,
|
|
8
|
+
newLoginUrl,
|
|
9
|
+
getSettingsUrl
|
|
10
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Environment, EventsSdkOptions } from '@/classes/events-sdk/events-sdk.types'
|
|
2
|
+
import { LoginTypeOldStackEnum } from '@/enum/auth.enum'
|
|
2
3
|
|
|
3
4
|
export const eventsSdkDefaultOptions: EventsSdkOptions = {
|
|
4
5
|
url: 'https://monitorapi.voicenter.co.il/monitorAPI/getMonitorUrls',
|
|
@@ -7,11 +8,10 @@ export const eventsSdkDefaultOptions: EventsSdkOptions = {
|
|
|
7
8
|
Domain: 'monitor5.voicenter.co.il',
|
|
8
9
|
Priority: 0,
|
|
9
10
|
},
|
|
10
|
-
loginUrl: 'https://loginapi.voicenter.co.il/monitorAPI/Login',
|
|
11
11
|
refreshTokenUrl: 'https://loginapi.voicenter.co.il/monitorAPI/RefreshIdentityToken',
|
|
12
12
|
// servers: defaultServers, // commented temporary
|
|
13
13
|
token: '',
|
|
14
|
-
loginType:
|
|
14
|
+
loginType: LoginTypeOldStackEnum.TOKEN,
|
|
15
15
|
forceNew: true,
|
|
16
16
|
reconnectionDelay: 10000,
|
|
17
17
|
reconnectionDelayMax: 10000,
|
|
@@ -47,6 +47,7 @@ export const eventsSdkDefaultOptions: EventsSdkOptions = {
|
|
|
47
47
|
debug: false
|
|
48
48
|
},
|
|
49
49
|
username: 'username',
|
|
50
|
-
password: '
|
|
51
|
-
email: '
|
|
50
|
+
password: '78253050510',
|
|
51
|
+
email: 'test2@status.com',
|
|
52
|
+
newStack: false,
|
|
52
53
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { LoginTypeNewStackEnum, LoginTypeOldStackEnum } from 'enum/auth.enum'
|
|
2
|
+
|
|
1
3
|
export interface EventsSdkOptions {
|
|
2
4
|
url?: string,
|
|
3
|
-
environment
|
|
5
|
+
environment: Environment,
|
|
4
6
|
fallbackServer: Server,
|
|
5
|
-
loginUrl: string,
|
|
6
7
|
refreshTokenUrl?: string,
|
|
7
8
|
refreshToken?: string,
|
|
8
9
|
servers?: string,
|
|
9
10
|
token: string,
|
|
10
11
|
tokenExpiry?: Date,
|
|
11
|
-
loginType:
|
|
12
|
+
loginType: LoginTypeNewStackEnum | LoginTypeOldStackEnum,
|
|
12
13
|
forceNew?: boolean,
|
|
13
14
|
reconnectionDelay: number,
|
|
14
15
|
reconnectionDelayMax?: number,
|
|
@@ -32,7 +33,8 @@ export interface EventsSdkOptions {
|
|
|
32
33
|
loggerConnectOptions?: LoggerConnectOptions,
|
|
33
34
|
email: string,
|
|
34
35
|
password: string,
|
|
35
|
-
username: string
|
|
36
|
+
username: string,
|
|
37
|
+
newStack: boolean
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
export enum Environment {
|
|
@@ -42,7 +44,9 @@ export enum Environment {
|
|
|
42
44
|
|
|
43
45
|
export interface Server {
|
|
44
46
|
Priority: number,
|
|
45
|
-
Domain: string
|
|
47
|
+
Domain: string,
|
|
48
|
+
URLID?: number,
|
|
49
|
+
Version?: string,
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
export interface LoggerConfig {
|
package/src/types/auth.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Server } from '@/classes/events-sdk/events-sdk.types'
|
|
2
|
+
|
|
1
3
|
export interface LoginSessionPayload {
|
|
2
4
|
token: string,
|
|
3
5
|
email: string,
|
|
@@ -5,7 +7,7 @@ export interface LoginSessionPayload {
|
|
|
5
7
|
password: string
|
|
6
8
|
}
|
|
7
9
|
|
|
8
|
-
export interface
|
|
10
|
+
export interface Socket {
|
|
9
11
|
Client: string,
|
|
10
12
|
PersonId: number,
|
|
11
13
|
RefreshToken: string,
|
|
@@ -15,4 +17,30 @@ export interface LoginSessionData {
|
|
|
15
17
|
URLList: string[],
|
|
16
18
|
Url: string,
|
|
17
19
|
Version: string
|
|
18
|
-
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ExternalLoginResponse<T> {
|
|
23
|
+
StatusCode: number,
|
|
24
|
+
Status: string,
|
|
25
|
+
Data: T
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ExternalLoginResponseDataOldStack {
|
|
29
|
+
Socket: Socket,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface ExternalLoginResponseDataNewStack {
|
|
33
|
+
AccessToken: string,
|
|
34
|
+
RefreshToken: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface Settings {
|
|
38
|
+
IdentityCode: string,
|
|
39
|
+
IdentityCodeExpiry: Date,
|
|
40
|
+
PersonID: number,
|
|
41
|
+
PersonType: number,
|
|
42
|
+
ExtensionMonitorID: number,
|
|
43
|
+
MonitorList: Server[]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface LoginSessionData extends Settings, Socket, ExternalLoginResponseDataNewStack {}
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
-
})
|