@requestly/mock-server
Advanced tools
Comparing version 0.1.4 to 0.1.5
@@ -18,2 +18,5 @@ "use strict"; | ||
const mockSelector_1 = __importDefault(require("./mockSelector")); | ||
const mockServerResponseHelper_1 = require("../utils/mockServerResponseHelper"); | ||
const mockServerResponse_1 = require("../../enums/mockServerResponse"); | ||
const queryParams_1 = require("../../constants/queryParams"); | ||
class MockServerHandler { | ||
@@ -33,12 +36,11 @@ } | ||
console.debug("[Debug] Mock Selected with data", mockData); | ||
const mockResponse = yield mockProcessor_1.default.process(mockData, endpoint, method); | ||
const mockResponse = yield mockProcessor_1.default.process(mockData, { | ||
endpoint, | ||
method, | ||
password: queryParams[queryParams_1.RQ_PASSWORD] | ||
}); | ||
return mockResponse; | ||
} | ||
console.debug("[Debug] No Mock Selected"); | ||
const notFoundResponse = { | ||
statusCode: 404, | ||
headers: {}, | ||
body: "Mock Not Found", | ||
}; | ||
return notFoundResponse; | ||
return (0, mockServerResponseHelper_1.getServerMockResponse)(mockServerResponse_1.HttpStatusCode.NOT_FOUND); | ||
}); | ||
@@ -45,0 +47,0 @@ MockServerHandler.cleanupEndpoint = (endpoint) => { |
@@ -1,5 +0,5 @@ | ||
import { MockServerResponse, RequestMethod } from "../../types"; | ||
import { Mock, Response } from "../../types/mock"; | ||
import { MockServerResponse } from "../../types"; | ||
import { Mock, MockMetadata, Response } from "../../types/mock"; | ||
declare class MockProcessor { | ||
static process: (mockData: Mock, endpoint: string, method: RequestMethod) => Promise<MockServerResponse>; | ||
static process: (mockData: Mock, requestContextParams: Partial<MockMetadata>) => Promise<MockServerResponse>; | ||
static renderMockServerResponse: (mockData: Mock) => Promise<MockServerResponse>; | ||
@@ -6,0 +6,0 @@ static renderStatusCode: (responseTemplate: Response) => number; |
@@ -16,2 +16,5 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const mockServerResponse_1 = require("../../enums/mockServerResponse"); | ||
const mockProcessor_1 = require("../utils/mockProcessor"); | ||
const mockServerResponseHelper_1 = require("../utils/mockServerResponseHelper"); | ||
const pathMatcher_1 = __importDefault(require("../utils/pathMatcher")); | ||
@@ -21,3 +24,7 @@ class MockProcessor { | ||
_a = MockProcessor; | ||
MockProcessor.process = (mockData, endpoint, method) => __awaiter(void 0, void 0, void 0, function* () { | ||
MockProcessor.process = (mockData, requestContextParams) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { endpoint, method, password } = requestContextParams; | ||
if (!(0, mockProcessor_1.validatePassword)(mockData.password, password)) { | ||
return (0, mockServerResponseHelper_1.getServerMockResponse)(mockServerResponse_1.HttpStatusCode.UNAUTHORIZED); | ||
} | ||
const urlParams = (0, pathMatcher_1.default)(mockData.endpoint, endpoint).params || {}; | ||
@@ -24,0 +31,0 @@ return _a.renderMockServerResponse(mockData); |
import { Mock } from "../../types/mock"; | ||
export declare const dummyMock1: Mock; | ||
export declare const dummyMock2: Mock; | ||
export declare const dummyMock3: Mock; | ||
export declare const getSelectorMap: () => any; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getSelectorMap = exports.dummyMock2 = exports.dummyMock1 = void 0; | ||
exports.getSelectorMap = exports.dummyMock3 = exports.dummyMock2 = exports.dummyMock1 = void 0; | ||
const types_1 = require("../../types"); | ||
@@ -43,2 +43,22 @@ exports.dummyMock1 = { | ||
}; | ||
exports.dummyMock3 = { | ||
id: "3", | ||
desc: "Mock 3 : Password protected", | ||
method: types_1.RequestMethod.GET, | ||
endpoint: "users3", | ||
password: '1234', | ||
responses: [ | ||
{ | ||
id: "1", | ||
desc: "Mock 3 Response 1", | ||
latency: 0, | ||
statusCode: 200, | ||
headers: { | ||
"foo": "bar", | ||
"content-type": "application/json", | ||
}, | ||
body: "{\"Hello\":\"There\",\"mockId\":\"3\"}" | ||
} | ||
] | ||
}; | ||
const getSelectorMap = () => { | ||
@@ -54,4 +74,8 @@ let selectorMap = {}; | ||
}; | ||
selectorMap[exports.dummyMock3.id] = { | ||
method: exports.dummyMock3.method, | ||
endpoint: exports.dummyMock3.endpoint | ||
}; | ||
return selectorMap; | ||
}; | ||
exports.getSelectorMap = getSelectorMap; |
@@ -17,2 +17,5 @@ "use strict"; | ||
} | ||
else if (id === "3") { | ||
return mock1_1.dummyMock3; | ||
} | ||
return null; | ||
@@ -19,0 +22,0 @@ }; |
@@ -0,1 +1,2 @@ | ||
import { HttpStatusCode } from "../enums/mockServerResponse"; | ||
export declare enum RequestMethod { | ||
@@ -15,3 +16,3 @@ GET = "GET", | ||
body: string; | ||
statusCode: number; | ||
statusCode: HttpStatusCode; | ||
headers: { | ||
@@ -18,0 +19,0 @@ [key: string]: string; |
@@ -14,2 +14,3 @@ import { RequestMethod } from "."; | ||
updatedTs?: string; | ||
password?: string; | ||
} | ||
@@ -16,0 +17,0 @@ export interface Response { |
{ | ||
"name": "@requestly/mock-server", | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"description": "- Methods: GET, POST, PUT, OPTIONS - Description - Endpoint (can be full path) (/api/v1/users) - Multiple Responses - Shuffle Response - Sequential Response - Rules in Response - Status (Any status code 2xx, 4xx) - Latency - Body - Templating - Faker js - Headers", | ||
@@ -5,0 +5,0 @@ "main": "build/index.js", |
@@ -1,24 +0,77 @@ | ||
## Requirements | ||
- Methods: GET, POST, PUT, OPTIONS | ||
- Description | ||
- Endpoint (can be full path) (/api/v1/users) | ||
- Multiple Responses | ||
- Shuffle Response | ||
- Sequential Response | ||
- Rules in Response | ||
- Status (Any status code 2xx, 4xx) | ||
- Latency | ||
- Body | ||
- Templating | ||
- Faker js | ||
- Headers | ||
# requestly-mock-server | ||
## Features | ||
- Drag and drop folders | ||
- Collection of mocks (nested) | ||
This Repo contains the core express server [@requestly/mock-server](https://www.npmjs.com/package/@requestly/mock-server) package which powers Requestly's Cloud Mock Server. | ||
## Development | ||
### Install Dependencies | ||
``` sh | ||
npm i | ||
``` | ||
### Start Server | ||
``` sh | ||
npm start:dev | ||
``` | ||
V0 | ||
- Minimal Implementation of current mock server | ||
- Editing mocks allowed | ||
## Usage with firebase-functions | ||
### Install | ||
``` sh | ||
npm i @requestly/mock-server | ||
``` | ||
### Setup | ||
``` javascript | ||
import * as functions from 'firebase-functions'; | ||
import { MockServer } from '@requestly/mock-server'; | ||
import firebaseConfigFetcher from '../firebaseConfigFetcher'; | ||
const startMockServer = () => { | ||
const expressApp = new MockServer(3000, firebaseConfigFetcher, '/api/mockv2').app; | ||
return functions.runWith({ minInstances: isProdEnv() ? 1 : 0 }).https.onRequest(expressApp); | ||
}; | ||
export const handleMockRequest = startMockServer(); | ||
``` | ||
``` javascript | ||
class FirebaseConfigFetcher implements IConfigFetcher { | ||
getMockSelectorMap = (kwargs?: any) => { | ||
/** | ||
* Fetch and return mockSelectorMap from firestore | ||
* { | ||
* mockId: { | ||
* route: "", | ||
* method: "", | ||
* } | ||
* } | ||
*/ | ||
}; | ||
getMock = (id: string, kwargs?: any) => { | ||
/** | ||
* Fetch mock details from firestore | ||
*/ | ||
} | ||
} | ||
const firebaseConfigFetcher = new FirebaseConfigFetcher(); | ||
export default firebaseConfigFetcher; | ||
``` | ||
## Requestly Cloud Mock Server Architechture | ||
![image](https://github.com/requestly/requestly-mock-server/assets/16779465/277fbe21-45ad-45d2-ab65-64ea362ce17a) | ||
**STEPS** | ||
1. Request coming from GET `https://username.requestly.dev/users` | ||
2. Firebase Function passes the request to @requestly/mock-server | ||
3. @requestly/mock-server - MockSelector | ||
a. Fetches all the available mocks using `IConfigFetcher.getMockSelectorMap()` (Firestore in case of Requestly) | ||
b. Select mock if any endpoint+method matches the incoming request (GET /users) | ||
c. Fetch Mock using `IConfigFetcher.getMock(mockId)` and pass it to MockProcessor | ||
4. @requestly/mock-server - MockProcessor | ||
a. Process Mock - Response Rendering | ||
b. Return Response |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
66261
37
718
78
0