123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.deleteAppAndroidSha = exports.createAppAndroidSha = exports.listAppAndroidSha = exports.getAppConfig = exports.getAppConfigFile = exports.listFirebaseApps = exports.createWebApp = exports.createAndroidApp = exports.createIosApp = exports.getAppPlatform = exports.ShaCertificateType = exports.AppPlatform = exports.APP_LIST_PAGE_SIZE = void 0;
- const fs = require("fs");
- const apiv2_1 = require("../apiv2");
- const api_1 = require("../api");
- const error_1 = require("../error");
- const logger_1 = require("../logger");
- const operation_poller_1 = require("../operation-poller");
- const TIMEOUT_MILLIS = 30000;
- exports.APP_LIST_PAGE_SIZE = 100;
- const CREATE_APP_API_REQUEST_TIMEOUT_MILLIS = 15000;
- const WEB_CONFIG_FILE_NAME = "google-config.js";
- var AppPlatform;
- (function (AppPlatform) {
- AppPlatform["PLATFORM_UNSPECIFIED"] = "PLATFORM_UNSPECIFIED";
- AppPlatform["IOS"] = "IOS";
- AppPlatform["ANDROID"] = "ANDROID";
- AppPlatform["WEB"] = "WEB";
- AppPlatform["ANY"] = "ANY";
- })(AppPlatform = exports.AppPlatform || (exports.AppPlatform = {}));
- var ShaCertificateType;
- (function (ShaCertificateType) {
- ShaCertificateType["SHA_CERTIFICATE_TYPE_UNSPECIFIED"] = "SHA_CERTIFICATE_TYPE_UNSPECIFIED";
- ShaCertificateType["SHA_1"] = "SHA_1";
- ShaCertificateType["SHA_256"] = "SHA_256";
- })(ShaCertificateType = exports.ShaCertificateType || (exports.ShaCertificateType = {}));
- function getAppPlatform(platform) {
- switch (platform.toUpperCase()) {
- case "IOS":
- return AppPlatform.IOS;
- case "ANDROID":
- return AppPlatform.ANDROID;
- case "WEB":
- return AppPlatform.WEB;
- case "":
- return AppPlatform.ANY;
- default:
- throw new error_1.FirebaseError("Unexpected platform. Only iOS, Android, and Web apps are supported");
- }
- }
- exports.getAppPlatform = getAppPlatform;
- const apiClient = new apiv2_1.Client({ urlPrefix: api_1.firebaseApiOrigin, apiVersion: "v1beta1" });
- async function createIosApp(projectId, options) {
- try {
- const response = await apiClient.request({
- method: "POST",
- path: `/projects/${projectId}/iosApps`,
- timeout: CREATE_APP_API_REQUEST_TIMEOUT_MILLIS,
- body: options,
- });
- const appData = await (0, operation_poller_1.pollOperation)({
- pollerName: "Create iOS app Poller",
- apiOrigin: api_1.firebaseApiOrigin,
- apiVersion: "v1beta1",
- operationResourceName: response.body.name,
- });
- return appData;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to create iOS app for project ${projectId}. See firebase-debug.log for more info.`, { exit: 2, original: err });
- }
- }
- exports.createIosApp = createIosApp;
- async function createAndroidApp(projectId, options) {
- try {
- const response = await apiClient.request({
- method: "POST",
- path: `/projects/${projectId}/androidApps`,
- timeout: CREATE_APP_API_REQUEST_TIMEOUT_MILLIS,
- body: options,
- });
- const appData = await (0, operation_poller_1.pollOperation)({
- pollerName: "Create Android app Poller",
- apiOrigin: api_1.firebaseApiOrigin,
- apiVersion: "v1beta1",
- operationResourceName: response.body.name,
- });
- return appData;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to create Android app for project ${projectId}. See firebase-debug.log for more info.`, {
- exit: 2,
- original: err,
- });
- }
- }
- exports.createAndroidApp = createAndroidApp;
- async function createWebApp(projectId, options) {
- try {
- const response = await apiClient.request({
- method: "POST",
- path: `/projects/${projectId}/webApps`,
- timeout: CREATE_APP_API_REQUEST_TIMEOUT_MILLIS,
- body: options,
- });
- const appData = await (0, operation_poller_1.pollOperation)({
- pollerName: "Create Web app Poller",
- apiOrigin: api_1.firebaseApiOrigin,
- apiVersion: "v1beta1",
- operationResourceName: response.body.name,
- });
- return appData;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to create Web app for project ${projectId}. See firebase-debug.log for more info.`, { exit: 2, original: err });
- }
- }
- exports.createWebApp = createWebApp;
- function getListAppsResourceString(projectId, platform) {
- let resourceSuffix;
- switch (platform) {
- case AppPlatform.IOS:
- resourceSuffix = "/iosApps";
- break;
- case AppPlatform.ANDROID:
- resourceSuffix = "/androidApps";
- break;
- case AppPlatform.WEB:
- resourceSuffix = "/webApps";
- break;
- case AppPlatform.ANY:
- resourceSuffix = ":searchApps";
- break;
- default:
- throw new error_1.FirebaseError("Unexpected platform. Only support iOS, Android and Web apps");
- }
- return `/projects/${projectId}${resourceSuffix}`;
- }
- async function listFirebaseApps(projectId, platform, pageSize = exports.APP_LIST_PAGE_SIZE) {
- const apps = [];
- try {
- let nextPageToken;
- do {
- const queryParams = { pageSize };
- if (nextPageToken) {
- queryParams.pageToken = nextPageToken;
- }
- const response = await apiClient.request({
- method: "GET",
- path: getListAppsResourceString(projectId, platform),
- queryParams,
- timeout: TIMEOUT_MILLIS,
- });
- if (response.body.apps) {
- const appsOnPage = response.body.apps.map((app) => (app.platform ? app : Object.assign(Object.assign({}, app), { platform })));
- apps.push(...appsOnPage);
- }
- nextPageToken = response.body.nextPageToken;
- } while (nextPageToken);
- return apps;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to list Firebase ${platform === AppPlatform.ANY ? "" : platform + " "}` +
- "apps. See firebase-debug.log for more info.", {
- exit: 2,
- original: err,
- });
- }
- }
- exports.listFirebaseApps = listFirebaseApps;
- function getAppConfigResourceString(appId, platform) {
- let platformResource;
- switch (platform) {
- case AppPlatform.IOS:
- platformResource = "iosApps";
- break;
- case AppPlatform.ANDROID:
- platformResource = "androidApps";
- break;
- case AppPlatform.WEB:
- platformResource = "webApps";
- break;
- default:
- throw new error_1.FirebaseError("Unexpected app platform");
- }
- return `/projects/-/${platformResource}/${appId}/config`;
- }
- function parseConfigFromResponse(responseBody, platform) {
- if (platform === AppPlatform.WEB) {
- const JS_TEMPLATE = fs.readFileSync(__dirname + "/../../templates/setup/web.js", "utf8");
- return {
- fileName: WEB_CONFIG_FILE_NAME,
- fileContents: JS_TEMPLATE.replace("{/*--CONFIG--*/}", JSON.stringify(responseBody, null, 2)),
- };
- }
- else if (platform === AppPlatform.ANDROID || platform === AppPlatform.IOS) {
- return {
- fileName: responseBody.configFilename,
- fileContents: Buffer.from(responseBody.configFileContents, "base64").toString("utf8"),
- };
- }
- throw new error_1.FirebaseError("Unexpected app platform");
- }
- function getAppConfigFile(config, platform) {
- return parseConfigFromResponse(config, platform);
- }
- exports.getAppConfigFile = getAppConfigFile;
- async function getAppConfig(appId, platform) {
- try {
- const response = await apiClient.request({
- method: "GET",
- path: getAppConfigResourceString(appId, platform),
- timeout: TIMEOUT_MILLIS,
- });
- return response.body;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to get ${platform} app configuration. See firebase-debug.log for more info.`, {
- exit: 2,
- original: err,
- });
- }
- }
- exports.getAppConfig = getAppConfig;
- async function listAppAndroidSha(projectId, appId) {
- const shaCertificates = [];
- try {
- const response = await apiClient.request({
- method: "GET",
- path: `/projects/${projectId}/androidApps/${appId}/sha`,
- timeout: CREATE_APP_API_REQUEST_TIMEOUT_MILLIS,
- });
- if (response.body.certificates) {
- shaCertificates.push(...response.body.certificates);
- }
- return shaCertificates;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to list SHA certificate hashes for Android app ${appId}.` +
- " See firebase-debug.log for more info.", {
- exit: 2,
- original: err,
- });
- }
- }
- exports.listAppAndroidSha = listAppAndroidSha;
- async function createAppAndroidSha(projectId, appId, options) {
- try {
- const response = await apiClient.request({
- method: "POST",
- path: `/projects/${projectId}/androidApps/${appId}/sha`,
- body: options,
- timeout: CREATE_APP_API_REQUEST_TIMEOUT_MILLIS,
- });
- const shaCertificate = response.body;
- return shaCertificate;
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to create SHA certificate hash for Android app ${appId}. See firebase-debug.log for more info.`, {
- exit: 2,
- original: err,
- });
- }
- }
- exports.createAppAndroidSha = createAppAndroidSha;
- async function deleteAppAndroidSha(projectId, appId, shaId) {
- try {
- await apiClient.request({
- method: "DELETE",
- path: `/projects/${projectId}/androidApps/${appId}/sha/${shaId}`,
- timeout: CREATE_APP_API_REQUEST_TIMEOUT_MILLIS,
- });
- }
- catch (err) {
- logger_1.logger.debug(err.message);
- throw new error_1.FirebaseError(`Failed to delete SHA certificate hash for Android app ${appId}. See firebase-debug.log for more info.`, {
- exit: 2,
- original: err,
- });
- }
- }
- exports.deleteAppAndroidSha = deleteAppAndroidSha;
|