UNPKG

firebase-app-distribution

Version:
201 lines (199 loc) 6.31 kB
import { Operations } from "./chunk-N4JVPYC6.mjs"; import { APP_DISTRIBUTION_ENDPOINT, ENDPOINT_VERSION, __async, __privateAdd, __privateMethod, makeRequest } from "./chunk-PTPJZ7KZ.mjs"; // src/releases/index.ts import { readFileSync } from "fs"; function isValidReleaseName(releaseName) { const regex = /^projects\/[^/]+\/apps\/[^/]+\/releases\/[^/]+$/; return regex.test(releaseName); } function validateReleaseName(releaseName) { if (!isValidReleaseName(releaseName)) { throw new Error( `Invalid release name: ${releaseName}. Expected 'projects/*/apps/*/releases/*'` ); } return; } var _Releases_instances, update_fn; var Releases = class { constructor(parent) { __privateAdd(this, _Releases_instances); this.parent = parent; this.operations = new Operations(this.parent); } upload(appId, binaryPath, fileName) { return __async(this, null, function* () { const accessToken = yield this.parent.getAccessToken(); const projectNumber = yield this.parent.getProjectNumber(); const url = new URL( `${APP_DISTRIBUTION_ENDPOINT}/upload/${ENDPOINT_VERSION}/projects/${projectNumber}/apps/${appId}/releases:upload` ); const fileBuffer = readFileSync(binaryPath); const response = yield makeRequest(url.toString(), { method: "POST", headers: { Authorization: `Bearer ${accessToken}`, "X-Goog-Upload-File-Name": encodeURIComponent(fileName), "X-Goog-Upload-Protocol": "raw" }, body: new Uint8Array(fileBuffer) }); return response; }); } delete(appId, releaseNames) { return __async(this, null, function* () { for (let releaseName of releaseNames) { validateReleaseName(releaseName); } const accessToken = yield this.parent.getAccessToken(); const projectNumber = yield this.parent.getProjectNumber(); if (releaseNames.length > 100) { throw new Error("Cannot delete more than 100 releases at once"); } const url = new URL( `${APP_DISTRIBUTION_ENDPOINT}/${ENDPOINT_VERSION}/projects/${projectNumber}/apps/${appId}/releases:batchDelete` ); const response = yield makeRequest(url.toString(), { method: "POST", headers: { Authorization: `Bearer ${accessToken}` }, body: JSON.stringify({ names: releaseNames }) }); return response; }); } distribute(_0, _1) { return __async(this, arguments, function* (releaseName, { testerEmails = [], groupAliases = [] }) { validateReleaseName(releaseName); if (testerEmails.length === 0 && groupAliases.length === 0) { throw new Error("Must specify at least one tester or group"); } const accessToken = yield this.parent.getAccessToken(); const url = new URL( `${APP_DISTRIBUTION_ENDPOINT}/${ENDPOINT_VERSION}/${releaseName}:distribute` ); const response = yield makeRequest(url.toString(), { method: "POST", headers: { Authorization: `Bearer ${accessToken}` }, body: JSON.stringify({ testerEmails, groupAliases }) }); return response; }); } get(releaseName) { return __async(this, null, function* () { validateReleaseName(releaseName); const accessToken = yield this.parent.getAccessToken(); const url = new URL( `${APP_DISTRIBUTION_ENDPOINT}/${ENDPOINT_VERSION}/${releaseName}` ); const response = yield makeRequest(url.toString(), { method: "GET", headers: { Authorization: `Bearer ${accessToken}` } }); return response; }); } list(_0) { return __async(this, arguments, function* (appId, { pageSize, orderBy, filter, maxPages } = {}) { const accessToken = yield this.parent.getAccessToken(); const projectNumber = yield this.parent.getProjectNumber(); const url = new URL( `${APP_DISTRIBUTION_ENDPOINT}/${ENDPOINT_VERSION}/projects/${projectNumber}/apps/${appId}/releases` ); if (pageSize) { url.searchParams.set("pageSize", (pageSize == null ? void 0 : pageSize.toString()) || "100"); } if (orderBy) { url.searchParams.set("orderBy", orderBy); } if (filter) { url.searchParams.set("filter", filter); } let nextPageToken = ""; let currentPage = 0; const releases = []; do { if (nextPageToken) { url.searchParams.set("pageToken", nextPageToken); } else { url.searchParams.delete("pageToken"); } const response = yield makeRequest(url.toString(), { method: "GET", headers: { Authorization: `Bearer ${accessToken}` } }); if (response.releases === void 0) { break; } releases.push(...response.releases); if (response.nextPageToken !== void 0) { nextPageToken = response.nextPageToken; } else { break; } currentPage++; if (maxPages && currentPage >= maxPages) { break; } } while (nextPageToken); return releases; }); } addReleaseNotes(releaseName, releaseNotes) { return __async(this, null, function* () { return __privateMethod(this, _Releases_instances, update_fn).call(this, releaseName, { releaseNotes }); }); } }; _Releases_instances = new WeakSet(); update_fn = function(_0) { return __async(this, arguments, function* (releaseName, { releaseNotes } = {}) { validateReleaseName(releaseName); const accessToken = yield this.parent.getAccessToken(); const url = new URL( `${APP_DISTRIBUTION_ENDPOINT}/${ENDPOINT_VERSION}/${releaseName}` ); if (releaseNotes) { url.searchParams.set("updateMask", "releaseNotes.text"); } const response = yield makeRequest(url.toString(), { method: "PATCH", headers: { Authorization: `Bearer ${accessToken}` }, body: JSON.stringify({ releaseNotes: { text: releaseNotes } }) }); return response; }); }; export { Releases }; //# sourceMappingURL=chunk-UGTPM7SF.mjs.map