UNPKG

3.66 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.ManifestCreation = void 0;
7const fs_1 = __importDefault(require("fs"));
8const js_yaml_1 = __importDefault(require("js-yaml"));
9const path_1 = __importDefault(require("path"));
10const update_dotenv_1 = __importDefault(require("update-dotenv"));
11const probot_octokit_1 = require("./octokit/probot-octokit");
12class ManifestCreation {
13 get pkg() {
14 let pkg;
15 try {
16 pkg = require(path_1.default.join(process.cwd(), "package.json"));
17 }
18 catch (e) {
19 pkg = {};
20 }
21 return pkg;
22 }
23 async createWebhookChannel() {
24 try {
25 // tslint:disable:no-var-requires
26 const SmeeClient = require("smee-client");
27 await this.updateEnv({
28 WEBHOOK_PROXY_URL: await SmeeClient.createChannel(),
29 });
30 }
31 catch (error) {
32 // Smee is not available, so we'll just move on
33 // tslint:disable:no-console
34 console.warn("Unable to connect to smee.io, try restarting your server.");
35 }
36 }
37 getManifest(pkg, baseUrl) {
38 let manifest = {};
39 try {
40 const file = fs_1.default.readFileSync(path_1.default.join(process.cwd(), "app.yml"), "utf8");
41 manifest = js_yaml_1.default.safeLoad(file);
42 }
43 catch (error) {
44 // App config does not exist, which is ok.
45 if (error.code !== "ENOENT") {
46 throw error;
47 }
48 }
49 const generatedManifest = JSON.stringify(Object.assign({
50 description: manifest.description || pkg.description,
51 hook_attributes: {
52 url: process.env.WEBHOOK_PROXY_URL || `${baseUrl}/`,
53 },
54 name: process.env.PROJECT_DOMAIN || manifest.name || pkg.name,
55 public: manifest.public || true,
56 redirect_url: `${baseUrl}/probot/setup`,
57 // TODO: add setup url
58 // setup_url:`${baseUrl}/probot/success`,
59 url: manifest.url || pkg.homepage || pkg.repository,
60 version: "v1",
61 }, manifest));
62 return generatedManifest;
63 }
64 async createAppFromCode(code) {
65 const octokit = new probot_octokit_1.ProbotOctokit();
66 const options = {
67 code,
68 mediaType: {
69 previews: ["fury"], // needed for GHES 2.20 and older
70 },
71 ...(process.env.GHE_HOST && {
72 baseUrl: `${process.env.GHE_PROTOCOL || "https"}://${process.env.GHE_HOST}/api/v3`,
73 }),
74 };
75 const response = await octokit.request("POST /app-manifests/:code/conversions", options);
76 const { id, client_id, client_secret, webhook_secret, pem } = response.data;
77 await this.updateEnv({
78 APP_ID: id.toString(),
79 PRIVATE_KEY: `"${pem}"`,
80 WEBHOOK_SECRET: webhook_secret,
81 GITHUB_CLIENT_ID: client_id,
82 GITHUB_CLIENT_SECRET: client_secret,
83 });
84 return response.data.html_url;
85 }
86 async updateEnv(env) {
87 // Needs to be public due to tests
88 return update_dotenv_1.default(env);
89 }
90 get createAppUrl() {
91 const githubHost = process.env.GHE_HOST || `github.com`;
92 return `${process.env.GHE_PROTOCOL || "https"}://${githubHost}/settings/apps/new`;
93 }
94}
95exports.ManifestCreation = ManifestCreation;
96//# sourceMappingURL=manifest-creation.js.map
\No newline at end of file