firebase-tools 10.9.2 → 11.1.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.
Files changed (181) hide show
  1. package/README.md +15 -9
  2. package/lib/accountImporter.js +92 -93
  3. package/lib/api.js +77 -218
  4. package/lib/apiv2.js +5 -4
  5. package/lib/appdistribution/client.js +16 -25
  6. package/lib/auth.js +69 -47
  7. package/lib/bin/firebase.js +42 -47
  8. package/lib/checkValidTargetFilters.js +13 -12
  9. package/lib/commands/appdistribution-distribute.js +2 -1
  10. package/lib/commands/appdistribution-testers-add.js +2 -1
  11. package/lib/commands/appdistribution-testers-remove.js +2 -1
  12. package/lib/commands/apps-android-sha-create.js +2 -1
  13. package/lib/commands/apps-android-sha-delete.js +2 -1
  14. package/lib/commands/apps-android-sha-list.js +2 -1
  15. package/lib/commands/apps-create.js +2 -1
  16. package/lib/commands/apps-list.js +2 -1
  17. package/lib/commands/apps-sdkconfig.js +8 -3
  18. package/lib/commands/auth-export.js +2 -1
  19. package/lib/commands/auth-import.js +7 -10
  20. package/lib/commands/crashlytics-symbols-upload.js +2 -1
  21. package/lib/commands/database-get.js +4 -3
  22. package/lib/commands/database-instances-create.js +2 -1
  23. package/lib/commands/database-instances-list.js +3 -3
  24. package/lib/commands/database-profile.js +2 -1
  25. package/lib/commands/database-push.js +2 -1
  26. package/lib/commands/database-remove.js +2 -1
  27. package/lib/commands/database-rules-canary.js +2 -1
  28. package/lib/commands/database-rules-get.js +2 -1
  29. package/lib/commands/database-rules-list.js +2 -1
  30. package/lib/commands/database-rules-release.js +2 -1
  31. package/lib/commands/database-rules-stage.js +2 -1
  32. package/lib/commands/database-set.js +2 -1
  33. package/lib/commands/database-settings-get.js +2 -1
  34. package/lib/commands/database-settings-set.js +2 -1
  35. package/lib/commands/database-update.js +2 -1
  36. package/lib/commands/deploy.js +23 -21
  37. package/lib/commands/emulators-exec.js +2 -1
  38. package/lib/commands/emulators-export.js +2 -1
  39. package/lib/commands/emulators-start.js +2 -1
  40. package/lib/commands/experimental-functions-shell.js +10 -8
  41. package/lib/commands/ext-configure.js +56 -120
  42. package/lib/commands/ext-dev-deprecate.js +2 -1
  43. package/lib/commands/ext-dev-emulators-exec.js +13 -7
  44. package/lib/commands/ext-dev-emulators-start.js +12 -27
  45. package/lib/commands/ext-dev-extension-delete.js +2 -1
  46. package/lib/commands/ext-dev-init.js +2 -1
  47. package/lib/commands/ext-dev-list.js +2 -1
  48. package/lib/commands/ext-dev-publish.js +2 -1
  49. package/lib/commands/ext-dev-register.js +2 -1
  50. package/lib/commands/ext-dev-undeprecate.js +2 -1
  51. package/lib/commands/ext-dev-unpublish.js +2 -1
  52. package/lib/commands/ext-dev-usage.js +2 -1
  53. package/lib/commands/ext-export.js +2 -1
  54. package/lib/commands/ext-info.js +2 -1
  55. package/lib/commands/ext-install.js +14 -198
  56. package/lib/commands/ext-list.js +2 -1
  57. package/lib/commands/ext-sources-create.js +2 -1
  58. package/lib/commands/ext-uninstall.js +9 -92
  59. package/lib/commands/ext-update.js +67 -225
  60. package/lib/commands/ext.js +2 -1
  61. package/lib/commands/firestore-delete.js +2 -1
  62. package/lib/commands/firestore-indexes-list.js +2 -1
  63. package/lib/commands/functions-config-clone.js +4 -3
  64. package/lib/commands/functions-config-export.js +2 -1
  65. package/lib/commands/functions-config-get.js +2 -1
  66. package/lib/commands/functions-config-set.js +2 -1
  67. package/lib/commands/functions-config-unset.js +2 -1
  68. package/lib/commands/functions-delete.js +2 -1
  69. package/lib/commands/functions-deletegcfartifacts.js +2 -1
  70. package/lib/commands/functions-list.js +2 -1
  71. package/lib/commands/functions-log.js +2 -1
  72. package/lib/commands/functions-secrets-access.js +2 -1
  73. package/lib/commands/functions-secrets-destroy.js +2 -1
  74. package/lib/commands/functions-secrets-get.js +2 -1
  75. package/lib/commands/functions-secrets-prune.js +2 -1
  76. package/lib/commands/functions-secrets-set.js +2 -1
  77. package/lib/commands/functions-shell.js +12 -10
  78. package/lib/commands/help.js +2 -1
  79. package/lib/commands/hosting-channel-create.js +2 -1
  80. package/lib/commands/hosting-channel-delete.js +2 -1
  81. package/lib/commands/hosting-channel-deploy.js +2 -1
  82. package/lib/commands/hosting-channel-list.js +2 -1
  83. package/lib/commands/hosting-channel-open.js +2 -1
  84. package/lib/commands/hosting-clone.js +2 -1
  85. package/lib/commands/hosting-disable.js +2 -1
  86. package/lib/commands/hosting-sites-create.js +2 -1
  87. package/lib/commands/hosting-sites-delete.js +2 -1
  88. package/lib/commands/hosting-sites-get.js +2 -1
  89. package/lib/commands/hosting-sites-list.js +2 -1
  90. package/lib/commands/index.js +23 -13
  91. package/lib/commands/init.js +47 -43
  92. package/lib/commands/login-add.js +2 -1
  93. package/lib/commands/login-ci.js +2 -1
  94. package/lib/commands/login-list.js +2 -1
  95. package/lib/commands/login-use.js +2 -1
  96. package/lib/commands/login.js +2 -1
  97. package/lib/commands/logout.js +2 -1
  98. package/lib/commands/open.js +2 -1
  99. package/lib/commands/projects-addfirebase.js +2 -1
  100. package/lib/commands/projects-create.js +2 -1
  101. package/lib/commands/projects-list.js +2 -1
  102. package/lib/commands/remoteconfig-get.js +2 -1
  103. package/lib/commands/remoteconfig-rollback.js +2 -1
  104. package/lib/commands/remoteconfig-versions-list.js +2 -1
  105. package/lib/commands/serve.js +29 -27
  106. package/lib/commands/setup-emulators-database.js +2 -1
  107. package/lib/commands/setup-emulators-firestore.js +2 -1
  108. package/lib/commands/setup-emulators-pubsub.js +2 -1
  109. package/lib/commands/setup-emulators-storage.js +2 -1
  110. package/lib/commands/setup-emulators-ui.js +2 -1
  111. package/lib/commands/target-apply.js +2 -1
  112. package/lib/commands/target-clear.js +2 -1
  113. package/lib/commands/target-remove.js +2 -1
  114. package/lib/commands/target.js +2 -1
  115. package/lib/commands/use.js +54 -52
  116. package/lib/config.js +3 -3
  117. package/lib/deploy/database/deploy.js +3 -2
  118. package/lib/deploy/database/index.js +8 -5
  119. package/lib/deploy/database/prepare.js +22 -19
  120. package/lib/deploy/database/release.js +12 -9
  121. package/lib/deploy/firestore/prepare.js +2 -2
  122. package/lib/deploy/functions/build.js +32 -20
  123. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +187 -54
  124. package/lib/deploy/functions/runtimes/node/parseTriggers.js +14 -2
  125. package/lib/deploy/functions/services/database.js +14 -0
  126. package/lib/deploy/functions/services/index.js +14 -0
  127. package/lib/deploy/index.js +3 -3
  128. package/lib/deploy/lifecycleHooks.js +23 -20
  129. package/lib/deploy/remoteconfig/functions.js +18 -14
  130. package/lib/deploy/remoteconfig/prepare.js +2 -2
  131. package/lib/emulator/auth/apiSpec.js +14 -46
  132. package/lib/emulator/auth/operations.js +6 -29
  133. package/lib/emulator/auth/state.js +2 -25
  134. package/lib/emulator/commandUtils.js +1 -1
  135. package/lib/emulator/controller.js +3 -3
  136. package/lib/emulator/databaseEmulator.js +9 -7
  137. package/lib/emulator/downloadableEmulators.js +6 -6
  138. package/lib/emulator/extensionsEmulator.js +7 -3
  139. package/lib/emulator/firestoreEmulator.js +10 -12
  140. package/lib/emulator/functionsEmulator.js +39 -42
  141. package/lib/emulator/hubClient.js +11 -22
  142. package/lib/emulator/hubExport.js +26 -16
  143. package/lib/emulator/portUtils.js +2 -0
  144. package/lib/emulator/storage/crc.js +3 -0
  145. package/lib/emulator/storage/rules/runtime.js +1 -1
  146. package/lib/errorOut.js +2 -2
  147. package/lib/extensions/extensionsHelper.js +4 -5
  148. package/lib/extensions/manifest.js +5 -11
  149. package/lib/firebaseConfigValidate.js +1 -1
  150. package/lib/firestore/checkDatabaseType.js +4 -5
  151. package/lib/firestore/indexes.js +17 -34
  152. package/lib/functions/events/v2.js +7 -1
  153. package/lib/functionsConfigClone.js +43 -41
  154. package/lib/gcp/cloudfunctionsv2.js +17 -2
  155. package/lib/gcp/iam.js +1 -1
  156. package/lib/gcp/index.js +10 -10
  157. package/lib/gcp/runtimeconfig.js +45 -47
  158. package/lib/gcp/storage.js +2 -4
  159. package/lib/hosting/cloudRunProxy.js +19 -15
  160. package/lib/index.js +29 -28
  161. package/lib/init/features/database.js +11 -5
  162. package/lib/init/features/functions/index.js +1 -1
  163. package/lib/init/features/functions/javascript.js +23 -20
  164. package/lib/init/features/functions/npm-dependencies.js +17 -14
  165. package/lib/init/features/functions/typescript.js +27 -24
  166. package/lib/init/features/hosting/github.js +5 -4
  167. package/lib/loadCJSON.js +9 -6
  168. package/lib/logError.js +15 -12
  169. package/lib/management/apps.js +47 -43
  170. package/lib/management/database.js +33 -31
  171. package/lib/management/projects.js +13 -7
  172. package/lib/parseBoltRules.js +15 -14
  173. package/lib/profileReport.js +503 -511
  174. package/lib/profiler.js +4 -4
  175. package/lib/requireAuth.js +0 -1
  176. package/lib/responseToError.js +8 -5
  177. package/lib/rtdb.js +31 -29
  178. package/lib/scopes.js +9 -9
  179. package/npm-shrinkwrap.json +1485 -670
  180. package/package.json +21 -22
  181. package/standalone/package.json +1 -1
package/lib/api.js CHANGED
@@ -1,221 +1,80 @@
1
1
  "use strict";
2
- var _ = require("lodash");
3
- var querystring = require("querystring");
4
- var request = require("request");
5
- var url = require("url");
6
- var { Constants } = require("./emulator/constants");
7
- var { FirebaseError } = require("./error");
8
- const { logger } = require("./logger");
9
- var responseToError = require("./responseToError");
10
- var scopes = require("./scopes");
11
- var utils = require("./utils");
12
- var CLI_VERSION = require("../package.json").version;
13
- var accessToken;
14
- var refreshToken;
15
- var commandScopes;
16
- var _request = function (options, logOptions) {
17
- logOptions = logOptions || {};
18
- var qsLog = "";
19
- var bodyLog = "<request body omitted>";
20
- if (options.qs && !logOptions.skipQueryParams) {
21
- qsLog = JSON.stringify(options.qs);
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
- if (!logOptions.skipRequestBody) {
24
- bodyLog = options.body || options.form || "";
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(">>> HTTP REQUEST", options.method, options.url, qsLog, "\n", bodyLog);
27
- options.headers = options.headers || {};
28
- options.headers["connection"] = "keep-alive";
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 responseToError = require("./responseToError");
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
  }
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AppDistributionClient = exports.UploadReleaseResult = exports.IntegrationState = void 0;
4
4
  const _ = require("lodash");
5
- const api = require("../api");
6
5
  const utils = require("../utils");
7
6
  const operationPoller = require("../operation-poller");
8
7
  const error_1 = require("../error");
9
8
  const apiv2_1 = require("../apiv2");
9
+ const api_1 = require("../api");
10
10
  var IntegrationState;
11
11
  (function (IntegrationState) {
12
12
  IntegrationState["AAB_INTEGRATION_STATE_UNSPECIFIED"] = "AAB_INTEGRATION_STATE_UNSPECIFIED";
@@ -27,35 +27,33 @@ var UploadReleaseResult;
27
27
  class AppDistributionClient {
28
28
  constructor() {
29
29
  this.appDistroV2Client = new apiv2_1.Client({
30
- urlPrefix: api.appDistributionOrigin,
30
+ urlPrefix: api_1.appDistributionOrigin,
31
31
  apiVersion: "v1",
32
32
  });
33
33
  }
34
34
  async getAabInfo(appName) {
35
- const apiResponse = await api.request("GET", `/v1/${appName}/aabInfo`, {
36
- origin: api.appDistributionOrigin,
37
- auth: true,
38
- });
39
- return _.get(apiResponse, "body");
35
+ const apiResponse = await this.appDistroV2Client.get(`/${appName}/aabInfo`);
36
+ return apiResponse.body;
40
37
  }
41
38
  async uploadRelease(appName, distribution) {
42
- const apiResponse = await api.request("POST", `/upload/v1/${appName}/releases:upload`, {
43
- auth: true,
44
- origin: api.appDistributionOrigin,
39
+ const client = new apiv2_1.Client({ urlPrefix: api_1.appDistributionOrigin });
40
+ const apiResponse = await client.request({
41
+ method: "POST",
42
+ path: `/upload/v1/${appName}/releases:upload`,
45
43
  headers: {
46
44
  "X-Goog-Upload-File-Name": distribution.getFileName(),
47
45
  "X-Goog-Upload-Protocol": "raw",
48
46
  "Content-Type": "application/octet-stream",
49
47
  },
50
- data: distribution.readStream(),
51
- json: false,
48
+ responseType: "json",
49
+ body: distribution.readStream(),
52
50
  });
53
- return _.get(JSON.parse(apiResponse.body), "name");
51
+ return apiResponse.body.name;
54
52
  }
55
53
  async pollUploadStatus(operationName) {
56
54
  return operationPoller.pollOperation({
57
55
  pollerName: "App Distribution Upload Poller",
58
- apiOrigin: api.appDistributionOrigin,
56
+ apiOrigin: api_1.appDistributionOrigin,
59
57
  apiVersion: "v1",
60
58
  operationResourceName: operationName,
61
59
  masterTimeout: 5 * 60 * 1000,
@@ -75,15 +73,12 @@ class AppDistributionClient {
75
73
  text: releaseNotes,
76
74
  },
77
75
  };
76
+ const queryParams = { updateMask: "release_notes.text" };
78
77
  try {
79
- await api.request("PATCH", `/v1/${releaseName}?updateMask=release_notes.text`, {
80
- origin: api.appDistributionOrigin,
81
- auth: true,
82
- data,
83
- });
78
+ await this.appDistroV2Client.patch(`/${releaseName}`, data, { queryParams });
84
79
  }
85
80
  catch (err) {
86
- throw new error_1.FirebaseError(`failed to update release notes with ${err === null || err === void 0 ? void 0 : err.message}`, { exit: 1 });
81
+ throw new error_1.FirebaseError(`failed to update release notes with ${err === null || err === void 0 ? void 0 : err.message}`);
87
82
  }
88
83
  utils.logSuccess("added release notes successfully");
89
84
  }
@@ -98,11 +93,7 @@ class AppDistributionClient {
98
93
  groupAliases,
99
94
  };
100
95
  try {
101
- await api.request("POST", `/v1/${releaseName}:distribute`, {
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;