"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const apiv2_1 = require("../apiv2"); const api_1 = require("../api"); const proxy_1 = require("./proxy"); const error_1 = require("../error"); const logger_1 = require("../logger"); const projectUtils_1 = require("../projectUtils"); const cloudRunCache = {}; const apiClient = new apiv2_1.Client({ urlPrefix: api_1.cloudRunApiOrigin, apiVersion: "v1" }); async function getCloudRunUrl(rewrite, projectId) { var _a; const alreadyFetched = cloudRunCache[`${rewrite.run.region}/${rewrite.run.serviceId}`]; if (alreadyFetched) { return Promise.resolve(alreadyFetched); } const path = `/projects/${projectId}/locations/${rewrite.run.region || "us-central1"}/services/${rewrite.run.serviceId}`; try { logger_1.logger.info(`[hosting] Looking up Cloud Run service "${path}" for its URL`); const res = await apiClient.get(path); const url = (_a = res.body.status) === null || _a === void 0 ? void 0 : _a.url; if (!url) { throw new error_1.FirebaseError("Cloud Run URL doesn't exist in response."); } cloudRunCache[`${rewrite.run.region}/${rewrite.run.serviceId}`] = url; return url; } catch (err) { throw new error_1.FirebaseError(`Error looking up URL for Cloud Run service: ${err}`, { original: err, }); } } function default_1(options) { return async (rewrite) => { if (!rewrite.run) { return (0, proxy_1.errorRequestHandler)('Cloud Run rewrites must have a valid "run" field.'); } if (!rewrite.run.serviceId) { return (0, proxy_1.errorRequestHandler)("Cloud Run rewrites must supply a service ID."); } if (!rewrite.run.region) { rewrite.run.region = "us-central1"; } logger_1.logger.info(`[hosting] Cloud Run rewrite ${JSON.stringify(rewrite)} triggered`); const textIdentifier = `Cloud Run service "${rewrite.run.serviceId}" for region "${rewrite.run.region}"`; return getCloudRunUrl(rewrite, (0, projectUtils_1.needProjectId)(options)) .then((url) => (0, proxy_1.proxyRequestHandler)(url, textIdentifier)) .catch(proxy_1.errorRequestHandler); }; } exports.default = default_1;