@aiqa/sdk 0.0.0

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/src/types.ts ADDED
@@ -0,0 +1,164 @@
1
+
2
+ export type TApplicationPayload = {
3
+ policyNumber: string;
4
+ product: string;
5
+ insuredPhone: string;
6
+ clientName: string;
7
+ }
8
+
9
+ export type TApplicationUtterance = {
10
+ id: string;
11
+ application_id?: string;
12
+ call_id?: number;
13
+ order?: number;
14
+ is_agent?: boolean; //?????
15
+ speaker?: number;
16
+ text?: string;
17
+ text_en?: string;
18
+ start_time?: number;
19
+ end_time?: number;
20
+ extra?: any;
21
+ }
22
+
23
+ export type TApplication = {
24
+ application_id: string;
25
+ adviser_id: string;
26
+ start_date: Date;
27
+ language: string;
28
+ rtStatus: string; // ??? Need create enum + discuss name
29
+
30
+ policy_number?: string;
31
+ insured_phone?: string;
32
+ client_name?: string;
33
+
34
+ utterances: TApplicationUtterance[];
35
+ facts: TApplicationFact[];
36
+ }
37
+
38
+ //////// ADD FACTS
39
+
40
+ export type TApplicationFactPayload = {
41
+ fact: {
42
+ id: string;
43
+ expected_answer: string;
44
+ };
45
+ applicationId: string;
46
+ }
47
+
48
+ export type TApplicationFact = {
49
+ id: string;
50
+ expected_answer: string;
51
+ actual_answer: string;
52
+ is_matched: boolean;
53
+ }
54
+ /////////////
55
+
56
+ export interface payloadSubscribeOnApplication {
57
+ application_id: string;
58
+ }
59
+
60
+ export type TFactIsMatched = boolean;
61
+
62
+ export type TResponse = {
63
+ isAlive?: boolean;
64
+ application?: TApplication | null,
65
+ applicationIsActive?: boolean;
66
+ factIsMatched?: TFactIsMatched;
67
+ recordingIsStarted?: boolean;
68
+ recordingIsStopped?: boolean;
69
+ recordingIsActive?: boolean;
70
+ error?: Error
71
+ }
72
+
73
+ export type TResult = {
74
+ data?: any;
75
+ error?: any;
76
+ }
77
+
78
+ /**
79
+ * Events
80
+ * 'connect'
81
+ * 'disconnect'
82
+ * 'close'
83
+ * 'error'
84
+ */
85
+
86
+ abstract class AiqaSdk {
87
+ abstract connect(): void;
88
+ abstract disconnect(): void;
89
+
90
+ abstract on(eventName: string, callback: (...args: any[]) => any): void;
91
+ abstract off(eventName: string): void;
92
+
93
+ abstract isAlive(cb: ({isAlive, error}: TResponse) => void): void;
94
+ abstract isAliveAsync(): Promise<boolean>;
95
+
96
+ abstract getApplication(applicationId: string, cb:({application, error}: TResponse) => void): void;
97
+ abstract getApplicationAsync(applicationId: string): Promise<TApplication>;
98
+
99
+ abstract createApplication(data: TApplicationPayload, cb: ({application, error}: TResponse) => void): void;
100
+ abstract createApplicationAsync(data: TApplicationPayload): Promise<TApplication>;
101
+
102
+ abstract setActiveApplication(applicationId: string, cb: ({applicationIsActive, error}: TResponse) => void): void;
103
+ abstract setActiveApplication(applicationId: string): Promise<boolean>;
104
+
105
+ abstract getActiveApplication(cb: ({application, error}: TResponse) => void): void;
106
+ abstract getActiveApplicationAsync(): Promise<TApplication | null>;
107
+
108
+ abstract resetActiveApplication(applicationId: string, cb: ({applicationIsActive, error}: TResponse) => void): void;
109
+ abstract resetActiveApplicationAsync(applicationId: string): Promise<boolean>;
110
+
111
+ abstract addFact(fact: TApplicationFactPayload, cb: ({factIsMatched, error}: TResponse) => void): void;
112
+ abstract addFactAsync(fact: TApplicationFactPayload): Promise<TFactIsMatched>;
113
+
114
+ abstract startRecording(cb: ({recordingIsStarted, error}: TResponse) => void): void;
115
+ abstract startRecordingAsync(): Promise<boolean>;
116
+
117
+ abstract stopRecording(cb: ({recordingIsStopped, error}: TResponse) => void): void;
118
+ abstract stopRecordingAsync(): Promise<boolean>;
119
+
120
+ abstract isRecordingNow(cb: ({recordingIsActive, error}: TResponse) => void): void;
121
+ abstract isRecordingNowAsync(): Promise<boolean>;
122
+ }
123
+
124
+ /*
125
+ Со стороны Стаса нужно реализовать методы
126
+
127
+ getApplication
128
+
129
+ createApplication
130
+
131
+ setActiveApplication = вроде реализован subscribeOnApplication, но ничего не возвращает
132
+
133
+ getActiveApplication
134
+
135
+ resetActiveApplication ???
136
+
137
+ addFact = вроде реализовано ??? должен возвращать тру фолс, но ничего не возвращает
138
+ так же отправка идет не массивом, а по одному факту
139
+
140
+ ////////
141
+
142
+ нет понимания какие ошибки будет возвращать Сервер
143
+
144
+ ////////
145
+
146
+ GET_APPLICATION => applicationId : TApplication
147
+ CREATE_APPLICATION => applicationPayload: TApplication
148
+ SET_ACTIVE_APPLICATION => applicationId, {active: true} || true для отключения отправлять false : TRUE/FALSE
149
+ GET_ACTIVE_APPLICATION => undefined : TApplication
150
+ ADD_FACT => factPayload : TRUE/FALSE
151
+
152
+ внутренний метод
153
+
154
+ ADD_UTTERANCES => еще не реализован, должен быть реализован внутри ПайтонАпп
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+ */
163
+
164
+
@@ -0,0 +1,534 @@
1
+ import {afterAll, beforeAll, describe, expect, it, jest, test, afterEach, beforeEach} from '@jest/globals';
2
+ import AiQaSdk from '../src';
3
+ import { TResponse } from '../src/types';
4
+
5
+ import { createServer } from "node:http";
6
+
7
+ import { Server } from "socket.io";
8
+ import { WEBSOCKET_PORT } from "../src/config";
9
+ import { Methods } from '../src/enum';
10
+
11
+
12
+ describe('', () => {
13
+ let app, ioServer, serverSocket;
14
+
15
+ beforeAll((done) => {
16
+ const httpServer = createServer();
17
+ ioServer = new Server(httpServer);
18
+ httpServer.listen(WEBSOCKET_PORT, () => {
19
+ app = new AiQaSdk();
20
+ app.on('connect', () => {
21
+ done()
22
+ });
23
+ ioServer.on("connection", (socket) => {
24
+ serverSocket = socket;
25
+ });
26
+ app.connect();
27
+ });
28
+ });
29
+
30
+ // afterEach(() => {
31
+ // console.log('After All')
32
+ // ioServer.close();
33
+ // app.disconnect();
34
+ // });
35
+
36
+ describe.skip('isAlive method', () => {
37
+ it('should be true', (done) => {
38
+ app.isAlive(({data, error}: TResponse) => {
39
+ expect(data).toBe(true);
40
+ done();
41
+ })
42
+ });
43
+
44
+ it('should be false', (done) => {
45
+ app.disconnect();
46
+ app.isAlive(({data, error}: TResponse) => {
47
+ expect(data).toBe(false);
48
+ done();
49
+ app.connect();
50
+ })
51
+ });
52
+ });
53
+
54
+ describe.skip('isAliveAsync method', () => {
55
+ it('should be true', async () => {
56
+ app.connect();
57
+ const result = await app.isAliveAsync();
58
+ expect(result).toBe(true);
59
+ });
60
+
61
+ it('should be false', async () => {
62
+ app.disconnect();
63
+ const result = await app.isAliveAsync();
64
+ expect(result).toBe(false);
65
+ app.connect();
66
+ });
67
+ });
68
+
69
+ describe('getApplication method', () => {
70
+ it.skip(`should send message ${Methods.GET_APPLICATION} to PythonApp`, (done) => {
71
+ const someapplicationId = 'someapplicationId';
72
+ serverSocket.on(Methods.GET_APPLICATION, (message: string) => {
73
+ const stringIncludes = message.includes(someapplicationId);
74
+ expect(stringIncludes).toBe(true);
75
+ done();
76
+ });
77
+
78
+ app.getApplication(someapplicationId, ({data, error}: TResponse) => {
79
+ console.log('')
80
+ })
81
+ });
82
+
83
+ it('should return application', (done) => {
84
+ const application = {some: 'value'} //TODO need APP
85
+
86
+ app.getApplication('someapplicationId', ({data, error}: TResponse) => {
87
+ console.log(application)
88
+ //@ts-ignore
89
+ expect(data).toMatchObject(application);
90
+ done();
91
+ })
92
+
93
+ serverSocket.emit(Methods.GET_APPLICATION, JSON.stringify(application))
94
+ });
95
+ })
96
+
97
+ describe('getApplicationAsync method', () => {
98
+ it.skip(`should send message ${Methods.GET_APPLICATION} to PythonApp`, (done) => {
99
+ const someapplicationId = 'someapplicationId';
100
+ serverSocket.on(Methods.GET_APPLICATION, (message: string) => {
101
+ const stringIncludes = message.includes(someapplicationId);
102
+ expect(stringIncludes).toBeTruthy();
103
+ done();
104
+ });
105
+
106
+ app.getApplicationAsync(someapplicationId);
107
+ })
108
+
109
+ it('should return application', (done) => {
110
+ const application = {some: 'value'} //TODO need APP
111
+
112
+ app.getApplicationAsync('someapplicationId')
113
+ .then((data) => {
114
+ expect(data.application).toMatchObject(application);
115
+ done()
116
+ })
117
+
118
+ serverSocket.emit(Methods.GET_APPLICATION, JSON.stringify({application}));
119
+ });
120
+ })
121
+
122
+ describe('createApplication method', () => {
123
+ it.skip(`should send message ${Methods.CREATE_APPLICATION} to PythonApp`, (done) => {
124
+ const createData = {some: 'data'};
125
+
126
+ serverSocket.on(Methods.CREATE_APPLICATION, (message: string) => {
127
+ const stringEqual = message.includes(JSON.stringify(createData));
128
+ expect(stringEqual).toBeTruthy();
129
+ done();
130
+ });
131
+
132
+ app.createApplication(createData, ({data, error}: TResponse) => {
133
+ console.log('')
134
+ })
135
+ });
136
+
137
+ it('should return created application', (done) => {
138
+ const createData = {some: 'value'} //TODO need APP
139
+
140
+ app.createApplication(createData, ({data, error}: TResponse) => {
141
+ console.log(createData)
142
+ expect(data).toMatchObject(createData);
143
+ done();
144
+ })
145
+
146
+ serverSocket.emit(Methods.CREATE_APPLICATION, JSON.stringify(createData))
147
+ });
148
+ })
149
+
150
+ describe('createApplicationAsync method', () => {
151
+ it.skip(`should send message ${Methods.CREATE_APPLICATION} to PythonApp`, (done) => {
152
+ const createData = {some: 'data'};
153
+
154
+ serverSocket.on(Methods.CREATE_APPLICATION, (message: string) => {
155
+ const stringEqual = message.includes(JSON.stringify(createData));
156
+ expect(stringEqual).toBeTruthy();
157
+ done();
158
+ });
159
+
160
+ app.createApplicationAsync(createData)
161
+ });
162
+
163
+ it('should return created application', (done) => {
164
+ const createData = {some: 'value'} //TODO need APP
165
+
166
+ app.createApplicationAsync(createData)
167
+ .then((data) => {
168
+ expect(data).toMatchObject(createData);
169
+ done()
170
+ })
171
+
172
+ serverSocket.emit(Methods.CREATE_APPLICATION, JSON.stringify(createData));
173
+ });
174
+ })
175
+
176
+ ///
177
+
178
+ describe('setActiveApplication method', () => {
179
+ it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
180
+ const applicationId = 'someApplicationId';
181
+
182
+ serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
183
+ const stringEqual = message.includes(applicationId);
184
+ expect(stringEqual).toBe(true);
185
+ done();
186
+ });
187
+
188
+ app.setActiveApplication(applicationId, ({data, error}: TResponse) => {
189
+ console.log('')
190
+ })
191
+ });
192
+
193
+ it('should return state true', (done) => {
194
+ const applicationId = 'someApplicationId';
195
+
196
+ app.setActiveApplication(applicationId, ({data, error}: TResponse) => {
197
+ expect(data).toBe(true);
198
+ done();
199
+ })
200
+
201
+ serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(true))
202
+ });
203
+ })
204
+
205
+ describe('setActiveApplicationAsync method', () => {
206
+ it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
207
+ const applicationId = 'someApplicationId';
208
+
209
+ serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
210
+ const stringEqual = message.includes(JSON.stringify(applicationId));
211
+ expect(stringEqual).toBe(true);
212
+ done();
213
+ });
214
+
215
+ app.setActiveApplicationAsync(applicationId)
216
+ });
217
+
218
+ it('should return state true', (done) => {
219
+ const applicationId = 'someApplicationId';
220
+
221
+ app.setActiveApplicationAsync(applicationId)
222
+ .then((data) => {
223
+ expect(data).toBe(true);
224
+ done();
225
+ })
226
+
227
+ serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(true));
228
+ });
229
+ })
230
+
231
+ ///
232
+
233
+ describe('getActiveApplication method', () => {
234
+ it.skip(`should send message ${Methods.GET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
235
+ const mockFn = jest.fn();
236
+ serverSocket.on(Methods.GET_ACTIVE_APPLICATION, () => {
237
+ mockFn()
238
+ expect(mockFn).toHaveBeenCalled();
239
+ done();
240
+ });
241
+
242
+ app.getActiveApplication(({data, error}: TResponse) => {
243
+ console.log('')
244
+ });
245
+ });
246
+
247
+ it('should return state true', (done) => {
248
+ const application = {some: 'data'};
249
+
250
+ app.getActiveApplication(({data, error}: TResponse) => {
251
+ expect(data).toMatchObject(application);
252
+ done();
253
+ })
254
+
255
+ serverSocket.emit(Methods.GET_ACTIVE_APPLICATION, JSON.stringify(application))
256
+ });
257
+ })
258
+
259
+ describe('getActiveApplicationAsync method', () => {
260
+ it.skip(`should send message ${Methods.GET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
261
+ const mockFn = jest.fn();
262
+ serverSocket.on(Methods.GET_ACTIVE_APPLICATION, () => {
263
+ mockFn();
264
+ expect(mockFn).toHaveBeenCalled();
265
+ done();
266
+ });
267
+
268
+ app.getActiveApplicationAsync()
269
+ });
270
+
271
+ it('should return state true', (done) => {
272
+ const application = {some: 'value'} //TODO need APP
273
+
274
+ app.getActiveApplicationAsync()
275
+ .then((data) => {
276
+ expect(data.application).toMatchObject(application);
277
+ done()
278
+ })
279
+
280
+ serverSocket.emit(Methods.GET_ACTIVE_APPLICATION, JSON.stringify({application}));
281
+ });
282
+ })
283
+
284
+ ///
285
+
286
+ describe('resetActiveApplication method', () => {
287
+ it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
288
+ const applicationId = 'someApplicationId';
289
+
290
+ serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
291
+ const stringEqual = message.includes(applicationId);
292
+ expect(stringEqual).toBeTruthy();
293
+ done();
294
+ });
295
+
296
+ app.resetActiveApplication(applicationId, ({data, error}: TResponse) => {
297
+ console.log('')
298
+ })
299
+ });
300
+
301
+ it('should return state false', (done) => {
302
+ const applicationId = 'someApplicationId';
303
+
304
+ app.setActiveApplication(applicationId, ({data, error}: TResponse) => {
305
+ expect(data).toBe(false);
306
+ done();
307
+ })
308
+
309
+ serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(false))
310
+ });
311
+ })
312
+
313
+ describe('resetActiveApplicationAsync method', () => {
314
+ it.skip(`should send message ${Methods.SET_ACTIVE_APPLICATION} to PythonApp`, (done) => {
315
+ const applicationId = 'someApplicationId';
316
+
317
+ serverSocket.on(Methods.SET_ACTIVE_APPLICATION, (message: string) => {
318
+ const stringEqual = message.includes(JSON.stringify(applicationId));
319
+ expect(stringEqual).toBeTruthy();
320
+ done();
321
+ });
322
+
323
+ app.resetActiveApplicationAsync(applicationId)
324
+ });
325
+
326
+ it('should return state true', (done) => {
327
+ const applicationId = 'someApplicationId';
328
+
329
+ app.setActiveApplicationAsync(applicationId)
330
+ .then((data) => {
331
+ expect(data).toBe(false);
332
+ done();
333
+ })
334
+
335
+ serverSocket.emit(Methods.SET_ACTIVE_APPLICATION, JSON.stringify(false));
336
+ });
337
+ })
338
+
339
+ ///
340
+
341
+ describe('addTests method', () => {
342
+ it.skip(`should send message ${Methods.ADD_FACT} to PythonApp`, (done) => {
343
+ const mockFn = jest.fn();
344
+ serverSocket.on(Methods.ADD_FACT, () => {
345
+ mockFn();
346
+ expect(mockFn).toHaveBeenCalled();
347
+ done();
348
+ });
349
+
350
+ app.addFact(({data, error}: TResponse) => {
351
+ console.log('')
352
+ })
353
+ });
354
+
355
+ it.only(`should return fact`, (done) => {
356
+ const mockFn = jest.fn();
357
+ serverSocket.on(Methods.ADD_FACT, () => {
358
+ mockFn();
359
+ expect(mockFn).toHaveBeenCalled();
360
+ done();
361
+ });
362
+
363
+ app.addFact(({data, error}: TResponse) => {
364
+ console.log('')
365
+ })
366
+ });
367
+ })
368
+
369
+ describe('addTestsAsync method', () => {
370
+ it.skip(`should send message ${Methods.ADD_FACT} to PythonApp`, (done) => {
371
+ const mockFn = jest.fn();
372
+ serverSocket.on(Methods.ADD_FACT, () => {
373
+ mockFn();
374
+ expect(mockFn).toHaveBeenCalled();
375
+ done();
376
+ });
377
+
378
+ app.addFact(({data, error}: TResponse) => {
379
+ console.log('')
380
+ })
381
+ });
382
+
383
+ it.only(`should return fact`, (done) => {
384
+ app.addFact()
385
+ });
386
+ })
387
+
388
+ ///
389
+
390
+ describe('startRecording method', () => {
391
+ it.skip(`should send message ${Methods.START_RECORDING} to PythonApp`, (done) => {
392
+ const mockFn = jest.fn();
393
+ serverSocket.on(Methods.START_RECORDING, () => {
394
+ mockFn();
395
+ expect(mockFn).toHaveBeenCalled();
396
+ done();
397
+ });
398
+
399
+ app.startRecording(({data, error}: TResponse) => {
400
+ console.log('')
401
+ })
402
+ });
403
+
404
+ it('should return state true', (done) => {
405
+ app.startRecording(({data, error}: TResponse) => {
406
+ expect(data).toBe(true);
407
+ done();
408
+ })
409
+
410
+ serverSocket.emit(Methods.START_RECORDING, JSON.stringify(true))
411
+ });
412
+ })
413
+
414
+ describe('startRecordingAsync method', () => {
415
+ it.skip(`should send message ${Methods.START_RECORDING} to PythonApp`, (done) => {
416
+ const mockFn = jest.fn();
417
+ serverSocket.on(Methods.START_RECORDING, (message: string) => {
418
+ mockFn();
419
+ expect(mockFn).toHaveBeenCalled();
420
+ done();
421
+ });
422
+
423
+ app.startRecordingAsync()
424
+ });
425
+
426
+ it('should return state true', (done) => {
427
+ app.startRecordingAsync()
428
+ .then((data) => {
429
+ expect(data).toBe(true);
430
+ done();
431
+ })
432
+
433
+ serverSocket.emit(Methods.START_RECORDING, JSON.stringify(true));
434
+ });
435
+ })
436
+
437
+ ///
438
+
439
+ describe('stopRecording method', () => {
440
+ it.skip(`should send message ${Methods.STOP_RECORDING} to PythonApp`, (done) => {
441
+ const mockFn = jest.fn();
442
+ serverSocket.on(Methods.STOP_RECORDING, () => {
443
+ mockFn();
444
+ expect(mockFn).toHaveBeenCalled();
445
+ done();
446
+ });
447
+
448
+ app.stopRecording(({data, error}: TResponse) => {
449
+ console.log('')
450
+ })
451
+ });
452
+
453
+ it('should return state false', (done) => {
454
+ app.stopRecording(({data, error}: TResponse) => {
455
+ expect(data).toBe(true);
456
+ done();
457
+ })
458
+
459
+ serverSocket.emit(Methods.STOP_RECORDING, JSON.stringify(true))
460
+ });
461
+ })
462
+
463
+ describe('stopRecordingAsync method', () => {
464
+ it.skip(`should send message ${Methods.STOP_RECORDING} to PythonApp`, (done) => {
465
+ const mockFn = jest.fn();
466
+ serverSocket.on(Methods.STOP_RECORDING, (message: string) => {
467
+ mockFn();
468
+ expect(mockFn).toHaveBeenCalled();
469
+ done();
470
+ });
471
+
472
+ app.stopRecordingAsync()
473
+ });
474
+
475
+ it('should return state true', (done) => {
476
+ app.stopRecordingAsync()
477
+ .then((data: boolean) => {
478
+ expect(data).toBe(true);
479
+ done();
480
+ })
481
+
482
+ serverSocket.emit(Methods.STOP_RECORDING, JSON.stringify(true));
483
+ });
484
+ })
485
+
486
+ ///
487
+
488
+ describe('isRecordingNow method', () => {
489
+ it.skip(`should send message ${Methods.IS_RECORDING} to PythonApp`, (done) => {
490
+ const mockFn = jest.fn();
491
+ serverSocket.on(Methods.IS_RECORDING, () => {
492
+ mockFn();
493
+ expect(mockFn).toHaveBeenCalled();
494
+ done();
495
+ });
496
+
497
+ app.isRecordingNow(({data, error}: TResponse) => {
498
+ console.log('')
499
+ })
500
+ });
501
+
502
+ it('should return state true', (done) => {
503
+ app.isRecordingNow(({data, error}: TResponse) => {
504
+ expect(data).toBe(true);
505
+ done();
506
+ })
507
+
508
+ serverSocket.emit(Methods.IS_RECORDING, JSON.stringify(true))
509
+ });
510
+ })
511
+
512
+ describe('isRecordingAsync method', () => {
513
+ it.skip(`should send message ${Methods.IS_RECORDING} to PythonApp`, (done) => {
514
+ const mockFn = jest.fn();
515
+ serverSocket.on(Methods.IS_RECORDING, (message: string) => {
516
+ mockFn();
517
+ expect(mockFn).toHaveBeenCalled();
518
+ done();
519
+ });
520
+
521
+ app.isRecordingNowAsync()
522
+ });
523
+
524
+ it('should return state false', (done) => {
525
+ app.isRecordingNowAsync()
526
+ .then((data: boolean) => {
527
+ expect(data).toBe(false);
528
+ done();
529
+ })
530
+
531
+ serverSocket.emit(Methods.IS_RECORDING, JSON.stringify(false));
532
+ });
533
+ })
534
+ })
@@ -0,0 +1,22 @@
1
+ import { createServer } from "http";
2
+ import { Server } from "socket.io";
3
+ import { WEBSOCKET_PORT } from "../src/config";
4
+
5
+ function createSocketIoServer() {
6
+ const httpServer = createServer();
7
+ const ioServer = new Server(httpServer, {
8
+ // options
9
+ });
10
+
11
+ ioServer.on("connection", (socket) => {
12
+ // ...
13
+ });
14
+
15
+ httpServer.listen(WEBSOCKET_PORT);
16
+
17
+ console.log('Started...', WEBSOCKET_PORT)
18
+
19
+ return ioServer;
20
+ }
21
+
22
+ export default createSocketIoServer;