UNPKG

onions-node

Version:

onions-node backend

93 lines (86 loc) 2.37 kB
const express = require('express') const url = require('url') const multer = require('multer') const apiProxy = require('@razor-node/api-proxy') module.exports = (proxies, config, logger) => { const storage = multer.memoryStorage() const upload = multer({ storage, }) const {appInfo} = config const createProxyOptions = (options = {}) => { return { appInfo, logger: logger, logLimit: 50000, needSign: true, beforeRequest(config) { logger.info(`START PROXY REQUEST=> ${JSON.stringify(config)}`) return config; }, ...options } } const noSignProxyOptions = { logger: logger, logLimit: 50000, needSign: false, beforeRequest(config) { logger.info(`START PROXY REQUEST=> ${JSON.stringify(config)}`) return config; } } const router = new express.Router() Object.keys(proxies).forEach(key => { let proxyConfig = proxies[key] if (typeof proxyConfig === 'string') { const urlObject = url.parse(proxyConfig) proxyConfig = { signType: 'swc', url: proxyConfig, domain: `${urlObject.origin}` } } const {options = {}} = proxyConfig let urlPrefix = `/${key}/*` switch (proxyConfig.signType) { case 'swc': router.use(urlPrefix, upload.any(), apiProxy(proxyConfig.url, { ...createProxyOptions({}), ...options, })) break case 'keeper': if (!config.keeperAppInfo) { throw new Error('ProxyError: KeeperAppInfo is required') } router.use(urlPrefix, upload.any(), apiProxy(proxyConfig.url, { ...createProxyOptions({ needSign: true, signType: 'do', signRemoveEmptyParams: true, appInfo: config.keeperAppInfo, }), ...options, })) break case 'uds': router.use(urlPrefix, upload.any(), apiProxy(proxyConfig.url, { ...createProxyOptions({ needSign: true, signType: 'uds', signRemoveEmptyParams: true, }), ...options, })) break default: router.use(urlPrefix, upload.any(), apiProxy(proxyConfig.url, { ...noSignProxyOptions, ...options })) break } }) return router }