UNPKG

@blocklet/uploader-server

Version:

blocklet upload server

102 lines (101 loc) 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initCompanion = initCompanion; var _companion = require("@uppy/companion"); var _bodyParser = _interopRequireDefault(require("body-parser")); var _expressSession = _interopRequireDefault(require("express-session")); var _crypto = _interopRequireDefault(require("crypto")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const secret = _crypto.default.randomBytes(32).toString("hex"); const REWRITE_500_STATUS_CODE = 400; function initCompanion({ path, express, providerOptions, ...restProps }) { const app = express(); app.use(_bodyParser.default.json()); app.use((0, _expressSession.default)({ secret })); let dynamicProviderOptions = providerOptions; const companionOptions = { secret, providerOptions, // unused server: { protocol: "https", host: "UNUSED_HOST", // unused path: "UNUSED_PATH" // unused }, filePath: path, streamingUpload: true, metrics: false, ...restProps }; const newCompanion = (0, _companion.app)(companionOptions); const { app: companionApp } = newCompanion; app.all("*", (req, res, next) => { let hackerCompanion = {}; Object.defineProperty(req, "companion", { get() { return hackerCompanion; }, set(value) { hackerCompanion = value; hackerCompanion.options.providerOptions = dynamicProviderOptions; } }); const originalStatus = res.status.bind(res); const originalSendStatus = res.sendStatus.bind(res); const originalWriteHead = res.writeHead.bind(res); res.status = code => { if (code >= 500) { return originalStatus(REWRITE_500_STATUS_CODE); } return originalStatus(code); }; res.sendStatus = code => { if (code >= 500) { return originalSendStatus(REWRITE_500_STATUS_CODE); } return originalSendStatus(code); }; res.writeHead = (statusCode, ...args) => { if (res.headersSent) { return originalWriteHead(statusCode, ...args); } const newStatusCode = statusCode >= 500 ? REWRITE_500_STATUS_CODE : statusCode; return originalWriteHead(newStatusCode, ...args); }; let _statusCode = res.statusCode; Object.defineProperty(res, "statusCode", { configurable: true, // Allow further redefinition if necessary enumerable: true, get() { return _statusCode; }, set(code) { if (code >= 500) { _statusCode = REWRITE_500_STATUS_CODE; } else { _statusCode = code; } } }); next(); }, companionApp); newCompanion.handle = app; newCompanion.setProviderOptions = options => { dynamicProviderOptions = options; }; return newCompanion; }