airdcpp-apisocket 3.0.0-beta.10 → 3.0.0-beta.11
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/PublicHelpers.d.ts +1 -1
- package/dist-es/PublicHelpers.js +3 -3
- package/dist-es/PublicHelpers.js.map +1 -1
- package/dist-es/SocketSubscriptionHandler.js +9 -5
- package/dist-es/SocketSubscriptionHandler.js.map +1 -1
- package/dist-es/tests/mocks/mock-data.d.ts +2 -2
- package/dist-es/tests/mocks/mock-data.js +2 -2
- package/dist-es/tests/mocks/mock-data.js.map +1 -1
- package/dist-es/tests/mocks/mock-server.js +17 -8
- package/dist-es/tests/mocks/mock-server.js.map +1 -1
- package/dist-es/tests/mocks/mock-socket.d.ts +2 -1
- package/dist-es/tests/mocks/mock-socket.js +10 -6
- package/dist-es/tests/mocks/mock-socket.js.map +1 -1
- package/dist-es/types/subscriptions.d.ts +1 -1
- package/package.json +1 -1
- package/src/PublicHelpers.ts +3 -3
- package/src/SocketSubscriptionHandler.ts +7 -6
- package/src/tests/Socket.test.ts +33 -13
- package/src/tests/mocks/mock-data.ts +2 -2
- package/src/tests/mocks/mock-server.ts +21 -14
- package/src/tests/mocks/mock-socket.ts +11 -7
- package/src/tests/public_helpers.test.ts +1 -1
- package/src/types/subscriptions.ts +1 -1
@@ -1,2 +1,2 @@
|
|
1
1
|
import { APISocket, ContextMenuItem, EntityId, ContextMenu } from './types/index.js';
|
2
|
-
export declare const addContextMenuItems: <IdT, EntityIdT extends EntityId | undefined = undefined>(socket: APISocket, menuItems: ContextMenuItem<IdT, EntityIdT>[], menuTypeId: string, menu: ContextMenu) => Promise<() => void
|
2
|
+
export declare const addContextMenuItems: <IdT, EntityIdT extends EntityId | undefined = undefined>(socket: APISocket, menuItems: ContextMenuItem<IdT, EntityIdT>[], menuTypeId: string, menu: ContextMenu) => Promise<() => Promise<void>>;
|
package/dist-es/PublicHelpers.js
CHANGED
@@ -100,9 +100,9 @@ export const addContextMenuItems = async (socket, menuItems, menuTypeId, menu) =
|
|
100
100
|
icon: menu.icon,
|
101
101
|
});
|
102
102
|
}, menu);
|
103
|
-
return () => {
|
104
|
-
removeHook();
|
105
|
-
removeListener();
|
103
|
+
return async () => {
|
104
|
+
await removeHook();
|
105
|
+
await removeListener();
|
106
106
|
};
|
107
107
|
};
|
108
108
|
//# sourceMappingURL=PublicHelpers.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PublicHelpers.js","sourceRoot":"","sources":["../src/PublicHelpers.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"PublicHelpers.js","sourceRoot":"","sources":["../src/PublicHelpers.ts"],"names":[],"mappings":"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"}
|
@@ -18,7 +18,7 @@ const SocketSubscriptionHandler = (socket, logger, { ignoredListenerEvents = []
|
|
18
18
|
const emitter = new EventEmitter();
|
19
19
|
// Subscriptions pending to be added in the API
|
20
20
|
const pendingSubscriptions = {};
|
21
|
-
const removeSocketListener = (subscriptionUrl, subscriptionId, callback, sendApi) => {
|
21
|
+
const removeSocketListener = async (subscriptionUrl, subscriptionId, callback, sendApi) => {
|
22
22
|
if (!socket().isConnected()) {
|
23
23
|
return;
|
24
24
|
}
|
@@ -26,10 +26,14 @@ const SocketSubscriptionHandler = (socket, logger, { ignoredListenerEvents = []
|
|
26
26
|
emitter.removeListener(subscriptionId, callback);
|
27
27
|
if (subscriptions[subscriptionId] === 0) {
|
28
28
|
if (sendApi && socket().isConnected()) {
|
29
|
-
|
30
|
-
.
|
31
|
-
|
32
|
-
|
29
|
+
try {
|
30
|
+
await socket().delete(subscriptionUrl);
|
31
|
+
}
|
32
|
+
catch (error) {
|
33
|
+
const e = error;
|
34
|
+
logger.error('Failed to remove socket listener', subscriptionUrl, e);
|
35
|
+
}
|
36
|
+
;
|
33
37
|
}
|
34
38
|
delete subscriptions[subscriptionId];
|
35
39
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SocketSubscriptionHandler.js","sourceRoot":"","sources":["../src/SocketSubscriptionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,OAA0B,MAAM,cAAc,CAAC;AAgBtD,MAAM,yBAAyB,GAAG,CAChC,MAA8B,EAC9B,MAAc,EACd,EAAE,qBAAqB,GAAG,EAAE,EAAqC,EACjE,EAAE;IACF,WAAW;IACX,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAiB,EAAE,EAAE;QACrD,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,8BAA8B,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAA4B,EAAE,KAAa,EAAE,EAAE;QAC5F,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,GAAG,SAAS,IAAI,EAAE,cAAc,KAAK,EAAE,CAAC;QACjD,CAAC;QAED,OAAO,GAAG,SAAS,cAAc,KAAK,EAAE,CAAC;IAC3C,CAAC,CAAC;IAEF,IAAI,aAAa,GAA8B,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAEnC,+CAA+C;IAC/C,MAAM,oBAAoB,GAA6C,EAAE,CAAC;IAE1E,MAAM,oBAAoB,GAAG,
|
1
|
+
{"version":3,"file":"SocketSubscriptionHandler.js","sourceRoot":"","sources":["../src/SocketSubscriptionHandler.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
export declare const
|
1
|
+
export declare const MOCK_SERVER_URL = "ws://localhost:7171/api/v1/";
|
2
|
+
export declare const DEFAULT_CONNECT_CREDENTIALS: {
|
2
3
|
username: string;
|
3
4
|
password: string;
|
4
|
-
url: string;
|
5
5
|
};
|
6
6
|
export declare const DEFAULT_CONNECT_RESPONSE: {
|
7
7
|
session_id: number;
|
@@ -1,7 +1,7 @@
|
|
1
|
-
export const
|
1
|
+
export const MOCK_SERVER_URL = 'ws://localhost:7171/api/v1/';
|
2
|
+
export const DEFAULT_CONNECT_CREDENTIALS = {
|
2
3
|
username: 'test',
|
3
4
|
password: 'test',
|
4
|
-
url: 'ws://localhost:7171/api/v1/',
|
5
5
|
};
|
6
6
|
export const DEFAULT_CONNECT_RESPONSE = {
|
7
7
|
session_id: 1,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mock-data.js","sourceRoot":"","sources":["../../../src/tests/mocks/mock-data.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"mock-data.js","sourceRoot":"","sources":["../../../src/tests/mocks/mock-data.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAE7D,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,sCAAsC;IAClD,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE;QACJ,WAAW,EAAE,CAAE,OAAO,CAAE;QACxB,QAAQ,EAAE,MAAM;QAChB,eAAe,EAAE,CAAC;QAClB,UAAU,EAAE,CAAC;KACd;IACD,WAAW,EAAE;QACX,WAAW,EAAE,CAAC;QACd,iBAAiB,EAAE,CAAC;QACpB,GAAG,EAAE,yCAAyC;QAC9C,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,SAAS;QACvB,cAAc,EAAE,GAAG;QACnB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,UAAU;QAC1B,cAAc,EAAE,kCAAkC;KACnD;IACD,cAAc,EAAE,KAAK;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,wBAAwB;IAC3B,aAAa,EAAE,uCAAuC;CACvD,CAAA"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Server } from 'mock-socket';
|
2
2
|
import { EventEmitter } from 'events';
|
3
|
-
import {
|
3
|
+
import { MOCK_SERVER_URL } from './mock-data.js';
|
4
4
|
;
|
5
5
|
const toEmitId = (path, method) => {
|
6
6
|
return `${path}_${method}`;
|
@@ -9,7 +9,7 @@ const getDefaultMockCreatorF = () => ({
|
|
9
9
|
fn: () => { },
|
10
10
|
});
|
11
11
|
const DEFAULT_MOCK_SERVER_OPTIONS = {
|
12
|
-
url:
|
12
|
+
url: MOCK_SERVER_URL,
|
13
13
|
reportMissingListeners: true,
|
14
14
|
mockF: getDefaultMockCreatorF(),
|
15
15
|
};
|
@@ -21,9 +21,11 @@ const getMockServer = (initialOptions = {}) => {
|
|
21
21
|
const mockServer = new Server(url);
|
22
22
|
let socket;
|
23
23
|
const emitter = new EventEmitter();
|
24
|
+
emitter.setMaxListeners(1);
|
24
25
|
const send = (data) => {
|
25
26
|
socket.send(JSON.stringify(data));
|
26
27
|
};
|
28
|
+
const handlers = new Map();
|
27
29
|
const addServerHandler = (method, path, responseData, subscriptionCallback) => {
|
28
30
|
const requestHandler = (request, s) => {
|
29
31
|
if (subscriptionCallback) {
|
@@ -39,10 +41,19 @@ const getMockServer = (initialOptions = {}) => {
|
|
39
41
|
};
|
40
42
|
s.send(JSON.stringify(response));
|
41
43
|
};
|
44
|
+
// Don't add duplicates
|
42
45
|
const emitId = toEmitId(path, method);
|
46
|
+
const removeExisting = handlers.get(emitId);
|
47
|
+
if (removeExisting) {
|
48
|
+
removeExisting();
|
49
|
+
handlers.delete(emitId);
|
50
|
+
}
|
51
|
+
// Add new
|
43
52
|
emitter.addListener(emitId, requestHandler);
|
44
|
-
|
45
|
-
|
53
|
+
// Prepare for removal
|
54
|
+
const removeListener = () => emitter.removeListener(emitId, requestHandler);
|
55
|
+
handlers.set(emitId, removeListener);
|
56
|
+
return removeListener;
|
46
57
|
};
|
47
58
|
const addDummyDataHandler = (method, path) => {
|
48
59
|
const handler = (request, s) => {
|
@@ -132,9 +143,6 @@ const getMockServer = (initialOptions = {}) => {
|
|
132
143
|
}
|
133
144
|
});
|
134
145
|
});
|
135
|
-
mockServer.on('close', () => {
|
136
|
-
emitter.removeAllListeners();
|
137
|
-
});
|
138
146
|
return {
|
139
147
|
addRequestHandler,
|
140
148
|
addErrorHandler,
|
@@ -143,7 +151,8 @@ const getMockServer = (initialOptions = {}) => {
|
|
143
151
|
ignoreMissingHandler: addDummyDataHandler,
|
144
152
|
stop: () => {
|
145
153
|
mockServer.stop(() => {
|
146
|
-
|
154
|
+
emitter.removeAllListeners();
|
155
|
+
handlers.clear();
|
147
156
|
});
|
148
157
|
},
|
149
158
|
send,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../../src/tests/mocks/mock-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAa,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"mock-server.js","sourceRoot":"","sources":["../../../src/tests/mocks/mock-server.ts"],"names":[],"mappings":"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"}
|
@@ -10,7 +10,7 @@ interface MockSocketOptions {
|
|
10
10
|
console: Options.LogOutput;
|
11
11
|
socketOptions?: MockSocketConnectOptions;
|
12
12
|
}
|
13
|
-
interface MockConnectedSocketOptions extends MockSocketOptions {
|
13
|
+
export interface MockConnectedSocketOptions extends MockSocketOptions {
|
14
14
|
authCallback?: RequestCallback;
|
15
15
|
authResponse: object;
|
16
16
|
}
|
@@ -19,5 +19,6 @@ export declare const getSocket: (socketOptions?: MockSocketConnectOptions) => {
|
|
19
19
|
};
|
20
20
|
export declare const getConnectedSocket: (server: ReturnType<typeof getMockServer>, userOptions?: Partial<MockConnectedSocketOptions>) => Promise<{
|
21
21
|
socket: import("../../NodeSocket.js").APISocket;
|
22
|
+
removeAuthHandler: () => import("events")<[never]>;
|
22
23
|
}>;
|
23
24
|
export {};
|
@@ -1,16 +1,16 @@
|
|
1
1
|
import { Socket } from '../../NodeSocket.js';
|
2
2
|
import { WebSocket } from 'mock-socket';
|
3
3
|
import ApiConstants from '../../ApiConstants.js';
|
4
|
-
import { DEFAULT_AUTH_RESPONSE,
|
4
|
+
import { DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_CREDENTIALS, MOCK_SERVER_URL } from './mock-data.js';
|
5
5
|
const getDefaultSocketOptions = () => ({
|
6
|
-
|
6
|
+
url: MOCK_SERVER_URL,
|
7
7
|
logOutput: console,
|
8
8
|
logLevel: 'warn',
|
9
9
|
});
|
10
10
|
export const getSocket = (socketOptions = {}) => {
|
11
11
|
const socket = Socket({
|
12
12
|
...getDefaultSocketOptions(),
|
13
|
-
...socketOptions
|
13
|
+
...socketOptions
|
14
14
|
}, WebSocket);
|
15
15
|
return { socket };
|
16
16
|
};
|
@@ -23,9 +23,13 @@ export const getConnectedSocket = async (server, userOptions) => {
|
|
23
23
|
...getDefaultConnectOptions(),
|
24
24
|
...userOptions,
|
25
25
|
};
|
26
|
-
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
|
27
|
-
const { socket } = getSocket(
|
26
|
+
const removeAuthHandler = server.addRequestHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
|
27
|
+
const { socket } = getSocket({
|
28
|
+
...DEFAULT_CONNECT_CREDENTIALS,
|
29
|
+
...getDefaultSocketOptions(),
|
30
|
+
...options.socketOptions
|
31
|
+
});
|
28
32
|
await socket.connect();
|
29
|
-
return { socket };
|
33
|
+
return { socket, removeAuthHandler };
|
30
34
|
};
|
31
35
|
//# sourceMappingURL=mock-socket.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mock-socket.js","sourceRoot":"","sources":["../../../src/tests/mocks/mock-socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAGjD,OAAO,EAAE,qBAAqB,EAAE,
|
1
|
+
{"version":3,"file":"mock-socket.js","sourceRoot":"","sources":["../../../src/tests/mocks/mock-socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAGjD,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAErG,MAAM,uBAAuB,GAAG,GAA6B,EAAE,CAAC,CAAC;IAC/D,GAAG,EAAE,eAAe;IACpB,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,MAAM;CACjB,CAAC,CAAC;AAsBH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,gBAA0C,EAAE,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,MAAM,CACnB;QACE,GAAG,uBAAuB,EAAE;QAC5B,GAAG,aAAa;KACjB,EACD,SAAgB,CACjB,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAAC,CAAC;IACtC,OAAO;IACP,YAAY,EAAE,qBAAqB;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,MAAwC,EACxC,WAAiD,EACjD,EAAE;IACF,MAAM,OAAO,GAA+B;QAC1C,GAAG,wBAAwB,EAAE;QAC7B,GAAG,WAAW;KACf,CAAC;IAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/H,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,GAAG,2BAA2B;QAC9B,GAAG,uBAAuB,EAAE;QAC5B,GAAG,OAAO,CAAC,aAAa;KACzB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAEvB,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC,CAAC"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as API from './api.js';
|
2
|
-
export type SubscriptionRemoveHandler = (sendApi?: boolean) => void
|
2
|
+
export type SubscriptionRemoveHandler = (sendApi?: boolean) => Promise<void>;
|
3
3
|
export type SubscriptionCallback<DataT extends object | void = object, EntityIdT = API.EntityId | undefined> = (data: DataT, entityId: EntityIdT) => void;
|
4
4
|
export interface HookSubscriberInfo {
|
5
5
|
id: string;
|
package/package.json
CHANGED
package/src/PublicHelpers.ts
CHANGED
@@ -143,8 +143,8 @@ export const addContextMenuItems = async <IdT, EntityIdT extends EntityId | unde
|
|
143
143
|
menu
|
144
144
|
);
|
145
145
|
|
146
|
-
return () => {
|
147
|
-
removeHook();
|
148
|
-
removeListener();
|
146
|
+
return async () => {
|
147
|
+
await removeHook();
|
148
|
+
await removeListener();
|
149
149
|
};
|
150
150
|
};
|
@@ -43,7 +43,7 @@ const SocketSubscriptionHandler = (
|
|
43
43
|
// Subscriptions pending to be added in the API
|
44
44
|
const pendingSubscriptions: { [key: string]: PendingSubscription[] } = {};
|
45
45
|
|
46
|
-
const removeSocketListener = (
|
46
|
+
const removeSocketListener = async (
|
47
47
|
subscriptionUrl: string,
|
48
48
|
subscriptionId: string,
|
49
49
|
callback: Subscriptions.HookCallback<any, any> | Subscriptions.SubscriptionCallback<any>,
|
@@ -58,11 +58,12 @@ const SocketSubscriptionHandler = (
|
|
58
58
|
|
59
59
|
if (subscriptions[subscriptionId] === 0) {
|
60
60
|
if (sendApi && socket().isConnected()) {
|
61
|
-
|
62
|
-
.
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
try {
|
62
|
+
await socket().delete(subscriptionUrl);
|
63
|
+
} catch (error) {
|
64
|
+
const e: Requests.ErrorResponse = error;
|
65
|
+
logger.error('Failed to remove socket listener', subscriptionUrl, e);
|
66
|
+
};
|
66
67
|
}
|
67
68
|
|
68
69
|
delete subscriptions[subscriptionId];
|
package/src/tests/Socket.test.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import {
|
2
|
-
DEFAULT_AUTH_RESPONSE,
|
3
|
-
getConnectedSocket as getOriginalConnectedSocket, getMockServer as getOriginalMockServer, getSocket as getOriginalSocket
|
2
|
+
DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_CREDENTIALS,
|
3
|
+
getConnectedSocket as getOriginalConnectedSocket, getMockServer as getOriginalMockServer, getSocket as getOriginalSocket,
|
4
|
+
MockConnectedSocketOptions,
|
4
5
|
} from './mocks';
|
5
6
|
|
6
7
|
import ApiConstants from '../ApiConstants.js';
|
@@ -34,6 +35,7 @@ describe('socket', () => {
|
|
34
35
|
});
|
35
36
|
|
36
37
|
const getDefaultSocketOptions = () => ({
|
38
|
+
...DEFAULT_CONNECT_CREDENTIALS,
|
37
39
|
logOutput: mockConsole,
|
38
40
|
});
|
39
41
|
|
@@ -42,9 +44,10 @@ describe('socket', () => {
|
|
42
44
|
}
|
43
45
|
|
44
46
|
|
45
|
-
const getConnectedMockSocket = () => {
|
47
|
+
const getConnectedMockSocket = (options?: Partial<MockConnectedSocketOptions>) => {
|
46
48
|
return getOriginalConnectedSocket(server, {
|
47
49
|
socketOptions: getDefaultSocketOptions(),
|
50
|
+
...options,
|
48
51
|
});
|
49
52
|
}
|
50
53
|
|
@@ -69,7 +72,8 @@ describe('socket', () => {
|
|
69
72
|
});
|
70
73
|
|
71
74
|
test('should handle valid refresh token', async () => {
|
72
|
-
|
75
|
+
const onAuth = jest.fn();
|
76
|
+
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE, onAuth);
|
73
77
|
const connectedCallback = jest.fn();
|
74
78
|
|
75
79
|
const { socket } = getMockSocket();
|
@@ -77,6 +81,22 @@ describe('socket', () => {
|
|
77
81
|
const response = await socket.connectRefreshToken('refresh token');
|
78
82
|
|
79
83
|
expect(connectedCallback).toHaveBeenCalledWith(DEFAULT_AUTH_RESPONSE);
|
84
|
+
|
85
|
+
expect(onAuth).toHaveBeenCalled();
|
86
|
+
expect(onAuth.mock.calls[0]).toMatchInlineSnapshot(`
|
87
|
+
[
|
88
|
+
{
|
89
|
+
"callback_id": 1,
|
90
|
+
"data": {
|
91
|
+
"grant_type": "refresh_token",
|
92
|
+
"refresh_token": "refresh token",
|
93
|
+
},
|
94
|
+
"method": "POST",
|
95
|
+
"path": "sessions/authorize",
|
96
|
+
},
|
97
|
+
]
|
98
|
+
`);
|
99
|
+
|
80
100
|
expect(response).toEqual(DEFAULT_AUTH_RESPONSE);
|
81
101
|
expect(socket.isConnected()).toEqual(true);
|
82
102
|
|
@@ -110,15 +130,15 @@ describe('socket', () => {
|
|
110
130
|
test('should handle connect with custom credentials', async () => {
|
111
131
|
server.stop();
|
112
132
|
const { socket } = getOriginalSocket({
|
133
|
+
...getDefaultSocketOptions(),
|
113
134
|
username: 'dummy',
|
114
135
|
password: 'dummy',
|
115
|
-
...getDefaultSocketOptions(),
|
116
136
|
});
|
117
137
|
|
118
138
|
// Fail without a server handler with auto reconnect disabled
|
119
139
|
let error;
|
120
140
|
try {
|
121
|
-
await socket.connect(
|
141
|
+
await socket.connect(DEFAULT_CONNECT_CREDENTIALS.username, DEFAULT_CONNECT_CREDENTIALS.password, false);
|
122
142
|
} catch (e) {
|
123
143
|
error = e;
|
124
144
|
}
|
@@ -130,7 +150,7 @@ describe('socket', () => {
|
|
130
150
|
server = getOriginalMockServer();
|
131
151
|
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE);
|
132
152
|
|
133
|
-
await socket.connect(
|
153
|
+
await socket.connect(DEFAULT_CONNECT_CREDENTIALS.username, DEFAULT_CONNECT_CREDENTIALS.password, false);
|
134
154
|
|
135
155
|
expect(socket.isConnected()).toEqual(true);
|
136
156
|
|
@@ -292,7 +312,9 @@ describe('socket', () => {
|
|
292
312
|
const connectErrorCallback = jest.fn();
|
293
313
|
|
294
314
|
// Connect and disconnect
|
295
|
-
const { socket } = await getConnectedMockSocket(
|
315
|
+
const { socket } = await getConnectedMockSocket({
|
316
|
+
authCallback,
|
317
|
+
});
|
296
318
|
|
297
319
|
jest.useFakeTimers();
|
298
320
|
socket.disconnect();
|
@@ -302,14 +324,12 @@ describe('socket', () => {
|
|
302
324
|
// Fail the initial reconnect attempt with 'Invalid session token'
|
303
325
|
// and connect with credentials afterwards
|
304
326
|
server.addErrorHandler('POST', ApiConstants.CONNECT_URL, ErrorResponse, 400, connectErrorCallback);
|
305
|
-
|
306
|
-
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, DEFAULT_AUTH_RESPONSE, authCallback);
|
307
327
|
|
308
328
|
jest.runOnlyPendingTimers();
|
309
329
|
socket.reconnect();
|
310
330
|
|
311
331
|
await jest.advanceTimersByTimeAsync(1000);
|
312
|
-
expect(authCallback.mock.calls.length).toBe(
|
332
|
+
expect(authCallback.mock.calls.length).toBe(2);
|
313
333
|
expect(connectErrorCallback.mock.calls.length).toBe(1);
|
314
334
|
|
315
335
|
expect(socket.isConnected()).toEqual(true);
|
@@ -446,7 +466,7 @@ describe('socket', () => {
|
|
446
466
|
removeListener1();
|
447
467
|
expect(hubUpdatedListener.unsubscribeFn.mock.calls.length).toBe(0); // Shouldn't call API yet, still one left
|
448
468
|
|
449
|
-
removeListener2();
|
469
|
+
await removeListener2();
|
450
470
|
await waitForExpect(() => expect(hubUpdatedListener.unsubscribeFn.mock.calls.length).toBe(1));
|
451
471
|
|
452
472
|
expect(socket.hasListeners()).toBe(false);
|
@@ -513,7 +533,7 @@ describe('socket', () => {
|
|
513
533
|
}
|
514
534
|
|
515
535
|
// Clean up
|
516
|
-
removeListener();
|
536
|
+
await removeListener();
|
517
537
|
expect(socket.hasListeners()).toBe(false);
|
518
538
|
|
519
539
|
expect(mockConsole.warn.mock.calls.length).toBe(0);
|
@@ -1,8 +1,8 @@
|
|
1
|
+
export const MOCK_SERVER_URL = 'ws://localhost:7171/api/v1/';
|
1
2
|
|
2
|
-
export const
|
3
|
+
export const DEFAULT_CONNECT_CREDENTIALS = {
|
3
4
|
username: 'test',
|
4
5
|
password: 'test',
|
5
|
-
url: 'ws://localhost:7171/api/v1/',
|
6
6
|
};
|
7
7
|
|
8
8
|
export const DEFAULT_CONNECT_RESPONSE = {
|
@@ -2,7 +2,7 @@ import { Client, Server, WebSocket } from 'mock-socket';
|
|
2
2
|
|
3
3
|
import { OutgoingRequest, RequestSuccessResponse, RequestErrorResponse } from '../../types/api_internal.js';
|
4
4
|
import { EventEmitter } from 'events';
|
5
|
-
import {
|
5
|
+
import { MOCK_SERVER_URL } from './mock-data.js';
|
6
6
|
|
7
7
|
interface MockFunctionCreator {
|
8
8
|
fn: (...args: any[]) => any;
|
@@ -25,7 +25,7 @@ interface MockServerOptions {
|
|
25
25
|
}
|
26
26
|
|
27
27
|
const DEFAULT_MOCK_SERVER_OPTIONS: MockServerOptions = {
|
28
|
-
url:
|
28
|
+
url: MOCK_SERVER_URL,
|
29
29
|
reportMissingListeners: true,
|
30
30
|
mockF: getDefaultMockCreatorF(),
|
31
31
|
}
|
@@ -43,16 +43,19 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
|
|
43
43
|
const mockServer = new Server(url);
|
44
44
|
let socket: Client;
|
45
45
|
const emitter = new EventEmitter();
|
46
|
+
emitter.setMaxListeners(1);
|
46
47
|
|
47
48
|
const send = (data: object) => {
|
48
49
|
socket.send(JSON.stringify(data));
|
49
50
|
};
|
50
51
|
|
52
|
+
const handlers: Map<string, () => any> = new Map();
|
53
|
+
|
51
54
|
const addServerHandler = <DataT extends object | undefined>(
|
52
55
|
method: string,
|
53
56
|
path: string,
|
54
57
|
responseData: MockRequestResponseData<DataT>,
|
55
|
-
subscriptionCallback?: RequestCallback
|
58
|
+
subscriptionCallback?: RequestCallback,
|
56
59
|
) => {
|
57
60
|
const requestHandler = (request: OutgoingRequest, s: WebSocket) => {
|
58
61
|
if (subscriptionCallback) {
|
@@ -72,14 +75,21 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
|
|
72
75
|
s.send(JSON.stringify(response));
|
73
76
|
};
|
74
77
|
|
78
|
+
// Don't add duplicates
|
75
79
|
const emitId = toEmitId(path, method);
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
const removeExisting = handlers.get(emitId);
|
81
|
+
if (removeExisting) {
|
82
|
+
removeExisting();
|
83
|
+
handlers.delete(emitId);
|
84
|
+
}
|
85
|
+
|
86
|
+
// Add new
|
87
|
+
emitter.addListener(emitId, requestHandler);
|
81
88
|
|
82
|
-
|
89
|
+
// Prepare for removal
|
90
|
+
const removeListener = () => emitter.removeListener(emitId, requestHandler);
|
91
|
+
handlers.set(emitId, removeListener)
|
92
|
+
return removeListener;
|
83
93
|
};
|
84
94
|
|
85
95
|
const addDummyDataHandler = (method: string, path: string) => {
|
@@ -244,10 +254,6 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
|
|
244
254
|
});
|
245
255
|
});
|
246
256
|
|
247
|
-
mockServer.on('close', () => {
|
248
|
-
emitter.removeAllListeners();
|
249
|
-
});
|
250
|
-
|
251
257
|
return {
|
252
258
|
addRequestHandler,
|
253
259
|
addErrorHandler,
|
@@ -258,7 +264,8 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
|
|
258
264
|
ignoreMissingHandler: addDummyDataHandler,
|
259
265
|
stop: () => {
|
260
266
|
mockServer.stop(() => {
|
261
|
-
|
267
|
+
emitter.removeAllListeners();
|
268
|
+
handlers.clear();
|
262
269
|
});
|
263
270
|
},
|
264
271
|
send,
|
@@ -5,10 +5,10 @@ import * as Options from '../../types/options.js';
|
|
5
5
|
import ApiConstants from '../../ApiConstants.js';
|
6
6
|
|
7
7
|
import { getMockServer } from './mock-server.js';
|
8
|
-
import { DEFAULT_AUTH_RESPONSE,
|
8
|
+
import { DEFAULT_AUTH_RESPONSE, DEFAULT_CONNECT_CREDENTIALS, MOCK_SERVER_URL } from './mock-data.js';
|
9
9
|
|
10
10
|
const getDefaultSocketOptions = (): Options.APISocketOptions => ({
|
11
|
-
|
11
|
+
url: MOCK_SERVER_URL,
|
12
12
|
logOutput: console,
|
13
13
|
logLevel: 'warn',
|
14
14
|
});
|
@@ -27,7 +27,7 @@ interface MockSocketOptions {
|
|
27
27
|
socketOptions?: MockSocketConnectOptions;
|
28
28
|
}
|
29
29
|
|
30
|
-
interface MockConnectedSocketOptions extends MockSocketOptions {
|
30
|
+
export interface MockConnectedSocketOptions extends MockSocketOptions {
|
31
31
|
authCallback?: RequestCallback;
|
32
32
|
authResponse: object;
|
33
33
|
}
|
@@ -37,7 +37,7 @@ export const getSocket = (socketOptions: MockSocketConnectOptions = {}) => {
|
|
37
37
|
const socket = Socket(
|
38
38
|
{
|
39
39
|
...getDefaultSocketOptions(),
|
40
|
-
...socketOptions
|
40
|
+
...socketOptions
|
41
41
|
},
|
42
42
|
WebSocket as any
|
43
43
|
);
|
@@ -59,10 +59,14 @@ export const getConnectedSocket = async (
|
|
59
59
|
...userOptions,
|
60
60
|
};
|
61
61
|
|
62
|
-
server.addRequestHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
|
62
|
+
const removeAuthHandler = server.addRequestHandler('POST', ApiConstants.LOGIN_URL, options.authResponse, options.authCallback);
|
63
63
|
|
64
|
-
const { socket } = getSocket(
|
64
|
+
const { socket } = getSocket({
|
65
|
+
...DEFAULT_CONNECT_CREDENTIALS,
|
66
|
+
...getDefaultSocketOptions(),
|
67
|
+
...options.socketOptions
|
68
|
+
});
|
65
69
|
await socket.connect();
|
66
70
|
|
67
|
-
return { socket };
|
71
|
+
return { socket, removeAuthHandler };
|
68
72
|
};
|
@@ -2,7 +2,7 @@ import * as API from './api.js';
|
|
2
2
|
|
3
3
|
|
4
4
|
// SUBSCRIPTIONS
|
5
|
-
export type SubscriptionRemoveHandler = (sendApi?: boolean) => void
|
5
|
+
export type SubscriptionRemoveHandler = (sendApi?: boolean) => Promise<void>;
|
6
6
|
|
7
7
|
export type SubscriptionCallback<
|
8
8
|
DataT extends object | void = object,
|