Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
etherproxy / usr / share / etherproxy / app / dist / index.js
Size: Mime:
#!/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}`);
}