configurapi-runner-ws 1.18.0 → 1.20.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "configurapi-runner-ws",
3
- "version": "1.18.0",
3
+ "version": "1.20.0",
4
4
  "description": "Websocket runner for configurapi.",
5
5
  "bin": {
6
6
  "configurapi-runner-ws": "src/app.mjs"
package/src/index.js CHANGED
@@ -5,7 +5,8 @@ const events = require('events');
5
5
  const Configurapi = require('configurapi');
6
6
  const { WebSocketServer } = require('ws');
7
7
  const { randomUUID } = require("node:crypto");
8
- const { Response, Route, Policy, PolicyHandlerLoader, LogLevel } = require('configurapi');
8
+ const { Route, Policy, PolicyHandlerLoader, LogLevel } = require('configurapi');
9
+ const { WsFrame } = require('configurapi-handler-ws');
9
10
  const oneliner = require('one-liner');
10
11
  const wsAdapter = require('./wsAdapter');
11
12
  const URL = require('url');
@@ -64,9 +65,10 @@ module.exports = class HttpRunner extends events.EventEmitter
64
65
 
65
66
  if(connectionId && connections.has(connectionId))
66
67
  {
67
- let wsResponse = new Response(e.payload, 200, {...e.request.headers, 'connection-id': connectionId})
68
- await wsAdapter.write(connections.get(connectionId).ws, wsResponse)
69
- e.response.statusCode = 204
68
+ e.payload.headers = e.payload.headers || {};
69
+ e.payload.headers['connection-id'] = connectionId;
70
+
71
+ await wsAdapter.write(connections.get(connectionId).ws, e.payload);
70
72
  }
71
73
  else
72
74
  {
@@ -240,7 +242,7 @@ module.exports = class HttpRunner extends events.EventEmitter
240
242
  event.response.headers['Sec-WebSocket-Protocol'] = protocol;
241
243
  }
242
244
 
243
- await wsAdapter.write(ws, event.response);
245
+ await wsAdapter.write(ws, new WsFrame(event.response));
244
246
  }
245
247
  else
246
248
  {
@@ -252,7 +254,7 @@ module.exports = class HttpRunner extends events.EventEmitter
252
254
  }
253
255
  event.response.headers['message-id'] = event.request.headers?.['message-id'];
254
256
 
255
- await wsAdapter.write(ws, event.response); // Send response back to the caller.
257
+ await wsAdapter.write(ws, new WsFrame(event.response)); // Send response back to the caller.
256
258
  }
257
259
 
258
260
  return event.response;
@@ -269,7 +271,7 @@ module.exports = class HttpRunner extends events.EventEmitter
269
271
 
270
272
  try
271
273
  {
272
- await wsAdapter.write(ws, response);
274
+ await wsAdapter.write(ws, new WsFrame(response));
273
275
  }
274
276
  catch(err)
275
277
  {
@@ -296,7 +298,7 @@ module.exports = class HttpRunner extends events.EventEmitter
296
298
  await this.service.process(event);
297
299
 
298
300
  serverResponse.writeHead(200, event.response.headers);
299
- serverResponse.end(JSON.stringify(event.response));
301
+ serverResponse.end(JSON.stringify(event.response.body));
300
302
  }
301
303
  catch (error)
302
304
  {
package/src/wsAdapter.js CHANGED
@@ -3,6 +3,7 @@ const { WebSocket } = require('ws');
3
3
  const StreamResponse = require('configurapi-handler-ws').StreamResponse;
4
4
  const Response = require('configurapi').Response;
5
5
  const { randomUUID } = require("node:crypto");
6
+ const WsFrame = require('configurapi-handler-ws').WsFrame;
6
7
 
7
8
  module.exports = {
8
9
  write: async function(ws, message)
@@ -72,9 +73,11 @@ module.exports = {
72
73
  }
73
74
 
74
75
  const headers = { 'message-id': streamId, 'x-stream': 'chunk', 'x-stream-id': streamId, 'Content-Type': 'text/plain' };
75
- const response = new Response(bucket, 200, headers);
76
+
77
+ const chunkResponse = new Response(bucket, 200, { });
78
+ const frame = new WsFrame(chunkResponse, headers);
76
79
 
77
- ws.send(JSON.stringify(response), (err) =>
80
+ ws.send(JSON.stringify(frame), (err) =>
78
81
  {
79
82
  if (err) { cleanup(); return safeReject(err); }
80
83
  });
@@ -140,9 +143,11 @@ module.exports = {
140
143
  if (ws.readyState === WebSocket.OPEN)
141
144
  {
142
145
  const headers = { 'message-id': streamId, 'x-stream-id': streamId, 'x-stream': 'done' };
143
- const response = new Response('', 204, headers);
144
146
 
145
- ws.send(JSON.stringify(response), (err) =>
147
+ const doneResponse = new Response('', 204);
148
+ const frame = new WsFrame(doneResponse, headers);
149
+
150
+ ws.send(JSON.stringify(frame), (err) =>
146
151
  {
147
152
  cleanup();
148
153
  return err ? safeReject(err) : safeResolve();
@@ -4,8 +4,8 @@ async function wsPostbackFunction(endpoint, response)
4
4
  {
5
5
  let resp = await fetch(endpoint, {
6
6
  method: 'POST',
7
- headers: response.headers || {},
8
- body: typeof response === 'object' ? JSON.stringify(response) : response
7
+ headers: {...response.headers, 'content-type': 'application/json'},
8
+ body: typeof response === 'string' ? response: JSON.stringify(response)
9
9
  });
10
10
 
11
11
  if(resp.status >= 400)