UNPKG

@denixjg/publisher-gitea

Version:

Publish your Electron Forge apps to Gitea with ease

92 lines (91 loc) 3.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Gitea = void 0; const fs_extra_1 = __importDefault(require("fs-extra")); const node_fetch_1 = __importDefault(require("node-fetch")); const mime_types_1 = __importDefault(require("mime-types")); const form_data_1 = __importDefault(require("form-data")); class Gitea { constructor(authToken, baseUrl) { this.authToken = authToken || process.env.GITEA_TOKEN || ""; this.baseUrl = baseUrl || ""; if (!this.authToken) { throw new Error("No Gitea authentication token provided. Set one in the publisher config or via the GITEA_TOKEN environment variable."); } if (!this.baseUrl) { throw new Error("No Gitea base URL provided. Set one in the publisher config."); } this.baseUrl = this.baseUrl.replace(/\/$/, ""); } async listReleases(owner, repo) { const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases`; const response = await (0, node_fetch_1.default)(url, { headers: { Accept: "application/json", Authorization: `token ${this.authToken}`, }, }); if (!response.ok) { throw new Error(`Failed to list releases: ${response.statusText}`); } const releases = (await response.json()); return releases; } async createRelease(owner, repo, options) { const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases`; const response = await (0, node_fetch_1.default)(url, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `token ${this.authToken}`, }, body: JSON.stringify(options), }); if (!response.ok) { throw new Error(`Failed to create release: ${response.statusText}`); } const release = (await response.json()); return release; } async deleteReleaseAsset(owner, repo, releaseId, assetId) { const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases/${releaseId}/assets/${assetId}`; const response = await (0, node_fetch_1.default)(url, { method: "DELETE", headers: { Authorization: `token ${this.authToken}`, }, }); if (!response.ok) { throw new Error(`Failed to delete release asset: ${response.statusText}`); } } async uploadReleaseAsset(owner, repo, releaseId, filePath, fileName) { const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases/${releaseId}/assets`; const fileContent = await fs_extra_1.default.readFile(filePath); const form = new form_data_1.default(); form.append("attachment", fileContent, { filename: fileName, contentType: mime_types_1.default.lookup(filePath) || "application/octet-stream", }); const response = await (0, node_fetch_1.default)(url, { method: "POST", headers: { Authorization: `token ${this.authToken}`, }, body: form, }); if (!response.ok) { const errorText = await response.text(); throw new Error(`Failed to upload asset: ${errorText}`); } const asset = (await response.json()); return asset; } static sanitizeName(name) { return name.replace(/[^\w.-]/g, "-"); } } exports.Gitea = Gitea;