@furystack/websocket-api 8.1.23 → 9.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.
Files changed (58) hide show
  1. package/{dist → esm}/actions/whoami.js +9 -15
  2. package/esm/actions/whoami.js.map +1 -0
  3. package/esm/helpers.js +21 -0
  4. package/esm/helpers.js.map +1 -0
  5. package/esm/index.js +5 -0
  6. package/esm/index.js.map +1 -0
  7. package/esm/models/index.js +2 -0
  8. package/esm/models/index.js.map +1 -0
  9. package/esm/models/websocket-action.js +2 -0
  10. package/{dist → esm}/websocket-api-settings.js +5 -8
  11. package/esm/websocket-api-settings.js.map +1 -0
  12. package/{dist → esm}/websocket-api.js +24 -49
  13. package/esm/websocket-api.js.map +1 -0
  14. package/{dist → esm}/websocket-user-context.js +9 -12
  15. package/esm/websocket-user-context.js.map +1 -0
  16. package/package.json +27 -10
  17. package/src/actions/whoami.spec.ts +2 -1
  18. package/src/helpers.spec.ts +1 -0
  19. package/src/helpers.ts +2 -3
  20. package/src/websocket-api.spec.ts +1 -0
  21. package/src/websocket-api.ts +2 -1
  22. package/src/websocket-integration.spec.ts +23 -17
  23. package/src/websocket-user-context.spec.ts +6 -5
  24. package/types/helpers.d.ts +2 -3
  25. package/types/helpers.d.ts.map +1 -1
  26. package/types/websocket-api.d.ts.map +1 -1
  27. package/dist/actions/whoami.js.map +0 -1
  28. package/dist/actions/whoami.spec.js +0 -37
  29. package/dist/actions/whoami.spec.js.map +0 -1
  30. package/dist/helpers.js +0 -26
  31. package/dist/helpers.js.map +0 -1
  32. package/dist/helpers.spec.js +0 -16
  33. package/dist/helpers.spec.js.map +0 -1
  34. package/dist/index.js +0 -21
  35. package/dist/index.js.map +0 -1
  36. package/dist/models/index.js +0 -18
  37. package/dist/models/index.js.map +0 -1
  38. package/dist/models/websocket-action.js +0 -3
  39. package/dist/websocket-api-settings.js.map +0 -1
  40. package/dist/websocket-api.js.map +0 -1
  41. package/dist/websocket-api.spec.js +0 -82
  42. package/dist/websocket-api.spec.js.map +0 -1
  43. package/dist/websocket-integration.spec.js +0 -54
  44. package/dist/websocket-integration.spec.js.map +0 -1
  45. package/dist/websocket-user-context.js.map +0 -1
  46. package/dist/websocket-user-context.spec.js +0 -69
  47. package/dist/websocket-user-context.spec.js.map +0 -1
  48. package/types/actions/whoami.spec.d.ts +0 -2
  49. package/types/actions/whoami.spec.d.ts.map +0 -1
  50. package/types/helpers.spec.d.ts +0 -2
  51. package/types/helpers.spec.d.ts.map +0 -1
  52. package/types/websocket-api.spec.d.ts +0 -2
  53. package/types/websocket-api.spec.d.ts.map +0 -1
  54. package/types/websocket-integration.spec.d.ts +0 -2
  55. package/types/websocket-integration.spec.d.ts.map +0 -1
  56. package/types/websocket-user-context.spec.d.ts +0 -2
  57. package/types/websocket-user-context.spec.d.ts.map +0 -1
  58. /package/{dist → esm}/models/websocket-action.js.map +0 -0
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -8,14 +7,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
7
  var __metadata = (this && this.__metadata) || function (k, v) {
9
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
9
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.WhoAmI = void 0;
16
- const rest_service_1 = require("@furystack/rest-service");
17
- const inject_1 = require("@furystack/inject");
18
- const ws_1 = __importDefault(require("ws"));
10
+ import { HttpUserContext } from '@furystack/rest-service';
11
+ import { Injectable, Injected } from '@furystack/inject';
12
+ import ws from 'ws';
19
13
  /**
20
14
  * Example action that returns the current user instance
21
15
  */
@@ -37,15 +31,15 @@ let WhoAmI = class WhoAmI {
37
31
  }
38
32
  };
39
33
  __decorate([
40
- (0, inject_1.Injected)(rest_service_1.HttpUserContext),
41
- __metadata("design:type", rest_service_1.HttpUserContext)
34
+ Injected(HttpUserContext),
35
+ __metadata("design:type", HttpUserContext)
42
36
  ], WhoAmI.prototype, "httpUserContext", void 0);
43
37
  __decorate([
44
- (0, inject_1.Injected)(ws_1.default),
45
- __metadata("design:type", ws_1.default)
38
+ Injected(ws),
39
+ __metadata("design:type", ws)
46
40
  ], WhoAmI.prototype, "websocket", void 0);
47
41
  WhoAmI = __decorate([
48
- (0, inject_1.Injectable)({ lifetime: 'transient' })
42
+ Injectable({ lifetime: 'transient' })
49
43
  ], WhoAmI);
50
- exports.WhoAmI = WhoAmI;
44
+ export { WhoAmI };
51
45
  //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/actions/whoami.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EAAE,MAAM,IAAI,CAAA;AAInB;;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;AAJkB;IADhB,QAAQ,CAAC,eAAe,CAAC;8BACS,eAAe;+CAAA;AAGjC;IADhB,QAAQ,CAAC,EAAE,CAAC;8BACgB,EAAE;yCAAA;AArBpB,MAAM;IADlB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,MAAM,CAsBlB;SAtBY,MAAM"}
package/esm/helpers.js ADDED
@@ -0,0 +1,21 @@
1
+ import { WebSocketApi } from './websocket-api';
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 const useWebsockets = (injector, settings) => {
16
+ const s = new WebSocketApiSettings();
17
+ Object.assign(s, settings);
18
+ injector.setExplicitInstance(s, WebSocketApiSettings);
19
+ injector.getInstance(WebSocketApi).init();
20
+ };
21
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,QAAwC,EAAE,EAAE;IAC5F,MAAM,CAAC,GAAG,IAAI,oBAAoB,EAAE,CAAA;IACpC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC1B,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;IACrD,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC,CAAA"}
package/esm/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './websocket-api';
2
+ export * from './websocket-api-settings';
3
+ export * from './models';
4
+ export * from './helpers';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './websocket-action';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=websocket-action.js.map
@@ -1,14 +1,11 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
6
  };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.WebSocketApiSettings = void 0;
10
- const inject_1 = require("@furystack/inject");
11
- const whoami_1 = require("./actions/whoami");
7
+ import { Injectable } from '@furystack/inject';
8
+ import { WhoAmI } from './actions/whoami';
12
9
  /**
13
10
  * A configuration object for FuryStack WebSocket API
14
11
  */
@@ -16,11 +13,11 @@ let WebSocketApiSettings = class WebSocketApiSettings {
16
13
  constructor() {
17
14
  this.port = 19090;
18
15
  this.path = '/socket';
19
- this.actions = [whoami_1.WhoAmI];
16
+ this.actions = [WhoAmI];
20
17
  }
21
18
  };
22
19
  WebSocketApiSettings = __decorate([
23
- (0, inject_1.Injectable)({ lifetime: 'scoped' })
20
+ Injectable({ lifetime: 'scoped' })
24
21
  ], WebSocketApiSettings);
25
- exports.WebSocketApiSettings = WebSocketApiSettings;
22
+ export { WebSocketApiSettings };
26
23
  //# sourceMappingURL=websocket-api-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-api-settings.js","sourceRoot":"","sources":["../src/websocket-api-settings.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGzC;;GAEG;AAEH,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAAjC;QACS,SAAI,GAAG,KAAK,CAAA;QAEZ,SAAI,GAAG,SAAS,CAAA;QAChB,YAAO,GAAkE,CAAC,MAAM,CAAC,CAAA;IAC1F,CAAC;CAAA,CAAA;AALY,oBAAoB;IADhC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,oBAAoB,CAKhC;SALY,oBAAoB"}
@@ -1,52 +1,27 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
23
6
  };
24
- var __importStar = (this && this.__importStar) || function (mod) {
25
- if (mod && mod.__esModule) return mod;
26
- var result = {};
27
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
- __setModuleDefault(result, mod);
29
- return result;
30
- };
31
7
  var __metadata = (this && this.__metadata) || function (k, v) {
32
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
9
  };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.WebSocketApi = void 0;
36
- const url_1 = require("url");
37
- const http_1 = require("http");
38
- const rest_service_1 = require("@furystack/rest-service");
39
- const inject_1 = require("@furystack/inject");
40
- const ws_1 = __importStar(require("ws"));
41
- const websocket_api_settings_1 = require("./websocket-api-settings");
42
- const core_1 = require("@furystack/core");
43
- const websocket_user_context_1 = require("./websocket-user-context");
10
+ import { URL } from 'url';
11
+ import { IncomingMessage } from 'http';
12
+ import { ServerManager } from '@furystack/rest-service';
13
+ import { Injectable, Injected, Injector } from '@furystack/inject';
14
+ import { WebSocketServer } from 'ws';
15
+ import ws from 'ws';
16
+ import { WebSocketApiSettings } from './websocket-api-settings';
17
+ import { AggregatedError, IdentityContext } from '@furystack/core';
18
+ import { WebsocketUserContext } from './websocket-user-context';
44
19
  /**
45
20
  * A WebSocket API implementation for FuryStack
46
21
  */
47
22
  let WebSocketApi = class WebSocketApi {
48
23
  constructor() {
49
- this.socket = new ws_1.Server({ noServer: true });
24
+ this.socket = new WebSocketServer({ noServer: true });
50
25
  this.clients = new Map();
51
26
  this.isInitialized = false;
52
27
  }
@@ -54,9 +29,9 @@ let WebSocketApi = class WebSocketApi {
54
29
  if (!this.isInitialized) {
55
30
  this.socket.on('connection', (websocket, msg) => {
56
31
  const connectionInjector = this.injector.createChild({ owner: msg });
57
- connectionInjector.setExplicitInstance(websocket, ws_1.default);
58
- connectionInjector.setExplicitInstance(msg, http_1.IncomingMessage);
59
- connectionInjector.setExplicitInstance(connectionInjector.getInstance(websocket_user_context_1.WebsocketUserContext), core_1.IdentityContext);
32
+ connectionInjector.setExplicitInstance(websocket, ws);
33
+ connectionInjector.setExplicitInstance(msg, IncomingMessage);
34
+ connectionInjector.setExplicitInstance(connectionInjector.getInstance(WebsocketUserContext), IdentityContext);
60
35
  this.clients.set(websocket, { injector: connectionInjector, message: msg, ws: websocket });
61
36
  websocket.on('message', (message) => {
62
37
  this.execute(message, connectionInjector);
@@ -67,7 +42,7 @@ let WebSocketApi = class WebSocketApi {
67
42
  });
68
43
  this.serverManager.getOrCreate({ port: this.settings.port, hostName: this.settings.host }).then((server) => {
69
44
  server.server.on('upgrade', (request, socket, head) => {
70
- const { pathname } = new url_1.URL(request.url, `http://${request.headers.host}`);
45
+ const { pathname } = new URL(request.url, `http://${request.headers.host}`);
71
46
  if (pathname === this.settings.path) {
72
47
  this.socket.handleUpgrade(request, socket, head, (websocket) => {
73
48
  this.socket.emit('connection', websocket, request);
@@ -88,7 +63,7 @@ let WebSocketApi = class WebSocketApi {
88
63
  async broadcast(callback) {
89
64
  const errors = [];
90
65
  await Promise.all([...this.clients.values()]
91
- .filter((client) => client.ws.readyState === ws_1.default.OPEN)
66
+ .filter((client) => client.ws.readyState === ws.OPEN)
92
67
  .map(async (client) => {
93
68
  try {
94
69
  await callback(client);
@@ -98,7 +73,7 @@ let WebSocketApi = class WebSocketApi {
98
73
  }
99
74
  }));
100
75
  if (errors.length) {
101
- throw new core_1.AggregatedError('The Broadcast operation encountered some errors', errors);
76
+ throw new AggregatedError('The Broadcast operation encountered some errors', errors);
102
77
  }
103
78
  }
104
79
  execute(data, injector) {
@@ -110,19 +85,19 @@ let WebSocketApi = class WebSocketApi {
110
85
  }
111
86
  };
112
87
  __decorate([
113
- (0, inject_1.Injected)(websocket_api_settings_1.WebSocketApiSettings),
114
- __metadata("design:type", websocket_api_settings_1.WebSocketApiSettings)
88
+ Injected(WebSocketApiSettings),
89
+ __metadata("design:type", WebSocketApiSettings)
115
90
  ], WebSocketApi.prototype, "settings", void 0);
116
91
  __decorate([
117
- (0, inject_1.Injected)(rest_service_1.ServerManager),
118
- __metadata("design:type", rest_service_1.ServerManager)
92
+ Injected(ServerManager),
93
+ __metadata("design:type", ServerManager)
119
94
  ], WebSocketApi.prototype, "serverManager", void 0);
120
95
  __decorate([
121
- (0, inject_1.Injected)(inject_1.Injector),
122
- __metadata("design:type", inject_1.Injector)
96
+ Injected(Injector),
97
+ __metadata("design:type", Injector)
123
98
  ], WebSocketApi.prototype, "injector", void 0);
124
99
  WebSocketApi = __decorate([
125
- (0, inject_1.Injectable)({ lifetime: 'scoped' })
100
+ Injectable({ lifetime: 'scoped' })
126
101
  ], WebSocketApi);
127
- exports.WebSocketApi = WebSocketApi;
102
+ export { WebSocketApi };
128
103
  //# sourceMappingURL=websocket-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-api.js","sourceRoot":"","sources":["../src/websocket-api.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -8,11 +7,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
7
  var __metadata = (this && this.__metadata) || function (k, v) {
9
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
9
  };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.WebsocketUserContext = void 0;
13
- const http_1 = require("http");
14
- const inject_1 = require("@furystack/inject");
15
- const rest_service_1 = require("@furystack/rest-service");
10
+ import { IncomingMessage } from 'http';
11
+ import { Injectable, Injected, Injector } from '@furystack/inject';
12
+ import { HttpUserContext } from '@furystack/rest-service';
16
13
  let WebsocketUserContext = class WebsocketUserContext {
17
14
  async isAuthenticated() {
18
15
  try {
@@ -38,17 +35,17 @@ let WebsocketUserContext = class WebsocketUserContext {
38
35
  }
39
36
  async getCurrentUser() {
40
37
  const user = await this.injector
41
- .getInstance(rest_service_1.HttpUserContext)
42
- .authenticateRequest(this.injector.getInstance(http_1.IncomingMessage));
38
+ .getInstance(HttpUserContext)
39
+ .authenticateRequest(this.injector.getInstance(IncomingMessage));
43
40
  return user;
44
41
  }
45
42
  };
46
43
  __decorate([
47
- (0, inject_1.Injected)(inject_1.Injector),
48
- __metadata("design:type", inject_1.Injector)
44
+ Injected(Injector),
45
+ __metadata("design:type", Injector)
49
46
  ], WebsocketUserContext.prototype, "injector", void 0);
50
47
  WebsocketUserContext = __decorate([
51
- (0, inject_1.Injectable)({ lifetime: 'scoped' })
48
+ Injectable({ lifetime: 'scoped' })
52
49
  ], WebsocketUserContext);
53
- exports.WebsocketUserContext = WebsocketUserContext;
50
+ export { WebsocketUserContext };
54
51
  //# sourceMappingURL=websocket-user-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-user-context.js","sourceRoot":"","sources":["../src/websocket-user-context.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;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,eAAe,CAAC;aAC5B,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAA;QAClE,OAAO,IAAa,CAAA;IACtB,CAAC;CAIF,CAAA;AADkB;IADhB,QAAQ,CAAC,QAAQ,CAAC;8BACS,QAAQ;sDAAA;AA7BzB,oBAAoB;IADhC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,oBAAoB,CA8BhC;SA9BY,oBAAoB"}
package/package.json CHANGED
@@ -1,10 +1,27 @@
1
1
  {
2
2
  "name": "@furystack/websocket-api",
3
- "version": "8.1.23",
3
+ "version": "9.0.1",
4
4
  "description": "HTTP Api FuryStack package",
5
- "main": "dist/index.js",
5
+ "type": "module",
6
+ "scripts": {
7
+ "build:es6": "tsc --outDir ./esm"
8
+ },
9
+ "exports": {
10
+ ".": {
11
+ "import": "./esm/index.js",
12
+ "types": "./types/index.d.ts"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "typesVersions": {
17
+ "*": {
18
+ "*": [
19
+ "types/*"
20
+ ]
21
+ }
22
+ },
6
23
  "files": [
7
- "dist",
24
+ "esm",
8
25
  "types",
9
26
  "src"
10
27
  ],
@@ -26,16 +43,16 @@
26
43
  },
27
44
  "homepage": "https://github.com/furystack/furystack",
28
45
  "dependencies": {
29
- "@furystack/core": "^11.3.1",
30
- "@furystack/inject": "^7.1.9",
31
- "@furystack/rest-service": "^6.2.23",
32
- "@furystack/utils": "^3.1.8",
46
+ "@furystack/core": "^12.0.1",
47
+ "@furystack/inject": "^8.0.1",
48
+ "@furystack/rest-service": "^7.0.1",
49
+ "@furystack/utils": "^4.0.1",
33
50
  "ws": "^8.13.0"
34
51
  },
35
52
  "devDependencies": {
36
- "@types/jest": "^29.5.0",
37
- "@types/ws": "^8.5.4"
53
+ "@types/ws": "^8.5.4",
54
+ "typescript": "^5.0.4",
55
+ "vitest": "^0.30.1"
38
56
  },
39
- "typings": "./types/index.d.ts",
40
57
  "gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
41
58
  }
@@ -4,6 +4,7 @@ import ws from 'ws'
4
4
  import { usingAsync } from '@furystack/utils'
5
5
  import type { IncomingMessage } from 'http'
6
6
  import { Injector } from '@furystack/inject'
7
+ import { describe, it, expect, vi } from 'vitest'
7
8
 
8
9
  describe('Whoami action', () => {
9
10
  const currentUser = { username: 'testuser' }
@@ -12,7 +13,7 @@ describe('Whoami action', () => {
12
13
  const request = { url: 'https://google.com' } as IncomingMessage
13
14
 
14
15
  const wsMock: ws = {
15
- send: jest.fn(() => undefined),
16
+ send: vi.fn(() => undefined),
16
17
  } as unknown as ws
17
18
 
18
19
  it('cannot be executed if data does not match', () => {
@@ -2,6 +2,7 @@ import { usingAsync } from '@furystack/utils'
2
2
  import { Injector } from '@furystack/inject'
3
3
  import { useWebsockets } from './helpers'
4
4
  import { WebSocketApi, WebSocketApiSettings } from '.'
5
+ import { describe, it, expect } from 'vitest'
5
6
 
6
7
  describe('WebSocket Helpers', () => {
7
8
  it('Should register the related services', async () => {
package/src/helpers.ts CHANGED
@@ -7,11 +7,10 @@ import { WebSocketApiSettings } from './websocket-api-settings'
7
7
  * Usage example:
8
8
  * ````ts
9
9
  * injector.useWebsockets({
10
- * path: "/sockets",
11
- * actions: [...my custom actions]
10
+ * path: "/sockets",
11
+ * actions: [...my custom actions]
12
12
  * })
13
13
  * ````
14
- *
15
14
  * @param injector The injector instance
16
15
  * @param settings The Settings object for the WebSocket API
17
16
  */
@@ -4,6 +4,7 @@ import { WebSocketApi } from './websocket-api'
4
4
  import WebSocket from 'ws'
5
5
  import type { WebSocketAction } from './models'
6
6
  import { useWebsockets } from './helpers'
7
+ import { describe, it, expect } from 'vitest'
7
8
 
8
9
  describe('WebSocketApi', () => {
9
10
  it('Should be built', async () => {
@@ -5,7 +5,8 @@ import { ServerManager } from '@furystack/rest-service'
5
5
  import { Injectable, Injected, Injector } from '@furystack/inject'
6
6
  import type { Disposable } from '@furystack/utils'
7
7
  import type { Data } from 'ws'
8
- import ws, { Server as WebSocketServer } from 'ws'
8
+ import { WebSocketServer } from 'ws'
9
+ import ws from 'ws'
9
10
  import { WebSocketApiSettings } from './websocket-api-settings'
10
11
  import type { WebSocketAction } from './models'
11
12
  import { AggregatedError, IdentityContext } from '@furystack/core'
@@ -5,6 +5,7 @@ import { addStore, InMemoryStore, User } from '@furystack/core'
5
5
  import { DefaultSession, ServerManager, useHttpAuthentication } from '@furystack/rest-service'
6
6
  import { useRestService } from '@furystack/rest-service'
7
7
  import { useWebsockets } from './helpers'
8
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest'
8
9
 
9
10
  describe('WebSocket Integration tests', () => {
10
11
  const host = 'localhost'
@@ -13,7 +14,7 @@ describe('WebSocket Integration tests', () => {
13
14
  let i!: Injector
14
15
  let client: ws
15
16
 
16
- beforeEach((done) => {
17
+ beforeEach(async () => {
17
18
  i = new Injector()
18
19
  useRestService({
19
20
  injector: i,
@@ -27,28 +28,33 @@ describe('WebSocket Integration tests', () => {
27
28
  )
28
29
  useHttpAuthentication(i, {})
29
30
  useWebsockets(i, { actions: [WhoAmI], path, port, host })
30
- i.getInstance(ServerManager)
31
- .getOrCreate({ port })
32
- .then(() => {
33
- client = new ws(`ws://${host}:${port}/ws`)
34
- client
35
- .on('open', () => {
36
- done()
37
- })
38
- .on('error', done)
39
- })
31
+
32
+ await new Promise<void>((done, reject) => {
33
+ i.getInstance(ServerManager)
34
+ .getOrCreate({ port })
35
+ .then(() => {
36
+ client = new ws(`ws://${host}:${port}/ws`)
37
+ client
38
+ .on('open', () => {
39
+ done()
40
+ })
41
+ .on('error', reject)
42
+ })
43
+ })
40
44
  })
41
45
 
42
46
  afterEach(async () => {
43
47
  await i.dispose()
44
48
  })
45
49
 
46
- it('Should be connected', (done) => {
47
- client.on('message', (data) => {
48
- expect(data.toString()).toBe('{"currentUser":null}')
49
- client.close()
50
- done()
50
+ it('Should be connected', async () => {
51
+ await new Promise<void>((done) => {
52
+ client.on('message', (data) => {
53
+ expect(data.toString()).toBe('{"currentUser":null}')
54
+ client.close()
55
+ done()
56
+ })
57
+ client.send('whoami')
51
58
  })
52
- client.send('whoami')
53
59
  })
54
60
  })
@@ -4,6 +4,7 @@ import '.'
4
4
  import { HttpUserContext } from '@furystack/rest-service'
5
5
  import { usingAsync } from '@furystack/utils'
6
6
  import { WebsocketUserContext } from './websocket-user-context'
7
+ import { describe, it, expect, vi } from 'vitest'
7
8
 
8
9
  describe('WebSocket User Context', () => {
9
10
  const mockUser = { username: 'mock@gmail.com', roles: [] }
@@ -12,7 +13,7 @@ describe('WebSocket User Context', () => {
12
13
  describe('isAuthenticated', () => {
13
14
  it('should authenticate with HttpUserContext and the IncomingMessage', async () => {
14
15
  await usingAsync(new Injector(), async (i) => {
15
- const authFn = jest.fn(async () => mockUser)
16
+ const authFn = vi.fn(async () => mockUser)
16
17
  const incomingMessage = {}
17
18
  i.setExplicitInstance(incomingMessage, IncomingMessage)
18
19
  i.setExplicitInstance({ authenticateRequest: authFn }, HttpUserContext)
@@ -24,7 +25,7 @@ describe('WebSocket User Context', () => {
24
25
 
25
26
  it('should return false if HttpUserContext throws', async () => {
26
27
  await usingAsync(new Injector(), async (i) => {
27
- const authFn = jest.fn(() => Promise.reject('Hey! No user here!'))
28
+ const authFn = vi.fn(() => Promise.reject('Hey! No user here!'))
28
29
  const incomingMessage = {}
29
30
  i.setExplicitInstance(incomingMessage, IncomingMessage)
30
31
  i.setExplicitInstance({ authenticateRequest: authFn }, HttpUserContext)
@@ -38,7 +39,7 @@ describe('WebSocket User Context', () => {
38
39
  describe('isAuthorized', () => {
39
40
  it('should return true if the user has the role', async () => {
40
41
  await usingAsync(new Injector(), async (i) => {
41
- const authFn = jest.fn(async () => mockAdmin)
42
+ const authFn = vi.fn(async () => mockAdmin)
42
43
  const incomingMessage = {}
43
44
  i.setExplicitInstance(incomingMessage, IncomingMessage)
44
45
  i.setExplicitInstance({ authenticateRequest: authFn }, HttpUserContext)
@@ -49,7 +50,7 @@ describe('WebSocket User Context', () => {
49
50
 
50
51
  it('should return false if the user does not have the role', async () => {
51
52
  await usingAsync(new Injector(), async (i) => {
52
- const authFn = jest.fn(async () => mockUser)
53
+ const authFn = vi.fn(async () => mockUser)
53
54
  const incomingMessage = {}
54
55
  i.setExplicitInstance(incomingMessage, IncomingMessage)
55
56
  i.setExplicitInstance({ authenticateRequest: authFn }, HttpUserContext)
@@ -60,7 +61,7 @@ describe('WebSocket User Context', () => {
60
61
 
61
62
  it('should return false if getting the current user throws', async () => {
62
63
  await usingAsync(new Injector(), async (i) => {
63
- const authFn = jest.fn(() => Promise.reject('Hey! No user here!'))
64
+ const authFn = vi.fn(() => Promise.reject('Hey! No user here!'))
64
65
  const incomingMessage = {}
65
66
  i.setExplicitInstance(incomingMessage, IncomingMessage)
66
67
  i.setExplicitInstance({ authenticateRequest: authFn }, HttpUserContext)
@@ -5,11 +5,10 @@ import { WebSocketApiSettings } from './websocket-api-settings';
5
5
  * Usage example:
6
6
  * ````ts
7
7
  * injector.useWebsockets({
8
- * path: "/sockets",
9
- * actions: [...my custom actions]
8
+ * path: "/sockets",
9
+ * actions: [...my custom actions]
10
10
  * })
11
11
  * ````
12
- *
13
12
  * @param injector The injector instance
14
13
  * @param settings The Settings object for the WebSocket API
15
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,aAAc,QAAQ,aAAa,QAAQ,oBAAoB,CAAC,SAKzF,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,aAAc,QAAQ,aAAa,QAAQ,oBAAoB,CAAC,SAKzF,CAAA"}
@@ -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;AAEtC,OAAO,EAAwB,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,EAAiC,MAAM,IAAI,CAAA;AAMlD;;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
+ {"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,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAE9B,OAAO,EAAE,MAAM,IAAI,CAAA;AAMnB;;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 +0,0 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/actions/whoami.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,0DAAyD;AACzD,8CAAwD;AAExD,4CAAmB;AAInB;;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;AAJkB;IADhB,IAAA,iBAAQ,EAAC,8BAAe,CAAC;8BACS,8BAAe;+CAAA;AAGjC;IADhB,IAAA,iBAAQ,EAAC,YAAE,CAAC;8BACgB,YAAE;yCAAA;AArBpB,MAAM;IADlB,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,MAAM,CAsBlB;AAtBY,wBAAM"}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const whoami_1 = require("./whoami");
7
- const rest_service_1 = require("@furystack/rest-service");
8
- const ws_1 = __importDefault(require("ws"));
9
- const utils_1 = require("@furystack/utils");
10
- const inject_1 = require("@furystack/inject");
11
- describe('Whoami action', () => {
12
- const currentUser = { username: 'testuser' };
13
- const contextMock = { getCurrentUser: async () => currentUser };
14
- const request = { url: 'https://google.com' };
15
- const wsMock = {
16
- send: jest.fn(() => undefined),
17
- };
18
- it('cannot be executed if data does not match', () => {
19
- expect(whoami_1.WhoAmI.canExecute({ request, data: 'asd' })).toBeFalsy();
20
- });
21
- it('can be executed with whoami', () => {
22
- expect(whoami_1.WhoAmI.canExecute({ request, data: 'whoami' })).toBeTruthy();
23
- });
24
- it('can be executed with whoami /claims', () => {
25
- expect(whoami_1.WhoAmI.canExecute({ request, data: 'whoami /claims' })).toBeTruthy();
26
- });
27
- it('Should return the current user', async () => {
28
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (injector) => {
29
- injector.setExplicitInstance(contextMock, rest_service_1.HttpUserContext);
30
- injector.setExplicitInstance(wsMock, ws_1.default);
31
- const instance = injector.getInstance(whoami_1.WhoAmI);
32
- await instance.execute({ request, data: '' });
33
- expect(wsMock.send).toBeCalledWith(JSON.stringify({ currentUser }));
34
- });
35
- });
36
- });
37
- //# sourceMappingURL=whoami.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.spec.js","sourceRoot":"","sources":["../../src/actions/whoami.spec.ts"],"names":[],"mappings":";;;;;AAAA,qCAAiC;AACjC,0DAAyD;AACzD,4CAAmB;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 DELETED
@@ -1,26 +0,0 @@
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
- *
16
- * @param injector The injector instance
17
- * @param settings The Settings object for the WebSocket API
18
- */
19
- const useWebsockets = (injector, settings) => {
20
- const s = new websocket_api_settings_1.WebSocketApiSettings();
21
- Object.assign(s, settings);
22
- injector.setExplicitInstance(s, websocket_api_settings_1.WebSocketApiSettings);
23
- injector.getInstance(websocket_api_1.WebSocketApi).init();
24
- };
25
- exports.useWebsockets = useWebsockets;
26
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
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 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("@furystack/utils");
4
- const inject_1 = require("@furystack/inject");
5
- const helpers_1 = require("./helpers");
6
- const _1 = require(".");
7
- describe('WebSocket Helpers', () => {
8
- it('Should register the related services', async () => {
9
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
10
- (0, helpers_1.useWebsockets)(i);
11
- expect(i.cachedSingletons.has(_1.WebSocketApiSettings)).toBeTruthy();
12
- expect(i.cachedSingletons.has(_1.WebSocketApi)).toBeTruthy();
13
- });
14
- });
15
- });
16
- //# sourceMappingURL=helpers.spec.js.map
@@ -1 +0,0 @@
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 DELETED
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./websocket-api"), exports);
18
- __exportStar(require("./websocket-api-settings"), exports);
19
- __exportStar(require("./models"), exports);
20
- __exportStar(require("./helpers"), exports);
21
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,2DAAwC;AACxC,2CAAwB;AACxB,4CAAyB"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./websocket-action"), exports);
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAkC"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=websocket-action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-api-settings.js","sourceRoot":"","sources":["../src/websocket-api-settings.ts"],"names":[],"mappings":";;;;;;;;;AACA,8CAA8C;AAC9C,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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-api.js","sourceRoot":"","sources":["../src/websocket-api.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const inject_1 = require("@furystack/inject");
13
- const utils_1 = require("@furystack/utils");
14
- const websocket_api_1 = require("./websocket-api");
15
- const ws_1 = __importDefault(require("ws"));
16
- const helpers_1 = require("./helpers");
17
- describe('WebSocketApi', () => {
18
- it('Should be built', async () => {
19
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
20
- (0, helpers_1.useWebsockets)(i, { port: 19998 });
21
- expect(i.getInstance(websocket_api_1.WebSocketApi)).toBeInstanceOf(websocket_api_1.WebSocketApi);
22
- });
23
- });
24
- it('Should be built with settings', async () => {
25
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
26
- (0, helpers_1.useWebsockets)(i, { path: '/web-socket', port: 19996 });
27
- expect(i.getInstance(websocket_api_1.WebSocketApi)).toBeInstanceOf(websocket_api_1.WebSocketApi);
28
- });
29
- });
30
- it('Should broadcast messages', async () => {
31
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
32
- expect.assertions(4); // All 4 clients should receive the message
33
- (0, helpers_1.useWebsockets)(i, { path: '/web-socket', port: 19994 });
34
- const api = i.getInstance(websocket_api_1.WebSocketApi);
35
- await Promise.all([1, 2, 3, 4, 5].map(async (idx) => {
36
- const client = new ws_1.default('ws://localhost:19994/web-socket');
37
- await new Promise((resolve) => client.once('open', () => {
38
- if (idx === 5) {
39
- client.close();
40
- client.terminate();
41
- }
42
- resolve();
43
- }));
44
- client.once('message', (data) => {
45
- expect(data.toString()).toBe('alma');
46
- });
47
- await api.broadcast(({ ws }) => {
48
- ws.send('alma');
49
- });
50
- client.close();
51
- await new Promise((resolve) => client.once('close', () => resolve()));
52
- }));
53
- });
54
- });
55
- it('Should receive client messages', async () => {
56
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
57
- expect.assertions(1);
58
- const data = { value: 'alma' };
59
- let ExampleWsAction = class ExampleWsAction {
60
- dispose() {
61
- /** */
62
- }
63
- static canExecute() {
64
- return true;
65
- }
66
- async execute(incomingData) {
67
- expect(JSON.parse(incomingData.data.toString())).toEqual(data);
68
- }
69
- };
70
- ExampleWsAction = __decorate([
71
- (0, inject_1.Injectable)()
72
- ], ExampleWsAction);
73
- (0, helpers_1.useWebsockets)(i, { path: '/web-socket', port: 19995, actions: [ExampleWsAction] });
74
- const client = new ws_1.default('ws://localhost:19995/web-socket');
75
- await new Promise((resolve) => client.once('open', () => resolve()));
76
- await new Promise((resolve, reject) => client.send(JSON.stringify(data), (err) => (err ? reject(err) : resolve())));
77
- client.close();
78
- await new Promise((resolve) => client.once('close', () => resolve()));
79
- });
80
- });
81
- });
82
- //# sourceMappingURL=websocket-api.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-api.spec.js","sourceRoot":"","sources":["../src/websocket-api.spec.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const inject_1 = require("@furystack/inject");
7
- const whoami_1 = require("./actions/whoami");
8
- const ws_1 = __importDefault(require("ws"));
9
- const core_1 = require("@furystack/core");
10
- const rest_service_1 = require("@furystack/rest-service");
11
- const rest_service_2 = require("@furystack/rest-service");
12
- const helpers_1 = require("./helpers");
13
- describe('WebSocket Integration tests', () => {
14
- const host = 'localhost';
15
- const port = 9999;
16
- const path = '/ws';
17
- let i;
18
- let client;
19
- beforeEach((done) => {
20
- i = new inject_1.Injector();
21
- (0, rest_service_2.useRestService)({
22
- injector: i,
23
- api: {},
24
- root: '',
25
- port,
26
- hostName: host,
27
- });
28
- (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' }));
29
- (0, rest_service_1.useHttpAuthentication)(i, {});
30
- (0, helpers_1.useWebsockets)(i, { actions: [whoami_1.WhoAmI], path, port, host });
31
- i.getInstance(rest_service_1.ServerManager)
32
- .getOrCreate({ port })
33
- .then(() => {
34
- client = new ws_1.default(`ws://${host}:${port}/ws`);
35
- client
36
- .on('open', () => {
37
- done();
38
- })
39
- .on('error', done);
40
- });
41
- });
42
- afterEach(async () => {
43
- await i.dispose();
44
- });
45
- it('Should be connected', (done) => {
46
- client.on('message', (data) => {
47
- expect(data.toString()).toBe('{"currentUser":null}');
48
- client.close();
49
- done();
50
- });
51
- client.send('whoami');
52
- });
53
- });
54
- //# sourceMappingURL=websocket-integration.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-integration.spec.js","sourceRoot":"","sources":["../src/websocket-integration.spec.ts"],"names":[],"mappings":";;;;;AAAA,8CAA4C;AAC5C,6CAAyC;AACzC,4CAAmB;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"}
@@ -1 +0,0 @@
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;AADkB;IADhB,IAAA,iBAAQ,EAAC,iBAAQ,CAAC;8BACS,iBAAQ;sDAAA;AA7BzB,oBAAoB;IADhC,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,oBAAoB,CA8BhC;AA9BY,oDAAoB"}
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const inject_1 = require("@furystack/inject");
4
- const http_1 = require("http");
5
- require(".");
6
- const rest_service_1 = require("@furystack/rest-service");
7
- const utils_1 = require("@furystack/utils");
8
- const websocket_user_context_1 = require("./websocket-user-context");
9
- describe('WebSocket User Context', () => {
10
- const mockUser = { username: 'mock@gmail.com', roles: [] };
11
- const mockAdmin = { username: 'mock@gmail.com', roles: ['admin'] };
12
- describe('isAuthenticated', () => {
13
- it('should authenticate with HttpUserContext and the IncomingMessage', async () => {
14
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
15
- const authFn = jest.fn(async () => mockUser);
16
- const incomingMessage = {};
17
- i.setExplicitInstance(incomingMessage, http_1.IncomingMessage);
18
- i.setExplicitInstance({ authenticateRequest: authFn }, rest_service_1.HttpUserContext);
19
- const authResult = await i.getInstance(websocket_user_context_1.WebsocketUserContext).isAuthenticated();
20
- expect(authResult).toBeTruthy();
21
- expect(authFn).toBeCalledWith(incomingMessage);
22
- });
23
- });
24
- it('should return false if HttpUserContext throws', async () => {
25
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
26
- const authFn = jest.fn(() => Promise.reject('Hey! No user here!'));
27
- const incomingMessage = {};
28
- i.setExplicitInstance(incomingMessage, http_1.IncomingMessage);
29
- i.setExplicitInstance({ authenticateRequest: authFn }, rest_service_1.HttpUserContext);
30
- const authResult = await i.getInstance(websocket_user_context_1.WebsocketUserContext).isAuthenticated();
31
- expect(authResult).toBeFalsy();
32
- expect(authFn).toBeCalledWith(incomingMessage);
33
- });
34
- });
35
- });
36
- describe('isAuthorized', () => {
37
- it('should return true if the user has the role', async () => {
38
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
39
- const authFn = jest.fn(async () => mockAdmin);
40
- const incomingMessage = {};
41
- i.setExplicitInstance(incomingMessage, http_1.IncomingMessage);
42
- i.setExplicitInstance({ authenticateRequest: authFn }, rest_service_1.HttpUserContext);
43
- const authResult = await i.getInstance(websocket_user_context_1.WebsocketUserContext).isAuthorized('admin');
44
- expect(authResult).toBe(true);
45
- });
46
- });
47
- it('should return false if the user does not have the role', async () => {
48
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
49
- const authFn = jest.fn(async () => mockUser);
50
- const incomingMessage = {};
51
- i.setExplicitInstance(incomingMessage, http_1.IncomingMessage);
52
- i.setExplicitInstance({ authenticateRequest: authFn }, rest_service_1.HttpUserContext);
53
- const authResult = await i.getInstance(websocket_user_context_1.WebsocketUserContext).isAuthorized('admin');
54
- expect(authResult).toBe(false);
55
- });
56
- });
57
- it('should return false if getting the current user throws', async () => {
58
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
59
- const authFn = jest.fn(() => Promise.reject('Hey! No user here!'));
60
- const incomingMessage = {};
61
- i.setExplicitInstance(incomingMessage, http_1.IncomingMessage);
62
- i.setExplicitInstance({ authenticateRequest: authFn }, rest_service_1.HttpUserContext);
63
- const authResult = await i.getInstance(websocket_user_context_1.WebsocketUserContext).isAuthorized('admin');
64
- expect(authResult).toBe(false);
65
- });
66
- });
67
- });
68
- });
69
- //# sourceMappingURL=websocket-user-context.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-user-context.spec.js","sourceRoot":"","sources":["../src/websocket-user-context.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=whoami.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whoami.spec.d.ts","sourceRoot":"","sources":["../../src/actions/whoami.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=helpers.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.spec.d.ts","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=websocket-api.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-api.spec.d.ts","sourceRoot":"","sources":["../src/websocket-api.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=websocket-integration.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-integration.spec.d.ts","sourceRoot":"","sources":["../src/websocket-integration.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import '.';
2
- //# sourceMappingURL=websocket-user-context.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-user-context.spec.d.ts","sourceRoot":"","sources":["../src/websocket-user-context.spec.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,CAAA"}
File without changes