UNPKG

@bitblit/epsilon

Version:

Tiny adapter to simplify building API gateway Lambda APIS

150 lines (138 loc) 6.83 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.TestErrorServer = void 0; const common_1 = require("@bitblit/ratchet/common"); const net_1 = __importDefault(require("net")); /** * A simplistic server for testing your lambdas locally */ class TestErrorServer { constructor(port = 9999) { this.port = port; this.aborted = false; } runServer() { return __awaiter(this, void 0, void 0, function* () { common_1.Logger.info('Starting Test Error net server on port %d', this.port); return new Promise((res, rej) => { const server = new net_1.default.Server({}); // The server listens to a socket for a client to make a connection request. // Think of a socket as an end point. server.listen(this.port, () => { common_1.Logger.info('Server listening for connection requests on socket localhost: %s', this.port); }); // When a client requests a connection with the server, the server creates a new // socket dedicated to that client. server.on('connection', (socket) => __awaiter(this, void 0, void 0, function* () { common_1.Logger.info('X: A new connection has been established.'); //await PromiseRatchet.wait(30000); // Now that a TCP connection has been established, the server can send data to // the client by writing to its socket. socket.write('Hello, client.'); // The server can also receive data from the client by reading from its socket. socket.on('data', (chunk) => { common_1.Logger.info('Data received from client: %s', chunk); }); // When the client requests to end the TCP connection with the server, the server // ends the connection. socket.on('end', () => { common_1.Logger.info('Closing connection with the client'); }); // Don't forget to catch error, for your own sake. socket.on('error', (err) => { common_1.Logger.info('Error: %s', err); }); })); /* this.server = http.createServer(this.requestHandler.bind(this)).listen(this.port); Logger.info('Test Error server is listening'); // Also listen for SIGINT process.on('SIGINT', () => { Logger.info('Caught SIGINT - shutting down test server...'); this.aborted = true; }); return this.checkFinished(); */ }); }); } requestHandler(request, response) { return __awaiter(this, void 0, void 0, function* () { common_1.Logger.info('Got request %d - closing socket', request); request.setTimeout(100); //await PromiseRatchet.wait(3000); response.end('x'); /*response.socket.end(() => { //return null; }); */ /*(e) => { Logger.info('Out: %s', e); }); */ /*const context: Context = { awsRequestId: 'LOCAL-' + StringRatchet.createType4Guid(), getRemainingTimeInMillis(): number { return 300000; }, } as Context; //TBD const evt: APIGatewayEvent = await this.messageToApiGatewayEvent(request, context); const logEventLevel: LoggerLevelName = EventUtil.eventIsAGraphQLIntrospection(evt) ? LoggerLevelName.silly : LoggerLevelName.info; Logger.logByLevel(logEventLevel, 'Processing event: %j', evt); if (evt.path == '/epsilon-poison-pill') { this.aborted = true; return true; } else { const result: ProxyResult = await this.globalHandler.lambdaHandler(evt, context); const written: boolean = await this.writeProxyResultToServerResponse(result, response); return written; } */ }); } /* private async writeProxyResultToServerResponse(proxyResult: ProxyResult, response: ServerResponse): Promise<boolean> { const isGraphQLSchemaResponse: boolean = !!proxyResult && !!proxyResult.body && proxyResult.body.indexOf('{"data":{"__schema"') > -1; if (!isGraphQLSchemaResponse) { Logger.debug('Result: %j', proxyResult); } response.statusCode = proxyResult.statusCode; if (proxyResult.headers) { Object.keys(proxyResult.headers).forEach((hk) => { response.setHeader(hk, String(proxyResult.headers[hk])); }); } if (proxyResult.multiValueHeaders) { Object.keys(proxyResult.multiValueHeaders).forEach((hk) => { response.setHeader(hk, proxyResult.multiValueHeaders[hk].join(',')); }); } const toWrite: Buffer = proxyResult.isBase64Encoded ? Buffer.from(proxyResult.body, 'base64') : Buffer.from(proxyResult.body); response.end(toWrite); return !!proxyResult.body; } */ static runFromCliArgs(args) { return __awaiter(this, void 0, void 0, function* () { common_1.Logger.info('test-error-server requested (cli is %s) - starting', process === null || process === void 0 ? void 0 : process.argv); const testServer = new TestErrorServer(); yield testServer.runServer(); common_1.Logger.info('Got res server'); process.exit(0); }); } } exports.TestErrorServer = TestErrorServer; //# sourceMappingURL=test-error-server.js.map