@voicenter-team/events-sdk 0.0.5 → 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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voicenter-team/events-sdk",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "",
5
5
  "main": "dist/voicenter-events-sdk.cjs.js",
6
6
  "jsdelivr": "dist/voicenter-events-sdk.umd.js",
@@ -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 { LoginSessionData, LoginSessionPayload } from '@/types/auth'
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 (options: EventsSdkOptions, key: string): Promise<boolean> {
52
+ private async checkLoginStatus (environment: Environment, key: string): Promise<boolean> {
44
53
  let loginSessionData: LoginSessionData
45
- if (options.environment === Environment.BROWSER && window) {
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 (options.environment === Environment.CHROME_EXTENSION && chrome) {
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 (payload: LoginSessionPayload, key: string) {
101
- const externalLoginUrl = this.getExternalLoginUrl(this.eventsSdkClass.options.loginUrl, this.eventsSdkClass.options.loginType)
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
- const externalLoginResponse = await this.externalLogin(externalLoginUrl, payload, this.eventsSdkClass.options.loginType)
142
+ if (newStack) {
143
+ const externalLoginResponse = await this.externalLogin<ExternalLoginResponseDataNewStack>(
144
+ externalLoginUrl,
145
+ payload,
146
+ loginType,
147
+ newStack
148
+ )
104
149
 
105
- this.onLoginResponse(externalLoginResponse)
150
+ const settings = await this.getSettings(externalLoginResponse.Data.AccessToken)
106
151
 
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) })
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 (baseUrl: string, loginType: string) {
146
- if (loginType === 'user') {
147
- return `${baseUrl}/User`
148
- }
149
- if (loginType === 'token') {
150
- return `${baseUrl}/Token`
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 (url: string, { password, token, email }: LoginSessionPayload, loginType: string) {
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 (loginType === 'token') {
159
- body = JSON.stringify({ token })
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
- body = JSON.stringify({
162
- email,
163
- pin: password
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.Data.Socket
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 { EventsSdkOptions, Environment } from '@/classes/events-sdk/events-sdk.types'
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: 'token',
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: '53070875445',
51
- email: 'FreshTest@Voicenter.com',
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?: string,
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: string,
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 {
@@ -0,0 +1,9 @@
1
+ export enum LoginTypeNewStackEnum {
2
+ USER = '2',
3
+ TOKEN = '3'
4
+ }
5
+
6
+ export enum LoginTypeOldStackEnum {
7
+ USER = 'user',
8
+ TOKEN = 'token'
9
+ }
@@ -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 LoginSessionData {
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 {}
@@ -47,7 +47,7 @@ export interface Queue {
47
47
  AnsweredAgent?: string,
48
48
  }
49
49
 
50
- interface ExtensionCall {
50
+ export interface ExtensionCall {
51
51
  callStarted: number,
52
52
  calldurationinterval: number,
53
53
  callAnswered: number,
@@ -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
- })