firebase-tools 11.0.0 → 11.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/accountExporter.js +11 -4
- package/lib/accountImporter.js +93 -95
- package/lib/api.js +77 -218
- package/lib/apiv2.js +5 -4
- package/lib/appdistribution/client.js +23 -34
- package/lib/auth.js +72 -52
- package/lib/bin/firebase.js +42 -47
- package/lib/checkValidTargetFilters.js +36 -25
- package/lib/commands/appdistribution-distribute.js +2 -1
- package/lib/commands/appdistribution-testers-add.js +2 -1
- package/lib/commands/appdistribution-testers-remove.js +2 -1
- package/lib/commands/apps-android-sha-create.js +2 -1
- package/lib/commands/apps-android-sha-delete.js +2 -1
- package/lib/commands/apps-android-sha-list.js +2 -1
- package/lib/commands/apps-create.js +2 -1
- package/lib/commands/apps-list.js +2 -1
- package/lib/commands/apps-sdkconfig.js +2 -1
- package/lib/commands/auth-export.js +2 -1
- package/lib/commands/auth-import.js +7 -10
- package/lib/commands/crashlytics-symbols-upload.js +2 -1
- package/lib/commands/database-get.js +4 -3
- package/lib/commands/database-instances-create.js +2 -1
- package/lib/commands/database-instances-list.js +3 -3
- package/lib/commands/database-profile.js +4 -4
- package/lib/commands/database-push.js +4 -4
- package/lib/commands/database-remove.js +3 -3
- package/lib/commands/database-rules-canary.js +2 -1
- package/lib/commands/database-rules-get.js +2 -1
- package/lib/commands/database-rules-list.js +2 -1
- package/lib/commands/database-rules-release.js +2 -1
- package/lib/commands/database-rules-stage.js +2 -1
- package/lib/commands/database-set.js +3 -3
- package/lib/commands/database-settings-get.js +2 -1
- package/lib/commands/database-settings-set.js +2 -1
- package/lib/commands/database-update.js +2 -1
- package/lib/commands/deploy.js +26 -25
- package/lib/commands/emulators-exec.js +2 -1
- package/lib/commands/emulators-export.js +2 -1
- package/lib/commands/emulators-start.js +2 -1
- package/lib/commands/experimental-functions-shell.js +10 -8
- package/lib/commands/ext-configure.js +6 -1
- package/lib/commands/ext-dev-deprecate.js +2 -1
- package/lib/commands/ext-dev-emulators-exec.js +3 -2
- package/lib/commands/ext-dev-emulators-start.js +3 -2
- package/lib/commands/ext-dev-extension-delete.js +2 -1
- package/lib/commands/ext-dev-init.js +2 -1
- package/lib/commands/ext-dev-list.js +8 -8
- package/lib/commands/ext-dev-publish.js +2 -1
- package/lib/commands/ext-dev-register.js +2 -1
- package/lib/commands/ext-dev-undeprecate.js +2 -1
- package/lib/commands/ext-dev-unpublish.js +2 -1
- package/lib/commands/ext-dev-usage.js +2 -1
- package/lib/commands/ext-export.js +2 -1
- package/lib/commands/ext-info.js +14 -14
- package/lib/commands/ext-install.js +6 -1
- package/lib/commands/ext-list.js +2 -1
- package/lib/commands/ext-sources-create.js +2 -1
- package/lib/commands/ext-uninstall.js +7 -1
- package/lib/commands/ext-update.js +6 -1
- package/lib/commands/ext.js +4 -4
- package/lib/commands/firestore-delete.js +2 -1
- package/lib/commands/firestore-indexes-list.js +2 -1
- package/lib/commands/functions-config-clone.js +4 -3
- package/lib/commands/functions-config-export.js +2 -1
- package/lib/commands/functions-config-get.js +2 -1
- package/lib/commands/functions-config-set.js +2 -1
- package/lib/commands/functions-config-unset.js +2 -1
- package/lib/commands/functions-delete.js +3 -8
- package/lib/commands/functions-deletegcfartifacts.js +2 -1
- package/lib/commands/functions-list.js +2 -1
- package/lib/commands/functions-log.js +2 -1
- package/lib/commands/functions-secrets-access.js +2 -1
- package/lib/commands/functions-secrets-destroy.js +2 -1
- package/lib/commands/functions-secrets-get.js +2 -1
- package/lib/commands/functions-secrets-prune.js +2 -1
- package/lib/commands/functions-secrets-set.js +2 -1
- package/lib/commands/functions-shell.js +12 -10
- package/lib/commands/help.js +2 -1
- package/lib/commands/hosting-channel-create.js +2 -1
- package/lib/commands/hosting-channel-delete.js +2 -1
- package/lib/commands/hosting-channel-deploy.js +2 -1
- package/lib/commands/hosting-channel-list.js +2 -1
- package/lib/commands/hosting-channel-open.js +2 -1
- package/lib/commands/hosting-clone.js +2 -1
- package/lib/commands/hosting-disable.js +2 -1
- package/lib/commands/hosting-sites-create.js +2 -1
- package/lib/commands/hosting-sites-delete.js +2 -1
- package/lib/commands/hosting-sites-get.js +2 -1
- package/lib/commands/hosting-sites-list.js +2 -1
- package/lib/commands/index.js +23 -13
- package/lib/commands/init.js +47 -43
- package/lib/commands/login-add.js +2 -1
- package/lib/commands/login-ci.js +2 -1
- package/lib/commands/login-list.js +2 -1
- package/lib/commands/login-use.js +2 -1
- package/lib/commands/login.js +2 -1
- package/lib/commands/logout.js +2 -1
- package/lib/commands/open.js +7 -7
- package/lib/commands/projects-addfirebase.js +2 -1
- package/lib/commands/projects-create.js +2 -1
- package/lib/commands/projects-list.js +2 -1
- package/lib/commands/remoteconfig-get.js +2 -1
- package/lib/commands/remoteconfig-rollback.js +2 -1
- package/lib/commands/remoteconfig-versions-list.js +2 -1
- package/lib/commands/serve.js +30 -30
- package/lib/commands/setup-emulators-database.js +2 -1
- package/lib/commands/setup-emulators-firestore.js +2 -1
- package/lib/commands/setup-emulators-pubsub.js +2 -1
- package/lib/commands/setup-emulators-storage.js +2 -1
- package/lib/commands/setup-emulators-ui.js +2 -1
- package/lib/commands/target-apply.js +2 -1
- package/lib/commands/target-clear.js +2 -1
- package/lib/commands/target-remove.js +2 -1
- package/lib/commands/target.js +2 -1
- package/lib/commands/use.js +54 -53
- package/lib/config.js +7 -6
- package/lib/deploy/database/deploy.js +3 -2
- package/lib/deploy/database/index.js +8 -5
- package/lib/deploy/database/prepare.js +22 -20
- package/lib/deploy/database/release.js +12 -9
- package/lib/deploy/extensions/secrets.js +3 -3
- package/lib/deploy/firestore/prepare.js +2 -2
- package/lib/deploy/functions/build.js +33 -20
- package/lib/deploy/functions/ensure.js +1 -11
- package/lib/deploy/functions/prepare.js +3 -13
- package/lib/deploy/functions/prepareFunctionsUpload.js +2 -3
- package/lib/deploy/functions/release/fabricator.js +0 -1
- package/lib/deploy/functions/release/index.js +1 -5
- package/lib/deploy/functions/runtimes/discovery/index.js +18 -3
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +188 -54
- package/lib/deploy/functions/runtimes/golang/index.js +2 -22
- package/lib/deploy/functions/runtimes/node/index.js +3 -7
- package/lib/deploy/functions/runtimes/node/parseTriggers.js +15 -3
- package/lib/deploy/functions/services/database.js +14 -0
- package/lib/deploy/functions/services/index.js +14 -0
- package/lib/deploy/index.js +3 -3
- package/lib/deploy/lifecycleHooks.js +27 -27
- package/lib/deploy/remoteconfig/functions.js +18 -14
- package/lib/deploy/remoteconfig/prepare.js +2 -2
- package/lib/deploy/storage/prepare.js +1 -1
- package/lib/emulator/auth/apiSpec.js +14 -46
- package/lib/emulator/auth/index.js +1 -1
- package/lib/emulator/auth/operations.js +342 -93
- package/lib/emulator/auth/server.js +2 -2
- package/lib/emulator/auth/state.js +34 -32
- package/lib/emulator/commandUtils.js +1 -1
- package/lib/emulator/constants.js +1 -1
- package/lib/emulator/controller.js +7 -6
- package/lib/emulator/databaseEmulator.js +11 -9
- package/lib/emulator/download.js +1 -1
- package/lib/emulator/events/types.js +2 -3
- package/lib/emulator/firestoreEmulator.js +12 -14
- package/lib/emulator/functionsEmulator.js +65 -77
- package/lib/emulator/functionsEmulatorRuntime.js +7 -7
- package/lib/emulator/hostingEmulator.js +1 -1
- package/lib/emulator/hub.js +1 -1
- package/lib/emulator/hubClient.js +11 -22
- package/lib/emulator/hubExport.js +26 -16
- package/lib/emulator/loggingEmulator.js +1 -1
- package/lib/emulator/pubsubEmulator.js +1 -1
- package/lib/emulator/storage/crc.js +4 -4
- package/lib/emulator/storage/index.js +1 -1
- package/lib/emulator/types.js +1 -1
- package/lib/errorOut.js +2 -2
- package/lib/extensions/askUserForConsent.js +1 -2
- package/lib/extensions/askUserForParam.js +15 -18
- package/lib/extensions/emulator/optionsHelper.js +4 -4
- package/lib/extensions/extensionsApi.js +1 -22
- package/lib/extensions/extensionsHelper.js +6 -6
- package/lib/extensions/listExtensions.js +9 -10
- package/lib/extensions/manifest.js +2 -2
- package/lib/extensions/resolveSource.js +11 -7
- package/lib/extensions/secretsUtils.js +3 -3
- package/lib/extensions/types.js +24 -0
- package/lib/extensions/updateHelper.js +1 -1
- package/lib/extensions/utils.js +1 -2
- package/lib/extensions/warnings.js +3 -3
- package/lib/firestore/checkDatabaseType.js +4 -5
- package/lib/firestore/encodeFirestoreValue.js +11 -8
- package/lib/firestore/indexes.js +17 -34
- package/lib/fsAsync.js +3 -3
- package/lib/functions/events/v2.js +7 -1
- package/lib/functionsConfig.js +17 -14
- package/lib/functionsConfigClone.js +46 -46
- package/lib/gcp/cloudfunctions.js +2 -15
- package/lib/gcp/cloudfunctionsv2.js +17 -2
- package/lib/gcp/iam.js +1 -1
- package/lib/gcp/index.js +10 -10
- package/lib/gcp/rules.js +1 -1
- package/lib/gcp/runtimeconfig.js +45 -47
- package/lib/gcp/storage.js +2 -4
- package/lib/hosting/cloudRunProxy.js +19 -15
- package/lib/hosting/proxy.js +1 -1
- package/lib/index.js +29 -28
- package/lib/init/features/database.js +11 -5
- package/lib/init/features/functions/index.js +1 -1
- package/lib/init/features/functions/javascript.js +23 -20
- package/lib/init/features/functions/npm-dependencies.js +17 -14
- package/lib/init/features/functions/typescript.js +27 -24
- package/lib/init/features/hosting/github.js +6 -5
- package/lib/init/features/hosting/index.js +2 -2
- package/lib/loadCJSON.js +9 -6
- package/lib/localFunction.js +4 -4
- package/lib/logError.js +15 -12
- package/lib/management/apps.js +47 -43
- package/lib/management/database.js +33 -31
- package/lib/management/projects.js +13 -7
- package/lib/parseBoltRules.js +15 -14
- package/lib/previews.js +1 -1
- package/lib/profileReport.js +504 -512
- package/lib/profiler.js +4 -4
- package/lib/prompt.js +1 -2
- package/lib/rc.js +1 -1
- package/lib/requireAuth.js +0 -1
- package/lib/responseToError.js +8 -5
- package/lib/rtdb.js +31 -29
- package/lib/rulesDeploy.js +2 -2
- package/lib/scopes.js +9 -9
- package/lib/serve/index.js +4 -5
- package/lib/utils.js +30 -6
- package/npm-shrinkwrap.json +877 -279
- package/package.json +19 -16
- package/standalone/package.json +1 -1
package/lib/api.js
CHANGED
|
@@ -1,221 +1,80 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getScopes = exports.githubClientSecret = exports.githubClientId = exports.secretManagerOrigin = exports.githubApiOrigin = exports.githubOrigin = exports.serviceUsageOrigin = exports.cloudRunApiOrigin = exports.hostingApiOrigin = exports.firebaseStorageOrigin = exports.storageOrigin = exports.runtimeconfigOrigin = exports.rulesOrigin = exports.resourceManagerOrigin = exports.remoteConfigApiOrigin = exports.rtdbMetadataOrigin = exports.rtdbManagementOrigin = exports.realtimeOrigin = exports.extensionsOrigin = exports.iamOrigin = exports.identityOrigin = exports.hostingOrigin = exports.googleOrigin = exports.pubsubOrigin = exports.cloudTasksOrigin = exports.cloudschedulerOrigin = exports.functionsDefaultRegion = exports.runOrigin = exports.functionsV2Origin = exports.functionsOrigin = exports.firestoreOrigin = exports.firestoreOriginOrEmulator = exports.firedataOrigin = exports.firebaseExtensionsRegistryOrigin = exports.firebaseApiOrigin = exports.dynamicLinksKey = exports.dynamicLinksOrigin = exports.deployOrigin = exports.consoleOrigin = exports.authOrigin = exports.appengineOrigin = exports.appDistributionOrigin = exports.artifactRegistryDomain = exports.containerRegistryDomain = exports.cloudMonitoringOrigin = exports.cloudloggingOrigin = exports.cloudbillingOrigin = exports.clientSecret = exports.clientId = exports.authProxyOrigin = void 0;
|
|
4
|
+
exports.setScopes = void 0;
|
|
5
|
+
const constants_1 = require("./emulator/constants");
|
|
6
|
+
const logger_1 = require("./logger");
|
|
7
|
+
const scopes = require("./scopes");
|
|
8
|
+
const utils = require("./utils");
|
|
9
|
+
let commandScopes = new Set();
|
|
10
|
+
exports.authProxyOrigin = utils.envOverride("FIREBASE_AUTHPROXY_URL", "https://auth.firebase.tools");
|
|
11
|
+
exports.clientId = utils.envOverride("FIREBASE_CLIENT_ID", "563584335869-fgrhgmd47bqnekij5i8b5pr03ho849e6.apps.googleusercontent.com");
|
|
12
|
+
exports.clientSecret = utils.envOverride("FIREBASE_CLIENT_SECRET", "j9iVZfS8kkCEFUPaAeJV0sAi");
|
|
13
|
+
exports.cloudbillingOrigin = utils.envOverride("FIREBASE_CLOUDBILLING_URL", "https://cloudbilling.googleapis.com");
|
|
14
|
+
exports.cloudloggingOrigin = utils.envOverride("FIREBASE_CLOUDLOGGING_URL", "https://logging.googleapis.com");
|
|
15
|
+
exports.cloudMonitoringOrigin = utils.envOverride("CLOUD_MONITORING_URL", "https://monitoring.googleapis.com");
|
|
16
|
+
exports.containerRegistryDomain = utils.envOverride("CONTAINER_REGISTRY_DOMAIN", "gcr.io");
|
|
17
|
+
exports.artifactRegistryDomain = utils.envOverride("ARTIFACT_REGISTRY_DOMAIN", "https://artifactregistry.googleapis.com");
|
|
18
|
+
exports.appDistributionOrigin = utils.envOverride("FIREBASE_APP_DISTRIBUTION_URL", "https://firebaseappdistribution.googleapis.com");
|
|
19
|
+
exports.appengineOrigin = utils.envOverride("FIREBASE_APPENGINE_URL", "https://appengine.googleapis.com");
|
|
20
|
+
exports.authOrigin = utils.envOverride("FIREBASE_AUTH_URL", "https://accounts.google.com");
|
|
21
|
+
exports.consoleOrigin = utils.envOverride("FIREBASE_CONSOLE_URL", "https://console.firebase.google.com");
|
|
22
|
+
exports.deployOrigin = utils.envOverride("FIREBASE_DEPLOY_URL", utils.envOverride("FIREBASE_UPLOAD_URL", "https://deploy.firebase.com"));
|
|
23
|
+
exports.dynamicLinksOrigin = utils.envOverride("FIREBASE_DYNAMIC_LINKS_URL", "https://firebasedynamiclinks.googleapis.com");
|
|
24
|
+
exports.dynamicLinksKey = utils.envOverride("FIREBASE_DYNAMIC_LINKS_KEY", "AIzaSyB6PtY5vuiSB8MNgt20mQffkOlunZnHYiQ");
|
|
25
|
+
exports.firebaseApiOrigin = utils.envOverride("FIREBASE_API_URL", "https://firebase.googleapis.com");
|
|
26
|
+
exports.firebaseExtensionsRegistryOrigin = utils.envOverride("FIREBASE_EXT_REGISTRY_ORIGIN", "https://extensions-registry.firebaseapp.com");
|
|
27
|
+
exports.firedataOrigin = utils.envOverride("FIREBASE_FIREDATA_URL", "https://mobilesdk-pa.googleapis.com");
|
|
28
|
+
exports.firestoreOriginOrEmulator = utils.envOverride(constants_1.Constants.FIRESTORE_EMULATOR_HOST, utils.envOverride("FIRESTORE_URL", "https://firestore.googleapis.com"), (val) => {
|
|
29
|
+
if (val.startsWith("http")) {
|
|
30
|
+
return val;
|
|
22
31
|
}
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
return `http://${val}`;
|
|
33
|
+
});
|
|
34
|
+
exports.firestoreOrigin = utils.envOverride("FIRESTORE_URL", "https://firestore.googleapis.com");
|
|
35
|
+
exports.functionsOrigin = utils.envOverride("FIREBASE_FUNCTIONS_URL", "https://cloudfunctions.googleapis.com");
|
|
36
|
+
exports.functionsV2Origin = utils.envOverride("FIREBASE_FUNCTIONS_V2_URL", "https://cloudfunctions.googleapis.com");
|
|
37
|
+
exports.runOrigin = utils.envOverride("CLOUD_RUN_URL", "https://run.googleapis.com");
|
|
38
|
+
exports.functionsDefaultRegion = utils.envOverride("FIREBASE_FUNCTIONS_DEFAULT_REGION", "us-central1");
|
|
39
|
+
exports.cloudschedulerOrigin = utils.envOverride("FIREBASE_CLOUDSCHEDULER_URL", "https://cloudscheduler.googleapis.com");
|
|
40
|
+
exports.cloudTasksOrigin = utils.envOverride("FIREBASE_CLOUD_TAKS_URL", "https://cloudtasks.googleapis.com");
|
|
41
|
+
exports.pubsubOrigin = utils.envOverride("FIREBASE_PUBSUB_URL", "https://pubsub.googleapis.com");
|
|
42
|
+
exports.googleOrigin = utils.envOverride("FIREBASE_TOKEN_URL", utils.envOverride("FIREBASE_GOOGLE_URL", "https://www.googleapis.com"));
|
|
43
|
+
exports.hostingOrigin = utils.envOverride("FIREBASE_HOSTING_URL", "https://web.app");
|
|
44
|
+
exports.identityOrigin = utils.envOverride("FIREBASE_IDENTITY_URL", "https://identitytoolkit.googleapis.com");
|
|
45
|
+
exports.iamOrigin = utils.envOverride("FIREBASE_IAM_URL", "https://iam.googleapis.com");
|
|
46
|
+
exports.extensionsOrigin = utils.envOverride("FIREBASE_EXT_URL", "https://firebaseextensions.googleapis.com");
|
|
47
|
+
exports.realtimeOrigin = utils.envOverride("FIREBASE_REALTIME_URL", "https://firebaseio.com");
|
|
48
|
+
exports.rtdbManagementOrigin = utils.envOverride("FIREBASE_RTDB_MANAGEMENT_URL", "https://firebasedatabase.googleapis.com");
|
|
49
|
+
exports.rtdbMetadataOrigin = utils.envOverride("FIREBASE_RTDB_METADATA_URL", "https://metadata-dot-firebase-prod.appspot.com");
|
|
50
|
+
exports.remoteConfigApiOrigin = utils.envOverride("FIREBASE_REMOTE_CONFIG_URL", "https://firebaseremoteconfig.googleapis.com");
|
|
51
|
+
exports.resourceManagerOrigin = utils.envOverride("FIREBASE_RESOURCEMANAGER_URL", "https://cloudresourcemanager.googleapis.com");
|
|
52
|
+
exports.rulesOrigin = utils.envOverride("FIREBASE_RULES_URL", "https://firebaserules.googleapis.com");
|
|
53
|
+
exports.runtimeconfigOrigin = utils.envOverride("FIREBASE_RUNTIMECONFIG_URL", "https://runtimeconfig.googleapis.com");
|
|
54
|
+
exports.storageOrigin = utils.envOverride("FIREBASE_STORAGE_URL", "https://storage.googleapis.com");
|
|
55
|
+
exports.firebaseStorageOrigin = utils.envOverride("FIREBASE_FIREBASESTORAGE_URL", "https://firebasestorage.googleapis.com");
|
|
56
|
+
exports.hostingApiOrigin = utils.envOverride("FIREBASE_HOSTING_API_URL", "https://firebasehosting.googleapis.com");
|
|
57
|
+
exports.cloudRunApiOrigin = utils.envOverride("CLOUD_RUN_API_URL", "https://run.googleapis.com");
|
|
58
|
+
exports.serviceUsageOrigin = utils.envOverride("FIREBASE_SERVICE_USAGE_URL", "https://serviceusage.googleapis.com");
|
|
59
|
+
exports.githubOrigin = utils.envOverride("GITHUB_URL", "https://github.com");
|
|
60
|
+
exports.githubApiOrigin = utils.envOverride("GITHUB_API_URL", "https://api.github.com");
|
|
61
|
+
exports.secretManagerOrigin = utils.envOverride("CLOUD_SECRET_MANAGER_URL", "https://secretmanager.googleapis.com");
|
|
62
|
+
exports.githubClientId = utils.envOverride("GITHUB_CLIENT_ID", "89cf50f02ac6aaed3484");
|
|
63
|
+
exports.githubClientSecret = utils.envOverride("GITHUB_CLIENT_SECRET", "3330d14abc895d9a74d5f17cd7a00711fa2c5bf0");
|
|
64
|
+
function getScopes() {
|
|
65
|
+
return Array.from(commandScopes);
|
|
66
|
+
}
|
|
67
|
+
exports.getScopes = getScopes;
|
|
68
|
+
function setScopes(sps = []) {
|
|
69
|
+
commandScopes = new Set([
|
|
70
|
+
scopes.EMAIL,
|
|
71
|
+
scopes.OPENID,
|
|
72
|
+
scopes.CLOUD_PROJECTS_READONLY,
|
|
73
|
+
scopes.FIREBASE_PLATFORM,
|
|
74
|
+
]);
|
|
75
|
+
for (const s of sps) {
|
|
76
|
+
commandScopes.add(s);
|
|
25
77
|
}
|
|
26
|
-
logger.debug("
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return new Promise(function (resolve, reject) {
|
|
30
|
-
var req = request(options, function (err, response, body) {
|
|
31
|
-
if (err) {
|
|
32
|
-
return reject(new FirebaseError("Server Error. " + err.message, {
|
|
33
|
-
original: err,
|
|
34
|
-
exit: 2,
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
logger.debug("<<< HTTP RESPONSE", response.statusCode, response.headers);
|
|
38
|
-
if (response.statusCode >= 400 && !logOptions.skipResponseBody) {
|
|
39
|
-
logger.debug("<<< HTTP RESPONSE BODY", response.body);
|
|
40
|
-
if (!options.resolveOnHTTPError) {
|
|
41
|
-
return reject(responseToError(response, body));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return resolve({
|
|
45
|
-
status: response.statusCode,
|
|
46
|
-
response: response,
|
|
47
|
-
body: body,
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
if (_.size(options.files) > 0) {
|
|
51
|
-
var form = req.form();
|
|
52
|
-
_.forEach(options.files, function (details, param) {
|
|
53
|
-
form.append(param, details.stream, {
|
|
54
|
-
knownLength: details.knownLength,
|
|
55
|
-
filename: details.filename,
|
|
56
|
-
contentType: details.contentType,
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
var _appendQueryData = function (path, data) {
|
|
63
|
-
if (data && _.size(data) > 0) {
|
|
64
|
-
path += _.includes(path, "?") ? "&" : "?";
|
|
65
|
-
path += querystring.stringify(data);
|
|
66
|
-
}
|
|
67
|
-
return path;
|
|
68
|
-
};
|
|
69
|
-
var api = {
|
|
70
|
-
authProxyOrigin: utils.envOverride("FIREBASE_AUTHPROXY_URL", "https://auth.firebase.tools"),
|
|
71
|
-
clientId: utils.envOverride("FIREBASE_CLIENT_ID", "563584335869-fgrhgmd47bqnekij5i8b5pr03ho849e6.apps.googleusercontent.com"),
|
|
72
|
-
clientSecret: utils.envOverride("FIREBASE_CLIENT_SECRET", "j9iVZfS8kkCEFUPaAeJV0sAi"),
|
|
73
|
-
cloudbillingOrigin: utils.envOverride("FIREBASE_CLOUDBILLING_URL", "https://cloudbilling.googleapis.com"),
|
|
74
|
-
cloudloggingOrigin: utils.envOverride("FIREBASE_CLOUDLOGGING_URL", "https://logging.googleapis.com"),
|
|
75
|
-
cloudMonitoringOrigin: utils.envOverride("CLOUD_MONITORING_URL", "https://monitoring.googleapis.com"),
|
|
76
|
-
containerRegistryDomain: utils.envOverride("CONTAINER_REGISTRY_DOMAIN", "gcr.io"),
|
|
77
|
-
artifactRegistryDomain: utils.envOverride("ARTIFACT_REGISTRY_DOMAIN", "https://artifactregistry.googleapis.com"),
|
|
78
|
-
appDistributionOrigin: utils.envOverride("FIREBASE_APP_DISTRIBUTION_URL", "https://firebaseappdistribution.googleapis.com"),
|
|
79
|
-
appengineOrigin: utils.envOverride("FIREBASE_APPENGINE_URL", "https://appengine.googleapis.com"),
|
|
80
|
-
authOrigin: utils.envOverride("FIREBASE_AUTH_URL", "https://accounts.google.com"),
|
|
81
|
-
consoleOrigin: utils.envOverride("FIREBASE_CONSOLE_URL", "https://console.firebase.google.com"),
|
|
82
|
-
deployOrigin: utils.envOverride("FIREBASE_DEPLOY_URL", utils.envOverride("FIREBASE_UPLOAD_URL", "https://deploy.firebase.com")),
|
|
83
|
-
dynamicLinksOrigin: utils.envOverride("FIREBASE_DYNAMIC_LINKS_URL", "https://firebasedynamiclinks.googleapis.com"),
|
|
84
|
-
dynamicLinksKey: utils.envOverride("FIREBASE_DYNAMIC_LINKS_KEY", "AIzaSyB6PtY5vuiSB8MNgt20mQffkOlunZnHYiQ"),
|
|
85
|
-
firebaseApiOrigin: utils.envOverride("FIREBASE_API_URL", "https://firebase.googleapis.com"),
|
|
86
|
-
firebaseExtensionsRegistryOrigin: utils.envOverride("FIREBASE_EXT_REGISTRY_ORIGIN", "https://extensions-registry.firebaseapp.com"),
|
|
87
|
-
firedataOrigin: utils.envOverride("FIREBASE_FIREDATA_URL", "https://mobilesdk-pa.googleapis.com"),
|
|
88
|
-
firestoreOriginOrEmulator: utils.envOverride(Constants.FIRESTORE_EMULATOR_HOST, utils.envOverride("FIRESTORE_URL", "https://firestore.googleapis.com"), (val) => {
|
|
89
|
-
if (val.startsWith("http")) {
|
|
90
|
-
return val;
|
|
91
|
-
}
|
|
92
|
-
return `http://${val}`;
|
|
93
|
-
}),
|
|
94
|
-
firestoreOrigin: utils.envOverride("FIRESTORE_URL", "https://firestore.googleapis.com"),
|
|
95
|
-
functionsOrigin: utils.envOverride("FIREBASE_FUNCTIONS_URL", "https://cloudfunctions.googleapis.com"),
|
|
96
|
-
functionsV2Origin: utils.envOverride("FIREBASE_FUNCTIONS_V2_URL", "https://cloudfunctions.googleapis.com"),
|
|
97
|
-
runOrigin: utils.envOverride("CLOUD_RUN_URL", "https://run.googleapis.com"),
|
|
98
|
-
functionsDefaultRegion: utils.envOverride("FIREBASE_FUNCTIONS_DEFAULT_REGION", "us-central1"),
|
|
99
|
-
cloudschedulerOrigin: utils.envOverride("FIREBASE_CLOUDSCHEDULER_URL", "https://cloudscheduler.googleapis.com"),
|
|
100
|
-
cloudTasksOrigin: utils.envOverride("FIREBASE_CLOUD_TAKS_URL", "https://cloudtasks.googleapis.com"),
|
|
101
|
-
pubsubOrigin: utils.envOverride("FIREBASE_PUBSUB_URL", "https://pubsub.googleapis.com"),
|
|
102
|
-
googleOrigin: utils.envOverride("FIREBASE_TOKEN_URL", utils.envOverride("FIREBASE_GOOGLE_URL", "https://www.googleapis.com")),
|
|
103
|
-
hostingOrigin: utils.envOverride("FIREBASE_HOSTING_URL", "https://web.app"),
|
|
104
|
-
identityOrigin: utils.envOverride("FIREBASE_IDENTITY_URL", "https://identitytoolkit.googleapis.com"),
|
|
105
|
-
iamOrigin: utils.envOverride("FIREBASE_IAM_URL", "https://iam.googleapis.com"),
|
|
106
|
-
extensionsOrigin: utils.envOverride("FIREBASE_EXT_URL", "https://firebaseextensions.googleapis.com"),
|
|
107
|
-
realtimeOrigin: utils.envOverride("FIREBASE_REALTIME_URL", "https://firebaseio.com"),
|
|
108
|
-
rtdbManagementOrigin: utils.envOverride("FIREBASE_RTDB_MANAGEMENT_URL", "https://firebasedatabase.googleapis.com"),
|
|
109
|
-
rtdbMetadataOrigin: utils.envOverride("FIREBASE_RTDB_METADATA_URL", "https://metadata-dot-firebase-prod.appspot.com"),
|
|
110
|
-
remoteConfigApiOrigin: utils.envOverride("FIREBASE_REMOTE_CONFIG_URL", "https://firebaseremoteconfig.googleapis.com"),
|
|
111
|
-
resourceManagerOrigin: utils.envOverride("FIREBASE_RESOURCEMANAGER_URL", "https://cloudresourcemanager.googleapis.com"),
|
|
112
|
-
rulesOrigin: utils.envOverride("FIREBASE_RULES_URL", "https://firebaserules.googleapis.com"),
|
|
113
|
-
runtimeconfigOrigin: utils.envOverride("FIREBASE_RUNTIMECONFIG_URL", "https://runtimeconfig.googleapis.com"),
|
|
114
|
-
storageOrigin: utils.envOverride("FIREBASE_STORAGE_URL", "https://storage.googleapis.com"),
|
|
115
|
-
firebaseStorageOrigin: utils.envOverride("FIREBASE_FIREBASESTORAGE_URL", "https://firebasestorage.googleapis.com"),
|
|
116
|
-
hostingApiOrigin: utils.envOverride("FIREBASE_HOSTING_API_URL", "https://firebasehosting.googleapis.com"),
|
|
117
|
-
cloudRunApiOrigin: utils.envOverride("CLOUD_RUN_API_URL", "https://run.googleapis.com"),
|
|
118
|
-
serviceUsageOrigin: utils.envOverride("FIREBASE_SERVICE_USAGE_URL", "https://serviceusage.googleapis.com"),
|
|
119
|
-
githubOrigin: utils.envOverride("GITHUB_URL", "https://github.com"),
|
|
120
|
-
githubApiOrigin: utils.envOverride("GITHUB_API_URL", "https://api.github.com"),
|
|
121
|
-
secretManagerOrigin: utils.envOverride("CLOUD_SECRET_MANAGER_URL", "https://secretmanager.googleapis.com"),
|
|
122
|
-
githubClientId: utils.envOverride("GITHUB_CLIENT_ID", "89cf50f02ac6aaed3484"),
|
|
123
|
-
githubClientSecret: utils.envOverride("GITHUB_CLIENT_SECRET", "3330d14abc895d9a74d5f17cd7a00711fa2c5bf0"),
|
|
124
|
-
setRefreshToken: function (token) {
|
|
125
|
-
refreshToken = token;
|
|
126
|
-
},
|
|
127
|
-
setAccessToken: function (token) {
|
|
128
|
-
accessToken = token;
|
|
129
|
-
},
|
|
130
|
-
getScopes: function () {
|
|
131
|
-
return commandScopes;
|
|
132
|
-
},
|
|
133
|
-
setScopes: function (s) {
|
|
134
|
-
commandScopes = _.uniq(_.flatten([
|
|
135
|
-
scopes.EMAIL,
|
|
136
|
-
scopes.OPENID,
|
|
137
|
-
scopes.CLOUD_PROJECTS_READONLY,
|
|
138
|
-
scopes.FIREBASE_PLATFORM,
|
|
139
|
-
].concat(s || [])));
|
|
140
|
-
logger.debug("> command requires scopes:", JSON.stringify(commandScopes));
|
|
141
|
-
},
|
|
142
|
-
getAccessToken: function () {
|
|
143
|
-
return accessToken
|
|
144
|
-
? Promise.resolve({ access_token: accessToken })
|
|
145
|
-
: require("./auth").getAccessToken(refreshToken, commandScopes);
|
|
146
|
-
},
|
|
147
|
-
addRequestHeaders: function (reqOptions, options) {
|
|
148
|
-
_.set(reqOptions, ["headers", "User-Agent"], "FirebaseCLI/" + CLI_VERSION);
|
|
149
|
-
_.set(reqOptions, ["headers", "X-Client-Version"], "FirebaseCLI/" + CLI_VERSION);
|
|
150
|
-
var secureRequest = true;
|
|
151
|
-
if (options && options.origin) {
|
|
152
|
-
const originUrl = url.parse(options.origin);
|
|
153
|
-
secureRequest = originUrl.protocol === "https:";
|
|
154
|
-
}
|
|
155
|
-
var getTokenPromise = secureRequest
|
|
156
|
-
? api.getAccessToken()
|
|
157
|
-
: Promise.resolve({ access_token: "owner" });
|
|
158
|
-
return getTokenPromise.then(function (result) {
|
|
159
|
-
_.set(reqOptions, "headers.authorization", "Bearer " + result.access_token);
|
|
160
|
-
return reqOptions;
|
|
161
|
-
});
|
|
162
|
-
},
|
|
163
|
-
request: function (method, resource, options) {
|
|
164
|
-
options = _.extend({
|
|
165
|
-
data: {},
|
|
166
|
-
resolveOnHTTPError: false,
|
|
167
|
-
json: true,
|
|
168
|
-
}, options);
|
|
169
|
-
if (!options.origin) {
|
|
170
|
-
throw new FirebaseError("Cannot make request without an origin", { exit: 2 });
|
|
171
|
-
}
|
|
172
|
-
var validMethods = ["GET", "PUT", "POST", "DELETE", "PATCH"];
|
|
173
|
-
if (validMethods.indexOf(method) < 0) {
|
|
174
|
-
method = "GET";
|
|
175
|
-
}
|
|
176
|
-
var reqOptions = {
|
|
177
|
-
method: method,
|
|
178
|
-
};
|
|
179
|
-
if (options.query) {
|
|
180
|
-
resource = _appendQueryData(resource, options.query);
|
|
181
|
-
}
|
|
182
|
-
if (method === "GET") {
|
|
183
|
-
resource = _appendQueryData(resource, options.data);
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
if (_.size(options.data) > 0) {
|
|
187
|
-
reqOptions.body = options.data;
|
|
188
|
-
}
|
|
189
|
-
else if (_.size(options.form) > 0) {
|
|
190
|
-
reqOptions.form = options.form;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
reqOptions.url = options.origin + resource;
|
|
194
|
-
reqOptions.files = options.files;
|
|
195
|
-
reqOptions.resolveOnHTTPError = options.resolveOnHTTPError;
|
|
196
|
-
reqOptions.json = options.json;
|
|
197
|
-
reqOptions.qs = options.qs;
|
|
198
|
-
reqOptions.headers = options.headers;
|
|
199
|
-
reqOptions.timeout = options.timeout;
|
|
200
|
-
var requestFunction = function () {
|
|
201
|
-
return _request(reqOptions, options.logOptions);
|
|
202
|
-
};
|
|
203
|
-
if (options.auth === true) {
|
|
204
|
-
requestFunction = function () {
|
|
205
|
-
return api.addRequestHeaders(reqOptions, options).then(function (reqOptionsWithToken) {
|
|
206
|
-
return _request(reqOptionsWithToken, options.logOptions);
|
|
207
|
-
});
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
return requestFunction().catch(function (err) {
|
|
211
|
-
if (options.retryCodes &&
|
|
212
|
-
_.includes(options.retryCodes, _.get(err, "context.response.statusCode"))) {
|
|
213
|
-
return new Promise(function (resolve) {
|
|
214
|
-
setTimeout(resolve, 1000);
|
|
215
|
-
}).then(requestFunction);
|
|
216
|
-
}
|
|
217
|
-
return Promise.reject(err);
|
|
218
|
-
});
|
|
219
|
-
},
|
|
220
|
-
};
|
|
221
|
-
module.exports = api;
|
|
78
|
+
logger_1.logger.debug("> command requires scopes:", Array.from(commandScopes));
|
|
79
|
+
}
|
|
80
|
+
exports.setScopes = setScopes;
|
package/lib/apiv2.js
CHANGED
|
@@ -11,7 +11,8 @@ const util_1 = require("util");
|
|
|
11
11
|
const auth = require("./auth");
|
|
12
12
|
const error_1 = require("./error");
|
|
13
13
|
const logger_1 = require("./logger");
|
|
14
|
-
const
|
|
14
|
+
const responseToError_1 = require("./responseToError");
|
|
15
|
+
const FormData = require("form-data");
|
|
15
16
|
const pkg = require("../package.json");
|
|
16
17
|
const CLI_VERSION = pkg.version;
|
|
17
18
|
let accessToken = "";
|
|
@@ -277,13 +278,13 @@ class Client {
|
|
|
277
278
|
this.logResponse(res, body, options);
|
|
278
279
|
if (res.status >= 400) {
|
|
279
280
|
if ((_a = options.retryCodes) === null || _a === void 0 ? void 0 : _a.includes(res.status)) {
|
|
280
|
-
const err = responseToError({ statusCode: res.status }, body) || undefined;
|
|
281
|
+
const err = (0, responseToError_1.responseToError)({ statusCode: res.status }, body) || undefined;
|
|
281
282
|
if (operation.retry(err)) {
|
|
282
283
|
return;
|
|
283
284
|
}
|
|
284
285
|
}
|
|
285
286
|
if (!options.resolveOnHTTPError) {
|
|
286
|
-
return reject(responseToError({ statusCode: res.status }, body));
|
|
287
|
+
return reject((0, responseToError_1.responseToError)({ statusCode: res.status }, body));
|
|
287
288
|
}
|
|
288
289
|
}
|
|
289
290
|
resolve({
|
|
@@ -346,5 +347,5 @@ function bodyToString(body) {
|
|
|
346
347
|
}
|
|
347
348
|
}
|
|
348
349
|
function isStream(o) {
|
|
349
|
-
return o instanceof stream_1.Readable;
|
|
350
|
+
return o instanceof stream_1.Readable || o instanceof FormData;
|
|
350
351
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AppDistributionClient = exports.UploadReleaseResult = exports.IntegrationState = void 0;
|
|
4
|
-
const _ = require("lodash");
|
|
5
|
-
const api = require("../api");
|
|
6
4
|
const utils = require("../utils");
|
|
7
5
|
const operationPoller = require("../operation-poller");
|
|
8
6
|
const error_1 = require("../error");
|
|
9
7
|
const apiv2_1 = require("../apiv2");
|
|
8
|
+
const api_1 = require("../api");
|
|
10
9
|
var IntegrationState;
|
|
11
10
|
(function (IntegrationState) {
|
|
12
11
|
IntegrationState["AAB_INTEGRATION_STATE_UNSPECIFIED"] = "AAB_INTEGRATION_STATE_UNSPECIFIED";
|
|
@@ -27,35 +26,33 @@ var UploadReleaseResult;
|
|
|
27
26
|
class AppDistributionClient {
|
|
28
27
|
constructor() {
|
|
29
28
|
this.appDistroV2Client = new apiv2_1.Client({
|
|
30
|
-
urlPrefix:
|
|
29
|
+
urlPrefix: api_1.appDistributionOrigin,
|
|
31
30
|
apiVersion: "v1",
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
33
|
async getAabInfo(appName) {
|
|
35
|
-
const apiResponse = await
|
|
36
|
-
|
|
37
|
-
auth: true,
|
|
38
|
-
});
|
|
39
|
-
return _.get(apiResponse, "body");
|
|
34
|
+
const apiResponse = await this.appDistroV2Client.get(`/${appName}/aabInfo`);
|
|
35
|
+
return apiResponse.body;
|
|
40
36
|
}
|
|
41
37
|
async uploadRelease(appName, distribution) {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
const client = new apiv2_1.Client({ urlPrefix: api_1.appDistributionOrigin });
|
|
39
|
+
const apiResponse = await client.request({
|
|
40
|
+
method: "POST",
|
|
41
|
+
path: `/upload/v1/${appName}/releases:upload`,
|
|
45
42
|
headers: {
|
|
46
43
|
"X-Goog-Upload-File-Name": distribution.getFileName(),
|
|
47
44
|
"X-Goog-Upload-Protocol": "raw",
|
|
48
45
|
"Content-Type": "application/octet-stream",
|
|
49
46
|
},
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
responseType: "json",
|
|
48
|
+
body: distribution.readStream(),
|
|
52
49
|
});
|
|
53
|
-
return
|
|
50
|
+
return apiResponse.body.name;
|
|
54
51
|
}
|
|
55
52
|
async pollUploadStatus(operationName) {
|
|
56
53
|
return operationPoller.pollOperation({
|
|
57
54
|
pollerName: "App Distribution Upload Poller",
|
|
58
|
-
apiOrigin:
|
|
55
|
+
apiOrigin: api_1.appDistributionOrigin,
|
|
59
56
|
apiVersion: "v1",
|
|
60
57
|
operationResourceName: operationName,
|
|
61
58
|
masterTimeout: 5 * 60 * 1000,
|
|
@@ -75,19 +72,17 @@ class AppDistributionClient {
|
|
|
75
72
|
text: releaseNotes,
|
|
76
73
|
},
|
|
77
74
|
};
|
|
75
|
+
const queryParams = { updateMask: "release_notes.text" };
|
|
78
76
|
try {
|
|
79
|
-
await
|
|
80
|
-
origin: api.appDistributionOrigin,
|
|
81
|
-
auth: true,
|
|
82
|
-
data,
|
|
83
|
-
});
|
|
77
|
+
await this.appDistroV2Client.patch(`/${releaseName}`, data, { queryParams });
|
|
84
78
|
}
|
|
85
79
|
catch (err) {
|
|
86
|
-
throw new error_1.FirebaseError(`failed to update release notes with ${err === null || err === void 0 ? void 0 : err.message}
|
|
80
|
+
throw new error_1.FirebaseError(`failed to update release notes with ${err === null || err === void 0 ? void 0 : err.message}`);
|
|
87
81
|
}
|
|
88
82
|
utils.logSuccess("added release notes successfully");
|
|
89
83
|
}
|
|
90
84
|
async distribute(releaseName, testerEmails = [], groupAliases = []) {
|
|
85
|
+
var _a, _b, _c;
|
|
91
86
|
if (testerEmails.length === 0 && groupAliases.length === 0) {
|
|
92
87
|
utils.logWarning("no testers or groups specified, skipping");
|
|
93
88
|
return;
|
|
@@ -98,22 +93,16 @@ class AppDistributionClient {
|
|
|
98
93
|
groupAliases,
|
|
99
94
|
};
|
|
100
95
|
try {
|
|
101
|
-
await
|
|
102
|
-
origin: api.appDistributionOrigin,
|
|
103
|
-
auth: true,
|
|
104
|
-
data,
|
|
105
|
-
});
|
|
96
|
+
await this.appDistroV2Client.post(`/${releaseName}:distribute`, data);
|
|
106
97
|
}
|
|
107
98
|
catch (err) {
|
|
108
99
|
let errorMessage = err.message;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
errorMessage = "invalid groups";
|
|
116
|
-
}
|
|
100
|
+
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;
|
|
101
|
+
if (errorStatus === "FAILED_PRECONDITION") {
|
|
102
|
+
errorMessage = "invalid testers";
|
|
103
|
+
}
|
|
104
|
+
else if (errorStatus === "INVALID_ARGUMENT") {
|
|
105
|
+
errorMessage = "invalid groups";
|
|
117
106
|
}
|
|
118
107
|
throw new error_1.FirebaseError(`failed to distribute to testers/groups: ${errorMessage}`, {
|
|
119
108
|
exit: 1,
|