UNPKG

@blocklet/uploader-server

Version:

blocklet upload server

96 lines (95 loc) 2.67 kB
import { app as companionAppLib } from "@uppy/companion"; import bodyParser from "body-parser"; import session from "express-session"; import crypto from "crypto"; const secret = crypto.randomBytes(32).toString("hex"); const REWRITE_500_STATUS_CODE = 400; export function initCompanion({ path, express, providerOptions, ...restProps }) { const app = express(); app.use(bodyParser.json()); app.use(session({ 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 = companionAppLib(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; }