UNPKG

cassava

Version:
142 lines 6.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTestProxyEvent = void 0; const querystring = require("querystring"); const uuid = require("uuid"); const url_1 = require("url"); const randomableCharacters = "abcdefghijklmnopqrstuvwxyz0123456789"; function randomString(length) { let text = ""; for (let i = 0; i < length; i++) { text += randomableCharacters.charAt(Math.floor(Math.random() * randomableCharacters.length)); } return text; } const defaultTestProxyEvent = { body: null, headers: { Accept: "*/*", "Accept-Encoding": "gzip, deflate, br", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Desktop-Viewer": "true", "CloudFront-Is-Mobile-Viewer": "false", "CloudFront-Is-SmartTV-Viewer": "false", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Viewer-Country": "US", "Content-Type": "application/json", DNT: "1", Host: "abcdefghij.execute-api.us-west-2.amazonaws.com", Origin: "https://www.example.com", "User-Agent": "Amazon CloudFront", Via: "1.1 fda3b2797d2719576f6b916583a28e52.cloudfront.net (CloudFront), 1.1 36810aa1793ee589dc8c194860296079.cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "1qqWau0XonE5dkx9itahWPUYH_iISQ6g79xZC4VedqtU4LvQyuxpSg==", "X-Amzn-Trace-Id": "Root=1-5f52a875-7474a6049e17f28a2d083e72", "X-Forwarded-For": "192.0.2.0, 64.252.141.156, 64.252.141.131", "X-Forwarded-Port": "443", "X-Forwarded-Proto": "https", "X-Requested-With": "XMLHttpRequest" }, httpMethod: "GET", isBase64Encoded: false, multiValueHeaders: { Accept: ["*/*"], "Accept-Encoding": ["gzip, deflate, br"], "CloudFront-Forwarded-Proto": ["https"], "CloudFront-Is-Desktop-Viewer": ["true"], "CloudFront-Is-Mobile-Viewer": ["false"], "CloudFront-Is-SmartTV-Viewer": ["false"], "CloudFront-Is-Tablet-Viewer": ["false"], "CloudFront-Viewer-Country": ["US"], "Content-Type": ["application/json"], DNT: ["1"], Host: ["abcdefghij.execute-api.us-west-2.amazonaws.com"], Origin: ["https://www.example.com"], "User-Agent": ["Amazon CloudFront"], Via: ["1.1 fda3b2797d2719576f6b916583a28e52.cloudfront.net (CloudFront), 1.1 36810aa1793ee589dc8c194860296079.cloudfront.net (CloudFront)"], "X-Amz-Cf-Id": ["1qqWau0XonE5dkx9itahWPUYH_iISQ6g79xZC4VedqtU4LvQyuxpSg=="], "X-Amzn-Trace-Id": ["Root=1-5f52a875-7474a6049e17f28a2d083e72"], "X-Forwarded-For": ["192.0.2.0, 64.252.141.156, 64.252.141.131"], "X-Forwarded-Port": ["443"], "X-Forwarded-Proto": ["https"], "X-Requested-With": ["XMLHttpRequest"] }, multiValueQueryStringParameters: null, path: "/", pathParameters: null, queryStringParameters: null, requestContext: { accountId: "12345678912", apiId: randomString(10), httpMethod: "GET", identity: { accessKey: "abcdefg", accountId: null, apiKey: null, apiKeyId: null, caller: null, cognitoAuthenticationProvider: null, cognitoAuthenticationType: null, cognitoIdentityId: null, cognitoIdentityPoolId: null, sourceIp: "64.252.141.131", user: null, userAgent: "PostmanRuntime/2.4.5", userArn: null }, path: "/", requestId: "", resourceId: randomString(6), resourcePath: "/{proxy+}", requestTimeEpoch: Date.now(), stage: "testStage" }, resource: "/{proxy+}", stageVariables: null }; /** * Create a fake ProxyEvent object that can be passed into the handler returned * from getLambdaHandler(). */ function createTestProxyEvent(url = "/", method = "GET", overrides = {}) { const heavyUrl = new url_1.URL(url, "https://example.org/"); const mixedQueryStringParams = heavyUrl.search ? querystring.parse(heavyUrl.search.substring(1)) : null; return Object.assign(Object.assign(Object.assign({}, defaultTestProxyEvent), overrides), { headers: Object.assign(Object.assign({}, defaultTestProxyEvent.headers), overrides === null || overrides === void 0 ? void 0 : overrides.headers), multiValueHeaders: Object.assign(Object.assign({}, defaultTestProxyEvent.multiValueHeaders), overrides === null || overrides === void 0 ? void 0 : overrides.multiValueHeaders), requestContext: Object.assign(Object.assign(Object.assign({}, defaultTestProxyEvent.requestContext), overrides.requestContext ? overrides.requestContext : {}), { httpMethod: method, requestId: uuid.v4() }), httpMethod: method, path: heavyUrl.pathname, queryStringParameters: deduplicateQueryStringParameters(mixedQueryStringParams), multiValueQueryStringParameters: normalizeMultiValueQueryStringParameters(mixedQueryStringParams) }); } exports.createTestProxyEvent = createTestProxyEvent; /** * Turn a query params object that allows for duplicate query string values into one that doesn't. * Empirically API Gateway takes the last version on duplicates. */ function deduplicateQueryStringParameters(params) { if (params == null) { return null; } const queryStringParameters = {}; for (const key in params) { const value = params[key]; if (Array.isArray(value)) { queryStringParameters[key] = value[value.length - 1]; } else { queryStringParameters[key] = value; } } return queryStringParameters; } function normalizeMultiValueQueryStringParameters(params) { if (params == null) { return null; } const multiValueQueryStringParameters = {}; for (const key in params) { const value = params[key]; if (Array.isArray(value)) { multiValueQueryStringParameters[key] = value; } else { multiValueQueryStringParameters[key] = [value]; } } return multiValueQueryStringParameters; } //# sourceMappingURL=createTestProxyEvent.js.map