forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
5.9 KiB
141 lines
5.9 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.AppDistributionClient = exports.UploadReleaseResult = exports.IntegrationState = void 0;
|
|
const utils = require("../utils");
|
|
const operationPoller = require("../operation-poller");
|
|
const error_1 = require("../error");
|
|
const apiv2_1 = require("../apiv2");
|
|
const api_1 = require("../api");
|
|
var IntegrationState;
|
|
(function (IntegrationState) {
|
|
IntegrationState["AAB_INTEGRATION_STATE_UNSPECIFIED"] = "AAB_INTEGRATION_STATE_UNSPECIFIED";
|
|
IntegrationState["INTEGRATED"] = "INTEGRATED";
|
|
IntegrationState["PLAY_ACCOUNT_NOT_LINKED"] = "PLAY_ACCOUNT_NOT_LINKED";
|
|
IntegrationState["NO_APP_WITH_GIVEN_BUNDLE_ID_IN_PLAY_ACCOUNT"] = "NO_APP_WITH_GIVEN_BUNDLE_ID_IN_PLAY_ACCOUNT";
|
|
IntegrationState["APP_NOT_PUBLISHED"] = "APP_NOT_PUBLISHED";
|
|
IntegrationState["AAB_STATE_UNAVAILABLE"] = "AAB_STATE_UNAVAILABLE";
|
|
IntegrationState["PLAY_IAS_TERMS_NOT_ACCEPTED"] = "PLAY_IAS_TERMS_NOT_ACCEPTED";
|
|
})(IntegrationState = exports.IntegrationState || (exports.IntegrationState = {}));
|
|
var UploadReleaseResult;
|
|
(function (UploadReleaseResult) {
|
|
UploadReleaseResult["UPLOAD_RELEASE_RESULT_UNSPECIFIED"] = "UPLOAD_RELEASE_RESULT_UNSPECIFIED";
|
|
UploadReleaseResult["RELEASE_CREATED"] = "RELEASE_CREATED";
|
|
UploadReleaseResult["RELEASE_UPDATED"] = "RELEASE_UPDATED";
|
|
UploadReleaseResult["RELEASE_UNMODIFIED"] = "RELEASE_UNMODIFIED";
|
|
})(UploadReleaseResult = exports.UploadReleaseResult || (exports.UploadReleaseResult = {}));
|
|
class AppDistributionClient {
|
|
constructor() {
|
|
this.appDistroV2Client = new apiv2_1.Client({
|
|
urlPrefix: api_1.appDistributionOrigin,
|
|
apiVersion: "v1",
|
|
});
|
|
}
|
|
async getAabInfo(appName) {
|
|
const apiResponse = await this.appDistroV2Client.get(`/${appName}/aabInfo`);
|
|
return apiResponse.body;
|
|
}
|
|
async uploadRelease(appName, distribution) {
|
|
const client = new apiv2_1.Client({ urlPrefix: api_1.appDistributionOrigin });
|
|
const apiResponse = await client.request({
|
|
method: "POST",
|
|
path: `/upload/v1/${appName}/releases:upload`,
|
|
headers: {
|
|
"X-Goog-Upload-File-Name": distribution.getFileName(),
|
|
"X-Goog-Upload-Protocol": "raw",
|
|
"Content-Type": "application/octet-stream",
|
|
},
|
|
responseType: "json",
|
|
body: distribution.readStream(),
|
|
});
|
|
return apiResponse.body.name;
|
|
}
|
|
async pollUploadStatus(operationName) {
|
|
return operationPoller.pollOperation({
|
|
pollerName: "App Distribution Upload Poller",
|
|
apiOrigin: api_1.appDistributionOrigin,
|
|
apiVersion: "v1",
|
|
operationResourceName: operationName,
|
|
masterTimeout: 5 * 60 * 1000,
|
|
backoff: 1000,
|
|
maxBackoff: 10 * 1000,
|
|
});
|
|
}
|
|
async updateReleaseNotes(releaseName, releaseNotes) {
|
|
if (!releaseNotes) {
|
|
utils.logWarning("no release notes specified, skipping");
|
|
return;
|
|
}
|
|
utils.logBullet("updating release notes...");
|
|
const data = {
|
|
name: releaseName,
|
|
releaseNotes: {
|
|
text: releaseNotes,
|
|
},
|
|
};
|
|
const queryParams = { updateMask: "release_notes.text" };
|
|
try {
|
|
await this.appDistroV2Client.patch(`/${releaseName}`, data, { queryParams });
|
|
}
|
|
catch (err) {
|
|
throw new error_1.FirebaseError(`failed to update release notes with ${err === null || err === void 0 ? void 0 : err.message}`);
|
|
}
|
|
utils.logSuccess("added release notes successfully");
|
|
}
|
|
async distribute(releaseName, testerEmails = [], groupAliases = []) {
|
|
var _a, _b, _c;
|
|
if (testerEmails.length === 0 && groupAliases.length === 0) {
|
|
utils.logWarning("no testers or groups specified, skipping");
|
|
return;
|
|
}
|
|
utils.logBullet("distributing to testers/groups...");
|
|
const data = {
|
|
testerEmails,
|
|
groupAliases,
|
|
};
|
|
try {
|
|
await this.appDistroV2Client.post(`/${releaseName}:distribute`, data);
|
|
}
|
|
catch (err) {
|
|
let errorMessage = err.message;
|
|
const errorStatus = (_c = (_b = (_a = err === null || err === void 0 ? void 0 : err.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.status;
|
|
if (errorStatus === "FAILED_PRECONDITION") {
|
|
errorMessage = "invalid testers";
|
|
}
|
|
else if (errorStatus === "INVALID_ARGUMENT") {
|
|
errorMessage = "invalid groups";
|
|
}
|
|
throw new error_1.FirebaseError(`failed to distribute to testers/groups: ${errorMessage}`, {
|
|
exit: 1,
|
|
});
|
|
}
|
|
utils.logSuccess("distributed to testers/groups successfully");
|
|
}
|
|
async addTesters(projectName, emails) {
|
|
try {
|
|
await this.appDistroV2Client.request({
|
|
method: "POST",
|
|
path: `${projectName}/testers:batchAdd`,
|
|
body: { emails: emails },
|
|
});
|
|
}
|
|
catch (err) {
|
|
throw new error_1.FirebaseError(`Failed to add testers ${err}`);
|
|
}
|
|
utils.logSuccess(`Testers created successfully`);
|
|
}
|
|
async removeTesters(projectName, emails) {
|
|
let apiResponse;
|
|
try {
|
|
apiResponse = await this.appDistroV2Client.request({
|
|
method: "POST",
|
|
path: `${projectName}/testers:batchRemove`,
|
|
body: { emails: emails },
|
|
});
|
|
}
|
|
catch (err) {
|
|
throw new error_1.FirebaseError(`Failed to remove testers ${err}`);
|
|
}
|
|
return apiResponse.body;
|
|
}
|
|
}
|
|
exports.AppDistributionClient = AppDistributionClient;
|