123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.initMiddleware = void 0;
- const apiv2_1 = require("../apiv2");
- const logger_1 = require("../logger");
- const utils = require("../utils");
- const SDK_PATH_REGEXP = /^\/__\/firebase\/([^/]+)\/([^/]+)$/;
- function initMiddleware(init) {
- return (req, res, next) => {
- const parsedUrl = new URL(req.url || "", `http://${req.headers.host}`);
- const match = RegExp(SDK_PATH_REGEXP).exec(parsedUrl.pathname);
- if (match) {
- const version = match[1];
- const sdkName = match[2];
- const u = new URL(`https://www.gstatic.com/firebasejs/${version}/${sdkName}`);
- const c = new apiv2_1.Client({ urlPrefix: u.origin, auth: false });
- const headers = {};
- const acceptEncoding = req.headers["accept-encoding"];
- if (typeof acceptEncoding === "string" && acceptEncoding) {
- headers["accept-encoding"] = acceptEncoding;
- }
- c.request({
- method: "GET",
- path: u.pathname,
- headers,
- responseType: "stream",
- resolveOnHTTPError: true,
- compress: false,
- })
- .then((sdkRes) => {
- if (sdkRes.status === 404) {
- return next();
- }
- for (const [key, value] of Object.entries(sdkRes.response.headers.raw())) {
- res.setHeader(key, value);
- }
- sdkRes.body.pipe(res);
- })
- .catch((e) => {
- utils.logLabeledWarning("hosting", `Could not load Firebase SDK ${sdkName} v${version}, check your internet connection.`);
- logger_1.logger.debug(e);
- });
- }
- else if (parsedUrl.pathname === "/__/firebase/init.js") {
- const query = parsedUrl.searchParams;
- res.setHeader("Content-Type", "application/javascript");
- if (query.get("useEmulator") === "true") {
- res.end(init.emulatorsJs);
- }
- else {
- res.end(init.js);
- }
- }
- else if (parsedUrl.pathname === "/__/firebase/init.json") {
- res.setHeader("Content-Type", "application/json");
- res.end(init.json);
- }
- else {
- next();
- }
- };
- }
- exports.initMiddleware = initMiddleware;
|