PHP WebShell

Текущая директория: /opt/BitGoJS/modules/blockapis/dist/src

Просмотр файла: CachingHttpClient.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CachingHttpClient = void 0;
const url_1 = require("url");
const path = require("path");
const crypto = require("crypto");
const fs_1 = require("fs");
const BaseHttpClient_1 = require("./BaseHttpClient");
function stripApiTokens(uri) {
    const url = new url_1.URL(uri, 'http://localhost');
    url.searchParams.delete('key');
    return url.pathname + url.searchParams;
}
class CachingHttpClient {
    constructor(cacheDir, { client = new BaseHttpClient_1.BaseHttpClient(), isHttpEnabled = true } = {}) {
        this.cacheDir = cacheDir;
        this.client = client;
        this.isHttpEnabled = isHttpEnabled;
    }
    cachePath(p) {
        p = stripApiTokens(p).replace(/[^a-z0-9]/gi, '_');
        const hash = crypto.createHash('sha256').update(p).digest().toString('hex').slice(0, 8);
        return path.join(this.cacheDir, `${p}.${hash}.json`);
    }
    async readCache(path) {
        let data;
        try {
            data = await fs_1.promises.readFile(this.cachePath(path), 'utf8');
        }
        catch (e) {
            if (e.code === 'ENOENT') {
                return;
            }
            throw e;
        }
        return {
            map(f) {
                return f(JSON.parse(data));
            },
        };
    }
    async writeCache(path, data) {
        await fs_1.promises.writeFile(this.cachePath(path), JSON.stringify(data, null, 2), 'utf8');
    }
    async get(path) {
        const cached = await this.readCache(path);
        if (cached) {
            return cached;
        }
        if (!this.isHttpEnabled) {
            throw new Error(`networking disabled`);
        }
        const resp = await this.client.get(path);
        await this.writeCache(path, resp.map((v) => v));
        return resp;
    }
    withBaseUrl(baseUrl) {
        return new CachingHttpClient(this.cacheDir, {
            client: this.client.withBaseUrl(baseUrl),
            isHttpEnabled: this.isHttpEnabled,
        });
    }
}
exports.CachingHttpClient = CachingHttpClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FjaGluZ0h0dHBDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQ2FjaGluZ0h0dHBDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTBCO0FBQzFCLDZCQUE2QjtBQUM3QixpQ0FBaUM7QUFDakMsMkJBQW9DO0FBRXBDLHFEQUF3RTtBQUV4RSxTQUFTLGNBQWMsQ0FBQyxHQUFXO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFhLGlCQUFpQjtJQUk1QixZQUFvQixRQUFnQixFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksK0JBQWMsRUFBRSxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQTlFLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTO1FBQ2pCLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFJLElBQVk7UUFDN0IsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxHQUFHLE1BQU0sYUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSyxDQUFTLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLENBQUksQ0FBaUI7Z0JBQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFJLElBQVksRUFBRSxJQUFPO1FBQ3ZDLE1BQU0sYUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBSSxJQUFZO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FDbkIsSUFBSSxFQUNKLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNuQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWU7UUFDekIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDMUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM0RELDhDQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcblxuaW1wb3J0IHsgQmFzZUh0dHBDbGllbnQsIEh0dHBDbGllbnQsIFJlc3BvbnNlIH0gZnJvbSAnLi9CYXNlSHR0cENsaWVudCc7XG5cbmZ1bmN0aW9uIHN0cmlwQXBpVG9rZW5zKHVyaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmksICdodHRwOi8vbG9jYWxob3N0Jyk7XG4gIHVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKCdrZXknKTtcbiAgcmV0dXJuIHVybC5wYXRobmFtZSArIHVybC5zZWFyY2hQYXJhbXM7XG59XG5cbmV4cG9ydCBjbGFzcyBDYWNoaW5nSHR0cENsaWVudCBpbXBsZW1lbnRzIEh0dHBDbGllbnQge1xuICBjbGllbnQ6IEJhc2VIdHRwQ2xpZW50O1xuICBpc0h0dHBFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZywgeyBjbGllbnQgPSBuZXcgQmFzZUh0dHBDbGllbnQoKSwgaXNIdHRwRW5hYmxlZCA9IHRydWUgfSA9IHt9KSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pc0h0dHBFbmFibGVkID0gaXNIdHRwRW5hYmxlZDtcbiAgfVxuXG4gIGNhY2hlUGF0aChwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHAgPSBzdHJpcEFwaVRva2VucyhwKS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksICdfJyk7XG4gICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUocCkuZGlnZXN0KCkudG9TdHJpbmcoJ2hleCcpLnNsaWNlKDAsIDgpO1xuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5jYWNoZURpciwgYCR7cH0uJHtoYXNofS5qc29uYCk7XG4gIH1cblxuICBhc3luYyByZWFkQ2FjaGU8VD4ocGF0aDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZTxUPiB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmNhY2hlUGF0aChwYXRoKSwgJ3V0ZjgnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoKGUgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtYXA8Vj4oZjogKGJvZHk6IFQpID0+IFYpIHtcbiAgICAgICAgcmV0dXJuIGYoSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyB3cml0ZUNhY2hlPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNhY2hlUGF0aChwYXRoKSwgSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMiksICd1dGY4Jyk7XG4gIH1cblxuICBhc3luYyBnZXQ8VD4ocGF0aDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMucmVhZENhY2hlPFQ+KHBhdGgpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0h0dHBFbmFibGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5ldHdvcmtpbmcgZGlzYWJsZWRgKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldDxUPihwYXRoKTtcbiAgICBhd2FpdCB0aGlzLndyaXRlQ2FjaGUoXG4gICAgICBwYXRoLFxuICAgICAgcmVzcC5tYXAoKHYpID0+IHYpXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcDtcbiAgfVxuXG4gIHdpdGhCYXNlVXJsKGJhc2VVcmw6IHN0cmluZyk6IEh0dHBDbGllbnQge1xuICAgIHJldHVybiBuZXcgQ2FjaGluZ0h0dHBDbGllbnQodGhpcy5jYWNoZURpciwge1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudC53aXRoQmFzZVVybChiYXNlVXJsKSxcbiAgICAgIGlzSHR0cEVuYWJsZWQ6IHRoaXMuaXNIdHRwRW5hYmxlZCxcbiAgICB9KTtcbiAgfVxufVxuIl19

Выполнить команду


Для локальной разработки. Не используйте в интернете!