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.
Files changed (223) hide show
  1. package/lib/accountExporter.js +11 -4
  2. package/lib/accountImporter.js +93 -95
  3. package/lib/api.js +77 -218
  4. package/lib/apiv2.js +5 -4
  5. package/lib/appdistribution/client.js +23 -34
  6. package/lib/auth.js +72 -52
  7. package/lib/bin/firebase.js +42 -47
  8. package/lib/checkValidTargetFilters.js +36 -25
  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 +2 -1
  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 +4 -4
  25. package/lib/commands/database-push.js +4 -4
  26. package/lib/commands/database-remove.js +3 -3
  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 +3 -3
  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 +26 -25
  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 +6 -1
  42. package/lib/commands/ext-dev-deprecate.js +2 -1
  43. package/lib/commands/ext-dev-emulators-exec.js +3 -2
  44. package/lib/commands/ext-dev-emulators-start.js +3 -2
  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 +8 -8
  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 +14 -14
  55. package/lib/commands/ext-install.js +6 -1
  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 +7 -1
  59. package/lib/commands/ext-update.js +6 -1
  60. package/lib/commands/ext.js +4 -4
  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 +3 -8
  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 +7 -7
  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 +30 -30
  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 -53
  116. package/lib/config.js +7 -6
  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 -20
  120. package/lib/deploy/database/release.js +12 -9
  121. package/lib/deploy/extensions/secrets.js +3 -3
  122. package/lib/deploy/firestore/prepare.js +2 -2
  123. package/lib/deploy/functions/build.js +33 -20
  124. package/lib/deploy/functions/ensure.js +1 -11
  125. package/lib/deploy/functions/prepare.js +3 -13
  126. package/lib/deploy/functions/prepareFunctionsUpload.js +2 -3
  127. package/lib/deploy/functions/release/fabricator.js +0 -1
  128. package/lib/deploy/functions/release/index.js +1 -5
  129. package/lib/deploy/functions/runtimes/discovery/index.js +18 -3
  130. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +188 -54
  131. package/lib/deploy/functions/runtimes/golang/index.js +2 -22
  132. package/lib/deploy/functions/runtimes/node/index.js +3 -7
  133. package/lib/deploy/functions/runtimes/node/parseTriggers.js +15 -3
  134. package/lib/deploy/functions/services/database.js +14 -0
  135. package/lib/deploy/functions/services/index.js +14 -0
  136. package/lib/deploy/index.js +3 -3
  137. package/lib/deploy/lifecycleHooks.js +27 -27
  138. package/lib/deploy/remoteconfig/functions.js +18 -14
  139. package/lib/deploy/remoteconfig/prepare.js +2 -2
  140. package/lib/deploy/storage/prepare.js +1 -1
  141. package/lib/emulator/auth/apiSpec.js +14 -46
  142. package/lib/emulator/auth/index.js +1 -1
  143. package/lib/emulator/auth/operations.js +342 -93
  144. package/lib/emulator/auth/server.js +2 -2
  145. package/lib/emulator/auth/state.js +34 -32
  146. package/lib/emulator/commandUtils.js +1 -1
  147. package/lib/emulator/constants.js +1 -1
  148. package/lib/emulator/controller.js +7 -6
  149. package/lib/emulator/databaseEmulator.js +11 -9
  150. package/lib/emulator/download.js +1 -1
  151. package/lib/emulator/events/types.js +2 -3
  152. package/lib/emulator/firestoreEmulator.js +12 -14
  153. package/lib/emulator/functionsEmulator.js +65 -77
  154. package/lib/emulator/functionsEmulatorRuntime.js +7 -7
  155. package/lib/emulator/hostingEmulator.js +1 -1
  156. package/lib/emulator/hub.js +1 -1
  157. package/lib/emulator/hubClient.js +11 -22
  158. package/lib/emulator/hubExport.js +26 -16
  159. package/lib/emulator/loggingEmulator.js +1 -1
  160. package/lib/emulator/pubsubEmulator.js +1 -1
  161. package/lib/emulator/storage/crc.js +4 -4
  162. package/lib/emulator/storage/index.js +1 -1
  163. package/lib/emulator/types.js +1 -1
  164. package/lib/errorOut.js +2 -2
  165. package/lib/extensions/askUserForConsent.js +1 -2
  166. package/lib/extensions/askUserForParam.js +15 -18
  167. package/lib/extensions/emulator/optionsHelper.js +4 -4
  168. package/lib/extensions/extensionsApi.js +1 -22
  169. package/lib/extensions/extensionsHelper.js +6 -6
  170. package/lib/extensions/listExtensions.js +9 -10
  171. package/lib/extensions/manifest.js +2 -2
  172. package/lib/extensions/resolveSource.js +11 -7
  173. package/lib/extensions/secretsUtils.js +3 -3
  174. package/lib/extensions/types.js +24 -0
  175. package/lib/extensions/updateHelper.js +1 -1
  176. package/lib/extensions/utils.js +1 -2
  177. package/lib/extensions/warnings.js +3 -3
  178. package/lib/firestore/checkDatabaseType.js +4 -5
  179. package/lib/firestore/encodeFirestoreValue.js +11 -8
  180. package/lib/firestore/indexes.js +17 -34
  181. package/lib/fsAsync.js +3 -3
  182. package/lib/functions/events/v2.js +7 -1
  183. package/lib/functionsConfig.js +17 -14
  184. package/lib/functionsConfigClone.js +46 -46
  185. package/lib/gcp/cloudfunctions.js +2 -15
  186. package/lib/gcp/cloudfunctionsv2.js +17 -2
  187. package/lib/gcp/iam.js +1 -1
  188. package/lib/gcp/index.js +10 -10
  189. package/lib/gcp/rules.js +1 -1
  190. package/lib/gcp/runtimeconfig.js +45 -47
  191. package/lib/gcp/storage.js +2 -4
  192. package/lib/hosting/cloudRunProxy.js +19 -15
  193. package/lib/hosting/proxy.js +1 -1
  194. package/lib/index.js +29 -28
  195. package/lib/init/features/database.js +11 -5
  196. package/lib/init/features/functions/index.js +1 -1
  197. package/lib/init/features/functions/javascript.js +23 -20
  198. package/lib/init/features/functions/npm-dependencies.js +17 -14
  199. package/lib/init/features/functions/typescript.js +27 -24
  200. package/lib/init/features/hosting/github.js +6 -5
  201. package/lib/init/features/hosting/index.js +2 -2
  202. package/lib/loadCJSON.js +9 -6
  203. package/lib/localFunction.js +4 -4
  204. package/lib/logError.js +15 -12
  205. package/lib/management/apps.js +47 -43
  206. package/lib/management/database.js +33 -31
  207. package/lib/management/projects.js +13 -7
  208. package/lib/parseBoltRules.js +15 -14
  209. package/lib/previews.js +1 -1
  210. package/lib/profileReport.js +504 -512
  211. package/lib/profiler.js +4 -4
  212. package/lib/prompt.js +1 -2
  213. package/lib/rc.js +1 -1
  214. package/lib/requireAuth.js +0 -1
  215. package/lib/responseToError.js +8 -5
  216. package/lib/rtdb.js +31 -29
  217. package/lib/rulesDeploy.js +2 -2
  218. package/lib/scopes.js +9 -9
  219. package/lib/serve/index.js +4 -5
  220. package/lib/utils.js +30 -6
  221. package/npm-shrinkwrap.json +877 -279
  222. package/package.json +19 -16
  223. 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
  }
@@ -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: api.appDistributionOrigin,
29
+ urlPrefix: api_1.appDistributionOrigin,
31
30
  apiVersion: "v1",
32
31
  });
33
32
  }
34
33
  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");
34
+ const apiResponse = await this.appDistroV2Client.get(`/${appName}/aabInfo`);
35
+ return apiResponse.body;
40
36
  }
41
37
  async uploadRelease(appName, distribution) {
42
- const apiResponse = await api.request("POST", `/upload/v1/${appName}/releases:upload`, {
43
- auth: true,
44
- origin: api.appDistributionOrigin,
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
- data: distribution.readStream(),
51
- json: false,
47
+ responseType: "json",
48
+ body: distribution.readStream(),
52
49
  });
53
- return _.get(JSON.parse(apiResponse.body), "name");
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: api.appDistributionOrigin,
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 api.request("PATCH", `/v1/${releaseName}?updateMask=release_notes.text`, {
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}`, { exit: 1 });
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 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;
109
- if (_.has(err, "context.body.error")) {
110
- const errorStatus = _.get(err, "context.body.error.status");
111
- if (errorStatus === "FAILED_PRECONDITION") {
112
- errorMessage = "invalid testers";
113
- }
114
- else if (errorStatus === "INVALID_ARGUMENT") {
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,