Repository URL to install this package:
|
Version:
1.0.0 ▾
|
#!/usr/bin/env node
"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 });
const cafe_utility_1 = require("cafe-utility");
const http_1 = require("http");
const node_fetch_1 = __importDefault(require("node-fetch"));
const utility_1 = require("./utility");
main();
function main() {
const port = parseInt(cafe_utility_1.Arrays.getArgument(process.argv, 'port')) || parseInt(process.env.ETHERPROXY_PORT) || 9000;
const target = cafe_utility_1.Arrays.getArgument(process.argv, 'target') || process.env.ETHERPROXY_TARGET || "http://localhost:8545";
const expiry = parseInt(cafe_utility_1.Arrays.getArgument(process.argv, 'expiry')) || parseInt(process.env.ETHERPROXY_EXPIRY) || 2000;
const fastIndex = cafe_utility_1.Objects.createFastIndex();
const server = (0, http_1.createServer)((request, response) => __awaiter(this, void 0, void 0, function* () {
if (request.url === '/health' || request.url === '/readiness') {
try {
yield (0, node_fetch_1.default)(target, { timeout: 10000 });
response.statusCode = 200;
response.end('200 OK');
}
catch (error) {
console.error(error);
response.statusCode = 503;
response.end('503 Service Unavailable');
}
return;
}
const chunks = [];
request.on('data', (chunk) => {
chunks.push(chunk);
});
request.on('end', () => __awaiter(this, void 0, void 0, function* () {
try {
const context = {
method: request.method || 'GET',
url: target,
headers: request.headers,
body: Buffer.concat(chunks).toString('utf-8')
};
const parsedBody = JSON.parse(context.body);
const id = parsedBody.id;
delete parsedBody.id;
const key = JSON.stringify(parsedBody);
const cachedPromise = cafe_utility_1.Objects.getFromFastIndexWithExpiracy(fastIndex, key);
if (cachedPromise) {
process.stdout.write(`[~] Cache hit: ${key}\n`);
yield (0, utility_1.respondWithFetchPromise)(id, response, cachedPromise);
return;
}
process.stdout.write(`[~] Key: ${key}\n`);
delete context.headers.host;
delete context.headers['user-agent'];
delete context.headers['content-length'];
const responsePromise = (0, utility_1.fetchWithTimeout)(context.url, {
method: context.method,
headers: context.headers,
body: context.body
});
cafe_utility_1.Objects.pushToFastIndexWithExpiracy(fastIndex, key, responsePromise, expiry);
yield (0, utility_1.respondWithFetchPromise)(id, response, responsePromise);
}
catch (error) {
console.error(error);
response.statusCode = 503;
response.end('503 Service Unavailable');
}
}));
}));
server.listen(port);
console.log(`[~] Etherproxy is running on port ${port}`);
}