firebase-tools 10.0.1 → 10.1.3

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 (254) hide show
  1. package/lib/accountExporter.js +9 -8
  2. package/lib/accountImporter.js +10 -8
  3. package/lib/api.js +1 -0
  4. package/lib/apiv2.js +91 -48
  5. package/lib/appdistribution/client.js +1 -1
  6. package/lib/appdistribution/options-parser-util.js +1 -1
  7. package/lib/archiveDirectory.js +63 -73
  8. package/lib/auth.js +2 -2
  9. package/lib/bin/firebase.js +1 -1
  10. package/lib/command.js +26 -26
  11. package/lib/commands/appdistribution-distribute.js +4 -4
  12. package/lib/commands/appdistribution-testers-add.js +2 -2
  13. package/lib/commands/appdistribution-testers-remove.js +2 -2
  14. package/lib/commands/apps-android-sha-create.js +2 -2
  15. package/lib/commands/apps-android-sha-delete.js +2 -2
  16. package/lib/commands/apps-android-sha-list.js +2 -2
  17. package/lib/commands/apps-create.js +9 -9
  18. package/lib/commands/apps-list.js +3 -3
  19. package/lib/commands/apps-sdkconfig.js +8 -8
  20. package/lib/commands/auth-export.js +26 -25
  21. package/lib/commands/auth-import.js +88 -78
  22. package/lib/commands/database-get.js +1 -1
  23. package/lib/commands/database-instances-create.js +4 -4
  24. package/lib/commands/database-instances-list.js +4 -4
  25. package/lib/commands/database-profile.js +1 -1
  26. package/lib/commands/database-push.js +1 -1
  27. package/lib/commands/database-remove.js +2 -2
  28. package/lib/commands/database-set.js +2 -2
  29. package/lib/commands/database-settings-get.js +1 -1
  30. package/lib/commands/database-settings-set.js +1 -1
  31. package/lib/commands/database-update.js +2 -2
  32. package/lib/commands/ext-configure.js +3 -3
  33. package/lib/commands/ext-dev-deprecate.js +4 -4
  34. package/lib/commands/ext-dev-extension-delete.js +3 -3
  35. package/lib/commands/ext-dev-init.js +4 -4
  36. package/lib/commands/ext-dev-list.js +1 -1
  37. package/lib/commands/ext-dev-publish.js +4 -4
  38. package/lib/commands/ext-dev-register.js +6 -6
  39. package/lib/commands/ext-dev-undeprecate.js +4 -4
  40. package/lib/commands/ext-dev-unpublish.js +3 -3
  41. package/lib/commands/ext-dev-usage.js +140 -0
  42. package/lib/commands/ext-export.js +8 -8
  43. package/lib/commands/ext-info.js +5 -5
  44. package/lib/commands/ext-install.js +27 -23
  45. package/lib/commands/ext-list.js +2 -2
  46. package/lib/commands/ext-sources-create.js +2 -2
  47. package/lib/commands/ext-uninstall.js +4 -4
  48. package/lib/commands/ext-update.js +18 -18
  49. package/lib/commands/ext.js +3 -3
  50. package/lib/commands/firestore-delete.js +1 -1
  51. package/lib/commands/functions-config-clone.js +22 -23
  52. package/lib/commands/functions-config-export.js +11 -11
  53. package/lib/commands/functions-config-get.js +22 -22
  54. package/lib/commands/functions-config-set.js +24 -22
  55. package/lib/commands/functions-config-unset.js +20 -22
  56. package/lib/commands/functions-delete.js +3 -3
  57. package/lib/commands/functions-deletegcfartifacts.js +4 -4
  58. package/lib/commands/functions-list.js +1 -1
  59. package/lib/commands/functions-log.js +1 -1
  60. package/lib/commands/help.js +12 -12
  61. package/lib/commands/hosting-channel-create.js +13 -13
  62. package/lib/commands/hosting-channel-delete.js +10 -10
  63. package/lib/commands/hosting-channel-deploy.js +18 -18
  64. package/lib/commands/hosting-channel-list.js +5 -5
  65. package/lib/commands/hosting-channel-open.js +9 -9
  66. package/lib/commands/hosting-clone.js +16 -16
  67. package/lib/commands/hosting-disable.js +1 -1
  68. package/lib/commands/hosting-sites-create.js +7 -7
  69. package/lib/commands/hosting-sites-delete.js +7 -7
  70. package/lib/commands/hosting-sites-get.js +2 -2
  71. package/lib/commands/hosting-sites-list.js +3 -3
  72. package/lib/commands/index.js +1 -0
  73. package/lib/commands/login-ci.js +10 -10
  74. package/lib/commands/login.js +2 -2
  75. package/lib/commands/logout.js +1 -1
  76. package/lib/commands/open.js +1 -1
  77. package/lib/commands/projects-addfirebase.js +2 -2
  78. package/lib/commands/projects-create.js +2 -2
  79. package/lib/commands/projects-list.js +1 -1
  80. package/lib/commands/remoteconfig-get.js +3 -3
  81. package/lib/commands/remoteconfig-rollback.js +3 -3
  82. package/lib/commands/remoteconfig-versions-list.js +7 -2
  83. package/lib/commands/setup-emulators-database.js +8 -7
  84. package/lib/commands/setup-emulators-firestore.js +8 -7
  85. package/lib/commands/setup-emulators-pubsub.js +5 -4
  86. package/lib/commands/setup-emulators-storage.js +4 -3
  87. package/lib/commands/setup-emulators-ui.js +8 -7
  88. package/lib/commands/target-apply.js +17 -16
  89. package/lib/commands/target-clear.js +11 -10
  90. package/lib/commands/target-remove.js +10 -9
  91. package/lib/commands/target.js +20 -20
  92. package/lib/config.js +6 -6
  93. package/lib/database/api.js +2 -2
  94. package/lib/database/metadata.js +16 -24
  95. package/lib/defaultCredentials.js +3 -3
  96. package/lib/deploy/extensions/deploy.js +4 -4
  97. package/lib/deploy/extensions/deploymentSummary.js +5 -4
  98. package/lib/deploy/extensions/index.js +1 -0
  99. package/lib/deploy/extensions/params.js +1 -1
  100. package/lib/deploy/extensions/planner.js +3 -3
  101. package/lib/deploy/extensions/prepare.js +9 -9
  102. package/lib/deploy/extensions/release.js +1 -1
  103. package/lib/deploy/extensions/secrets.js +7 -7
  104. package/lib/deploy/extensions/validate.js +2 -2
  105. package/lib/deploy/functions/backend.js +9 -5
  106. package/lib/deploy/functions/checkIam.js +7 -7
  107. package/lib/deploy/functions/containerCleaner.js +3 -3
  108. package/lib/deploy/functions/deploy.js +4 -4
  109. package/lib/deploy/functions/ensureCloudBuildEnabled.js +3 -3
  110. package/lib/deploy/functions/index.js +1 -0
  111. package/lib/deploy/functions/prepare.js +29 -23
  112. package/lib/deploy/functions/prompts.js +5 -5
  113. package/lib/deploy/functions/release/executor.js +4 -1
  114. package/lib/deploy/functions/release/fabricator.js +9 -6
  115. package/lib/deploy/functions/release/index.js +2 -2
  116. package/lib/deploy/functions/release/planner.js +6 -6
  117. package/lib/deploy/functions/release/reporter.js +8 -4
  118. package/lib/deploy/functions/runtimes/discovery/index.js +2 -2
  119. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +14 -14
  120. package/lib/deploy/functions/runtimes/golang/index.js +11 -14
  121. package/lib/deploy/functions/runtimes/index.js +6 -10
  122. package/lib/deploy/functions/runtimes/node/index.js +6 -10
  123. package/lib/deploy/functions/runtimes/node/parseTriggers.js +3 -3
  124. package/lib/deploy/functions/runtimes/node/validate.js +2 -1
  125. package/lib/deploy/functions/services/storage.js +1 -1
  126. package/lib/deploy/functions/triggerRegionHelper.js +1 -1
  127. package/lib/deploy/functions/validate.js +32 -4
  128. package/lib/deploy/hosting/convertConfig.js +45 -24
  129. package/lib/deploy/hosting/deploy.js +7 -7
  130. package/lib/deploy/hosting/prepare.js +1 -1
  131. package/lib/deploy/hosting/uploader.js +1 -1
  132. package/lib/deploy/hosting/validate.js +3 -3
  133. package/lib/deploy/remoteconfig/prepare.js +3 -3
  134. package/lib/deploy/remoteconfig/release.js +3 -3
  135. package/lib/deploy/storage/deploy.js +1 -1
  136. package/lib/deploy/storage/release.js +2 -2
  137. package/lib/detectProjectRoot.js +5 -5
  138. package/lib/emulator/auth/apiSpec.js +13 -7
  139. package/lib/emulator/auth/handlers.js +3 -3
  140. package/lib/emulator/auth/index.js +1 -1
  141. package/lib/emulator/auth/operations.js +256 -248
  142. package/lib/emulator/auth/server.js +11 -8
  143. package/lib/emulator/auth/state.js +12 -12
  144. package/lib/emulator/commandUtils.js +5 -5
  145. package/lib/emulator/controller.js +16 -11
  146. package/lib/emulator/downloadableEmulators.js +5 -4
  147. package/lib/emulator/emulatorLogger.js +1 -1
  148. package/lib/emulator/functionsEmulator.js +110 -75
  149. package/lib/emulator/functionsEmulatorRuntime.js +36 -21
  150. package/lib/emulator/functionsEmulatorShell.js +3 -2
  151. package/lib/emulator/functionsRuntimeWorker.js +1 -1
  152. package/lib/emulator/hubExport.js +2 -2
  153. package/lib/emulator/storage/apis/firebase.js +2 -2
  154. package/lib/emulator/storage/apis/gcloud.js +2 -2
  155. package/lib/emulator/storage/cloudFunctions.js +1 -1
  156. package/lib/emulator/storage/files.js +14 -14
  157. package/lib/emulator/storage/index.js +2 -2
  158. package/lib/emulator/storage/metadata.js +7 -6
  159. package/lib/emulator/storage/rules/runtime.js +10 -9
  160. package/lib/emulator/storage/server.js +2 -2
  161. package/lib/ensureApiEnabled.js +7 -7
  162. package/lib/error.js +3 -3
  163. package/lib/extensions/askUserForConsent.js +3 -4
  164. package/lib/extensions/askUserForParam.js +11 -11
  165. package/lib/extensions/billingMigrationHelper.js +2 -2
  166. package/lib/extensions/changelog.js +4 -4
  167. package/lib/extensions/displayExtensionInfo.js +6 -6
  168. package/lib/extensions/emulator/optionsHelper.js +1 -1
  169. package/lib/extensions/emulator/specHelper.js +1 -1
  170. package/lib/extensions/emulator/triggerHelper.js +1 -1
  171. package/lib/extensions/export.js +6 -6
  172. package/lib/extensions/extensionsApi.js +68 -110
  173. package/lib/extensions/extensionsHelper.js +56 -43
  174. package/lib/extensions/listExtensions.js +1 -1
  175. package/lib/extensions/localHelper.js +1 -1
  176. package/lib/extensions/metricsTypeDef.js +2 -0
  177. package/lib/extensions/metricsUtils.js +98 -0
  178. package/lib/extensions/paramHelper.js +6 -6
  179. package/lib/extensions/provisioningHelper.js +13 -14
  180. package/lib/extensions/resolveSource.js +6 -6
  181. package/lib/extensions/secretsUtils.js +3 -3
  182. package/lib/extensions/updateHelper.js +10 -10
  183. package/lib/extensions/utils.js +1 -1
  184. package/lib/extensions/warnings.js +11 -10
  185. package/lib/fetchWebSetup.js +2 -2
  186. package/lib/filterTargets.js +2 -2
  187. package/lib/firestore/indexes.js +2 -2
  188. package/lib/fsAsync.js +3 -3
  189. package/lib/fsutils.js +2 -2
  190. package/lib/functional.js +2 -1
  191. package/lib/functions/env.js +1 -1
  192. package/lib/functions/runtimeConfigExport.js +4 -4
  193. package/lib/functionsConfig.js +7 -8
  194. package/lib/functionsShellCommandAction.js +4 -3
  195. package/lib/gcp/cloudbilling.js +8 -19
  196. package/lib/gcp/cloudfunctions.js +22 -46
  197. package/lib/gcp/cloudlogging.js +8 -11
  198. package/lib/gcp/cloudmonitoring.js +77 -0
  199. package/lib/gcp/cloudscheduler.js +8 -19
  200. package/lib/gcp/firedata.js +5 -4
  201. package/lib/gcp/firestore.js +5 -5
  202. package/lib/gcp/iam.js +19 -34
  203. package/lib/gcp/resourceManager.js +10 -15
  204. package/lib/gcp/rules.js +18 -41
  205. package/lib/gcp/runtimeconfig.js +31 -53
  206. package/lib/gcp/secretManager.js +24 -45
  207. package/lib/gcp/storage.js +24 -29
  208. package/lib/getDefaultDatabaseInstance.js +1 -1
  209. package/lib/getDefaultHostingSite.js +1 -1
  210. package/lib/getProjectNumber.js +2 -2
  211. package/lib/handlePreviewToggles.js +5 -5
  212. package/lib/hosting/api.js +6 -6
  213. package/lib/hosting/cloudRunProxy.js +6 -6
  214. package/lib/hosting/functionsProxy.js +3 -3
  215. package/lib/hosting/implicitInit.js +2 -2
  216. package/lib/hosting/normalizedHostingConfigs.js +3 -3
  217. package/lib/hosting/proxy.js +2 -2
  218. package/lib/init/features/account.js +7 -7
  219. package/lib/init/features/database.js +9 -9
  220. package/lib/init/features/emulators.js +8 -8
  221. package/lib/init/features/firestore/index.js +3 -3
  222. package/lib/init/features/firestore/indexes.js +2 -2
  223. package/lib/init/features/firestore/rules.js +2 -2
  224. package/lib/init/features/functions/golang.js +4 -4
  225. package/lib/init/features/functions/index.js +4 -4
  226. package/lib/init/features/hosting/github.js +31 -31
  227. package/lib/init/features/project.js +8 -8
  228. package/lib/init/features/remoteconfig.js +2 -2
  229. package/lib/init/features/storage.js +2 -2
  230. package/lib/listFiles.js +1 -1
  231. package/lib/management/apps.js +3 -3
  232. package/lib/management/projects.js +6 -6
  233. package/lib/previews.js +2 -2
  234. package/lib/profiler.js +1 -1
  235. package/lib/projectPath.js +1 -1
  236. package/lib/projectUtils.js +2 -2
  237. package/lib/prompt.js +0 -1
  238. package/lib/rc.js +1 -1
  239. package/lib/remoteconfig/get.js +14 -8
  240. package/lib/remoteconfig/rollback.js +13 -6
  241. package/lib/remoteconfig/versionslist.js +13 -7
  242. package/lib/requireAuth.js +2 -2
  243. package/lib/requireDatabaseInstance.js +1 -1
  244. package/lib/requireHostingSite.js +1 -1
  245. package/lib/requirePermissions.js +4 -4
  246. package/lib/rulesDeploy.js +2 -2
  247. package/lib/serve/functions.js +14 -7
  248. package/lib/serve/hosting.js +7 -7
  249. package/lib/utils.js +3 -2
  250. package/npm-shrinkwrap.json +24090 -0
  251. package/package.json +36 -31
  252. package/schema/firebase-config.json +387 -12
  253. package/lib/commands/functions-config-legacy.js +0 -45
  254. package/lib/prepareFirebaseRules.js +0 -58
package/lib/gcp/rules.js CHANGED
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.testRuleset = exports.updateOrCreateRelease = exports.updateRelease = exports.createRelease = exports.createRuleset = exports.deleteRuleset = exports.getRulesetId = exports.listAllRulesets = exports.listRulesets = exports.getRulesetContent = exports.listAllReleases = exports.listReleases = exports.getLatestRulesetName = void 0;
4
4
  const _ = require("lodash");
5
- const api = require("../api");
5
+ const api_1 = require("../api");
6
+ const apiv2_1 = require("../apiv2");
6
7
  const logger_1 = require("../logger");
7
8
  const utils = require("../utils");
8
9
  const API_VERSION = "v1";
10
+ const apiClient = new apiv2_1.Client({ urlPrefix: api_1.rulesOrigin, apiVersion: API_VERSION });
9
11
  function _handleErrorResponse(response) {
10
12
  if (response.body && response.body.error) {
11
13
  return utils.reject(response.body.error, { code: 2 });
@@ -18,7 +20,7 @@ function _handleErrorResponse(response) {
18
20
  async function getLatestRulesetName(projectId, service) {
19
21
  const releases = await listAllReleases(projectId);
20
22
  const prefix = `projects/${projectId}/releases/${service}`;
21
- const release = _.find(releases, (r) => r.name.indexOf(prefix) === 0);
23
+ const release = _.find(releases, (r) => r.name.startsWith(prefix));
22
24
  if (!release) {
23
25
  return null;
24
26
  }
@@ -26,11 +28,9 @@ async function getLatestRulesetName(projectId, service) {
26
28
  }
27
29
  exports.getLatestRulesetName = getLatestRulesetName;
28
30
  const MAX_RELEASES_PAGE_SIZE = 10;
29
- async function listReleases(projectId, pageToken) {
30
- const response = await api.request("GET", `/${API_VERSION}/projects/${projectId}/releases`, {
31
- auth: true,
32
- origin: api.rulesOrigin,
33
- query: {
31
+ async function listReleases(projectId, pageToken = "") {
32
+ const response = await apiClient.get(`/projects/${projectId}/releases`, {
33
+ queryParams: {
34
34
  pageSize: MAX_RELEASES_PAGE_SIZE,
35
35
  pageToken,
36
36
  },
@@ -55,9 +55,8 @@ async function listAllReleases(projectId) {
55
55
  }
56
56
  exports.listAllReleases = listAllReleases;
57
57
  async function getRulesetContent(name) {
58
- const response = await api.request("GET", `/${API_VERSION}/${name}`, {
59
- auth: true,
60
- origin: api.rulesOrigin,
58
+ const response = await apiClient.get(`/${name}`, {
59
+ skipLog: { resBody: true },
61
60
  });
62
61
  if (response.status === 200) {
63
62
  const source = response.body.source;
@@ -67,14 +66,13 @@ async function getRulesetContent(name) {
67
66
  }
68
67
  exports.getRulesetContent = getRulesetContent;
69
68
  const MAX_RULESET_PAGE_SIZE = 100;
70
- async function listRulesets(projectId, pageToken) {
71
- const response = await api.request("GET", `/${API_VERSION}/projects/${projectId}/rulesets`, {
72
- auth: true,
73
- origin: api.rulesOrigin,
74
- query: {
69
+ async function listRulesets(projectId, pageToken = "") {
70
+ const response = await apiClient.get(`/projects/${projectId}/rulesets`, {
71
+ queryParams: {
75
72
  pageSize: MAX_RULESET_PAGE_SIZE,
76
73
  pageToken,
77
74
  },
75
+ skipLog: { resBody: true },
78
76
  });
79
77
  if (response.status === 200) {
80
78
  return response.body;
@@ -100,10 +98,7 @@ function getRulesetId(ruleset) {
100
98
  }
101
99
  exports.getRulesetId = getRulesetId;
102
100
  async function deleteRuleset(projectId, id) {
103
- const response = await api.request("DELETE", `/${API_VERSION}/projects/${projectId}/rulesets/${id}`, {
104
- auth: true,
105
- origin: api.rulesOrigin,
106
- });
101
+ const response = await apiClient.delete(`/projects/${projectId}/rulesets/${id}`);
107
102
  if (response.status === 200) {
108
103
  return;
109
104
  }
@@ -112,11 +107,7 @@ async function deleteRuleset(projectId, id) {
112
107
  exports.deleteRuleset = deleteRuleset;
113
108
  async function createRuleset(projectId, files) {
114
109
  const payload = { source: { files } };
115
- const response = await api.request("POST", `/${API_VERSION}/projects/${projectId}/rulesets`, {
116
- auth: true,
117
- data: payload,
118
- origin: api.rulesOrigin,
119
- });
110
+ const response = await apiClient.post(`/projects/${projectId}/rulesets`, payload, { skipLog: { body: true } });
120
111
  if (response.status === 200) {
121
112
  logger_1.logger.debug("[rules] created ruleset", response.body.name);
122
113
  return response.body.name;
@@ -129,11 +120,7 @@ async function createRelease(projectId, rulesetName, releaseName) {
129
120
  name: `projects/${projectId}/releases/${releaseName}`,
130
121
  rulesetName,
131
122
  };
132
- const response = await api.request("POST", `/${API_VERSION}/projects/${projectId}/releases`, {
133
- auth: true,
134
- data: payload,
135
- origin: api.rulesOrigin,
136
- });
123
+ const response = await apiClient.post(`/projects/${projectId}/releases`, payload);
137
124
  if (response.status === 200) {
138
125
  logger_1.logger.debug("[rules] created release", response.body.name);
139
126
  return response.body.name;
@@ -148,11 +135,7 @@ async function updateRelease(projectId, rulesetName, releaseName) {
148
135
  rulesetName,
149
136
  },
150
137
  };
151
- const response = await api.request("PATCH", `/${API_VERSION}/projects/${projectId}/releases/${releaseName}`, {
152
- auth: true,
153
- data: payload,
154
- origin: api.rulesOrigin,
155
- });
138
+ const response = await apiClient.patch(`/projects/${projectId}/releases/${releaseName}`, payload);
156
139
  if (response.status === 200) {
157
140
  logger_1.logger.debug("[rules] updated release", response.body.name);
158
141
  return response.body.name;
@@ -169,12 +152,6 @@ async function updateOrCreateRelease(projectId, rulesetName, releaseName) {
169
152
  }
170
153
  exports.updateOrCreateRelease = updateOrCreateRelease;
171
154
  function testRuleset(projectId, files) {
172
- return api.request("POST", `/${API_VERSION}/projects/${encodeURIComponent(projectId)}:test`, {
173
- origin: api.rulesOrigin,
174
- data: {
175
- source: { files },
176
- },
177
- auth: true,
178
- });
155
+ return apiClient.post(`/projects/${encodeURIComponent(projectId)}:test`, { source: { files } }, { skipLog: { body: true } });
179
156
  }
180
157
  exports.testRuleset = testRuleset;
@@ -1,30 +1,25 @@
1
1
  "use strict";
2
- var api = require("../api");
3
- var utils = require("../utils");
2
+ const { runtimeconfigOrigin } = require("../api");
3
+ const { Client } = require("../apiv2");
4
4
  const { logger } = require("../logger");
5
5
  var _ = require("lodash");
6
- var API_VERSION = "v1beta1";
6
+ const API_VERSION = "v1beta1";
7
+ const apiClient = new Client({ urlPrefix: runtimeconfigOrigin, apiVersion: API_VERSION });
7
8
  function _listConfigs(projectId) {
8
- return api
9
- .request("GET", utils.endpoint([API_VERSION, "projects", projectId, "configs"]), {
10
- auth: true,
11
- origin: api.runtimeconfigOrigin,
9
+ return apiClient
10
+ .get(`/projects/${projectId}/configs`, {
12
11
  retryCodes: [500, 503],
13
12
  })
14
13
  .then(function (resp) {
15
- return Promise.resolve(resp.body.configs);
14
+ return resp.body.configs;
16
15
  });
17
16
  }
18
17
  function _createConfig(projectId, configId) {
19
18
  var path = _.join(["projects", projectId, "configs"], "/");
20
- var endpoint = utils.endpoint([API_VERSION, path]);
21
- return api
22
- .request("POST", endpoint, {
23
- auth: true,
24
- origin: api.runtimeconfigOrigin,
25
- data: {
26
- name: path + "/" + configId,
27
- },
19
+ return apiClient
20
+ .post(`/projects/${projectId}/configs`, {
21
+ name: path + "/" + configId,
22
+ }, {
28
23
  retryCodes: [500, 503],
29
24
  })
30
25
  .catch(function (err) {
@@ -35,10 +30,8 @@ function _createConfig(projectId, configId) {
35
30
  });
36
31
  }
37
32
  function _deleteConfig(projectId, configId) {
38
- return api
39
- .request("DELETE", utils.endpoint([API_VERSION, "projects", projectId, "configs", configId]), {
40
- auth: true,
41
- origin: api.runtimeconfigOrigin,
33
+ return apiClient
34
+ .delete(`/projects/${projectId}/configs/${configId}`, {
42
35
  retryCodes: [500, 503],
43
36
  })
44
37
  .catch(function (err) {
@@ -50,10 +43,8 @@ function _deleteConfig(projectId, configId) {
50
43
  });
51
44
  }
52
45
  function _listVariables(configPath) {
53
- return api
54
- .request("GET", utils.endpoint([API_VERSION, configPath, "variables"]), {
55
- auth: true,
56
- origin: api.runtimeconfigOrigin,
46
+ return apiClient
47
+ .get(`${configPath}/variables`, {
57
48
  retryCodes: [500, 503],
58
49
  })
59
50
  .then(function (resp) {
@@ -61,10 +52,8 @@ function _listVariables(configPath) {
61
52
  });
62
53
  }
63
54
  function _getVariable(varPath) {
64
- return api
65
- .request("GET", utils.endpoint([API_VERSION, varPath]), {
66
- auth: true,
67
- origin: api.runtimeconfigOrigin,
55
+ return apiClient
56
+ .get(varPath, {
68
57
  retryCodes: [500, 503],
69
58
  })
70
59
  .then(function (resp) {
@@ -72,16 +61,12 @@ function _getVariable(varPath) {
72
61
  });
73
62
  }
74
63
  function _createVariable(projectId, configId, varId, value) {
75
- var path = _.join(["projects", projectId, "configs", configId, "variables"], "/");
76
- var endpoint = utils.endpoint([API_VERSION, path]);
77
- return api
78
- .request("POST", endpoint, {
79
- auth: true,
80
- origin: api.runtimeconfigOrigin,
81
- data: {
82
- name: path + "/" + varId,
83
- text: value,
84
- },
64
+ const path = `/projects/${projectId}/configs/${configId}/variables`;
65
+ return apiClient
66
+ .post(path, {
67
+ name: `${path}/${varId}`,
68
+ text: value,
69
+ }, {
85
70
  retryCodes: [500, 503],
86
71
  })
87
72
  .catch(function (err) {
@@ -94,15 +79,11 @@ function _createVariable(projectId, configId, varId, value) {
94
79
  });
95
80
  }
96
81
  function _updateVariable(projectId, configId, varId, value) {
97
- var path = _.join(["projects", projectId, "configs", configId, "variables", varId], "/");
98
- var endpoint = utils.endpoint([API_VERSION, path]);
99
- return api.request("PUT", endpoint, {
100
- auth: true,
101
- origin: api.runtimeconfigOrigin,
102
- data: {
103
- name: path,
104
- text: value,
105
- },
82
+ const path = `/projects/${projectId}/configs/${configId}/variables/${varId}`;
83
+ return apiClient.put(path, {
84
+ name: path,
85
+ text: value,
86
+ }, {
106
87
  retryCodes: [500, 503],
107
88
  });
108
89
  }
@@ -120,13 +101,10 @@ function _setVariable(projectId, configId, varId, value) {
120
101
  });
121
102
  }
122
103
  function _deleteVariable(projectId, configId, varId) {
123
- var endpoint = utils.endpoint([API_VERSION, "projects", projectId, "configs", configId, "variables", varId]) +
124
- "?recursive=true";
125
- return api
126
- .request("DELETE", endpoint, {
127
- auth: true,
128
- origin: api.runtimeconfigOrigin,
104
+ return apiClient
105
+ .delete(`/projects/${projectId}/configs/${configId}/variables/${varId}`, {
129
106
  retryCodes: [500, 503],
107
+ queryParams: { recursive: "true" },
130
108
  })
131
109
  .catch(function (err) {
132
110
  if (_.get(err, "context.response.statusCode") === 404) {
@@ -2,32 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.grantServiceAgentRole = exports.addVersion = exports.createSecret = exports.toSecretVersionResourceName = exports.parseSecretVersionResourceName = exports.parseSecretResourceName = exports.secretExists = exports.getSecretVersion = exports.getSecret = exports.listSecrets = exports.secretManagerConsoleUri = void 0;
4
4
  const utils_1 = require("../utils");
5
- const api = require("../api");
6
- exports.secretManagerConsoleUri = (projectId) => `https://console.cloud.google.com/security/secret-manager?project=${projectId}`;
5
+ const api_1 = require("../api");
6
+ const apiv2_1 = require("../apiv2");
7
+ const secretManagerConsoleUri = (projectId) => `https://console.cloud.google.com/security/secret-manager?project=${projectId}`;
8
+ exports.secretManagerConsoleUri = secretManagerConsoleUri;
9
+ const apiClient = new apiv2_1.Client({ urlPrefix: api_1.secretManagerOrigin, apiVersion: "v1beta1" });
7
10
  async function listSecrets(projectId) {
8
- const listRes = await api.request("GET", `/v1beta1/projects/${projectId}/secrets`, {
9
- auth: true,
10
- origin: api.secretManagerOrigin,
11
- });
11
+ const listRes = await apiClient.get(`/projects/${projectId}/secrets`);
12
12
  return listRes.body.secrets.map((s) => parseSecretResourceName(s.name));
13
13
  }
14
14
  exports.listSecrets = listSecrets;
15
15
  async function getSecret(projectId, name) {
16
16
  var _a;
17
- const getRes = await api.request("GET", `/v1beta1/projects/${projectId}/secrets/${name}`, {
18
- auth: true,
19
- origin: api.secretManagerOrigin,
20
- });
17
+ const getRes = await apiClient.get(`/projects/${projectId}/secrets/${name}`);
21
18
  const secret = parseSecretResourceName(getRes.body.name);
22
19
  secret.labels = (_a = getRes.body.labels) !== null && _a !== void 0 ? _a : {};
23
20
  return secret;
24
21
  }
25
22
  exports.getSecret = getSecret;
26
23
  async function getSecretVersion(projectId, name, version) {
27
- const getRes = await api.request("GET", `/v1beta1/projects/${projectId}/secrets/${name}/versions/${version}`, {
28
- auth: true,
29
- origin: api.secretManagerOrigin,
30
- });
24
+ const getRes = await apiClient.get(`/projects/${projectId}/secrets/${name}/versions/${version}`);
31
25
  return parseSecretVersionResourceName(getRes.body.name);
32
26
  }
33
27
  exports.getSecretVersion = getSecretVersion;
@@ -68,27 +62,19 @@ function toSecretVersionResourceName(secretVersion) {
68
62
  }
69
63
  exports.toSecretVersionResourceName = toSecretVersionResourceName;
70
64
  async function createSecret(projectId, name, labels) {
71
- const createRes = await api.request("POST", `/v1beta1/projects/${projectId}/secrets?secretId=${name}`, {
72
- auth: true,
73
- origin: api.secretManagerOrigin,
74
- data: {
75
- replication: {
76
- automatic: {},
77
- },
78
- labels,
65
+ const createRes = await apiClient.post(`/projects/${projectId}/secrets`, {
66
+ replication: {
67
+ automatic: {},
79
68
  },
80
- });
69
+ labels,
70
+ }, { queryParams: { secretId: name } });
81
71
  return parseSecretResourceName(createRes.body.name);
82
72
  }
83
73
  exports.createSecret = createSecret;
84
74
  async function addVersion(secret, payloadData) {
85
- const res = await api.request("POST", `/v1beta1/projects/${secret.projectId}/secrets/${secret.name}:addVersion`, {
86
- auth: true,
87
- origin: api.secretManagerOrigin,
88
- data: {
89
- payload: {
90
- data: Buffer.from(payloadData).toString("base64"),
91
- },
75
+ const res = await apiClient.post(`/projects/${secret.projectId}/secrets/${secret.name}:addVersion`, {
76
+ payload: {
77
+ data: Buffer.from(payloadData).toString("base64"),
92
78
  },
93
79
  });
94
80
  const nameTokens = res.body.name.split("/");
@@ -102,10 +88,7 @@ async function addVersion(secret, payloadData) {
102
88
  }
103
89
  exports.addVersion = addVersion;
104
90
  async function grantServiceAgentRole(secret, serviceAccountEmail, role) {
105
- const getPolicyRes = await api.request("GET", `/v1beta1/projects/${secret.projectId}/secrets/${secret.name}:getIamPolicy`, {
106
- auth: true,
107
- origin: api.secretManagerOrigin,
108
- });
91
+ const getPolicyRes = await apiClient.get(`/projects/${secret.projectId}/secrets/${secret.name}:getIamPolicy`);
109
92
  const bindings = getPolicyRes.body.bindings || [];
110
93
  if (bindings.find((b) => b.role == role &&
111
94
  b.members.find((m) => m == `serviceAccount:${serviceAccountEmail}`))) {
@@ -115,18 +98,14 @@ async function grantServiceAgentRole(secret, serviceAccountEmail, role) {
115
98
  role: role,
116
99
  members: [`serviceAccount:${serviceAccountEmail}`],
117
100
  });
118
- await api.request("POST", `/v1beta1/projects/${secret.projectId}/secrets/${secret.name}:setIamPolicy`, {
119
- auth: true,
120
- origin: api.secretManagerOrigin,
121
- data: {
122
- policy: {
123
- bindings,
124
- },
125
- updateMask: {
126
- paths: "bindings",
127
- },
101
+ await apiClient.post(`/projects/${secret.projectId}/secrets/${secret.name}:setIamPolicy`, {
102
+ policy: {
103
+ bindings,
104
+ },
105
+ updateMask: {
106
+ paths: "bindings",
128
107
  },
129
108
  });
130
- utils_1.logLabeledSuccess("SecretManager", `Granted ${role} on projects/${secret.projectId}/secrets/${secret.name} to ${serviceAccountEmail}`);
109
+ (0, utils_1.logLabeledSuccess)("SecretManager", `Granted ${role} on projects/${secret.projectId}/secrets/${secret.name} to ${serviceAccountEmail}`);
131
110
  }
132
111
  exports.grantServiceAgentRole = grantServiceAgentRole;
@@ -2,15 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getServiceAccount = exports.getBucket = exports.deleteObject = exports.uploadObject = exports.upload = exports.getDefaultBucket = void 0;
4
4
  const path = require("path");
5
- const api = require("../api");
5
+ const api_1 = require("../api");
6
+ const apiv2_1 = require("../apiv2");
6
7
  const logger_1 = require("../logger");
7
8
  const error_1 = require("../error");
9
+ const storageAPIClient = new apiv2_1.Client({ urlPrefix: api_1.storageOrigin, apiVersion: "v1" });
8
10
  async function getDefaultBucket(projectId) {
9
11
  try {
10
- const resp = await api.request("GET", "/v1/apps/" + projectId, {
11
- auth: true,
12
- origin: api.appengineOrigin,
13
- });
12
+ const resp = await storageAPIClient.get(`/apps/${projectId}`);
14
13
  if (resp.body.defaultBucket === "undefined") {
15
14
  logger_1.logger.debug("Default storage bucket is undefined.");
16
15
  throw new error_1.FirebaseError("Your project is being set up. Please wait a minute before deploying again.");
@@ -25,15 +24,17 @@ async function getDefaultBucket(projectId) {
25
24
  exports.getDefaultBucket = getDefaultBucket;
26
25
  async function upload(source, uploadUrl, extraHeaders) {
27
26
  const url = new URL(uploadUrl);
28
- const result = await api.request("PUT", url.pathname + url.search, {
29
- data: source.stream,
30
- headers: Object.assign({ "Content-Type": "application/zip" }, extraHeaders),
31
- json: false,
32
- origin: url.origin,
33
- logOptions: { skipRequestBody: true },
27
+ const localAPIClient = new apiv2_1.Client({ urlPrefix: url.origin, auth: false });
28
+ const res = await localAPIClient.request({
29
+ method: "PUT",
30
+ path: url.pathname,
31
+ queryParams: url.searchParams,
32
+ headers: Object.assign({ "content-type": "application/zip" }, extraHeaders),
33
+ body: source.stream,
34
+ skipLog: { resBody: true },
34
35
  });
35
36
  return {
36
- generation: result.response.headers["x-goog-generation"],
37
+ generation: res.response.headers.get("x-goog-generation"),
37
38
  };
38
39
  }
39
40
  exports.upload = upload;
@@ -42,37 +43,33 @@ async function uploadObject(source, bucketName) {
42
43
  throw new error_1.FirebaseError(`Expected a file name ending in .zip, got ${source.file}`);
43
44
  }
44
45
  const location = `/${bucketName}/${path.basename(source.file)}`;
45
- const result = await api.request("PUT", location, {
46
- auth: true,
47
- data: source.stream,
46
+ const res = await storageAPIClient.request({
47
+ method: "PUT",
48
+ path: location,
48
49
  headers: {
49
50
  "Content-Type": "application/zip",
50
51
  "x-goog-content-length-range": "0,123289600",
51
52
  },
52
- json: false,
53
- origin: api.storageOrigin,
54
- logOptions: { skipRequestBody: true },
53
+ body: source.stream,
55
54
  });
56
55
  return {
57
56
  bucket: bucketName,
58
57
  object: path.basename(source.file),
59
- generation: result.response.headers["x-goog-generation"],
58
+ generation: res.response.headers.get("x-goog-generation"),
60
59
  };
61
60
  }
62
61
  exports.uploadObject = uploadObject;
63
62
  function deleteObject(location) {
64
- return api.request("DELETE", location, {
63
+ return api_1.default.request("DELETE", location, {
65
64
  auth: true,
66
- origin: api.storageOrigin,
65
+ origin: api_1.default.storageOrigin,
67
66
  });
68
67
  }
69
68
  exports.deleteObject = deleteObject;
70
69
  async function getBucket(bucketName) {
71
70
  try {
72
- const result = await api.request("GET", `/storage/v1/b/${bucketName}`, {
73
- auth: true,
74
- origin: api.storageOrigin,
75
- });
71
+ const localAPIClient = new apiv2_1.Client({ urlPrefix: api_1.storageOrigin });
72
+ const result = await localAPIClient.get(`/storage/v1/b/${bucketName}`);
76
73
  return result.body;
77
74
  }
78
75
  catch (err) {
@@ -85,10 +82,8 @@ async function getBucket(bucketName) {
85
82
  exports.getBucket = getBucket;
86
83
  async function getServiceAccount(projectId) {
87
84
  try {
88
- const response = await api.request("GET", `/storage/v1/projects/${projectId}/serviceAccount`, {
89
- auth: true,
90
- origin: api.storageOrigin,
91
- });
85
+ const localAPIClient = new apiv2_1.Client({ urlPrefix: api_1.storageOrigin });
86
+ const response = await localAPIClient.get(`/storage/v1/projects/${projectId}/serviceAccount`);
92
87
  return response.body;
93
88
  }
94
89
  catch (err) {
@@ -4,7 +4,7 @@ exports.getDefaultDatabaseInstance = void 0;
4
4
  const projects_1 = require("./management/projects");
5
5
  async function getDefaultDatabaseInstance(options) {
6
6
  var _a;
7
- const projectDetails = await projects_1.getFirebaseProject(options.project);
7
+ const projectDetails = await (0, projects_1.getFirebaseProject)(options.project);
8
8
  return ((_a = projectDetails.resources) === null || _a === void 0 ? void 0 : _a.realtimeDatabaseInstance) || "";
9
9
  }
10
10
  exports.getDefaultDatabaseInstance = getDefaultDatabaseInstance;
@@ -5,7 +5,7 @@ const logger_1 = require("./logger");
5
5
  const projects_1 = require("./management/projects");
6
6
  async function getDefaultHostingSite(options) {
7
7
  var _a;
8
- const project = await projects_1.getFirebaseProject(options.project);
8
+ const project = await (0, projects_1.getFirebaseProject)(options.project);
9
9
  const site = (_a = project.resources) === null || _a === void 0 ? void 0 : _a.hostingSite;
10
10
  if (!site) {
11
11
  logger_1.logger.debug(`No default hosting site found for project: ${options.project}. Using projectId as hosting site name.`);
@@ -7,8 +7,8 @@ async function getProjectNumber(options) {
7
7
  if (options.projectNumber) {
8
8
  return options.projectNumber;
9
9
  }
10
- const projectId = projectUtils_1.needProjectId(options);
11
- const metadata = await projects_1.getFirebaseProject(projectId);
10
+ const projectId = (0, projectUtils_1.needProjectId)(options);
11
+ const metadata = await (0, projects_1.getFirebaseProject)(projectId);
12
12
  options.projectNumber = metadata.projectNumber;
13
13
  return options.projectNumber;
14
14
  }
@@ -6,14 +6,14 @@ const cli_color_1 = require("cli-color");
6
6
  const configstore_1 = require("./configstore");
7
7
  const previews_1 = require("./previews");
8
8
  function _errorOut(name) {
9
- console.log(cli_color_1.bold.red("Error:"), "Did not recognize preview feature", cli_color_1.bold(name));
9
+ console.log(cli_color_1.bold.red("Error:"), "Did not recognize preview feature", (0, cli_color_1.bold)(name));
10
10
  process.exit(1);
11
11
  }
12
12
  function handlePreviewToggles(args) {
13
- const isValidPreview = lodash_1.has(previews_1.previews, args[1]);
13
+ const isValidPreview = (0, lodash_1.has)(previews_1.previews, args[1]);
14
14
  if (args[0] === "--open-sesame") {
15
15
  if (isValidPreview) {
16
- console.log("Enabling preview feature", cli_color_1.bold(args[1]) + "...");
16
+ console.log("Enabling preview feature", (0, cli_color_1.bold)(args[1]) + "...");
17
17
  previews_1.previews[args[1]] = true;
18
18
  configstore_1.configstore.set("previews", previews_1.previews);
19
19
  console.log("Preview feature enabled!");
@@ -23,8 +23,8 @@ function handlePreviewToggles(args) {
23
23
  }
24
24
  else if (args[0] === "--close-sesame") {
25
25
  if (isValidPreview) {
26
- console.log("Disabling preview feature", cli_color_1.bold(args[1]));
27
- lodash_1.unset(previews_1.previews, args[1]);
26
+ console.log("Disabling preview feature", (0, cli_color_1.bold)(args[1]));
27
+ (0, lodash_1.unset)(previews_1.previews, args[1]);
28
28
  configstore_1.configstore.set("previews", previews_1.previews);
29
29
  return process.exit(0);
30
30
  }
@@ -174,7 +174,7 @@ async function deleteSite(project, site) {
174
174
  }
175
175
  exports.deleteSite = deleteSite;
176
176
  async function addAuthDomains(project, urls) {
177
- const domains = await auth_1.getAuthDomains(project);
177
+ const domains = await (0, auth_1.getAuthDomains)(project);
178
178
  const authDomains = domains || [];
179
179
  for (const url of urls) {
180
180
  const domain = url.replace("https://", "");
@@ -183,17 +183,17 @@ async function addAuthDomains(project, urls) {
183
183
  }
184
184
  authDomains.push(domain);
185
185
  }
186
- return await auth_1.updateAuthDomains(project, authDomains);
186
+ return await (0, auth_1.updateAuthDomains)(project, authDomains);
187
187
  }
188
188
  exports.addAuthDomains = addAuthDomains;
189
189
  async function removeAuthDomain(project, url) {
190
- const domains = await auth_1.getAuthDomains(project);
190
+ const domains = await (0, auth_1.getAuthDomains)(project);
191
191
  if (!domains.length) {
192
192
  return domains;
193
193
  }
194
194
  const targetDomain = url.replace("https://", "");
195
195
  const authDomains = domains.filter((domain) => domain != targetDomain);
196
- return auth_1.updateAuthDomains(project, authDomains);
196
+ return (0, auth_1.updateAuthDomains)(project, authDomains);
197
197
  }
198
198
  exports.removeAuthDomain = removeAuthDomain;
199
199
  async function getCleanDomains(project, site) {
@@ -206,7 +206,7 @@ async function getCleanDomains(project, site) {
206
206
  }, {});
207
207
  const siteMatch = new RegExp(`${site}--`, "i");
208
208
  const firebaseAppMatch = new RegExp(/firebaseapp.com$/);
209
- const domains = await auth_1.getAuthDomains(project);
209
+ const domains = await (0, auth_1.getAuthDomains)(project);
210
210
  const authDomains = [];
211
211
  domains.forEach((domain) => {
212
212
  const endsWithFirebaseApp = firebaseAppMatch.test(domain);
@@ -227,7 +227,7 @@ async function cleanAuthState(project, sites) {
227
227
  const siteDomainMap = new Map();
228
228
  for (const site of sites) {
229
229
  const authDomains = await getCleanDomains(project, site);
230
- const updatedDomains = await auth_1.updateAuthDomains(project, authDomains);
230
+ const updatedDomains = await (0, auth_1.updateAuthDomains)(project, authDomains);
231
231
  siteDomainMap.set(site, updatedDomains);
232
232
  }
233
233
  return siteDomainMap;
@@ -13,9 +13,9 @@ function getCloudRunUrl(rewrite, projectId) {
13
13
  }
14
14
  const path = `/v1/projects/${projectId}/locations/${rewrite.run.region || "us-central1"}/services/${rewrite.run.serviceId}`;
15
15
  logger_1.logger.info(`[hosting] Looking up Cloud Run service "${path}" for its URL`);
16
- return api_1.request("GET", path, { origin: api_1.cloudRunApiOrigin, auth: true })
16
+ return (0, api_1.request)("GET", path, { origin: api_1.cloudRunApiOrigin, auth: true })
17
17
  .then((res) => {
18
- const url = lodash_1.get(res, "body.status.url");
18
+ const url = (0, lodash_1.get)(res, "body.status.url");
19
19
  if (!url) {
20
20
  return Promise.reject("Cloud Run URL doesn't exist in response.");
21
21
  }
@@ -30,18 +30,18 @@ function getCloudRunUrl(rewrite, projectId) {
30
30
  function default_1(options) {
31
31
  return async (rewrite) => {
32
32
  if (!rewrite.run) {
33
- return proxy_1.errorRequestHandler('Cloud Run rewrites must have a valid "run" field.');
33
+ return (0, proxy_1.errorRequestHandler)('Cloud Run rewrites must have a valid "run" field.');
34
34
  }
35
35
  if (!rewrite.run.serviceId) {
36
- return proxy_1.errorRequestHandler("Cloud Run rewrites must supply a service ID.");
36
+ return (0, proxy_1.errorRequestHandler)("Cloud Run rewrites must supply a service ID.");
37
37
  }
38
38
  if (!rewrite.run.region) {
39
39
  rewrite.run.region = "us-central1";
40
40
  }
41
41
  logger_1.logger.info(`[hosting] Cloud Run rewrite ${JSON.stringify(rewrite)} triggered`);
42
42
  const textIdentifier = `Cloud Run service "${rewrite.run.serviceId}" for region "${rewrite.run.region}"`;
43
- return getCloudRunUrl(rewrite, projectUtils_1.needProjectId(options))
44
- .then((url) => proxy_1.proxyRequestHandler(url, textIdentifier))
43
+ return getCloudRunUrl(rewrite, (0, projectUtils_1.needProjectId)(options))
44
+ .then((url) => (0, proxy_1.proxyRequestHandler)(url, textIdentifier))
45
45
  .catch(proxy_1.errorRequestHandler);
46
46
  };
47
47
  }