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.
- package/lib/commonjs/actionProcessor/core/event/index.d.ts +1 -0
- package/lib/commonjs/actionProcessor/core/event/index.js +1 -0
- package/lib/commonjs/actionProcessor/core/event/queue/getEventMatchStoryActionProcessor.js +0 -1
- package/lib/commonjs/actionProcessor/core/event/ws/index.d.ts +1 -0
- package/lib/commonjs/actionProcessor/core/event/ws/index.js +17 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.d.ts +2 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.js +24 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.d.ts +2 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.js +53 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.d.ts +2 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.js +24 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.d.ts +2 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.js +41 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.d.ts +2 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.js +29 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/index.d.ts +2 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/index.js +21 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/types.d.ts +8 -0
- package/lib/commonjs/actionProcessor/core/event/ws/websocket/types.js +2 -0
- package/lib/commonjs/actionProcessor/webserver/index.js +2 -1
- package/lib/commonjs/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.d.ts +2 -0
- package/lib/commonjs/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.js +35 -0
- package/lib/commonjs/actionProcessor/webserver/websocket/index.d.ts +2 -0
- package/lib/commonjs/actionProcessor/webserver/websocket/index.js +17 -0
- package/lib/commonjs/implementations/eventBusImplementation.js +55 -37
- package/lib/commonjs/implementations/index.d.ts +1 -0
- package/lib/commonjs/implementations/index.js +1 -0
- package/lib/commonjs/implementations/queueImplementation.js +45 -3
- package/lib/commonjs/implementations/webSocket/index.d.ts +2 -0
- package/lib/commonjs/implementations/webSocket/index.js +18 -0
- package/lib/commonjs/implementations/webSocket/types/WsEvent.d.ts +13 -0
- package/lib/commonjs/implementations/webSocket/types/WsEvent.js +2 -0
- package/lib/commonjs/implementations/webSocket/types/index.d.ts +1 -0
- package/lib/commonjs/implementations/webSocket/types/index.js +17 -0
- package/lib/commonjs/implementations/webSocket/webSocketImplementation.d.ts +3 -0
- package/lib/commonjs/implementations/webSocket/webSocketImplementation.js +134 -0
- package/lib/commonjs/logic/eventBus.js +3 -0
- package/lib/commonjs/main.js +1 -0
- package/lib/commonjs/types/DevServerConfig.d.ts +2 -1
- package/lib/esm/actionProcessor/core/event/index.d.ts +1 -0
- package/lib/esm/actionProcessor/core/event/index.js +1 -0
- package/lib/esm/actionProcessor/core/event/queue/getEventMatchStoryActionProcessor.js +0 -1
- package/lib/esm/actionProcessor/core/event/ws/index.d.ts +1 -0
- package/lib/esm/actionProcessor/core/event/ws/index.js +1 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.d.ts +2 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventAutoRespondActionProcessor.js +9 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.d.ts +2 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetRecordsActionProcessor.js +38 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.d.ts +2 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventGetStorySessionActionProcessor.js +9 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.d.ts +2 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventMatchStoryActionProcessor.js +26 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.d.ts +2 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/getEventTransformResponseResultActionProcessor.js +14 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/index.d.ts +2 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/index.js +12 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/types.d.ts +8 -0
- package/lib/esm/actionProcessor/core/event/ws/websocket/types.js +1 -0
- package/lib/esm/actionProcessor/webserver/index.js +2 -0
- package/lib/esm/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.d.ts +2 -0
- package/lib/esm/actionProcessor/webserver/websocket/getWebsocketSendMessageActionProcessor.js +19 -0
- package/lib/esm/actionProcessor/webserver/websocket/index.d.ts +2 -0
- package/lib/esm/actionProcessor/webserver/websocket/index.js +4 -0
- package/lib/esm/implementations/eventBusImplementation.js +54 -34
- package/lib/esm/implementations/index.d.ts +1 -0
- package/lib/esm/implementations/index.js +1 -0
- package/lib/esm/implementations/queueImplementation.js +44 -4
- package/lib/esm/implementations/webSocket/index.d.ts +2 -0
- package/lib/esm/implementations/webSocket/index.js +2 -0
- package/lib/esm/implementations/webSocket/types/WsEvent.d.ts +13 -0
- package/lib/esm/implementations/webSocket/types/WsEvent.js +1 -0
- package/lib/esm/implementations/webSocket/types/index.d.ts +1 -0
- package/lib/esm/implementations/webSocket/types/index.js +1 -0
- package/lib/esm/implementations/webSocket/webSocketImplementation.d.ts +3 -0
- package/lib/esm/implementations/webSocket/webSocketImplementation.js +123 -0
- package/lib/esm/logic/eventBus.js +3 -0
- package/lib/esm/main.js +2 -1
- package/lib/esm/types/DevServerConfig.d.ts +2 -1
- 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:
|
|
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.
|
|
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-
|
|
37
|
-
"quidproquo-
|
|
38
|
-
"quidproquo-
|
|
39
|
-
"quidproquo-
|
|
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.
|
|
44
|
+
"quidproquo-tsconfig": "0.0.241",
|
|
44
45
|
"typescript": "^4.9.3"
|
|
45
46
|
}
|
|
46
47
|
}
|