import * as functions from 'firebase-functions'; import * as http from 'http'; const BUCKET_NAME = "target-bucket" // check original code idea https://stackoverflow.com/a/10435819 exports.rewriteGCSRequest = functions.https.onRequest((oreq: any, ores: any) => { const redirectPath = oreq.originalUrl === '/' ? '/index.html' : oreq.originalUrl const options = { // host to forward to host: 'storage.googleapis.com', // port to forward to port: 80, // path to forward to path: `${BUCKET_NAME}/${oreq.hostname}${redirectPath}`, // request method method: 'GET', // headers to send headers: oreq.headers, agent: httpAgent }; const creq = http .request(options, pres => { // set http status code based on proxied response ores.writeHead(pres.statusCode, pres.headers); // wait for data pres.on('data', chunk => { ores.write(chunk); }); pres.on('close', () => { // closed, let's end client request as well ores.end(); }); pres.on('end', () => { // finished, let's finish client request as well ores.end(); }); }) .on('error', e => { // we got an error console.error(e); try { // attempt to set error message and http status ores.writeHead(500); ores.write(e.message); } catch (error) { // ignore } ores.end(); }); creq.end(); })