quidproquo-dev-server 0.0.239 → 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 -0
  27. package/lib/commonjs/implementations/index.js +1 -0
  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/commonjs/main.js +1 -0
  39. package/lib/commonjs/types/DevServerConfig.d.ts +2 -1
  40. package/lib/esm/actionProcessor/core/event/index.d.ts +1 -0
  41. package/lib/esm/actionProcessor/core/event/index.js +1 -0
  42. package/lib/esm/actionProcessor/core/event/queue/getEventMatchStoryActionProcessor.js +0 -1
  43. package/lib/esm/actionProcessor/core/event/ws/index.d.ts +1 -0
  44. package/lib/esm/actionProcessor/core/event/ws/index.js +1 -0
  45. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.d.ts +2 -0
  46. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.js +9 -0
  47. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.d.ts +2 -0
  48. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.js +38 -0
  49. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.d.ts +2 -0
  50. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.js +9 -0
  51. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.d.ts +2 -0
  52. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.js +26 -0
  53. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.d.ts +2 -0
  54. package/lib/esm/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.js +14 -0
  55. package/lib/esm/actionProcessor/core/event/ws/websocket/index.d.ts +2 -0
  56. package/lib/esm/actionProcessor/core/event/ws/websocket/index.js +12 -0
  57. package/lib/esm/actionProcessor/core/event/ws/websocket/types.d.ts +8 -0
  58. package/lib/esm/actionProcessor/core/event/ws/websocket/types.js +1 -0
  59. package/lib/esm/actionProcessor/webserver/index.js +2 -0
  60. package/lib/esm/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.d.ts +2 -0
  61. package/lib/esm/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.js +19 -0
  62. package/lib/esm/actionProcessor/webserver/websocket/index.d.ts +2 -0
  63. package/lib/esm/actionProcessor/webserver/websocket/index.js +4 -0
  64. package/lib/esm/implementations/eventBusImplementation.js +54 -34
  65. package/lib/esm/implementations/index.d.ts +1 -0
  66. package/lib/esm/implementations/index.js +1 -0
  67. package/lib/esm/implementations/queueImplementation.js +44 -4
  68. package/lib/esm/implementations/webSocket/index.d.ts +2 -0
  69. package/lib/esm/implementations/webSocket/index.js +2 -0
  70. package/lib/esm/implementations/webSocket/types/WsEvent.d.ts +13 -0
  71. package/lib/esm/implementations/webSocket/types/WsEvent.js +1 -0
  72. package/lib/esm/implementations/webSocket/types/index.d.ts +1 -0
  73. package/lib/esm/implementations/webSocket/types/index.js +1 -0
  74. package/lib/esm/implementations/webSocket/webSocketImplementation.d.ts +3 -0
  75. package/lib/esm/implementations/webSocket/webSocketImplementation.js +123 -0
  76. package/lib/esm/logic/eventBus.js +3 -0
  77. package/lib/esm/main.js +2 -1
  78. package/lib/esm/types/DevServerConfig.d.ts +2 -1
  79. package/package.json +7 -6
@@ -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/lib/esm/main.js CHANGED
@@ -1,4 +1,4 @@
1
- import { apiImplementation, eventBusImplementation, queueImplementation, serviceFunctionImplementation } from './implementations';
1
+ import { apiImplementation, eventBusImplementation, queueImplementation, serviceFunctionImplementation, webSocketImplementation, } from './implementations';
2
2
  export * from './implementations';
3
3
  export const startDevServer = async (devServerConfig) => {
4
4
  console.log('Starting QPQ Dev Server!!!');
@@ -7,5 +7,6 @@ export const startDevServer = async (devServerConfig) => {
7
7
  serviceFunctionImplementation(devServerConfig),
8
8
  eventBusImplementation(devServerConfig),
9
9
  queueImplementation(devServerConfig),
10
+ webSocketImplementation(devServerConfig),
10
11
  ]);
11
12
  };
@@ -1,7 +1,8 @@
1
1
  import { QPQConfig, QpqFunctionRuntime } from 'quidproquo-core';
2
2
  export type DevServerConfig = {
3
3
  serverDomain: 'localhost';
4
- serverPort: 8080;
4
+ serverPort: number;
5
+ webSocketPort?: number;
5
6
  dynamicModuleLoader: <T = any>(serviceName: string, modulePath: QpqFunctionRuntime) => Promise<T>;
6
7
  qpqConfigs: QPQConfig[];
7
8
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quidproquo-dev-server",
3
- "version": "0.0.239",
3
+ "version": "0.0.241",
4
4
  "description": "",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/esm/index.js",
@@ -33,14 +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-core": "0.0.239",
37
- "quidproquo-webserver": "0.0.239",
38
- "quidproquo-actionprocessor-awslambda": "0.0.239",
39
- "quidproquo-actionprocessor-node": "0.0.239"
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
+ "ws": "^8.18.0"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/multer": "^1.4.12",
43
- "quidproquo-tsconfig": "0.0.239",
44
+ "quidproquo-tsconfig": "0.0.241",
44
45
  "typescript": "^4.9.3"
45
46
  }
46
47
  }