GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: //usr/local/lib/node_modules/firebase-tools/lib/extensions/askUserForEventsConfig.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.askForEventArcLocation = exports.EXTENSIONS_DEFAULT_EVENT_ARC_REGION = exports.ALLOWED_EVENT_ARC_REGIONS = exports.askShouldCollectEventsConfig = exports.askForAllowedEventTypes = exports.getEventArcChannel = exports.askForEventsConfig = exports.checkAllowedEventTypesResponse = void 0;
const prompt_1 = require("../prompt");
const extensionsApi = require("../extensions/extensionsApi");
const utils = require("../utils");
const clc = require("colorette");
const logger_1 = require("../logger");
const marked_1 = require("marked");
function checkAllowedEventTypesResponse(response, validEvents) {
    const validEventTypes = validEvents.map((e) => e.type);
    if (response.length === 0) {
        return false;
    }
    for (const e of response) {
        if (!validEventTypes.includes(e)) {
            utils.logWarning(`Unexpected event type '${e}' was configured to be emitted. This event type is not part of the extension spec.`);
            return false;
        }
    }
    return true;
}
exports.checkAllowedEventTypesResponse = checkAllowedEventTypesResponse;
async function askForEventsConfig(events, projectId, instanceId) {
    var _a, _b;
    logger_1.logger.info(`\n${clc.bold("Enable Events")}: ${await (0, marked_1.marked)("If you enable events, you can write custom event handlers ([https://firebase.google.com/docs/extensions/install-extensions#eventarc](https://firebase.google.com/docs/extensions/install-extensions#eventarc)) that respond to these events.\n\nYou can always enable or disable events later. Events will be emitted via Eventarc. Fees apply ([https://cloud.google.com/eventarc/pricing](https://cloud.google.com/eventarc/pricing)).")}`);
    if (!(await askShouldCollectEventsConfig())) {
        return undefined;
    }
    let existingInstance;
    try {
        existingInstance = instanceId
            ? await extensionsApi.getInstance(projectId, instanceId)
            : undefined;
    }
    catch (_c) {
    }
    const preselectedTypes = (_a = existingInstance === null || existingInstance === void 0 ? void 0 : existingInstance.config.allowedEventTypes) !== null && _a !== void 0 ? _a : [];
    const oldLocation = (_b = existingInstance === null || existingInstance === void 0 ? void 0 : existingInstance.config.eventarcChannel) === null || _b === void 0 ? void 0 : _b.split("/")[3];
    const location = await askForEventArcLocation(oldLocation);
    const channel = getEventArcChannel(projectId, location);
    const allowedEventTypes = await askForAllowedEventTypes(events, preselectedTypes);
    return { channel, allowedEventTypes };
}
exports.askForEventsConfig = askForEventsConfig;
function getEventArcChannel(projectId, location) {
    return `projects/${projectId}/locations/${location}/channels/firebase`;
}
exports.getEventArcChannel = getEventArcChannel;
async function askForAllowedEventTypes(eventDescriptors, preselectedTypes) {
    let valid = false;
    let response = [];
    const eventTypes = eventDescriptors.map((e, index) => ({
        checked: false,
        name: `${index + 1}. ${e.type}\n   ${e.description}`,
        value: e.type,
    }));
    while (!valid) {
        response = await (0, prompt_1.promptOnce)({
            name: "selectedEventTypesInput",
            type: "checkbox",
            default: preselectedTypes !== null && preselectedTypes !== void 0 ? preselectedTypes : [],
            message: `Please select the events [${eventTypes.length} types total] that this extension is permitted to emit. ` +
                "You can implement your own handlers that trigger when these events are emitted to customize the extension's behavior. ",
            choices: eventTypes,
            pageSize: 20,
        });
        valid = checkAllowedEventTypesResponse(response, eventDescriptors);
    }
    return response.filter((e) => e !== "");
}
exports.askForAllowedEventTypes = askForAllowedEventTypes;
async function askShouldCollectEventsConfig() {
    return (0, prompt_1.promptOnce)({
        type: "confirm",
        name: "shouldCollectEvents",
        message: `Would you like to enable events?`,
        default: false,
    });
}
exports.askShouldCollectEventsConfig = askShouldCollectEventsConfig;
exports.ALLOWED_EVENT_ARC_REGIONS = [
    "us-central1",
    "us-west1",
    "europe-west4",
    "asia-northeast1",
];
exports.EXTENSIONS_DEFAULT_EVENT_ARC_REGION = "us-central1";
async function askForEventArcLocation(preselectedLocation) {
    let valid = false;
    let location = "";
    while (!valid) {
        location = await (0, prompt_1.promptOnce)({
            name: "input",
            type: "list",
            default: preselectedLocation !== null && preselectedLocation !== void 0 ? preselectedLocation : exports.EXTENSIONS_DEFAULT_EVENT_ARC_REGION,
            message: "Which location would you like the Eventarc channel to live in? We recommend using the default option. A channel location that differs from the extension's Cloud Functions location can incur egress cost.",
            choices: exports.ALLOWED_EVENT_ARC_REGIONS.map((e) => ({ checked: false, value: e })),
        });
        valid = exports.ALLOWED_EVENT_ARC_REGIONS.includes(location);
        if (!valid) {
            utils.logWarning(`Unexpected EventArc region '${location}' was specified. Allowed regions: ${exports.ALLOWED_EVENT_ARC_REGIONS.join(", ")}`);
        }
    }
    return location;
}
exports.askForEventArcLocation = askForEventArcLocation;