Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
pkskpro committed Oct 8, 2024
2 parents 5aeec45 + e0a9e5e commit 821e190
Show file tree
Hide file tree
Showing 13 changed files with 179 additions and 134 deletions.
70 changes: 12 additions & 58 deletions packages/commons-server/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/commons-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"killable": "1.0.1",
"mime-types": "2.1.35",
"object-path": "0.11.8",
"path-to-regexp": "7.1.0",
"qs": "6.12.3",
"range-parser": "1.2.1",
"typed-emitter": "2.1.0",
Expand Down
18 changes: 16 additions & 2 deletions packages/commons-server/src/libs/requests.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { Request } from 'express';
import { IncomingMessage } from 'http';
import { match } from 'path-to-regexp';

import { CloneObject, Route } from '@mockoon/commons';
import { parse as parseUrl } from 'url';
import { parseRequestMessage, parseWebSocketMessage } from './utils';

Expand Down Expand Up @@ -92,10 +94,22 @@ export const fromExpressRequest = (req: Request): ServerRequest =>
*/
export const fromWsRequest = (
req: IncomingMessage,
originalRoute: Route,
message?: string
): ServerRequest => {
const location = parseUrl(req.url || '', true);

let pathParams = {};
const urlPathMatchFn = match(
originalRoute.endpoint.startsWith('/')
? originalRoute.endpoint
: '/' + originalRoute.endpoint
);
const result = urlPathMatchFn(location.pathname || '');
if (result) {
pathParams = result.params || {};
}

const structuredMessage = message
? parseWebSocketMessage(message || '', req)
: undefined;
Expand All @@ -111,8 +125,8 @@ export const fromWsRequest = (
req.socket?.remoteAddress,
method: req.method,
originalRequest: req,
params: {},
query: JSON.parse(JSON.stringify(location.query)),
params: CloneObject(pathParams),
query: CloneObject(location.query),
stringBody: message || toString(req.body) || ''
} as ServerRequest;
};
Expand Down
20 changes: 13 additions & 7 deletions packages/commons-server/src/libs/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import {
import killable from 'killable';
import { lookup as mimeTypeLookup } from 'mime-types';
import { basename, extname } from 'path';
import { match } from 'path-to-regexp';
import { parse as qsParse } from 'qs';
import rangeParser from 'range-parser';
import { Readable } from 'stream';
Expand Down Expand Up @@ -615,7 +616,7 @@ export class MockoonServer extends (EventEmitter as new () => TypedEmitter<Serve
wsRoutes.forEach((wsRoute) => {
const webSocketServer = new WebSocket.Server({
noServer: true,
path: `${envPath}/${wsRoute.endpoint}`
path: `${envPath}`
});

this.webSocketServers.push(webSocketServer);
Expand All @@ -625,10 +626,15 @@ export class MockoonServer extends (EventEmitter as new () => TypedEmitter<Serve
this.createWebSocketConnectionHandler(webSocketServer, wsRoute)
);

const pathMatcherFn = match(
wsRoute.endpoint.startsWith('/')
? wsRoute.endpoint
: '/' + wsRoute.endpoint
);

this.serverInstance.on('upgrade', (req, socket, head) => {
//
const urlParsed = parseUrl(req.url || '', true);
if (urlParsed.pathname === `${envPath}/${wsRoute.endpoint}`) {
if (pathMatcherFn(urlParsed.pathname || '')) {
webSocketServer.handleUpgrade(req, socket, head, (client) => {
webSocketServer.emit('connection', client, req);
});
Expand Down Expand Up @@ -700,7 +706,7 @@ export class MockoonServer extends (EventEmitter as new () => TypedEmitter<Serve
);
});

const serverRequest = fromWsRequest(request);
const serverRequest = fromWsRequest(request, route);

// This is not waiting until a messge from client. But will push messages as a stream.
if (route.streamingMode === StreamingMode.BROADCAST) {
Expand Down Expand Up @@ -822,7 +828,7 @@ export class MockoonServer extends (EventEmitter as new () => TypedEmitter<Serve
let content: any = enabledRouteResponse.body;
let finalRequest = connectedRequest;
if (!finalRequest) {
finalRequest = request ? fromWsRequest(request, data) : undefined;
finalRequest = request ? fromWsRequest(request, route, data) : undefined;
}

if (
Expand Down Expand Up @@ -971,7 +977,7 @@ export class MockoonServer extends (EventEmitter as new () => TypedEmitter<Serve
const intervalRef = setInterval(() => {
const enabledRouteResponse = new ResponseRulesInterpreter(
route.responses,
fromWsRequest(request),
fromWsRequest(request, route),
route.responseMode,
this.environment,
this.processedDatabuckets,
Expand Down Expand Up @@ -2180,7 +2186,7 @@ export class MockoonServer extends (EventEmitter as new () => TypedEmitter<Serve
new RegExp('data(?:Raw)? +[\'|"]{1}([^(\'|")]*)', 'g')
);

return [...(matches || [])].map((match) => match[1]);
return [...(matches || [])].map((mtc) => mtc[1]);
}

/**
Expand Down
Loading

0 comments on commit 821e190

Please sign in to comment.