123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.retrieveRoleInfo = exports.printSourceDownloadLink = exports.displayExtInfo = void 0;
- const clc = require("colorette");
- const { marked } = require("marked");
- const TerminalRenderer = require("marked-terminal");
- const utils = require("../utils");
- const extensionsHelper_1 = require("./extensionsHelper");
- const logger_1 = require("../logger");
- const error_1 = require("../error");
- const types_1 = require("./types");
- const iam = require("../gcp/iam");
- const secretsUtils_1 = require("./secretsUtils");
- marked.setOptions({
- renderer: new TerminalRenderer(),
- });
- const TASKS_ROLE = "cloudtasks.enqueuer";
- const TASKS_API = "cloudtasks.googleapis.com";
- async function displayExtInfo(extensionName, publisher, spec, published = false) {
- const lines = [];
- lines.push(`**Name**: ${spec.displayName}`);
- if (publisher) {
- lines.push(`**Publisher**: ${publisher}`);
- }
- if (spec.description) {
- lines.push(`**Description**: ${spec.description}`);
- }
- if (published) {
- if (spec.license) {
- lines.push(`**License**: ${spec.license}`);
- }
- if (spec.sourceUrl) {
- lines.push(`**Source code**: ${spec.sourceUrl}`);
- }
- }
- const apis = impliedApis(spec);
- if (apis.length) {
- lines.push(displayApis(apis));
- }
- const roles = impliedRoles(spec);
- if (roles.length) {
- lines.push(await displayRoles(roles));
- }
- if (lines.length > 0) {
- utils.logLabeledBullet(extensionsHelper_1.logPrefix, `information about '${clc.bold(extensionName)}':`);
- const infoStr = lines.join("\n");
- const formatted = marked(infoStr).replace(/\n+$/, "\n");
- logger_1.logger.info(formatted);
- return lines;
- }
- else {
- throw new error_1.FirebaseError("Error occurred during installation: cannot parse info from source spec", {
- context: {
- spec: spec,
- extensionName: extensionName,
- },
- });
- }
- }
- exports.displayExtInfo = displayExtInfo;
- function printSourceDownloadLink(sourceDownloadUri) {
- const sourceDownloadMsg = `Want to review the source code that will be installed? Download it here: ${sourceDownloadUri}`;
- utils.logBullet(marked(sourceDownloadMsg));
- }
- exports.printSourceDownloadLink = printSourceDownloadLink;
- async function retrieveRoleInfo(role) {
- const res = await iam.getRole(role);
- return ` ${res.title} (${res.description})`;
- }
- exports.retrieveRoleInfo = retrieveRoleInfo;
- async function displayRoles(roles) {
- const lines = await Promise.all(roles.map((role) => {
- return retrieveRoleInfo(role.role);
- }));
- return clc.bold("**Roles granted to this Extension**:\n") + lines.join("\n");
- }
- function displayApis(apis) {
- const lines = apis.map((api) => {
- return ` ${api.apiName} (${api.reason})`;
- });
- return "**APIs used by this Extension**:\n" + lines.join("\n");
- }
- function usesTasks(spec) {
- return spec.resources.some((r) => { var _a; return r.type === types_1.FUNCTIONS_RESOURCE_TYPE && ((_a = r.properties) === null || _a === void 0 ? void 0 : _a.taskQueueTrigger) !== undefined; });
- }
- function impliedRoles(spec) {
- var _a, _b, _c;
- const roles = [];
- if ((0, secretsUtils_1.usesSecrets)(spec) && !((_a = spec.roles) === null || _a === void 0 ? void 0 : _a.some((r) => r.role === secretsUtils_1.SECRET_ROLE))) {
- roles.push({
- role: secretsUtils_1.SECRET_ROLE,
- reason: "Allows the extension to read secret values from Cloud Secret Manager",
- });
- }
- if (usesTasks(spec) && !((_b = spec.roles) === null || _b === void 0 ? void 0 : _b.some((r) => r.role === TASKS_ROLE))) {
- roles.push({
- role: TASKS_ROLE,
- reason: "Allows the extension to enqueue Cloud Tasks",
- });
- }
- return roles.concat((_c = spec.roles) !== null && _c !== void 0 ? _c : []);
- }
- function impliedApis(spec) {
- var _a, _b;
- const apis = [];
- if (usesTasks(spec) && !((_a = spec.apis) === null || _a === void 0 ? void 0 : _a.some((a) => a.apiName === TASKS_API))) {
- apis.push({
- apiName: TASKS_API,
- reason: "Allows the extension to enqueue Cloud Tasks",
- });
- }
- return apis.concat((_b = spec.apis) !== null && _b !== void 0 ? _b : []);
- }
|