quidproquo-dev-server 0.0.240 → 0.0.241

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 (79) hide show
  1. package/lib/commonjs/actionProcessor/core/event/index.d.ts +1 -0
  2. package/lib/commonjs/actionProcessor/core/event/index.js +1 -0
  3. package/lib/commonjs/actionProcessor/core/event/queue/getEventMatchStoryActionProcessor.js +0 -1
  4. package/lib/commonjs/actionProcessor/core/event/ws/index.d.ts +1 -0
  5. package/lib/commonjs/actionProcessor/core/event/ws/index.js +17 -0
  6. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.d.ts +2 -0
  7. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.js +24 -0
  8. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.d.ts +2 -0
  9. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.js +53 -0
  10. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.d.ts +2 -0
  11. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.js +24 -0
  12. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.d.ts +2 -0
  13. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.js +41 -0
  14. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.d.ts +2 -0
  15. package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.js +29 -0
  16. package/lib/commonjs/actionProcessor/core/event/ws/websocket/index.d.ts +2 -0
  17. package/lib/commonjs/actionProcessor/core/event/ws/websocket/index.js +21 -0
  18. package/lib/commonjs/actionProcessor/core/event/ws/websocket/types.d.ts +8 -0
  19. package/lib/commonjs/actionProcessor/core/event/ws/websocket/types.js +2 -0
  20. package/lib/commonjs/actionProcessor/webserver/index.js +2 -1
  21. package/lib/commonjs/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.d.ts +2 -0
  22. package/lib/commonjs/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.js +35 -0
  23. package/lib/commonjs/actionProcessor/webserver/websocket/index.d.ts +2 -0
  24. package/lib/commonjs/actionProcessor/webserver/websocket/index.js +17 -0
  25. package/lib/commonjs/implementations/eventBusImplementation.js +55 -37
  26. package/lib/commonjs/implementations/index.d.ts +1 -1
  27. package/lib/commonjs/implementations/index.js +1 -1
  28. package/lib/commonjs/implementations/queueImplementation.js +45 -3
  29. package/lib/commonjs/implementations/webSocket/index.d.ts +2 -0
  30. package/lib/commonjs/implementations/webSocket/index.js +18 -0
  31. package/lib/commonjs/implementations/webSocket/types/WsEvent.d.ts +13 -0
  32. package/lib/commonjs/implementations/webSocket/types/WsEvent.js +2 -0
  33. package/lib/commonjs/implementations/webSocket/types/index.d.ts +1 -0
  34. package/lib/commonjs/implementations/webSocket/types/index.js +17 -0
  35. package/lib/commonjs/implementations/webSocket/webSocketImplementation.d.ts +3 -0
  36. package/lib/commonjs/implementations/webSocket/webSocketImplementation.js +134 -0
  37. package/lib/commonjs/logic/eventBus.js +3 -0
  38. package/lib/esm/actionProcessor/core/event/index.d.ts +1 -0
  39. package/lib/esm/actionProcessor/core/event/index.js +1 -0
  40. package/lib/esm/actionProcessor/core/event/queue/getEventMatchStoryActionProcessor.js +0 -1
  41. package/lib/esm/actionProcessor/core/event/ws/index.d.ts +1 -0
  42. package/lib/esm/actionProcessor/core/event/ws/index.js +1 -0
  43. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.d.ts +2 -0
  44. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.js +9 -0
  45. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.d.ts +2 -0
  46. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.js +38 -0
  47. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.d.ts +2 -0
  48. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.js +9 -0
  49. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.d.ts +2 -0
  50. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.js +26 -0
  51. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.d.ts +2 -0
  52. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.js +14 -0
  53. package/lib/esm/actionProcessor/core/event/ws/websocket/index.d.ts +2 -0
  54. package/lib/esm/actionProcessor/core/event/ws/websocket/index.js +12 -0
  55. package/lib/esm/actionProcessor/core/event/ws/websocket/types.d.ts +8 -0
  56. package/lib/esm/actionProcessor/core/event/ws/websocket/types.js +1 -0
  57. package/lib/esm/actionProcessor/webserver/index.js +2 -0
  58. package/lib/esm/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.d.ts +2 -0
  59. package/lib/esm/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.js +19 -0
  60. package/lib/esm/actionProcessor/webserver/websocket/index.d.ts +2 -0
  61. package/lib/esm/actionProcessor/webserver/websocket/index.js +4 -0
  62. package/lib/esm/implementations/eventBusImplementation.js +54 -34
  63. package/lib/esm/implementations/index.d.ts +1 -1
  64. package/lib/esm/implementations/index.js +1 -1
  65. package/lib/esm/implementations/queueImplementation.js +44 -4
  66. package/lib/esm/implementations/webSocket/index.d.ts +2 -0
  67. package/lib/esm/implementations/webSocket/index.js +2 -0
  68. package/lib/esm/implementations/webSocket/types/WsEvent.d.ts +13 -0
  69. package/lib/esm/implementations/webSocket/types/WsEvent.js +1 -0
  70. package/lib/esm/implementations/webSocket/types/index.d.ts +1 -0
  71. package/lib/esm/implementations/webSocket/types/index.js +1 -0
  72. package/lib/esm/implementations/webSocket/webSocketImplementation.d.ts +3 -0
  73. package/lib/esm/implementations/webSocket/webSocketImplementation.js +123 -0
  74. package/lib/esm/logic/eventBus.js +3 -0
  75. package/package.json +6 -6
  76. package/lib/commonjs/implementations/webSocketImplementation.d.ts +0 -2
  77. package/lib/commonjs/implementations/webSocketImplementation.js +0 -63
  78. package/lib/esm/implementations/webSocketImplementation.d.ts +0 -2
  79. package/lib/esm/implementations/webSocketImplementation.js +0 -50
@@ -0,0 +1,123 @@
1
+ import { qpqCoreUtils, QpqRuntimeType } from 'quidproquo-core';
2
+ import { qpqWebServerUtils, WebSocketEventType } from 'quidproquo-webserver';
3
+ import { createServer } from 'http';
4
+ import { WebSocketServer } from 'ws';
5
+ import { getWsWebsocketEventEventProcessor } from '../../actionProcessor';
6
+ import { processEvent } from '../../logic';
7
+ const getDynamicModuleLoader = (qpqConfig, devServerConfig) => {
8
+ const serviceName = qpqCoreUtils.getApplicationModuleName(qpqConfig);
9
+ return async (runtime) => devServerConfig.dynamicModuleLoader(serviceName, runtime);
10
+ };
11
+ const globals = {
12
+ allServers: [],
13
+ };
14
+ const findConnection = (service, apiName) => {
15
+ const serverInfo = globals.allServers.find((s) => s.service === service && s.apiName === apiName);
16
+ return serverInfo;
17
+ };
18
+ export const sendMessageToWebSocketConnection = async (service, websocketApiName, connectionId, payload) => {
19
+ const wsConnection = findConnection(service, websocketApiName)?.connections?.[connectionId];
20
+ if (!wsConnection) {
21
+ return;
22
+ }
23
+ wsConnection.send(JSON.stringify(payload));
24
+ };
25
+ const startServer = (settingsMap, devServerConfig) => {
26
+ const webSocketServer = new WebSocketServer({ noServer: true });
27
+ console.log(`WebSocket: ws://${devServerConfig.serverDomain}:${devServerConfig.webSocketPort}/${settingsMap.service}/${settingsMap.apiName}`);
28
+ webSocketServer.on('connection', (ws, req) => {
29
+ const connectionId = req.headers['sec-websocket-key'] || crypto.randomUUID();
30
+ const sourceIp = req.socket.remoteAddress === '::1' || !req.socket.remoteAddress ? '127.0.0.1' : req.socket.remoteAddress;
31
+ const userAgent = req.headers['user-agent'] || 'unknown agent';
32
+ const server = findConnection(settingsMap.service, settingsMap.apiName);
33
+ server.connections[connectionId] = ws;
34
+ const processWsEvent = (wsEvent) => processEvent(wsEvent, settingsMap.qpqConfig, getDynamicModuleLoader(settingsMap.qpqConfig, devServerConfig), getWsWebsocketEventEventProcessor, QpqRuntimeType.WEBSOCKET_EVENT);
35
+ const onConnectEvent = {
36
+ apiName: settingsMap.apiName,
37
+ service: settingsMap.service,
38
+ eventType: WebSocketEventType.Connect,
39
+ body: undefined,
40
+ messageId: crypto.randomUUID(),
41
+ connectionId: connectionId,
42
+ requestTimeEpoch: Date.now(),
43
+ sourceIp: sourceIp,
44
+ userAgent: userAgent,
45
+ };
46
+ processWsEvent(onConnectEvent);
47
+ ws.on('error', console.error);
48
+ ws.on('message', (data, isBinary) => {
49
+ console.log('isBinary: ', isBinary);
50
+ const onMessageEvent = {
51
+ apiName: settingsMap.apiName,
52
+ service: settingsMap.service,
53
+ eventType: WebSocketEventType.Message,
54
+ body: data,
55
+ messageId: crypto.randomUUID(),
56
+ connectionId: connectionId,
57
+ requestTimeEpoch: Date.now(),
58
+ sourceIp: sourceIp,
59
+ userAgent: userAgent,
60
+ };
61
+ processWsEvent(onMessageEvent);
62
+ });
63
+ ws.on('close', () => {
64
+ delete server.connections[connectionId];
65
+ const onCloseEvent = {
66
+ apiName: settingsMap.apiName,
67
+ service: settingsMap.service,
68
+ eventType: WebSocketEventType.Disconnect,
69
+ body: undefined,
70
+ messageId: crypto.randomUUID(),
71
+ connectionId: connectionId,
72
+ requestTimeEpoch: Date.now(),
73
+ sourceIp: sourceIp,
74
+ userAgent: userAgent,
75
+ };
76
+ processWsEvent(onCloseEvent);
77
+ });
78
+ });
79
+ return {
80
+ ...settingsMap,
81
+ server: webSocketServer,
82
+ connections: {},
83
+ };
84
+ };
85
+ const getWebSocketQPQWebServerConfigSettingMaps = (qpqConfigs) => {
86
+ return qpqConfigs
87
+ .flatMap((qpqConfig) => {
88
+ const service = qpqCoreUtils.getApplicationModuleName(qpqConfig);
89
+ return qpqWebServerUtils.getWebsocketSettings(qpqConfig).flatMap((wsc) => {
90
+ const item = {
91
+ apiName: wsc.apiName,
92
+ service,
93
+ setting: wsc,
94
+ qpqConfig,
95
+ };
96
+ return item;
97
+ });
98
+ })
99
+ .filter((item, index, arr) => arr[index].apiName !== item.apiName || !item.setting.owner?.module || arr[index].service === item.setting.owner?.module);
100
+ };
101
+ export const webSocketImplementation = async (devServerConfig) => {
102
+ if (!devServerConfig.webSocketPort) {
103
+ return;
104
+ }
105
+ const webSocketQPQWebServerConfigSettingMaps = getWebSocketQPQWebServerConfigSettingMaps(devServerConfig.qpqConfigs);
106
+ const server = createServer();
107
+ globals.allServers = webSocketQPQWebServerConfigSettingMaps.map((x) => startServer(x, devServerConfig));
108
+ server.on('upgrade', (request, socket, head) => {
109
+ const { pathname } = new URL(request.url || '', 'wss://base.url');
110
+ const serverInfo = globals.allServers.find((s) => pathname === `/${s.service}/${s.apiName}`);
111
+ if (serverInfo) {
112
+ serverInfo.server.handleUpgrade(request, socket, head, (ws) => {
113
+ serverInfo.server.emit('connection', ws, request);
114
+ });
115
+ }
116
+ else {
117
+ socket.destroy();
118
+ }
119
+ });
120
+ server.listen(devServerConfig.webSocketPort, 'localhost');
121
+ // Never ends
122
+ await new Promise(() => { });
123
+ };
@@ -24,6 +24,9 @@ class EventBus extends EventEmitter {
24
24
  });
25
25
  }
26
26
  async publish(eventType, payload) {
27
+ // console.log('------------------------------------------------------------');
28
+ // console.log('\n\nEventBus - publish: [', eventType, ']', '[', payload?.type, ']');
29
+ // console.log('------------------------------------------------------------');
27
30
  this.emit(eventType, payload);
28
31
  }
29
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quidproquo-dev-server",
3
- "version": "0.0.240",
3
+ "version": "0.0.241",
4
4
  "description": "",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -33,15 +33,15 @@
33
33
  "homepage": "https://github.com/joe-coady/quidproquo#readme",
34
34
  "dependencies": {
35
35
  "multer": "^1.4.5-lts.1",
36
- "quidproquo-actionprocessor-awslambda": "0.0.240",
37
- "quidproquo-actionprocessor-node": "0.0.240",
38
- "quidproquo-core": "0.0.240",
39
- "quidproquo-webserver": "0.0.240",
36
+ "quidproquo-actionprocessor-awslambda": "0.0.241",
37
+ "quidproquo-actionprocessor-node": "0.0.241",
38
+ "quidproquo-core": "0.0.241",
39
+ "quidproquo-webserver": "0.0.241",
40
40
  "ws": "^8.18.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/multer": "^1.4.12",
44
- "quidproquo-tsconfig": "0.0.240",
44
+ "quidproquo-tsconfig": "0.0.241",
45
45
  "typescript": "^4.9.3"
46
46
  }
47
47
  }
@@ -1,2 +0,0 @@
1
- import { DevServerConfig } from '../types';
2
- export declare const webSocketImplementation: (devServerConfig: DevServerConfig) => Promise<void>;
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.webSocketImplementation = void 0;
13
- const http_1 = require("http");
14
- const ws_1 = require("ws");
15
- const webSocketImplementation = (devServerConfig) => __awaiter(void 0, void 0, void 0, function* () {
16
- if (!devServerConfig.webSocketPort) {
17
- return;
18
- }
19
- console.log('Starting WebSocket Server!');
20
- const server = (0, http_1.createServer)();
21
- const wss1 = new ws_1.WebSocketServer({ noServer: true });
22
- const wss2 = new ws_1.WebSocketServer({ noServer: true });
23
- wss1.on('connection', (ws) => {
24
- ws.on('error', console.error);
25
- ws.on('message', (data) => {
26
- console.log('received: %s', data);
27
- });
28
- ws.on('close', () => {
29
- console.log('disconnected');
30
- });
31
- // ...
32
- });
33
- wss2.on('connection', (ws) => {
34
- ws.on('error', console.error);
35
- ws.on('message', (data) => {
36
- console.log('received: %s', data);
37
- });
38
- ws.on('close', () => {
39
- console.log('disconnected');
40
- });
41
- // ...
42
- });
43
- server.on('upgrade', (request, socket, head) => {
44
- const { pathname } = new URL(request.url || '', 'wss://base.url');
45
- if (pathname === '/foo') {
46
- wss1.handleUpgrade(request, socket, head, (ws) => {
47
- wss1.emit('connection', ws, request);
48
- });
49
- }
50
- else if (pathname === '/bar') {
51
- wss2.handleUpgrade(request, socket, head, (ws) => {
52
- wss2.emit('connection', ws, request);
53
- });
54
- }
55
- else {
56
- socket.destroy();
57
- }
58
- });
59
- server.listen(devServerConfig.webSocketPort, 'localhost');
60
- // Never ends
61
- yield new Promise(() => { });
62
- });
63
- exports.webSocketImplementation = webSocketImplementation;
@@ -1,2 +0,0 @@
1
- import { DevServerConfig } from '../types';
2
- export declare const webSocketImplementation: (devServerConfig: DevServerConfig) => Promise<void>;
@@ -1,50 +0,0 @@
1
- import { createServer } from 'http';
2
- import { WebSocketServer } from 'ws';
3
- export const webSocketImplementation = async (devServerConfig) => {
4
- if (!devServerConfig.webSocketPort) {
5
- return;
6
- }
7
- console.log('Starting WebSocket Server!');
8
- const server = createServer();
9
- const wss1 = new WebSocketServer({ noServer: true });
10
- const wss2 = new WebSocketServer({ noServer: true });
11
- wss1.on('connection', (ws) => {
12
- ws.on('error', console.error);
13
- ws.on('message', (data) => {
14
- console.log('received: %s', data);
15
- });
16
- ws.on('close', () => {
17
- console.log('disconnected');
18
- });
19
- // ...
20
- });
21
- wss2.on('connection', (ws) => {
22
- ws.on('error', console.error);
23
- ws.on('message', (data) => {
24
- console.log('received: %s', data);
25
- });
26
- ws.on('close', () => {
27
- console.log('disconnected');
28
- });
29
- // ...
30
- });
31
- server.on('upgrade', (request, socket, head) => {
32
- const { pathname } = new URL(request.url || '', 'wss://base.url');
33
- if (pathname === '/foo') {
34
- wss1.handleUpgrade(request, socket, head, (ws) => {
35
- wss1.emit('connection', ws, request);
36
- });
37
- }
38
- else if (pathname === '/bar') {
39
- wss2.handleUpgrade(request, socket, head, (ws) => {
40
- wss2.emit('connection', ws, request);
41
- });
42
- }
43
- else {
44
- socket.destroy();
45
- }
46
- });
47
- server.listen(devServerConfig.webSocketPort, 'localhost');
48
- // Never ends
49
- await new Promise(() => { });
50
- };