@furystack/websocket-api 8.0.2 → 8.0.5
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/actions/whoami.js +9 -6
- package/dist/actions/whoami.js.map +1 -1
- package/dist/actions/whoami.spec.js +8 -1
- package/dist/actions/whoami.spec.js.map +1 -1
- package/dist/helpers.js +2 -1
- package/dist/helpers.js.map +1 -1
- package/dist/websocket-api-settings.js +7 -2
- package/dist/websocket-api-settings.js.map +1 -1
- package/dist/websocket-api.js +44 -28
- package/dist/websocket-api.js.map +1 -1
- package/dist/websocket-user-context.js +5 -5
- package/dist/websocket-user-context.js.map +1 -1
- package/package.json +8 -8
- package/src/actions/whoami.spec.ts +6 -1
- package/src/actions/whoami.ts +6 -2
- package/src/helpers.ts +2 -1
- package/src/websocket-api-settings.ts +2 -1
- package/src/websocket-api.ts +38 -27
- package/src/websocket-user-context.ts +3 -2
- package/types/actions/whoami.d.ts +3 -5
- package/types/actions/whoami.d.ts.map +1 -1
- package/types/helpers.d.ts +2 -1
- package/types/helpers.d.ts.map +1 -1
- package/types/websocket-api-settings.d.ts.map +1 -1
- package/types/websocket-api.d.ts +7 -8
- package/types/websocket-api.d.ts.map +1 -1
- package/types/websocket-user-context.d.ts +1 -3
- package/types/websocket-user-context.d.ts.map +1 -1
package/dist/actions/whoami.js
CHANGED
|
@@ -9,10 +9,6 @@ const ws_1 = tslib_1.__importDefault(require("ws"));
|
|
|
9
9
|
* Example action that returns the current user instance
|
|
10
10
|
*/
|
|
11
11
|
let WhoAmI = class WhoAmI {
|
|
12
|
-
constructor(httpUserContext, websocket) {
|
|
13
|
-
this.httpUserContext = httpUserContext;
|
|
14
|
-
this.websocket = websocket;
|
|
15
|
-
}
|
|
16
12
|
dispose() {
|
|
17
13
|
/** */
|
|
18
14
|
}
|
|
@@ -29,9 +25,16 @@ let WhoAmI = class WhoAmI {
|
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
27
|
};
|
|
28
|
+
tslib_1.__decorate([
|
|
29
|
+
(0, inject_1.Injected)(rest_service_1.HttpUserContext),
|
|
30
|
+
tslib_1.__metadata("design:type", rest_service_1.HttpUserContext)
|
|
31
|
+
], WhoAmI.prototype, "httpUserContext", void 0);
|
|
32
|
+
tslib_1.__decorate([
|
|
33
|
+
(0, inject_1.Injected)(ws_1.default),
|
|
34
|
+
tslib_1.__metadata("design:type", ws_1.default)
|
|
35
|
+
], WhoAmI.prototype, "websocket", void 0);
|
|
32
36
|
WhoAmI = tslib_1.__decorate([
|
|
33
|
-
(0, inject_1.Injectable)({ lifetime: 'transient' })
|
|
34
|
-
tslib_1.__metadata("design:paramtypes", [rest_service_1.HttpUserContext, ws_1.default])
|
|
37
|
+
(0, inject_1.Injectable)({ lifetime: 'transient' })
|
|
35
38
|
], WhoAmI);
|
|
36
39
|
exports.WhoAmI = WhoAmI;
|
|
37
40
|
//# sourceMappingURL=whoami.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/actions/whoami.ts"],"names":[],"mappings":";;;;AAAA,0DAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/actions/whoami.ts"],"names":[],"mappings":";;;;AAAA,0DAAyD;AACzD,8CAAwD;AACxD,oDAA6B;AAI7B;;GAEG;AAEH,IAAa,MAAM,GAAnB,MAAa,MAAM;IACV,OAAO;QACZ,MAAM;IACR,CAAC;IACM,MAAM,CAAC,UAAU,CAAC,OAAiD;QACxE,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,gBAAgB,CAAA;IAC7F,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAiD;QACpE,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC9E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;SACrD;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;SAC3D;IACH,CAAC;CAOF,CAAA;AAJC;IADC,IAAA,iBAAQ,EAAC,8BAAe,CAAC;sCACS,8BAAe;+CAAA;AAGlD;IADC,IAAA,iBAAQ,EAAC,YAAE,CAAC;sCACgB,YAAE;yCAAA;AArBpB,MAAM;IADlB,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,MAAM,CAsBlB;AAtBY,wBAAM"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
3
4
|
const whoami_1 = require("./whoami");
|
|
5
|
+
const rest_service_1 = require("@furystack/rest-service");
|
|
6
|
+
const ws_1 = tslib_1.__importDefault(require("ws"));
|
|
4
7
|
const utils_1 = require("@furystack/utils");
|
|
8
|
+
const inject_1 = require("@furystack/inject");
|
|
5
9
|
describe('Whoami action', () => {
|
|
6
10
|
const currentUser = { username: 'testuser' };
|
|
7
11
|
const contextMock = { getCurrentUser: async () => currentUser };
|
|
@@ -19,7 +23,10 @@ describe('Whoami action', () => {
|
|
|
19
23
|
expect(whoami_1.WhoAmI.canExecute({ request, data: 'whoami /claims' })).toBeTruthy();
|
|
20
24
|
});
|
|
21
25
|
it('Should return the current user', async () => {
|
|
22
|
-
await (0, utils_1.usingAsync)(new
|
|
26
|
+
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (injector) => {
|
|
27
|
+
injector.setExplicitInstance(contextMock, rest_service_1.HttpUserContext);
|
|
28
|
+
injector.setExplicitInstance(wsMock, ws_1.default);
|
|
29
|
+
const instance = injector.getInstance(whoami_1.WhoAmI);
|
|
23
30
|
await instance.execute({ request, data: '' });
|
|
24
31
|
expect(wsMock.send).toBeCalledWith(JSON.stringify({ currentUser }));
|
|
25
32
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.spec.js","sourceRoot":"","sources":["../../src/actions/whoami.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"whoami.spec.js","sourceRoot":"","sources":["../../src/actions/whoami.spec.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,0DAAyD;AACzD,oDAAmB;AACnB,4CAA6C;AAE7C,8CAA4C;AAE5C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,WAAW,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;IAC5C,MAAM,WAAW,GAAoB,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,EAAgC,CAAA;IAE9G,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,oBAAoB,EAAqB,CAAA;IAEhE,MAAM,MAAM,GAAO;QACjB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KACd,CAAA;IAElB,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,eAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,eAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,eAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,8BAAe,CAAC,CAAA;YAC1D,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAE,CAAC,CAAA;YACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,eAAM,CAAC,CAAA;YAE7C,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;YAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/helpers.js
CHANGED
|
@@ -12,6 +12,7 @@ const websocket_api_settings_1 = require("./websocket-api-settings");
|
|
|
12
12
|
* actions: [...my custom actions]
|
|
13
13
|
* })
|
|
14
14
|
* ````
|
|
15
|
+
*
|
|
15
16
|
* @param injector The injector instance
|
|
16
17
|
* @param settings The Settings object for the WebSocket API
|
|
17
18
|
*/
|
|
@@ -19,7 +20,7 @@ const useWebsockets = (injector, settings) => {
|
|
|
19
20
|
const s = new websocket_api_settings_1.WebSocketApiSettings();
|
|
20
21
|
Object.assign(s, settings);
|
|
21
22
|
injector.setExplicitInstance(s, websocket_api_settings_1.WebSocketApiSettings);
|
|
22
|
-
injector.getInstance(websocket_api_1.WebSocketApi);
|
|
23
|
+
injector.getInstance(websocket_api_1.WebSocketApi).init();
|
|
23
24
|
};
|
|
24
25
|
exports.useWebsockets = useWebsockets;
|
|
25
26
|
//# sourceMappingURL=helpers.js.map
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAC9C,qEAA+D;AAE/D
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAC9C,qEAA+D;AAE/D;;;;;;;;;;;;GAYG;AACI,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,QAAwC,EAAE,EAAE;IAC5F,MAAM,CAAC,GAAG,IAAI,6CAAoB,EAAE,CAAA;IACpC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC1B,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,6CAAoB,CAAC,CAAA;IACrD,QAAQ,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC,CAAA;AALY,QAAA,aAAa,iBAKzB"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WebSocketApiSettings = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const inject_1 = require("@furystack/inject");
|
|
4
6
|
const whoami_1 = require("./actions/whoami");
|
|
5
7
|
/**
|
|
6
8
|
* A configuration object for FuryStack WebSocket API
|
|
7
9
|
*/
|
|
8
|
-
class WebSocketApiSettings {
|
|
10
|
+
let WebSocketApiSettings = class WebSocketApiSettings {
|
|
9
11
|
constructor() {
|
|
10
12
|
this.port = 19090;
|
|
11
13
|
this.path = '/socket';
|
|
12
14
|
this.actions = [whoami_1.WhoAmI];
|
|
13
15
|
}
|
|
14
|
-
}
|
|
16
|
+
};
|
|
17
|
+
WebSocketApiSettings = tslib_1.__decorate([
|
|
18
|
+
(0, inject_1.Injectable)({ lifetime: 'scoped' })
|
|
19
|
+
], WebSocketApiSettings);
|
|
15
20
|
exports.WebSocketApiSettings = WebSocketApiSettings;
|
|
16
21
|
//# sourceMappingURL=websocket-api-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api-settings.js","sourceRoot":"","sources":["../src/websocket-api-settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-api-settings.js","sourceRoot":"","sources":["../src/websocket-api-settings.ts"],"names":[],"mappings":";;;;AAAA,8CAA6D;AAC7D,6CAAyC;AAGzC;;GAEG;AAEH,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAAjC;QACS,SAAI,GAAG,KAAK,CAAA;QAEZ,SAAI,GAAG,SAAS,CAAA;QAChB,YAAO,GAAkE,CAAC,eAAM,CAAC,CAAA;IAC1F,CAAC;CAAA,CAAA;AALY,oBAAoB;IADhC,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,oBAAoB,CAKhC;AALY,oDAAoB"}
|
package/dist/websocket-api.js
CHANGED
|
@@ -14,35 +14,40 @@ const websocket_user_context_1 = require("./websocket-user-context");
|
|
|
14
14
|
* A WebSocket API implementation for FuryStack
|
|
15
15
|
*/
|
|
16
16
|
let WebSocketApi = class WebSocketApi {
|
|
17
|
-
constructor(
|
|
18
|
-
this.settings = settings;
|
|
19
|
-
this.serverManager = serverManager;
|
|
20
|
-
this.clients = new Map();
|
|
17
|
+
constructor() {
|
|
21
18
|
this.socket = new ws_1.Server({ noServer: true });
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
this.clients = new Map();
|
|
20
|
+
this.isInitialized = false;
|
|
21
|
+
}
|
|
22
|
+
init() {
|
|
23
|
+
if (!this.isInitialized) {
|
|
24
|
+
this.socket.on('connection', (websocket, msg) => {
|
|
25
|
+
const connectionInjector = this.injector.createChild({ owner: msg });
|
|
26
|
+
connectionInjector.setExplicitInstance(websocket, ws_1.default);
|
|
27
|
+
connectionInjector.setExplicitInstance(msg, http_1.IncomingMessage);
|
|
28
|
+
connectionInjector.setExplicitInstance(connectionInjector.getInstance(websocket_user_context_1.WebsocketUserContext), core_1.IdentityContext);
|
|
29
|
+
this.clients.set(websocket, { injector: connectionInjector, message: msg, ws: websocket });
|
|
30
|
+
websocket.on('message', (message) => {
|
|
31
|
+
this.execute(message, connectionInjector);
|
|
32
|
+
});
|
|
33
|
+
websocket.on('close', () => {
|
|
34
|
+
this.clients.delete(websocket);
|
|
35
|
+
});
|
|
34
36
|
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
}
|
|
37
|
+
this.serverManager.getOrCreate({ port: this.settings.port, hostName: this.settings.host }).then((server) => {
|
|
38
|
+
server.server.on('upgrade', (request, socket, head) => {
|
|
39
|
+
const { pathname } = new url_1.URL(request.url, `http://${request.headers.host}`);
|
|
40
|
+
if (pathname === this.settings.path) {
|
|
41
|
+
this.socket.handleUpgrade(request, socket, head, (websocket) => {
|
|
42
|
+
this.socket.emit('connection', websocket, request);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
44
46
|
});
|
|
45
|
-
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
throw Error('WebSocket API is already initialized');
|
|
50
|
+
}
|
|
46
51
|
}
|
|
47
52
|
async dispose() {
|
|
48
53
|
this.socket.clients.forEach((client) => client.close());
|
|
@@ -73,9 +78,20 @@ let WebSocketApi = class WebSocketApi {
|
|
|
73
78
|
}
|
|
74
79
|
}
|
|
75
80
|
};
|
|
81
|
+
tslib_1.__decorate([
|
|
82
|
+
(0, inject_1.Injected)(websocket_api_settings_1.WebSocketApiSettings),
|
|
83
|
+
tslib_1.__metadata("design:type", websocket_api_settings_1.WebSocketApiSettings)
|
|
84
|
+
], WebSocketApi.prototype, "settings", void 0);
|
|
85
|
+
tslib_1.__decorate([
|
|
86
|
+
(0, inject_1.Injected)(rest_service_1.ServerManager),
|
|
87
|
+
tslib_1.__metadata("design:type", rest_service_1.ServerManager)
|
|
88
|
+
], WebSocketApi.prototype, "serverManager", void 0);
|
|
89
|
+
tslib_1.__decorate([
|
|
90
|
+
(0, inject_1.Injected)(inject_1.Injector),
|
|
91
|
+
tslib_1.__metadata("design:type", inject_1.Injector)
|
|
92
|
+
], WebSocketApi.prototype, "injector", void 0);
|
|
76
93
|
WebSocketApi = tslib_1.__decorate([
|
|
77
|
-
(0, inject_1.Injectable)({ lifetime: 'scoped' })
|
|
78
|
-
tslib_1.__metadata("design:paramtypes", [websocket_api_settings_1.WebSocketApiSettings, rest_service_1.ServerManager, inject_1.Injector])
|
|
94
|
+
(0, inject_1.Injectable)({ lifetime: 'scoped' })
|
|
79
95
|
], WebSocketApi);
|
|
80
96
|
exports.WebSocketApi = WebSocketApi;
|
|
81
97
|
//# sourceMappingURL=websocket-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api.js","sourceRoot":"","sources":["../src/websocket-api.ts"],"names":[],"mappings":";;;;AAAA,6BAAyB;AAEzB,+BAAsC;AACtC,0DAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"websocket-api.js","sourceRoot":"","sources":["../src/websocket-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,6 @@ const http_1 = require("http");
|
|
|
6
6
|
const inject_1 = require("@furystack/inject");
|
|
7
7
|
const rest_service_1 = require("@furystack/rest-service");
|
|
8
8
|
let WebsocketUserContext = class WebsocketUserContext {
|
|
9
|
-
constructor(injector) {
|
|
10
|
-
this.injector = injector;
|
|
11
|
-
}
|
|
12
9
|
async isAuthenticated() {
|
|
13
10
|
try {
|
|
14
11
|
return (await this.getCurrentUser()) ? true : false;
|
|
@@ -38,9 +35,12 @@ let WebsocketUserContext = class WebsocketUserContext {
|
|
|
38
35
|
return user;
|
|
39
36
|
}
|
|
40
37
|
};
|
|
38
|
+
tslib_1.__decorate([
|
|
39
|
+
(0, inject_1.Injected)(inject_1.Injector),
|
|
40
|
+
tslib_1.__metadata("design:type", inject_1.Injector)
|
|
41
|
+
], WebsocketUserContext.prototype, "injector", void 0);
|
|
41
42
|
WebsocketUserContext = tslib_1.__decorate([
|
|
42
|
-
(0, inject_1.Injectable)({ lifetime: 'scoped' })
|
|
43
|
-
tslib_1.__metadata("design:paramtypes", [inject_1.Injector])
|
|
43
|
+
(0, inject_1.Injectable)({ lifetime: 'scoped' })
|
|
44
44
|
], WebsocketUserContext);
|
|
45
45
|
exports.WebsocketUserContext = WebsocketUserContext;
|
|
46
46
|
//# sourceMappingURL=websocket-user-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-user-context.js","sourceRoot":"","sources":["../src/websocket-user-context.ts"],"names":[],"mappings":";;;;AAAA,+BAAsC;AAEtC,
|
|
1
|
+
{"version":3,"file":"websocket-user-context.js","sourceRoot":"","sources":["../src/websocket-user-context.ts"],"names":[],"mappings":";;;;AAAA,+BAAsC;AAEtC,8CAAkE;AAClE,0DAAyD;AAGzD,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IACxB,KAAK,CAAC,eAAe;QAC1B,IAAI;YACF,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;SACpD;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,KAAK,CAAA;SACb;IACH,CAAC;IACM,KAAK,CAAC,YAAY,CAAC,GAAG,KAAe;QAC1C,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;YAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;oBAC9D,OAAO,KAAK,CAAA;iBACb;aACF;YACD,OAAO,IAAI,CAAA;SACZ;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,KAAK,CAAA;SACb;IACH,CAAC;IACM,KAAK,CAAC,cAAc;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ;aAC7B,WAAW,CAAC,8BAAe,CAAC;aAC5B,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,sBAAe,CAAC,CAAC,CAAA;QAClE,OAAO,IAAa,CAAA;IACtB,CAAC;CAIF,CAAA;AADC;IADC,IAAA,iBAAQ,EAAC,iBAAQ,CAAC;sCACS,iBAAQ;sDAAA;AA7BzB,oBAAoB;IADhC,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,oBAAoB,CA8BhC;AA9BY,oDAAoB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/websocket-api",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.5",
|
|
4
4
|
"description": "HTTP Api FuryStack package",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -26,16 +26,16 @@
|
|
|
26
26
|
},
|
|
27
27
|
"homepage": "https://github.com/furystack/furystack",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@furystack/core": "^11.0.
|
|
30
|
-
"@furystack/inject": "^
|
|
31
|
-
"@furystack/logging": "^3.0.
|
|
32
|
-
"@furystack/rest-service": "^6.0.
|
|
33
|
-
"@furystack/utils": "^3.0.
|
|
29
|
+
"@furystack/core": "^11.0.4",
|
|
30
|
+
"@furystack/inject": "^7.0.0",
|
|
31
|
+
"@furystack/logging": "^3.0.4",
|
|
32
|
+
"@furystack/rest-service": "^6.0.5",
|
|
33
|
+
"@furystack/utils": "^3.0.4",
|
|
34
34
|
"tslib": "^2.4.0",
|
|
35
|
-
"ws": "^8.
|
|
35
|
+
"ws": "^8.8.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@types/jest": "^27.5.
|
|
38
|
+
"@types/jest": "^27.5.2",
|
|
39
39
|
"@types/ws": "^8.5.3"
|
|
40
40
|
},
|
|
41
41
|
"typings": "./types/index.d.ts",
|
|
@@ -3,6 +3,7 @@ import { HttpUserContext } from '@furystack/rest-service'
|
|
|
3
3
|
import ws from 'ws'
|
|
4
4
|
import { usingAsync } from '@furystack/utils'
|
|
5
5
|
import { IncomingMessage } from 'http'
|
|
6
|
+
import { Injector } from '@furystack/inject'
|
|
6
7
|
|
|
7
8
|
describe('Whoami action', () => {
|
|
8
9
|
const currentUser = { username: 'testuser' }
|
|
@@ -27,7 +28,11 @@ describe('Whoami action', () => {
|
|
|
27
28
|
})
|
|
28
29
|
|
|
29
30
|
it('Should return the current user', async () => {
|
|
30
|
-
await usingAsync(new
|
|
31
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
32
|
+
injector.setExplicitInstance(contextMock, HttpUserContext)
|
|
33
|
+
injector.setExplicitInstance(wsMock, ws)
|
|
34
|
+
const instance = injector.getInstance(WhoAmI)
|
|
35
|
+
|
|
31
36
|
await instance.execute({ request, data: '' })
|
|
32
37
|
expect(wsMock.send).toBeCalledWith(JSON.stringify({ currentUser }))
|
|
33
38
|
})
|
package/src/actions/whoami.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HttpUserContext } from '@furystack/rest-service'
|
|
2
|
-
import { Injectable } from '@furystack/inject'
|
|
2
|
+
import { Injectable, Injected } from '@furystack/inject'
|
|
3
3
|
import ws, { Data } from 'ws'
|
|
4
4
|
import { WebSocketAction } from '../models/websocket-action'
|
|
5
5
|
import { IncomingMessage } from 'http'
|
|
@@ -25,5 +25,9 @@ export class WhoAmI implements WebSocketAction {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
@Injected(HttpUserContext)
|
|
29
|
+
private readonly httpUserContext!: HttpUserContext
|
|
30
|
+
|
|
31
|
+
@Injected(ws)
|
|
32
|
+
private readonly websocket!: ws
|
|
29
33
|
}
|
package/src/helpers.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { WebSocketApiSettings } from './websocket-api-settings'
|
|
|
11
11
|
* actions: [...my custom actions]
|
|
12
12
|
* })
|
|
13
13
|
* ````
|
|
14
|
+
*
|
|
14
15
|
* @param injector The injector instance
|
|
15
16
|
* @param settings The Settings object for the WebSocket API
|
|
16
17
|
*/
|
|
@@ -18,5 +19,5 @@ export const useWebsockets = (injector: Injector, settings?: Partial<WebSocketAp
|
|
|
18
19
|
const s = new WebSocketApiSettings()
|
|
19
20
|
Object.assign(s, settings)
|
|
20
21
|
injector.setExplicitInstance(s, WebSocketApiSettings)
|
|
21
|
-
injector.getInstance(WebSocketApi)
|
|
22
|
+
injector.getInstance(WebSocketApi).init()
|
|
22
23
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Constructable } from '@furystack/inject'
|
|
1
|
+
import { Constructable, Injectable } from '@furystack/inject'
|
|
2
2
|
import { WhoAmI } from './actions/whoami'
|
|
3
3
|
import { WebSocketAction, WebSocketActionStatic } from '.'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* A configuration object for FuryStack WebSocket API
|
|
7
7
|
*/
|
|
8
|
+
@Injectable({ lifetime: 'scoped' })
|
|
8
9
|
export class WebSocketApiSettings {
|
|
9
10
|
public port = 19090
|
|
10
11
|
public host?: string
|
package/src/websocket-api.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { URL } from 'url'
|
|
|
2
2
|
import { Socket } from 'net'
|
|
3
3
|
import { IncomingMessage } from 'http'
|
|
4
4
|
import { ServerManager } from '@furystack/rest-service'
|
|
5
|
-
import { Injectable, Injector } from '@furystack/inject'
|
|
5
|
+
import { Injectable, Injected, Injector } from '@furystack/inject'
|
|
6
6
|
import { Disposable } from '@furystack/utils'
|
|
7
7
|
import ws, { Data, Server as WebSocketServer } from 'ws'
|
|
8
8
|
import { WebSocketApiSettings } from './websocket-api-settings'
|
|
@@ -15,39 +15,50 @@ import { WebsocketUserContext } from './websocket-user-context'
|
|
|
15
15
|
*/
|
|
16
16
|
@Injectable({ lifetime: 'scoped' })
|
|
17
17
|
export class WebSocketApi implements Disposable {
|
|
18
|
-
public readonly socket:
|
|
19
|
-
private readonly injector: Injector
|
|
18
|
+
public readonly socket = new WebSocketServer({ noServer: true })
|
|
20
19
|
|
|
21
20
|
private clients = new Map<ws, { injector: Injector; ws: ws; message: IncomingMessage }>()
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.clients.set(websocket, { injector: connectionInjector, message: msg, ws: websocket })
|
|
32
|
-
websocket.on('message', (message) => {
|
|
33
|
-
this.execute(message, connectionInjector)
|
|
34
|
-
})
|
|
22
|
+
@Injected(WebSocketApiSettings)
|
|
23
|
+
private readonly settings!: WebSocketApiSettings
|
|
24
|
+
|
|
25
|
+
@Injected(ServerManager)
|
|
26
|
+
private readonly serverManager!: ServerManager
|
|
27
|
+
|
|
28
|
+
@Injected(Injector)
|
|
29
|
+
private readonly injector!: Injector
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
private isInitialized = false
|
|
32
|
+
public init() {
|
|
33
|
+
if (!this.isInitialized) {
|
|
34
|
+
this.socket.on('connection', (websocket, msg) => {
|
|
35
|
+
const connectionInjector = this.injector.createChild({ owner: msg })
|
|
36
|
+
connectionInjector.setExplicitInstance(websocket, ws)
|
|
37
|
+
connectionInjector.setExplicitInstance(msg, IncomingMessage)
|
|
38
|
+
connectionInjector.setExplicitInstance(connectionInjector.getInstance(WebsocketUserContext), IdentityContext)
|
|
39
|
+
this.clients.set(websocket, { injector: connectionInjector, message: msg, ws: websocket })
|
|
40
|
+
websocket.on('message', (message) => {
|
|
41
|
+
this.execute(message, connectionInjector)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
websocket.on('close', () => {
|
|
45
|
+
this.clients.delete(websocket)
|
|
46
|
+
})
|
|
38
47
|
})
|
|
39
|
-
})
|
|
40
48
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
this.serverManager.getOrCreate({ port: this.settings.port, hostName: this.settings.host }).then((server) => {
|
|
50
|
+
server.server.on('upgrade', (request: IncomingMessage, socket: Socket, head: Buffer) => {
|
|
51
|
+
const { pathname } = new URL(request.url as string, `http://${request.headers.host}`)
|
|
52
|
+
if (pathname === this.settings.path) {
|
|
53
|
+
this.socket.handleUpgrade(request, socket, head, (websocket) => {
|
|
54
|
+
this.socket.emit('connection', websocket, request)
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
})
|
|
49
58
|
})
|
|
50
|
-
}
|
|
59
|
+
} else {
|
|
60
|
+
throw Error('WebSocket API is already initialized')
|
|
61
|
+
}
|
|
51
62
|
}
|
|
52
63
|
public async dispose() {
|
|
53
64
|
this.socket.clients.forEach((client) => client.close())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IncomingMessage } from 'http'
|
|
2
2
|
import { IdentityContext, User } from '@furystack/core'
|
|
3
|
-
import { Injectable, Injector } from '@furystack/inject'
|
|
3
|
+
import { Injectable, Injected, Injector } from '@furystack/inject'
|
|
4
4
|
import { HttpUserContext } from '@furystack/rest-service'
|
|
5
5
|
|
|
6
6
|
@Injectable({ lifetime: 'scoped' })
|
|
@@ -32,5 +32,6 @@ export class WebsocketUserContext implements IdentityContext {
|
|
|
32
32
|
return user as TUser
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
@Injected(Injector)
|
|
36
|
+
private readonly injector!: Injector
|
|
36
37
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import ws, { Data } from 'ws';
|
|
1
|
+
import { Data } from 'ws';
|
|
3
2
|
import { WebSocketAction } from '../models/websocket-action';
|
|
4
3
|
import { IncomingMessage } from 'http';
|
|
5
4
|
/**
|
|
6
5
|
* Example action that returns the current user instance
|
|
7
6
|
*/
|
|
8
7
|
export declare class WhoAmI implements WebSocketAction {
|
|
9
|
-
private httpUserContext;
|
|
10
|
-
private websocket;
|
|
11
8
|
dispose(): void;
|
|
12
9
|
static canExecute(options: {
|
|
13
10
|
data: Data;
|
|
@@ -17,6 +14,7 @@ export declare class WhoAmI implements WebSocketAction {
|
|
|
17
14
|
data: Data;
|
|
18
15
|
request: IncomingMessage;
|
|
19
16
|
}): Promise<void>;
|
|
20
|
-
|
|
17
|
+
private readonly httpUserContext;
|
|
18
|
+
private readonly websocket;
|
|
21
19
|
}
|
|
22
20
|
//# sourceMappingURL=whoami.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/actions/whoami.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/actions/whoami.ts"],"names":[],"mappings":"AAEA,OAAW,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAEtC;;GAEG;AACH,qBACa,MAAO,YAAW,eAAe;IACrC,OAAO;WAGA,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO;IAIvE,OAAO,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE;IAUtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAGlD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAK;CAChC"}
|
package/types/helpers.d.ts
CHANGED
|
@@ -9,8 +9,9 @@ import { WebSocketApiSettings } from './websocket-api-settings';
|
|
|
9
9
|
* actions: [...my custom actions]
|
|
10
10
|
* })
|
|
11
11
|
* ````
|
|
12
|
+
*
|
|
12
13
|
* @param injector The injector instance
|
|
13
14
|
* @param settings The Settings object for the WebSocket API
|
|
14
15
|
*/
|
|
15
|
-
export declare const useWebsockets: (injector: Injector, settings?: Partial<WebSocketApiSettings>
|
|
16
|
+
export declare const useWebsockets: (injector: Injector, settings?: Partial<WebSocketApiSettings>) => void;
|
|
16
17
|
//# sourceMappingURL=helpers.d.ts.map
|
package/types/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,aAAc,QAAQ,aAAa,QAAQ,oBAAoB,CAAC,SAKzF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api-settings.d.ts","sourceRoot":"","sources":["../src/websocket-api-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"websocket-api-settings.d.ts","sourceRoot":"","sources":["../src/websocket-api-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,GAAG,CAAA;AAE1D;;GAEG;AACH,qBACa,oBAAoB;IACxB,IAAI,SAAQ;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,SAAY;IAChB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,qBAAqB,CAAC,CAAW;CACzF"}
|
package/types/websocket-api.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { IncomingMessage } from 'http';
|
|
2
|
-
import { ServerManager } from '@furystack/rest-service';
|
|
3
2
|
import { Injector } from '@furystack/inject';
|
|
4
3
|
import { Disposable } from '@furystack/utils';
|
|
5
|
-
import ws, { Data
|
|
6
|
-
import { WebSocketApiSettings } from './websocket-api-settings';
|
|
4
|
+
import ws, { Data } from 'ws';
|
|
7
5
|
/**
|
|
8
6
|
* A WebSocket API implementation for FuryStack
|
|
9
7
|
*/
|
|
10
8
|
export declare class WebSocketApi implements Disposable {
|
|
11
|
-
|
|
12
|
-
serverManager: ServerManager;
|
|
13
|
-
readonly socket: WebSocketServer;
|
|
14
|
-
private readonly injector;
|
|
9
|
+
readonly socket: ws.Server<ws.WebSocket>;
|
|
15
10
|
private clients;
|
|
16
|
-
|
|
11
|
+
private readonly settings;
|
|
12
|
+
private readonly serverManager;
|
|
13
|
+
private readonly injector;
|
|
14
|
+
private isInitialized;
|
|
15
|
+
init(): void;
|
|
17
16
|
dispose(): Promise<void>;
|
|
18
17
|
broadcast(callback: (options: {
|
|
19
18
|
injector: Injector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api.d.ts","sourceRoot":"","sources":["../src/websocket-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"websocket-api.d.ts","sourceRoot":"","sources":["../src/websocket-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAEtC,OAAO,EAAwB,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAA6B,MAAM,IAAI,CAAA;AAMxD;;GAEG;AACH,qBACa,YAAa,YAAW,UAAU;IAC7C,SAAgB,MAAM,0BAA0C;IAEhE,OAAO,CAAC,OAAO,CAA0E;IAGzF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAGhD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAG9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAEpC,OAAO,CAAC,aAAa,CAAQ;IACtB,IAAI;IA+BE,OAAO;IAMP,SAAS,CACpB,QAAQ,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,EAAE,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBhG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ;CAO9C"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { IdentityContext, User } from '@furystack/core';
|
|
2
|
-
import { Injector } from '@furystack/inject';
|
|
3
2
|
export declare class WebsocketUserContext implements IdentityContext {
|
|
4
|
-
private readonly injector;
|
|
5
3
|
isAuthenticated(): Promise<boolean>;
|
|
6
4
|
isAuthorized(...roles: string[]): Promise<boolean>;
|
|
7
5
|
getCurrentUser<TUser extends User>(): Promise<TUser>;
|
|
8
|
-
|
|
6
|
+
private readonly injector;
|
|
9
7
|
}
|
|
10
8
|
//# sourceMappingURL=websocket-user-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-user-context.d.ts","sourceRoot":"","sources":["../src/websocket-user-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"websocket-user-context.d.ts","sourceRoot":"","sources":["../src/websocket-user-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAIvD,qBACa,oBAAqB,YAAW,eAAe;IAC7C,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAOnC,YAAY,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD,cAAc,CAAC,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC;IAQjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;CACrC"}
|