airdcpp-apisocket 3.0.0-beta.5 → 3.0.0-beta.7
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-es/SocketBase.js +8 -9
- package/dist-es/SocketBase.js.map +1 -1
- package/dist-es/SocketRequestHandler.js +3 -5
- package/dist-es/SocketRequestHandler.js.map +1 -1
- package/dist-es/tests/{helpers.d.ts → mock-server.d.ts} +29 -4
- package/dist-es/tests/mock-server.js +200 -0
- package/dist-es/tests/mock-server.js.map +1 -0
- package/dist-es/tests/test-utils.d.ts +2 -0
- package/dist-es/tests/test-utils.js +10 -0
- package/dist-es/tests/test-utils.js.map +1 -0
- package/dist-es/types/public_helpers_internal.d.ts +2 -2
- package/package.json +1 -1
- package/src/SocketBase.ts +9 -10
- package/src/SocketRequestHandler.ts +3 -5
- package/src/tests/Socket.test.ts +49 -69
- package/src/tests/mock-server.ts +336 -0
- package/src/tests/public_helpers.test.ts +25 -43
- package/src/tests/test-utils.ts +12 -0
- package/src/types/api_internal.ts +0 -1
- package/src/types/public_helpers_internal.ts +2 -2
- package/dist-es/tests/helpers.js +0 -135
- package/dist-es/tests/helpers.js.map +0 -1
- package/src/tests/helpers.ts +0 -211
@@ -1,15 +1,14 @@
|
|
1
1
|
import {
|
2
2
|
getMockServer,
|
3
3
|
getConnectedSocket,
|
4
|
-
|
5
|
-
} from './
|
4
|
+
} from './mock-server.js';
|
5
|
+
import { waitForExpect } from './test-utils.js';
|
6
6
|
|
7
7
|
import { jest } from '@jest/globals';
|
8
8
|
|
9
9
|
import { addContextMenuItems } from '../PublicHelpers.js';
|
10
10
|
import { SelectedMenuItemListenerData, MenuItemListHookData, MenuItemListHookAcceptData } from '../types/public_helpers_internal.js';
|
11
11
|
import { HookSubscriberInfo, MenuCallbackProperties, MenuClickHandlerProperties } from '../types/index.js';
|
12
|
-
import { IncomingSubscriptionEvent } from '../types/api_internal.js';
|
13
12
|
|
14
13
|
|
15
14
|
let server: ReturnType<typeof getMockServer>;
|
@@ -97,19 +96,10 @@ describe('public helpers', () => {
|
|
97
96
|
// Socket handlers
|
98
97
|
const { socket } = await getConnectedSocket(server);
|
99
98
|
|
100
|
-
const
|
101
|
-
server.addDataHandler('POST', `menus/listeners/${MENU_ID}_menuitem_selected`, undefined, listenerAddCallback);
|
102
|
-
|
103
|
-
const hookAddCallback = jest.fn();
|
104
|
-
const hookResolveCallback = jest.fn();
|
105
|
-
server.addDataHandler('POST', `menus/hooks/${MENU_ID}_list_menuitems`, undefined, hookAddCallback);
|
106
|
-
server.addDataHandler(
|
107
|
-
'POST',
|
108
|
-
`menus/hooks/${MENU_ID}_list_menuitems/${HOOK_COMPLETION_ID}/resolve`,
|
109
|
-
menuItemListData,
|
110
|
-
hookResolveCallback
|
111
|
-
);
|
99
|
+
const itemSelectedListener = server.addSubscriptionHandler('menus', `${MENU_ID}_menuitem_selected`);
|
112
100
|
|
101
|
+
const listItemsHook = server.addHookHandler('menus', `${MENU_ID}_list_menuitems`);
|
102
|
+
const listItemsResolver = listItemsHook.addResolver(HOOK_COMPLETION_ID);
|
113
103
|
|
114
104
|
// Add menu items
|
115
105
|
const onClickItem1Mock = jest.fn();
|
@@ -166,33 +156,29 @@ describe('public helpers', () => {
|
|
166
156
|
SUBSCRIBER_INFO,
|
167
157
|
);
|
168
158
|
|
169
|
-
expect(
|
170
|
-
expect(
|
159
|
+
expect(itemSelectedListener.subscribeFn).toHaveBeenCalledTimes(1);
|
160
|
+
expect(listItemsHook.subscribeFn).toHaveBeenCalledTimes(1);
|
171
161
|
|
172
162
|
|
173
163
|
// List items hook
|
174
164
|
{
|
175
|
-
const
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
permissions: PERMISSIONS,
|
181
|
-
supports: SUPPORTS,
|
182
|
-
},
|
183
|
-
completion_id: 1,
|
165
|
+
const menuItemListData: MenuItemListHookData<string, null> = {
|
166
|
+
selected_ids: selectedMenuIds,
|
167
|
+
entity_id: null,
|
168
|
+
permissions: PERMISSIONS,
|
169
|
+
supports: SUPPORTS,
|
184
170
|
};
|
185
171
|
|
186
|
-
|
172
|
+
listItemsResolver.fire(menuItemListData);
|
187
173
|
}
|
188
174
|
|
189
175
|
// Validate list items results
|
190
176
|
{
|
191
177
|
await waitForExpect(() => {
|
192
|
-
expect(
|
178
|
+
expect(listItemsResolver.resolveFn).toHaveBeenCalledTimes(1);
|
193
179
|
});
|
194
180
|
|
195
|
-
expect(
|
181
|
+
expect(listItemsResolver.resolveFn).toHaveBeenCalledWith(
|
196
182
|
expect.objectContaining({
|
197
183
|
data: menuItemListData
|
198
184
|
}),
|
@@ -214,22 +200,18 @@ describe('public helpers', () => {
|
|
214
200
|
|
215
201
|
// Select event listener
|
216
202
|
{
|
217
|
-
const
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
supports: SUPPORTS,
|
227
|
-
form_values: FORM_VALUES
|
228
|
-
},
|
229
|
-
completion_id: HOOK_COMPLETION_ID,
|
203
|
+
const selectData: SelectedMenuItemListenerData<string, null> = {
|
204
|
+
menuitem_id: MENU_ITEM1_ID,
|
205
|
+
hook_id: SUBSCRIBER_INFO.id,
|
206
|
+
menu_id: MENU_ID,
|
207
|
+
entity_id: null,
|
208
|
+
selected_ids: selectedMenuIds,
|
209
|
+
permissions: PERMISSIONS,
|
210
|
+
supports: SUPPORTS,
|
211
|
+
form_values: FORM_VALUES
|
230
212
|
};
|
231
213
|
|
232
|
-
|
214
|
+
itemSelectedListener.fire(selectData);
|
233
215
|
}
|
234
216
|
|
235
217
|
// Validate select event results
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import waitForExpectOriginal from 'wait-for-expect';
|
2
|
+
|
3
|
+
const EXCEPT_TIMEOUT = 1000;
|
4
|
+
//@ts-ignore
|
5
|
+
export const waitForExpect = (func: () => void | Promise<void>) => waitForExpectOriginal.default(func, EXCEPT_TIMEOUT);
|
6
|
+
|
7
|
+
|
8
|
+
// This is a helper function that will suppress the error of a promise.
|
9
|
+
export const defusedPromise = (promise: Promise<any>) => {
|
10
|
+
promise.catch(() => {});
|
11
|
+
return promise;
|
12
|
+
}
|
@@ -20,8 +20,8 @@ export interface MenuItemListHookData<IdT, EntityIdT> {
|
|
20
20
|
}
|
21
21
|
|
22
22
|
export interface ResponseMenuItemCallbackFields {
|
23
|
-
urls?: string[]
|
24
|
-
form_definitions?: object[]
|
23
|
+
urls?: string[];
|
24
|
+
form_definitions?: object[];
|
25
25
|
}
|
26
26
|
|
27
27
|
export type ResponseMenuItem<IdT, EntityIdT> = Omit<ContextMenuItem<IdT, EntityIdT>, 'onClick' | 'filter' | 'urls' | 'form_definitions'> & ResponseMenuItemCallbackFields;
|
package/dist-es/tests/helpers.js
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
import { Socket } from '../NodeSocket.js';
|
2
|
-
import { Server, WebSocket } from 'mock-socket';
|
3
|
-
import { jest } from '@jest/globals';
|
4
|
-
import ApiConstants from '../ApiConstants.js';
|
5
|
-
import { EventEmitter } from 'events';
|
6
|
-
import waitForExpectOriginal from 'wait-for-expect';
|
7
|
-
const EXCEPT_TIMEOUT = 1000;
|
8
|
-
//@ts-ignore
|
9
|
-
export const waitForExpect = (func) => waitForExpectOriginal.default(func, EXCEPT_TIMEOUT);
|
10
|
-
const VERBOSE = false;
|
11
|
-
const getMockConsole = () => ({
|
12
|
-
log: jest.fn((a1, a2, a3, a4) => {
|
13
|
-
if (VERBOSE) {
|
14
|
-
console.log(a1, a2, a3, a4);
|
15
|
-
}
|
16
|
-
}),
|
17
|
-
info: jest.fn((a1, a2, a3, a4) => {
|
18
|
-
if (VERBOSE) {
|
19
|
-
console.info(a1, a2, a3, a4);
|
20
|
-
}
|
21
|
-
}),
|
22
|
-
warn: jest.fn((a1, a2, a3, a4) => {
|
23
|
-
console.warn(a1, a2, a3, a4);
|
24
|
-
}),
|
25
|
-
error: jest.fn((a1, a2, a3, a4) => {
|
26
|
-
console.error(a1, a2, a3, a4);
|
27
|
-
}),
|
28
|
-
});
|
29
|
-
const DEFAULT_CONNECT_PARAMS = {
|
30
|
-
username: 'test',
|
31
|
-
password: 'test',
|
32
|
-
url: 'ws://localhost:7171/api/v1/',
|
33
|
-
};
|
34
|
-
const getDefaultSocketOptions = (mockConsole) => ({
|
35
|
-
...DEFAULT_CONNECT_PARAMS,
|
36
|
-
logOutput: mockConsole,
|
37
|
-
logLevel: VERBOSE ? 'verbose' : 'warn',
|
38
|
-
});
|
39
|
-
const DEFAULT_AUTH_RESPONSE = {
|
40
|
-
auth_token: 'b823187f-4aab-4b71-9764-e63e88401a26',
|
41
|
-
refresh_token: '5124faasf-4aab-4b71-9764-e63e88401a26',
|
42
|
-
user: {
|
43
|
-
permissions: ['admin'],
|
44
|
-
username: 'test',
|
45
|
-
active_sessions: 1,
|
46
|
-
last_login: 0,
|
47
|
-
},
|
48
|
-
system: {
|
49
|
-
cid: 'AHLUODI2YZ2U7FDWMHFNJU65ERGKUN4MH7GW5LY',
|
50
|
-
hostname: 'ubuntu-htpc',
|
51
|
-
network_type: 'private',
|
52
|
-
path_separator: '/',
|
53
|
-
platform: 'other',
|
54
|
-
language: 'fi',
|
55
|
-
},
|
56
|
-
wizard_pending: false,
|
57
|
-
};
|
58
|
-
const getSocket = (socketOptions = {}, mockConsole = getMockConsole()) => {
|
59
|
-
const socket = Socket({
|
60
|
-
...getDefaultSocketOptions(mockConsole),
|
61
|
-
...socketOptions,
|
62
|
-
}, WebSocket);
|
63
|
-
return { socket, mockConsole };
|
64
|
-
};
|
65
|
-
const getDefaultConnectOptions = () => ({
|
66
|
-
console: getMockConsole(),
|
67
|
-
authResponse: DEFAULT_AUTH_RESPONSE,
|
68
|
-
});
|
69
|
-
const getConnectedSocket = async (server, userOptions) => {
|
70
|
-
const options = {
|
71
|
-
...getDefaultConnectOptions(),
|
72
|
-
...userOptions,
|
73
|
-
};
|
74
|
-
server.addDataHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
|
75
|
-
const { socket, mockConsole } = getSocket(options.socketOptions, options.console);
|
76
|
-
await socket.connect();
|
77
|
-
return { socket, mockConsole };
|
78
|
-
};
|
79
|
-
const toEmitId = (path, method) => {
|
80
|
-
return `${path}_${method}`;
|
81
|
-
};
|
82
|
-
const getMockServer = (url = DEFAULT_CONNECT_PARAMS.url) => {
|
83
|
-
const mockServer = new Server(url);
|
84
|
-
let socket;
|
85
|
-
const emitter = new EventEmitter();
|
86
|
-
const addServerHandler = (method, path, responseData, subscriptionCallback) => {
|
87
|
-
emitter.addListener(toEmitId(path, method), (request, s) => {
|
88
|
-
if (subscriptionCallback) {
|
89
|
-
subscriptionCallback(request);
|
90
|
-
}
|
91
|
-
const response = {
|
92
|
-
callback_id: request.callback_id,
|
93
|
-
...responseData,
|
94
|
-
};
|
95
|
-
s.send(JSON.stringify(response));
|
96
|
-
});
|
97
|
-
};
|
98
|
-
mockServer.on('connection', s => {
|
99
|
-
socket = s;
|
100
|
-
socket.on('message', (messageObj) => {
|
101
|
-
const request = JSON.parse(messageObj);
|
102
|
-
emitter.emit(toEmitId(request.path, request.method), request, s);
|
103
|
-
});
|
104
|
-
});
|
105
|
-
mockServer.on('close', () => {
|
106
|
-
emitter.removeAllListeners();
|
107
|
-
});
|
108
|
-
return {
|
109
|
-
addDataHandler: (method, path, data, subscriptionCallback) => {
|
110
|
-
addServerHandler(method, path, {
|
111
|
-
data,
|
112
|
-
code: 200,
|
113
|
-
}, subscriptionCallback);
|
114
|
-
},
|
115
|
-
addErrorHandler: (method, path, errorStr, errorCode, subscriptionCallback) => {
|
116
|
-
addServerHandler(method, path, {
|
117
|
-
error: !errorStr ? null : {
|
118
|
-
message: errorStr,
|
119
|
-
},
|
120
|
-
code: errorCode,
|
121
|
-
}, subscriptionCallback);
|
122
|
-
},
|
123
|
-
stop: () => {
|
124
|
-
mockServer.stop(() => {
|
125
|
-
// ...
|
126
|
-
});
|
127
|
-
},
|
128
|
-
send: (data) => {
|
129
|
-
socket.send(JSON.stringify(data));
|
130
|
-
},
|
131
|
-
url,
|
132
|
-
};
|
133
|
-
};
|
134
|
-
export { getMockServer, getSocket, getConnectedSocket, DEFAULT_CONNECT_PARAMS, DEFAULT_AUTH_RESPONSE };
|
135
|
-
//# sourceMappingURL=helpers.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tests/helpers.ts"],"names":[],"mappings":"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"}
|
package/src/tests/helpers.ts
DELETED
@@ -1,211 +0,0 @@
|
|
1
|
-
import { Socket } from '../NodeSocket.js';
|
2
|
-
import { Client, Server, WebSocket } from 'mock-socket';
|
3
|
-
import { jest } from '@jest/globals';
|
4
|
-
|
5
|
-
import { OutgoingRequest, RequestSuccessResponse, RequestErrorResponse } from '../types/api_internal.js';
|
6
|
-
import * as Options from '../types/options.js';
|
7
|
-
import ApiConstants from '../ApiConstants.js';
|
8
|
-
import { EventEmitter } from 'events';
|
9
|
-
|
10
|
-
import waitForExpectOriginal from 'wait-for-expect';
|
11
|
-
|
12
|
-
const EXCEPT_TIMEOUT = 1000;
|
13
|
-
//@ts-ignore
|
14
|
-
export const waitForExpect = (func: () => void | Promise<void>) => waitForExpectOriginal.default(func, EXCEPT_TIMEOUT);
|
15
|
-
|
16
|
-
const VERBOSE = false;
|
17
|
-
|
18
|
-
const getMockConsole = () => ({
|
19
|
-
log: jest.fn((a1: any, a2: any, a3: any, a4: any) => {
|
20
|
-
if (VERBOSE) {
|
21
|
-
console.log(a1, a2, a3, a4);
|
22
|
-
}
|
23
|
-
}),
|
24
|
-
info: jest.fn((a1: any, a2: any, a3: any, a4: any) => {
|
25
|
-
if (VERBOSE) {
|
26
|
-
console.info(a1, a2, a3, a4);
|
27
|
-
}
|
28
|
-
}),
|
29
|
-
warn: jest.fn((a1: any, a2: any, a3: any, a4: any) => {
|
30
|
-
console.warn(a1, a2, a3, a4);
|
31
|
-
}),
|
32
|
-
error: jest.fn((a1: any, a2: any, a3: any, a4: any) => {
|
33
|
-
console.error(a1, a2, a3, a4);
|
34
|
-
}),
|
35
|
-
});
|
36
|
-
|
37
|
-
const DEFAULT_CONNECT_PARAMS = {
|
38
|
-
username: 'test',
|
39
|
-
password: 'test',
|
40
|
-
url: 'ws://localhost:7171/api/v1/',
|
41
|
-
};
|
42
|
-
|
43
|
-
const getDefaultSocketOptions = (mockConsole: Options.LogOutput): Options.APISocketOptions => ({
|
44
|
-
...DEFAULT_CONNECT_PARAMS,
|
45
|
-
logOutput: mockConsole,
|
46
|
-
logLevel: VERBOSE ? 'verbose' : 'warn',
|
47
|
-
});
|
48
|
-
|
49
|
-
const DEFAULT_AUTH_RESPONSE = {
|
50
|
-
auth_token: 'b823187f-4aab-4b71-9764-e63e88401a26',
|
51
|
-
refresh_token: '5124faasf-4aab-4b71-9764-e63e88401a26',
|
52
|
-
user: {
|
53
|
-
permissions: [ 'admin' ],
|
54
|
-
username: 'test',
|
55
|
-
active_sessions: 1,
|
56
|
-
last_login: 0,
|
57
|
-
},
|
58
|
-
system: {
|
59
|
-
cid: 'AHLUODI2YZ2U7FDWMHFNJU65ERGKUN4MH7GW5LY',
|
60
|
-
hostname: 'ubuntu-htpc',
|
61
|
-
network_type: 'private',
|
62
|
-
path_separator: '/',
|
63
|
-
platform: 'other',
|
64
|
-
language: 'fi',
|
65
|
-
},
|
66
|
-
wizard_pending: false,
|
67
|
-
};
|
68
|
-
|
69
|
-
export type MockSocketOptions = Omit<Options.APISocketOptions, 'username' | 'password' | 'url'> & {
|
70
|
-
username?: string;
|
71
|
-
password?: string;
|
72
|
-
url?: string;
|
73
|
-
};
|
74
|
-
|
75
|
-
const getSocket = (socketOptions: MockSocketOptions = {}, mockConsole = getMockConsole()) => {
|
76
|
-
const socket = Socket(
|
77
|
-
{
|
78
|
-
...getDefaultSocketOptions(mockConsole),
|
79
|
-
...socketOptions,
|
80
|
-
},
|
81
|
-
WebSocket as any
|
82
|
-
);
|
83
|
-
|
84
|
-
return { socket, mockConsole };
|
85
|
-
};
|
86
|
-
|
87
|
-
|
88
|
-
type Callback = (requestData: object) => void;
|
89
|
-
|
90
|
-
interface ConnectOptions {
|
91
|
-
socketOptions?: MockSocketOptions;
|
92
|
-
authCallback?: Callback;
|
93
|
-
authResponse?: object;
|
94
|
-
console?: ReturnType<typeof getMockConsole>;
|
95
|
-
}
|
96
|
-
|
97
|
-
const getDefaultConnectOptions = () => ({
|
98
|
-
console: getMockConsole(),
|
99
|
-
authResponse: DEFAULT_AUTH_RESPONSE,
|
100
|
-
});
|
101
|
-
|
102
|
-
const getConnectedSocket = async (
|
103
|
-
server: ReturnType<typeof getMockServer>,
|
104
|
-
userOptions?: ConnectOptions,
|
105
|
-
) => {
|
106
|
-
const options = {
|
107
|
-
...getDefaultConnectOptions(),
|
108
|
-
...userOptions,
|
109
|
-
};
|
110
|
-
|
111
|
-
server.addDataHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
|
112
|
-
|
113
|
-
const { socket, mockConsole } = getSocket(options.socketOptions, options.console);
|
114
|
-
await socket.connect();
|
115
|
-
|
116
|
-
return { socket, mockConsole };
|
117
|
-
};
|
118
|
-
|
119
|
-
const toEmitId = (path: string, method: string) => {
|
120
|
-
return `${path}_${method}`;
|
121
|
-
};
|
122
|
-
|
123
|
-
const getMockServer = (url = DEFAULT_CONNECT_PARAMS.url) => {
|
124
|
-
const mockServer = new Server(url);
|
125
|
-
let socket: Client;
|
126
|
-
const emitter = new EventEmitter();
|
127
|
-
|
128
|
-
const addServerHandler = <DataT extends object | undefined>(
|
129
|
-
method: string,
|
130
|
-
path: string,
|
131
|
-
responseData: Omit<RequestSuccessResponse<DataT>, 'callback_id'> | Omit<RequestErrorResponse, 'callback_id'>,
|
132
|
-
subscriptionCallback?: Callback
|
133
|
-
) => {
|
134
|
-
emitter.addListener(
|
135
|
-
toEmitId(path, method),
|
136
|
-
(request: OutgoingRequest, s: WebSocket) => {
|
137
|
-
if (subscriptionCallback) {
|
138
|
-
subscriptionCallback(request);
|
139
|
-
}
|
140
|
-
|
141
|
-
const response: RequestSuccessResponse | RequestErrorResponse = {
|
142
|
-
callback_id: request.callback_id,
|
143
|
-
...responseData,
|
144
|
-
};
|
145
|
-
|
146
|
-
s.send(JSON.stringify(response));
|
147
|
-
}
|
148
|
-
);
|
149
|
-
};
|
150
|
-
|
151
|
-
mockServer.on('connection', s => {
|
152
|
-
socket = s;
|
153
|
-
|
154
|
-
socket.on('message', (messageObj) => {
|
155
|
-
const request: OutgoingRequest = JSON.parse(messageObj as string);
|
156
|
-
emitter.emit(toEmitId(request.path, request.method), request, s);
|
157
|
-
});
|
158
|
-
});
|
159
|
-
|
160
|
-
mockServer.on('close', () => {
|
161
|
-
emitter.removeAllListeners();
|
162
|
-
});
|
163
|
-
|
164
|
-
return {
|
165
|
-
addDataHandler: <DataT extends object | undefined>(
|
166
|
-
method: string,
|
167
|
-
path: string,
|
168
|
-
data?: DataT,
|
169
|
-
subscriptionCallback?: Callback
|
170
|
-
) => {
|
171
|
-
addServerHandler<DataT>(
|
172
|
-
method,
|
173
|
-
path, {
|
174
|
-
data,
|
175
|
-
code: 200,
|
176
|
-
},
|
177
|
-
subscriptionCallback
|
178
|
-
);
|
179
|
-
},
|
180
|
-
addErrorHandler: (
|
181
|
-
method: string,
|
182
|
-
path: string,
|
183
|
-
errorStr: string | null,
|
184
|
-
errorCode: number,
|
185
|
-
subscriptionCallback?: Callback
|
186
|
-
) => {
|
187
|
-
addServerHandler(
|
188
|
-
method,
|
189
|
-
path,
|
190
|
-
{
|
191
|
-
error: !errorStr ? null as any : {
|
192
|
-
message: errorStr,
|
193
|
-
},
|
194
|
-
code: errorCode,
|
195
|
-
},
|
196
|
-
subscriptionCallback
|
197
|
-
);
|
198
|
-
},
|
199
|
-
stop: () => {
|
200
|
-
mockServer.stop(() => {
|
201
|
-
// ...
|
202
|
-
});
|
203
|
-
},
|
204
|
-
send: (data: object) => {
|
205
|
-
socket.send(JSON.stringify(data));
|
206
|
-
},
|
207
|
-
url,
|
208
|
-
};
|
209
|
-
};
|
210
|
-
|
211
|
-
export { getMockServer, getSocket, getConnectedSocket, DEFAULT_CONNECT_PARAMS, DEFAULT_AUTH_RESPONSE };
|