@raiden_network/raiden-cli
Version:
Raiden Light Client standalone app with a REST API via HTTP
62 lines (61 loc) • 2.86 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeApp = void 0;
/* eslint-disable import/no-named-as-default-member */
const cors_1 = __importDefault(require("cors"));
const ethers_1 = require("ethers");
const express_1 = __importDefault(require("express"));
const http_errors_1 = __importDefault(require("http-errors"));
const morgan_1 = __importDefault(require("morgan"));
const path_1 = __importDefault(require("path"));
const api_v1_1 = require("./routes/api.v1");
const { fetchJson } = ethers_1.utils;
function notFoundHandler(_request, _response, next) {
next((0, http_errors_1.default)(404, 'Undefined resource'));
}
function internalErrorHandler(error, _request, _response, next) {
next((0, http_errors_1.default)(500, error.message));
}
const apiEndpoint = '/api/v1';
const rpcEndpoint = '/rpc';
const uiEndpoint = '/ui';
/**
* Create an app from the Cli
*
* @param this - Cli object
* @param corsOrigin - Which corsOrigin to accept, if any
* @param webUi - Whether to enable webUI (needs `yarn build:webui` first)
* @returns Express app
*/
function makeApp(corsOrigin, webUi) {
const app = (0, express_1.default)();
app.use(express_1.default.json());
if (corsOrigin)
app.use((0, cors_1.default)({ origin: corsOrigin }));
const loggerMiddleware = (0, morgan_1.default)(':remote-addr - :remote-user ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"');
app.use(loggerMiddleware);
app.use(apiEndpoint, api_v1_1.makeApiV1Router.call(this));
if (webUi) {
this.log.info(`Serving Raiden webUI at ${uiEndpoint}`);
// proxy endpoint to provider, passthrough version of JsonRpcProvider.send
app.post(rpcEndpoint, (request, response) => fetchJson(this.raiden.provider.connection, JSON.stringify(request.body)).then((...args) => response.send(...args), (err) => response.status(400).send(err)));
app.get(`${uiEndpoint}/assets/config/config*.json`, (_, response) => response.json({
raiden: apiEndpoint,
web3: rpcEndpoint,
reveal_timeout: this.raiden.config.revealTimeout,
settle_timeout: this.raiden.settleTimeout,
environment_type: 'development',
}));
app.use(uiEndpoint, express_1.default.static(path_1.default.join(__dirname, 'ui')));
// SPA fallback
app.get(`${uiEndpoint}/*`, (_, response) => response.sendFile(path_1.default.join(__dirname, 'ui', 'index.html')));
app.get('/', (_, response) => response.redirect(301, uiEndpoint));
}
app.use(notFoundHandler);
app.use(internalErrorHandler.bind(this));
return app;
}
exports.makeApp = makeApp;