@bitblit/epsilon
Version:
Tiny adapter to simplify building API gateway Lambda APIS
150 lines (138 loc) • 6.83 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.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