probot
Version:
A framework for building GitHub Apps to automate and improve your workflow
93 lines • 3.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ManifestCreation = void 0;
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const js_yaml_1 = __importDefault(require("js-yaml"));
const update_dotenv_1 = __importDefault(require("update-dotenv"));
const probot_octokit_js_1 = require("./octokit/probot-octokit.js");
const load_package_json_js_1 = require("./helpers/load-package-json.js");
class ManifestCreation {
get pkg() {
return (0, load_package_json_js_1.loadPackageJson)();
}
async createWebhookChannel() {
try {
const SmeeClient = (await import("smee-client")).default;
const WEBHOOK_PROXY_URL = await SmeeClient.createChannel();
await this.updateEnv({
WEBHOOK_PROXY_URL,
});
return WEBHOOK_PROXY_URL;
}
catch (error) {
// Smee is not available, so we'll just move on
console.warn("Unable to connect to smee.io, try restarting your server.");
return void 0;
}
}
getManifest(pkg, baseUrl) {
let manifest = {};
try {
const file = node_fs_1.default.readFileSync(node_path_1.default.join(process.cwd(), "app.yml"), "utf8");
manifest = js_yaml_1.default.load(file);
}
catch (error) {
// App config does not exist, which is ok.
if (error.code !== "ENOENT") {
throw error;
}
}
const generatedManifest = JSON.stringify({
description: manifest.description || pkg.description,
hook_attributes: {
url: process.env.WEBHOOK_PROXY_URL || `${baseUrl}/`,
},
name: process.env.PROJECT_DOMAIN || manifest.name || pkg.name,
public: manifest.public || true,
redirect_url: `${baseUrl}/probot/setup`,
// TODO: add setup url
// setup_url:`${baseUrl}/probot/success`,
url: manifest.url || pkg.homepage || pkg.repository,
version: "v1",
...manifest,
});
return generatedManifest;
}
async createAppFromCode(code, probotOptions) {
const octokit = new probot_octokit_js_1.ProbotOctokit(probotOptions);
const options = {
...probotOptions,
code,
mediaType: {
previews: ["fury"], // needed for GHES 2.20 and older
},
...(process.env.GHE_HOST && {
baseUrl: `${process.env.GHE_PROTOCOL || "https"}://${process.env.GHE_HOST}/api/v3`,
}),
};
const response = await octokit.request("POST /app-manifests/:code/conversions", options);
const { id, client_id, client_secret, webhook_secret, pem } = response.data;
await this.updateEnv({
APP_ID: id.toString(),
PRIVATE_KEY: `"${pem}"`,
WEBHOOK_SECRET: webhook_secret,
GITHUB_CLIENT_ID: client_id,
GITHUB_CLIENT_SECRET: client_secret,
});
return response.data.html_url;
}
async updateEnv(env) {
// Needs to be public due to tests
return (0, update_dotenv_1.default)(env);
}
get createAppUrl() {
const githubHost = process.env.GHE_HOST || `github.com`;
return `${process.env.GHE_PROTOCOL || "https"}://${githubHost}${process.env.GH_ORG ? `/organizations/${process.env.GH_ORG}` : ""}/settings/apps/new`;
}
}
exports.ManifestCreation = ManifestCreation;
//# sourceMappingURL=manifest-creation.js.map