@bitblit/epsilon
Version:
Tiny adapter to simplify building API gateway Lambda APIS
99 lines • 4.68 kB
JavaScript
;
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