@furystack/websocket-api 7.0.68 → 8.0.1
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/helpers.js +25 -0
- package/dist/helpers.js.map +1 -0
- package/dist/{injector-extensions.spec.js → helpers.spec.js} +4 -9
- package/dist/helpers.spec.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/websocket-api.spec.js +5 -5
- package/dist/websocket-api.spec.js.map +1 -1
- package/dist/websocket-integration.spec.js +7 -7
- package/dist/websocket-integration.spec.js.map +1 -1
- package/package.json +11 -10
- package/src/{injector-extensions.spec.ts → helpers.spec.ts} +3 -9
- package/src/helpers.ts +22 -0
- package/src/index.ts +1 -1
- package/src/websocket-api.spec.ts +5 -5
- package/src/websocket-integration.spec.ts +10 -10
- package/{dist → types}/actions/whoami.d.ts +0 -0
- package/{dist → types}/actions/whoami.d.ts.map +0 -0
- package/{dist → types}/actions/whoami.spec.d.ts +0 -0
- package/{dist → types}/actions/whoami.spec.d.ts.map +0 -0
- package/types/helpers.d.ts +16 -0
- package/types/helpers.d.ts.map +1 -0
- package/types/helpers.spec.d.ts +2 -0
- package/types/helpers.spec.d.ts.map +1 -0
- package/{dist → types}/index.d.ts +1 -1
- package/{dist → types}/index.d.ts.map +1 -1
- package/{dist → types}/models/index.d.ts +0 -0
- package/{dist → types}/models/index.d.ts.map +0 -0
- package/{dist → types}/models/websocket-action.d.ts +0 -0
- package/{dist → types}/models/websocket-action.d.ts.map +0 -0
- package/{dist → types}/websocket-api-settings.d.ts +0 -0
- package/{dist → types}/websocket-api-settings.d.ts.map +0 -0
- package/{dist → types}/websocket-api.d.ts +0 -0
- package/{dist → types}/websocket-api.d.ts.map +0 -0
- package/types/websocket-api.spec.d.ts +2 -0
- package/{dist → types}/websocket-api.spec.d.ts.map +1 -1
- package/types/websocket-integration.spec.d.ts +2 -0
- package/{dist → types}/websocket-integration.spec.d.ts.map +1 -1
- package/{dist → types}/websocket-user-context.d.ts +0 -0
- package/{dist → types}/websocket-user-context.d.ts.map +0 -0
- package/{dist → types}/websocket-user-context.spec.d.ts +0 -0
- package/{dist → types}/websocket-user-context.spec.d.ts.map +0 -0
- package/dist/injector-extensions.d.ts +0 -20
- package/dist/injector-extensions.d.ts.map +0 -1
- package/dist/injector-extensions.js +0 -12
- package/dist/injector-extensions.js.map +0 -1
- package/dist/injector-extensions.spec.d.ts +0 -2
- package/dist/injector-extensions.spec.d.ts.map +0 -1
- package/dist/injector-extensions.spec.js.map +0 -1
- package/dist/websocket-api.spec.d.ts +0 -2
- package/dist/websocket-integration.spec.d.ts +0 -2
- package/src/injector-extensions.ts +0 -29
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useWebsockets = void 0;
|
|
4
|
+
const websocket_api_1 = require("./websocket-api");
|
|
5
|
+
const websocket_api_settings_1 = require("./websocket-api-settings");
|
|
6
|
+
/**
|
|
7
|
+
* Registers a WebSocket API on a current injector instance.
|
|
8
|
+
* Usage example:
|
|
9
|
+
* ````ts
|
|
10
|
+
* injector.useWebsockets({
|
|
11
|
+
* path: "/sockets",
|
|
12
|
+
* actions: [...my custom actions]
|
|
13
|
+
* })
|
|
14
|
+
* ````
|
|
15
|
+
* @param injector The injector instance
|
|
16
|
+
* @param settings The Settings object for the WebSocket API
|
|
17
|
+
*/
|
|
18
|
+
const useWebsockets = (injector, settings) => {
|
|
19
|
+
const s = new websocket_api_settings_1.WebSocketApiSettings();
|
|
20
|
+
Object.assign(s, settings);
|
|
21
|
+
injector.setExplicitInstance(s, websocket_api_settings_1.WebSocketApiSettings);
|
|
22
|
+
injector.getInstance(websocket_api_1.WebSocketApi);
|
|
23
|
+
};
|
|
24
|
+
exports.useWebsockets = useWebsockets;
|
|
25
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAC9C,qEAA+D;AAE/D;;;;;;;;;;;GAWG;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,CAAA;AACpC,CAAC,CAAA;AALY,QAAA,aAAa,iBAKzB"}
|
|
@@ -2,20 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("@furystack/utils");
|
|
4
4
|
const inject_1 = require("@furystack/inject");
|
|
5
|
-
require("./
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
6
|
const _1 = require(".");
|
|
7
|
-
describe('WebSocket
|
|
8
|
-
it('Should extend the Injector', async () => {
|
|
9
|
-
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
10
|
-
expect(typeof i.useWebsockets).toBe('function');
|
|
11
|
-
});
|
|
12
|
-
});
|
|
7
|
+
describe('WebSocket Helpers', () => {
|
|
13
8
|
it('Should register the related services', async () => {
|
|
14
9
|
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
15
|
-
|
|
10
|
+
(0, helpers_1.useWebsockets)(i);
|
|
16
11
|
expect(i.cachedSingletons.has(_1.WebSocketApiSettings)).toBeTruthy();
|
|
17
12
|
expect(i.cachedSingletons.has(_1.WebSocketApi)).toBeTruthy();
|
|
18
13
|
});
|
|
19
14
|
});
|
|
20
15
|
});
|
|
21
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=helpers.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":";;AAAA,4CAA6C;AAC7C,8CAA4C;AAC5C,uCAAyC;AACzC,wBAAsD;AAEtD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAA,uBAAa,EAAC,CAAC,CAAC,CAAA;YAChB,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,uBAAoB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;YACjE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,5 +4,5 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
tslib_1.__exportStar(require("./websocket-api"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./websocket-api-settings"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./models"), exports);
|
|
7
|
-
require("./
|
|
7
|
+
tslib_1.__exportStar(require("./helpers"), exports);
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0DAA+B;AAC/B,mEAAwC;AACxC,mDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0DAA+B;AAC/B,mEAAwC;AACxC,mDAAwB;AACxB,oDAAyB"}
|
|
@@ -4,25 +4,25 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const inject_1 = require("@furystack/inject");
|
|
5
5
|
const utils_1 = require("@furystack/utils");
|
|
6
6
|
const websocket_api_1 = require("./websocket-api");
|
|
7
|
-
require("./injector-extensions");
|
|
8
7
|
const ws_1 = tslib_1.__importDefault(require("ws"));
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
9
|
describe('WebSocketApi', () => {
|
|
10
10
|
it('Should be built', async () => {
|
|
11
11
|
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
12
|
-
|
|
12
|
+
(0, helpers_1.useWebsockets)(i, { port: 19998 });
|
|
13
13
|
expect(i.getInstance(websocket_api_1.WebSocketApi)).toBeInstanceOf(websocket_api_1.WebSocketApi);
|
|
14
14
|
});
|
|
15
15
|
});
|
|
16
16
|
it('Should be built with settings', async () => {
|
|
17
17
|
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
18
|
-
|
|
18
|
+
(0, helpers_1.useWebsockets)(i, { path: '/web-socket', port: 19996 });
|
|
19
19
|
expect(i.getInstance(websocket_api_1.WebSocketApi)).toBeInstanceOf(websocket_api_1.WebSocketApi);
|
|
20
20
|
});
|
|
21
21
|
});
|
|
22
22
|
it('Should broadcast messages', async () => {
|
|
23
23
|
await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
|
|
24
24
|
expect.assertions(4); // All 4 clients should receive the message
|
|
25
|
-
|
|
25
|
+
(0, helpers_1.useWebsockets)(i, { path: '/web-socket', port: 19994 });
|
|
26
26
|
const api = i.getInstance(websocket_api_1.WebSocketApi);
|
|
27
27
|
await Promise.all([1, 2, 3, 4, 5].map(async (idx) => {
|
|
28
28
|
const client = new ws_1.default('ws://localhost:19994/web-socket');
|
|
@@ -62,7 +62,7 @@ describe('WebSocketApi', () => {
|
|
|
62
62
|
ExampleWsAction = tslib_1.__decorate([
|
|
63
63
|
(0, inject_1.Injectable)()
|
|
64
64
|
], ExampleWsAction);
|
|
65
|
-
|
|
65
|
+
(0, helpers_1.useWebsockets)(i, { path: '/web-socket', port: 19995, actions: [ExampleWsAction] });
|
|
66
66
|
const client = new ws_1.default('ws://localhost:19995/web-socket');
|
|
67
67
|
await new Promise((resolve) => client.once('open', () => resolve()));
|
|
68
68
|
await new Promise((resolve, reject) => client.send(JSON.stringify(data), (err) => (err ? reject(err) : resolve())));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api.spec.js","sourceRoot":"","sources":["../src/websocket-api.spec.ts"],"names":[],"mappings":";;;AAAA,8CAAwD;AACxD,4CAA6C;AAC7C,mDAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"websocket-api.spec.js","sourceRoot":"","sources":["../src/websocket-api.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const inject_1 = require("@furystack/inject");
|
|
5
5
|
const whoami_1 = require("./actions/whoami");
|
|
6
|
-
require(".");
|
|
7
6
|
const ws_1 = tslib_1.__importDefault(require("ws"));
|
|
8
7
|
const core_1 = require("@furystack/core");
|
|
9
8
|
const rest_service_1 = require("@furystack/rest-service");
|
|
9
|
+
const rest_service_2 = require("@furystack/rest-service");
|
|
10
|
+
const helpers_1 = require("./helpers");
|
|
10
11
|
describe('WebSocket Integration tests', () => {
|
|
11
12
|
const host = 'localhost';
|
|
12
13
|
const port = 9999;
|
|
@@ -15,17 +16,16 @@ describe('WebSocket Integration tests', () => {
|
|
|
15
16
|
let client;
|
|
16
17
|
beforeEach((done) => {
|
|
17
18
|
i = new inject_1.Injector();
|
|
18
|
-
|
|
19
|
+
(0, rest_service_2.useRestService)({
|
|
20
|
+
injector: i,
|
|
19
21
|
api: {},
|
|
20
22
|
root: '',
|
|
21
23
|
port,
|
|
22
24
|
hostName: host,
|
|
23
25
|
});
|
|
24
|
-
i.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
.useHttpAuthentication({})
|
|
28
|
-
.useWebsockets({ actions: [whoami_1.WhoAmI], path, port, host });
|
|
26
|
+
(0, core_1.addStore)(i, new core_1.InMemoryStore({ model: core_1.User, primaryKey: 'username' })).addStore(new core_1.InMemoryStore({ model: rest_service_1.DefaultSession, primaryKey: 'sessionId' }));
|
|
27
|
+
(0, rest_service_1.useHttpAuthentication)(i, {});
|
|
28
|
+
(0, helpers_1.useWebsockets)(i, { actions: [whoami_1.WhoAmI], path, port, host });
|
|
29
29
|
i.getInstance(rest_service_1.ServerManager)
|
|
30
30
|
.getOrCreate({ port })
|
|
31
31
|
.then(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-integration.spec.js","sourceRoot":"","sources":["../src/websocket-integration.spec.ts"],"names":[],"mappings":";;;AAAA,8CAA4C;AAC5C,6CAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"websocket-integration.spec.js","sourceRoot":"","sources":["../src/websocket-integration.spec.ts"],"names":[],"mappings":";;;AAAA,8CAA4C;AAC5C,6CAAyC;AACzC,oDAAmB;AACnB,0CAA+D;AAC/D,0DAA8F;AAC9F,0DAAwD;AACxD,uCAAyC;AAEzC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAA;IACxB,MAAM,IAAI,GAAG,IAAI,CAAA;IACjB,MAAM,IAAI,GAAG,KAAK,CAAA;IAClB,IAAI,CAAY,CAAA;IAChB,IAAI,MAAU,CAAA;IAEd,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;QAClB,CAAC,GAAG,IAAI,iBAAQ,EAAE,CAAA;QAClB,IAAA,6BAAc,EAAC;YACb,QAAQ,EAAE,CAAC;YACX,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,EAAE;YACR,IAAI;YACJ,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;QACF,IAAA,eAAQ,EAAC,CAAC,EAAE,IAAI,oBAAa,CAAC,EAAE,KAAK,EAAE,WAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAC9E,IAAI,oBAAa,CAAC,EAAE,KAAK,EAAE,6BAAc,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CACtE,CAAA;QACD,IAAA,oCAAqB,EAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC5B,IAAA,uBAAa,EAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,eAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,CAAC,CAAC,WAAW,CAAC,4BAAa,CAAC;aACzB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;aACrB,IAAI,CAAC,GAAG,EAAE;YACT,MAAM,GAAG,IAAI,YAAE,CAAC,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,CAAA;YAC1C,MAAM;iBACH,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACf,IAAI,EAAE,CAAA;YACR,CAAC,CAAC;iBACD,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YACpD,MAAM,CAAC,KAAK,EAAE,CAAA;YACd,IAAI,EAAE,CAAA;QACR,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/websocket-api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.1",
|
|
4
4
|
"description": "HTTP Api FuryStack package",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
8
|
+
"types",
|
|
8
9
|
"src"
|
|
9
10
|
],
|
|
10
11
|
"repository": {
|
|
@@ -25,18 +26,18 @@
|
|
|
25
26
|
},
|
|
26
27
|
"homepage": "https://github.com/furystack/furystack",
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@furystack/core": "^
|
|
29
|
-
"@furystack/inject": "^
|
|
30
|
-
"@furystack/logging": "^
|
|
31
|
-
"@furystack/rest-service": "^
|
|
32
|
-
"@furystack/utils": "^
|
|
33
|
-
"tslib": "^2.
|
|
34
|
-
"ws": "^8.
|
|
29
|
+
"@furystack/core": "^11.0.1",
|
|
30
|
+
"@furystack/inject": "^6.0.1",
|
|
31
|
+
"@furystack/logging": "^3.0.1",
|
|
32
|
+
"@furystack/rest-service": "^6.0.1",
|
|
33
|
+
"@furystack/utils": "^3.0.1",
|
|
34
|
+
"tslib": "^2.4.0",
|
|
35
|
+
"ws": "^8.6.0"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@types/jest": "^27.
|
|
38
|
+
"@types/jest": "^27.5.0",
|
|
38
39
|
"@types/ws": "^8.5.3"
|
|
39
40
|
},
|
|
40
|
-
"typings": "./
|
|
41
|
+
"typings": "./types/index.d.ts",
|
|
41
42
|
"gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
|
|
42
43
|
}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { usingAsync } from '@furystack/utils'
|
|
2
2
|
import { Injector } from '@furystack/inject'
|
|
3
|
-
import './
|
|
3
|
+
import { useWebsockets } from './helpers'
|
|
4
4
|
import { WebSocketApi, WebSocketApiSettings } from '.'
|
|
5
5
|
|
|
6
|
-
describe('WebSocket
|
|
7
|
-
it('Should extend the Injector', async () => {
|
|
8
|
-
await usingAsync(new Injector(), async (i) => {
|
|
9
|
-
expect(typeof i.useWebsockets).toBe('function')
|
|
10
|
-
})
|
|
11
|
-
})
|
|
12
|
-
|
|
6
|
+
describe('WebSocket Helpers', () => {
|
|
13
7
|
it('Should register the related services', async () => {
|
|
14
8
|
await usingAsync(new Injector(), async (i) => {
|
|
15
|
-
|
|
9
|
+
useWebsockets(i)
|
|
16
10
|
expect(i.cachedSingletons.has(WebSocketApiSettings)).toBeTruthy()
|
|
17
11
|
expect(i.cachedSingletons.has(WebSocketApi)).toBeTruthy()
|
|
18
12
|
})
|
package/src/helpers.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Injector } from '@furystack/inject'
|
|
2
|
+
import { WebSocketApi } from './websocket-api'
|
|
3
|
+
import { WebSocketApiSettings } from './websocket-api-settings'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Registers a WebSocket API on a current injector instance.
|
|
7
|
+
* Usage example:
|
|
8
|
+
* ````ts
|
|
9
|
+
* injector.useWebsockets({
|
|
10
|
+
* path: "/sockets",
|
|
11
|
+
* actions: [...my custom actions]
|
|
12
|
+
* })
|
|
13
|
+
* ````
|
|
14
|
+
* @param injector The injector instance
|
|
15
|
+
* @param settings The Settings object for the WebSocket API
|
|
16
|
+
*/
|
|
17
|
+
export const useWebsockets = (injector: Injector, settings?: Partial<WebSocketApiSettings>) => {
|
|
18
|
+
const s = new WebSocketApiSettings()
|
|
19
|
+
Object.assign(s, settings)
|
|
20
|
+
injector.setExplicitInstance(s, WebSocketApiSettings)
|
|
21
|
+
injector.getInstance(WebSocketApi)
|
|
22
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { Injector, Injectable } from '@furystack/inject'
|
|
2
2
|
import { usingAsync } from '@furystack/utils'
|
|
3
3
|
import { WebSocketApi } from './websocket-api'
|
|
4
|
-
import './injector-extensions'
|
|
5
4
|
import WebSocket from 'ws'
|
|
6
5
|
import { WebSocketAction } from './models'
|
|
6
|
+
import { useWebsockets } from './helpers'
|
|
7
7
|
|
|
8
8
|
describe('WebSocketApi', () => {
|
|
9
9
|
it('Should be built', async () => {
|
|
10
10
|
await usingAsync(new Injector(), async (i) => {
|
|
11
|
-
|
|
11
|
+
useWebsockets(i, { port: 19998 })
|
|
12
12
|
expect(i.getInstance(WebSocketApi)).toBeInstanceOf(WebSocketApi)
|
|
13
13
|
})
|
|
14
14
|
})
|
|
15
15
|
it('Should be built with settings', async () => {
|
|
16
16
|
await usingAsync(new Injector(), async (i) => {
|
|
17
|
-
|
|
17
|
+
useWebsockets(i, { path: '/web-socket', port: 19996 })
|
|
18
18
|
expect(i.getInstance(WebSocketApi)).toBeInstanceOf(WebSocketApi)
|
|
19
19
|
})
|
|
20
20
|
})
|
|
@@ -22,7 +22,7 @@ describe('WebSocketApi', () => {
|
|
|
22
22
|
it('Should broadcast messages', async () => {
|
|
23
23
|
await usingAsync(new Injector(), async (i) => {
|
|
24
24
|
expect.assertions(4) // All 4 clients should receive the message
|
|
25
|
-
|
|
25
|
+
useWebsockets(i, { path: '/web-socket', port: 19994 })
|
|
26
26
|
const api = i.getInstance(WebSocketApi)
|
|
27
27
|
await Promise.all(
|
|
28
28
|
[1, 2, 3, 4, 5].map(async (idx) => {
|
|
@@ -67,7 +67,7 @@ describe('WebSocketApi', () => {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
useWebsockets(i, { path: '/web-socket', port: 19995, actions: [ExampleWsAction] })
|
|
71
71
|
const client = new WebSocket('ws://localhost:19995/web-socket')
|
|
72
72
|
await new Promise<void>((resolve) => client.once('open', () => resolve()))
|
|
73
73
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Injector } from '@furystack/inject'
|
|
2
2
|
import { WhoAmI } from './actions/whoami'
|
|
3
|
-
import '.'
|
|
4
3
|
import ws from 'ws'
|
|
5
|
-
import { InMemoryStore, User } from '@furystack/core'
|
|
6
|
-
import { DefaultSession, ServerManager } from '@furystack/rest-service'
|
|
4
|
+
import { addStore, InMemoryStore, User } from '@furystack/core'
|
|
5
|
+
import { DefaultSession, ServerManager, useHttpAuthentication } from '@furystack/rest-service'
|
|
6
|
+
import { useRestService } from '@furystack/rest-service'
|
|
7
|
+
import { useWebsockets } from './helpers'
|
|
7
8
|
|
|
8
9
|
describe('WebSocket Integration tests', () => {
|
|
9
10
|
const host = 'localhost'
|
|
@@ -14,19 +15,18 @@ describe('WebSocket Integration tests', () => {
|
|
|
14
15
|
|
|
15
16
|
beforeEach((done) => {
|
|
16
17
|
i = new Injector()
|
|
17
|
-
|
|
18
|
+
useRestService({
|
|
19
|
+
injector: i,
|
|
18
20
|
api: {},
|
|
19
21
|
root: '',
|
|
20
22
|
port,
|
|
21
23
|
hostName: host,
|
|
22
24
|
})
|
|
23
|
-
i.
|
|
24
|
-
|
|
25
|
-
.addStore(new InMemoryStore({ model: User, primaryKey: 'username' }))
|
|
26
|
-
.addStore(new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' })),
|
|
25
|
+
addStore(i, new InMemoryStore({ model: User, primaryKey: 'username' })).addStore(
|
|
26
|
+
new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }),
|
|
27
27
|
)
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
useHttpAuthentication(i, {})
|
|
29
|
+
useWebsockets(i, { actions: [WhoAmI], path, port, host })
|
|
30
30
|
i.getInstance(ServerManager)
|
|
31
31
|
.getOrCreate({ port })
|
|
32
32
|
.then(() => {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Injector } from '@furystack/inject';
|
|
2
|
+
import { WebSocketApiSettings } from './websocket-api-settings';
|
|
3
|
+
/**
|
|
4
|
+
* Registers a WebSocket API on a current injector instance.
|
|
5
|
+
* Usage example:
|
|
6
|
+
* ````ts
|
|
7
|
+
* injector.useWebsockets({
|
|
8
|
+
* path: "/sockets",
|
|
9
|
+
* actions: [...my custom actions]
|
|
10
|
+
* })
|
|
11
|
+
* ````
|
|
12
|
+
* @param injector The injector instance
|
|
13
|
+
* @param settings The Settings object for the WebSocket API
|
|
14
|
+
*/
|
|
15
|
+
export declare const useWebsockets: (injector: Injector, settings?: Partial<WebSocketApiSettings> | undefined) => void;
|
|
16
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +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;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,aAAc,QAAQ,+DAK/C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.spec.d.ts","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-api.spec.d.ts","sourceRoot":"","sources":["../src/websocket-api.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-api.spec.d.ts","sourceRoot":"","sources":["../src/websocket-api.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-integration.spec.d.ts","sourceRoot":"","sources":["../src/websocket-integration.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-integration.spec.d.ts","sourceRoot":"","sources":["../src/websocket-integration.spec.ts"],"names":[],"mappings":""}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { WebSocketApiSettings } from './websocket-api-settings';
|
|
2
|
-
declare module '@furystack/inject/dist/injector' {
|
|
3
|
-
/**
|
|
4
|
-
* Defines an extended Injector instance
|
|
5
|
-
*/
|
|
6
|
-
interface Injector {
|
|
7
|
-
/**
|
|
8
|
-
* Registers a WebSocket API on a current injector instance.
|
|
9
|
-
* Usage example:
|
|
10
|
-
* ````ts
|
|
11
|
-
* injector.useWebsockets({
|
|
12
|
-
* path: "/sockets",
|
|
13
|
-
* actions: [...my custom actions]
|
|
14
|
-
* })
|
|
15
|
-
* ````
|
|
16
|
-
*/
|
|
17
|
-
useWebsockets: (settings?: Partial<WebSocketApiSettings>) => this;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=injector-extensions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injector-extensions.d.ts","sourceRoot":"","sources":["../src/injector-extensions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,QAAQ,iCAAiC,CAAC;IAC/C;;OAEG;IACH,UAAiB,QAAQ;QACvB;;;;;;;;;WASG;QACH,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAA;KAClE;CACF"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const injector_1 = require("@furystack/inject/dist/injector");
|
|
4
|
-
const websocket_api_1 = require("./websocket-api");
|
|
5
|
-
const websocket_api_settings_1 = require("./websocket-api-settings");
|
|
6
|
-
injector_1.Injector.prototype.useWebsockets = function (settings) {
|
|
7
|
-
const s = { ...new websocket_api_settings_1.WebSocketApiSettings(), ...settings };
|
|
8
|
-
this.setExplicitInstance(s, websocket_api_settings_1.WebSocketApiSettings);
|
|
9
|
-
this.getInstance(websocket_api_1.WebSocketApi);
|
|
10
|
-
return this;
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=injector-extensions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injector-extensions.js","sourceRoot":"","sources":["../src/injector-extensions.ts"],"names":[],"mappings":";;AAAA,8DAA0D;AAC1D,mDAA8C;AAC9C,qEAA+D;AAqB/D,mBAAQ,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,QAAQ;IACnD,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,6CAAoB,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAA;IACxD,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,6CAAoB,CAAC,CAAA;IACjD,IAAI,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAA;IAC9B,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injector-extensions.spec.d.ts","sourceRoot":"","sources":["../src/injector-extensions.spec.ts"],"names":[],"mappings":"AAEA,OAAO,uBAAuB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injector-extensions.spec.js","sourceRoot":"","sources":["../src/injector-extensions.spec.ts"],"names":[],"mappings":";;AAAA,4CAA6C;AAC7C,8CAA4C;AAC5C,iCAA8B;AAC9B,wBAAsD;AAEtD,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,CAAC,CAAC,aAAa,EAAE,CAAA;YACjB,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,uBAAoB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;YACjE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Injector } from '@furystack/inject/dist/injector'
|
|
2
|
-
import { WebSocketApi } from './websocket-api'
|
|
3
|
-
import { WebSocketApiSettings } from './websocket-api-settings'
|
|
4
|
-
|
|
5
|
-
declare module '@furystack/inject/dist/injector' {
|
|
6
|
-
/**
|
|
7
|
-
* Defines an extended Injector instance
|
|
8
|
-
*/
|
|
9
|
-
export interface Injector {
|
|
10
|
-
/**
|
|
11
|
-
* Registers a WebSocket API on a current injector instance.
|
|
12
|
-
* Usage example:
|
|
13
|
-
* ````ts
|
|
14
|
-
* injector.useWebsockets({
|
|
15
|
-
* path: "/sockets",
|
|
16
|
-
* actions: [...my custom actions]
|
|
17
|
-
* })
|
|
18
|
-
* ````
|
|
19
|
-
*/
|
|
20
|
-
useWebsockets: (settings?: Partial<WebSocketApiSettings>) => this
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
Injector.prototype.useWebsockets = function (settings) {
|
|
25
|
-
const s = { ...new WebSocketApiSettings(), ...settings }
|
|
26
|
-
this.setExplicitInstance(s, WebSocketApiSettings)
|
|
27
|
-
this.getInstance(WebSocketApi)
|
|
28
|
-
return this
|
|
29
|
-
}
|