UNPKG

@bitblit/epsilon

Version:

Tiny adapter to simplify building API gateway Lambda APIS

160 lines 7.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const event_util_1 = require("./event-util"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); describe('#eventUtil', function () { it('should extract pieces', function () { const evt = { httpMethod: 'GET', path: '/cw/meta/server', body: null, headers: { Host: 'api.test.com', 'X-Forwarded-Proto': 'https', }, multiValueHeaders: { Host: ['api.test.com'], 'X-Forwarded-Proto': ['https'], }, multiValueQueryStringParameters: null, isBase64Encoded: false, pathParameters: null, queryStringParameters: null, stageVariables: null, resource: '/{proxy+}', requestContext: { httpMethod: 'GET', accountId: '1234', apiId: '7890', stage: 'v0', path: '/cw/meta/server', domainName: 'api.test.com', identity: null, requestId: 'asdf1234', requestTimeEpoch: 1234, resourceId: '1234', resourcePath: '/{proxy+}', }, }; expect(event_util_1.EventUtil.extractStage(evt)).toEqual('cw'); expect(event_util_1.EventUtil.extractApiGatewayStage(evt)).toEqual('v0'); expect(event_util_1.EventUtil.extractFullPrefix(evt)).toEqual('https://api.test.com/cw'); expect(event_util_1.EventUtil.extractFullPath(evt)).toEqual('https://api.test.com/cw/meta/server'); expect(event_util_1.EventUtil.extractHostHeader(evt)).toEqual('api.test.com'); }); it('should fix still encoded query params', function () { const evt = { httpMethod: 'GET', path: '/cw/meta/server', body: null, headers: { Host: 'api.test.com', 'X-Forwarded-Proto': 'https', }, multiValueHeaders: { Host: ['api.test.com'], 'X-Forwarded-Proto': ['https'], }, isBase64Encoded: false, pathParameters: null, multiValueQueryStringParameters: { a: ['b'], 'amp;c': ['d'], }, queryStringParameters: { a: 'b', 'amp;c': 'd', }, stageVariables: null, resource: '/{proxy+}', requestContext: { httpMethod: 'GET', accountId: '1234', apiId: '7890', stage: 'v0', path: '/cw/meta/server', domainName: 'api.test.com', identity: null, requestId: 'asdf1234', requestTimeEpoch: 1234, resourceId: '1234', resourcePath: '/{proxy+}', }, }; expect(evt.queryStringParameters['a']).toBeTruthy(); expect(evt.queryStringParameters['amp;c']).toBeTruthy(); expect(evt.queryStringParameters['c']).toBeUndefined(); event_util_1.EventUtil.fixStillEncodedQueryParams(evt); expect(evt.queryStringParameters['a']).toBeTruthy(); expect(evt.queryStringParameters['amp;c']).toBeUndefined(); expect(evt.queryStringParameters['c']).toBeTruthy(); }); it('should extract basic auth from headers', function () { const evt = { httpMethod: 'GET', path: '/cw/meta/server', body: null, headers: { Host: 'api.test.com', 'X-Forwarded-Proto': 'https', Authorization: 'Basic dGVzdHVzZXI6dGVzdHBhc3M=', }, multiValueHeaders: { Host: ['api.test.com'], 'X-Forwarded-Proto': ['https'], Authorization: ['Basic dGVzdHVzZXI6dGVzdHBhc3M='], }, isBase64Encoded: false, pathParameters: null, multiValueQueryStringParameters: { a: ['b'], 'amp;c': ['d'], }, queryStringParameters: { a: 'b', 'amp;c': 'd', }, stageVariables: null, resource: '/{proxy+}', requestContext: { httpMethod: 'GET', accountId: '1234', apiId: '7890', stage: 'v0', path: '/cw/meta/server', domainName: 'api.test.com', identity: null, requestId: 'asdf1234', requestTimeEpoch: 1234, resourceId: '1234', resourcePath: '/{proxy+}', }, }; const basic = event_util_1.EventUtil.extractBasicAuthenticationToken(evt); expect(basic).toBeTruthy(); expect(basic.username).toBeTruthy(); expect(basic.password).toBeTruthy(); expect(basic.username).toEqual('testuser'); expect(basic.password).toEqual('testpass'); }); it('should add a token to an event, along with downstream stuff', function () { const evt = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../test-data/sample-json/sample-request-1.json')).toString()); const jwtToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1ODg1MzY3NzU4ODcsImlzcyI6Im5lb24uYWRvbW5pLmNvbSIsInN1YiI6ImJpdGJsaXRAZ21haWwuY29tIiwiaWF0IjoxNTg4NTMzMTc1ODg3LCJ1c2VyIjp7ImlkIjo2LCJmaXJzdE5hbWUiOiJDaHJpcyIsImxhc3ROYW1lIjoiV2Vpc3MiLCJjb21wYW55IjoiQWRvbW5pIiwiZW1haWwiOiJiaXRibGl0QGdtYWlsLmNvbSIsImN1c3RvbWVyVHlwZSI6IkFETUlOIn0sImFjdGluZ1VzZXJJZCI6NiwiZ2xvYmFsIjp0cnVlLCJhZG1pbiI6eyJpZCI6NiwiZmlyc3ROYW1lIjoiQ2hyaXMiLCJsYXN0TmFtZSI6IldlaXNzIiwiY29tcGFueSI6IkFkb21uaSIsImVtYWlsIjoiYml0YmxpdEBnbWFpbC5jb20iLCJjdXN0b21lclR5cGUiOiJBRE1JTiJ9LCJzdWJVc2VycyI6W119.mwRSek5GwkvxpN44UTp49W6_9U_ARsFXThAyiqaF-eQ'; event_util_1.EventUtil.applyTokenToEventForTesting(evt, jwtToken); const roundTripTokenString = event_util_1.EventUtil.extractBearerTokenFromEvent(evt); expect(roundTripTokenString).toEqual(jwtToken); }); it('should check if an event is a graphql introspection', function () { const evt1 = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../test-data/sample-json/sample-request-1.json')).toString()); const evt2 = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../test-data/sample-json/sample-gql-introspection.json')).toString()); const res1 = event_util_1.EventUtil.eventIsAGraphQLIntrospection(evt1); const res2 = event_util_1.EventUtil.eventIsAGraphQLIntrospection(evt2); expect(res1).toBeFalsy(); expect(res2).toBeTruthy(); }); }); //# sourceMappingURL=event-util.spec.js.map