UNPKG

@bitblit/epsilon

Version:

Tiny adapter to simplify building API gateway Lambda APIS

99 lines 4.68 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalContainerServer = void 0; const common_1 = require("@bitblit/ratchet/common"); const http_1 = __importDefault(require("http")); const event_util_1 = require("./http/event-util"); const cross_fetch_1 = __importDefault(require("cross-fetch")); const local_server_1 = require("./local-server"); /** * A simplistic server for testing your lambdas locally */ class LocalContainerServer { constructor(port = 8889) { this.port = port; this.aborted = false; } runServer() { return __awaiter(this, void 0, void 0, function* () { return new Promise((res, rej) => { try { common_1.Logger.info('Starting Epsilon server on port %d', this.port); this.server = http_1.default.createServer(this.requestHandler.bind(this)).listen(this.port); common_1.Logger.info('Epsilon server is listening'); // Also listen for SIGINT process.on('SIGINT', () => { common_1.Logger.info('Caught SIGINT - shutting down test server...'); this.aborted = true; res(true); }); } catch (err) { common_1.Logger.error('Local server failed : %s', err, err); rej(err); } }); }); } requestHandler(request, response) { return __awaiter(this, void 0, void 0, function* () { const context = { awsRequestId: 'LOCAL-' + common_1.StringRatchet.createType4Guid(), getRemainingTimeInMillis() { return 300000; }, }; //TBD const evt = yield local_server_1.LocalServer.messageToApiGatewayEvent(request, context); const logEventLevel = event_util_1.EventUtil.eventIsAGraphQLIntrospection(evt) ? common_1.LoggerLevelName.silly : common_1.LoggerLevelName.info; common_1.Logger.logByLevel(logEventLevel, 'Processing event: %j', evt); if (evt.path == '/epsilon-poison-pill') { this.aborted = true; return true; } else { const url = 'http://localhost:8080/2015-03-31/functions/function/invocations'; try { const postResp = yield (0, cross_fetch_1.default)(url, { method: 'POST', body: JSON.stringify(evt) }); const respBody = yield postResp.json(); const result = respBody; const written = yield local_server_1.LocalServer.writeProxyResultToServerResponse(result, response, common_1.LoggerLevelName.debug); return written; } catch (err) { common_1.Logger.error('Failed: %s', err); return '{"bad":true}'; } } }); } static runFromCliArgs(args) { return __awaiter(this, void 0, void 0, function* () { try { common_1.Logger.setLevel(common_1.LoggerLevelName.debug); common_1.Logger.debug('Running local container server : %j', process === null || process === void 0 ? void 0 : process.argv); const testServer = new LocalContainerServer(); yield testServer.runServer(); common_1.Logger.info('Got res server'); process.exit(0); } catch (err) { common_1.Logger.error('Error : %s', err); process.exit(1); } }); } } exports.LocalContainerServer = LocalContainerServer; //# sourceMappingURL=local-container-server.js.map