firebase-tools 11.8.0 → 11.8.1

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.
@@ -142,6 +142,7 @@ class ExtensionsEmulator {
142
142
  const emulatableBackend = {
143
143
  functionsDir,
144
144
  env: nonSecretEnv,
145
+ codebase: "",
145
146
  secretEnv: secretEnvVariables,
146
147
  predefinedTriggers: extensionTriggers,
147
148
  nodeMajorVersion: nodeMajorVersion,
@@ -54,7 +54,11 @@ class FunctionsEmulator {
54
54
  const mode = this.args.debugPort
55
55
  ? types_1.FunctionsExecutionMode.SEQUENTIAL
56
56
  : types_1.FunctionsExecutionMode.AUTO;
57
- this.workerPool = new functionsRuntimeWorker_1.RuntimeWorkerPool(mode);
57
+ this.workerPools = {};
58
+ for (const backend of this.args.emulatableBackends) {
59
+ const pool = new functionsRuntimeWorker_1.RuntimeWorkerPool(mode);
60
+ this.workerPools[backend.codebase] = pool;
61
+ }
58
62
  this.workQueue = new workQueue_1.WorkQueue(mode);
59
63
  }
60
64
  static getHttpFunctionUrl(host, port, projectId, name, region) {
@@ -241,7 +245,9 @@ class FunctionsEmulator {
241
245
  this.logger.logLabeled("WARN", "functions", "Functions emulator work queue did not empty before stopping");
242
246
  }
243
247
  this.workQueue.stop();
244
- this.workerPool.exit();
248
+ for (const pool of Object.values(this.workerPools)) {
249
+ pool.exit();
250
+ }
245
251
  if (this.destroyServer) {
246
252
  await this.destroyServer();
247
253
  }
@@ -273,7 +279,8 @@ class FunctionsEmulator {
273
279
  projectAlias: this.args.projectAlias,
274
280
  };
275
281
  const discoveredBuild = await runtimeDelegate.discoverBuild(runtimeConfig, environment);
276
- const discoveredBackend = await (0, build_1.resolveBackend)(discoveredBuild, userEnvOpt, environment);
282
+ const resolution = await (0, build_1.resolveBackend)(discoveredBuild, userEnvOpt, environment);
283
+ const discoveredBackend = resolution.backend;
277
284
  const endpoints = backend.allEndpoints(discoveredBackend);
278
285
  (0, functionsEmulatorShared_1.prepareEndpoints)(endpoints);
279
286
  for (const e of endpoints) {
@@ -297,7 +304,7 @@ class FunctionsEmulator {
297
304
  this.logger.logLabeled("ERROR", "functions", `Failed to load function definition from source: ${e}`);
298
305
  return;
299
306
  }
300
- this.workerPool.refresh();
307
+ this.workerPools[emulatableBackend.codebase].refresh();
301
308
  this.blockingFunctionsConfig = {};
302
309
  const toSetup = triggerDefinitions.filter((definition) => {
303
310
  if (force) {
@@ -380,7 +387,7 @@ class FunctionsEmulator {
380
387
  }
381
388
  }
382
389
  if (this.args.debugPort) {
383
- this.startRuntime(emulatableBackend, { nodeBinary: emulatableBackend.nodeBinary });
390
+ await this.startRuntime(emulatableBackend, { nodeBinary: emulatableBackend.nodeBinary });
384
391
  }
385
392
  }
386
393
  addEventarcTrigger(projectId, key, eventTrigger) {
@@ -802,10 +809,11 @@ class FunctionsEmulator {
802
809
  return secretEnvs;
803
810
  }
804
811
  async invokeRuntime(backend, trigger, frb, opts) {
805
- if (!this.workerPool.readyForWork(trigger.id)) {
812
+ const pool = this.workerPools[backend.codebase];
813
+ if (!pool.readyForWork(trigger.id)) {
806
814
  await this.startRuntime(backend, opts, trigger);
807
815
  }
808
- return this.workerPool.submitWork(trigger.id, frb, opts);
816
+ return pool.submitWork(trigger.id, frb, opts);
809
817
  }
810
818
  async startRuntime(backend, opts, trigger) {
811
819
  var _a;
@@ -838,52 +846,18 @@ class FunctionsEmulator {
838
846
  env: Object.assign(Object.assign(Object.assign(Object.assign({ node: opts.nodeBinary }, process.env), runtimeEnv), secretEnvs), { PORT: socketPath }),
839
847
  stdio: ["pipe", "pipe", "pipe", "ipc"],
840
848
  });
841
- if (!childProcess.stderr) {
842
- throw new error_1.FirebaseError(`childProcess.stderr is undefined.`);
843
- }
844
- if (!childProcess.stdout) {
845
- throw new error_1.FirebaseError(`childProcess.stdout is undefined.`);
846
- }
847
- const buffers = {
848
- stderr: { pipe: childProcess.stderr, value: "" },
849
- stdout: { pipe: childProcess.stdout, value: "" },
850
- };
851
- const ipcBuffer = { value: "" };
852
- childProcess.on("message", (message) => {
853
- this.onData(childProcess, emitter, ipcBuffer, message);
854
- });
855
- for (const id in buffers) {
856
- if (buffers.hasOwnProperty(id)) {
857
- const buffer = buffers[id];
858
- buffer.pipe.on("data", (buf) => {
859
- this.onData(childProcess, emitter, buffer, buf);
860
- });
861
- }
862
- }
863
849
  const runtime = {
864
- pid: childProcess.pid,
865
- exit: new Promise((resolve) => {
866
- childProcess.on("exit", resolve);
867
- }),
850
+ process: childProcess,
868
851
  events: emitter,
869
852
  cwd: backend.functionsDir,
870
853
  socketPath,
871
- shutdown: () => {
872
- childProcess.kill();
873
- },
874
- kill: (signal) => {
875
- childProcess.kill(signal);
876
- emitter.emit("log", new types_1.EmulatorLog("SYSTEM", "runtime-status", "killed"));
877
- },
878
- send: (args) => {
879
- return childProcess.send(JSON.stringify(args));
880
- },
881
854
  };
882
855
  const extensionLogInfo = {
883
856
  instanceId: backend.extensionInstanceId,
884
857
  ref: (_a = backend.extensionVersion) === null || _a === void 0 ? void 0 : _a.ref,
885
858
  };
886
- this.workerPool.addWorker(trigger === null || trigger === void 0 ? void 0 : trigger.id, runtime, extensionLogInfo);
859
+ const pool = this.workerPools[backend.codebase];
860
+ pool.addWorker(trigger === null || trigger === void 0 ? void 0 : trigger.id, runtime, extensionLogInfo);
887
861
  return;
888
862
  }
889
863
  async disableBackgroundTriggers() {
@@ -1057,20 +1031,5 @@ class FunctionsEmulator {
1057
1031
  });
1058
1032
  await worker.waitForDone();
1059
1033
  }
1060
- onData(runtime, emitter, buffer, buf) {
1061
- buffer.value += buf.toString();
1062
- const lines = buffer.value.split("\n");
1063
- if (lines.length > 1) {
1064
- lines.slice(0, -1).forEach((line) => {
1065
- const log = types_1.EmulatorLog.fromJSON(line);
1066
- emitter.emit("log", log);
1067
- if (log.level === "FATAL") {
1068
- emitter.emit("log", new types_1.EmulatorLog("SYSTEM", "runtime-status", "killed"));
1069
- runtime.kill();
1070
- }
1071
- });
1072
- }
1073
- buffer.value = lines[lines.length - 1];
1074
- }
1075
1034
  }
1076
1035
  exports.FunctionsEmulator = FunctionsEmulator;
@@ -30,21 +30,52 @@ class RuntimeWorker {
30
30
  }
31
31
  else if (this.state === RuntimeWorkerState.FINISHING) {
32
32
  this.log(`IDLE --> FINISHING`);
33
- this.runtime.shutdown();
33
+ this.runtime.process.kill();
34
34
  }
35
35
  }
36
36
  }
37
37
  });
38
- this.runtime.exit.then(() => {
38
+ const childProc = this.runtime.process;
39
+ let msgBuffer = "";
40
+ childProc.on("message", (msg) => {
41
+ msgBuffer = this.processStream(msg, msgBuffer);
42
+ });
43
+ let stdBuffer = "";
44
+ if (childProc.stdout) {
45
+ childProc.stdout.on("data", (data) => {
46
+ stdBuffer = this.processStream(data, stdBuffer);
47
+ });
48
+ }
49
+ if (childProc.stderr) {
50
+ childProc.stderr.on("data", (data) => {
51
+ stdBuffer = this.processStream(data, stdBuffer);
52
+ });
53
+ }
54
+ childProc.on("exit", () => {
39
55
  this.log("exited");
40
56
  this.state = RuntimeWorkerState.FINISHED;
41
57
  });
42
58
  }
59
+ processStream(s, buf) {
60
+ buf += s.toString();
61
+ const lines = buf.split("\n");
62
+ if (lines.length > 1) {
63
+ lines.slice(0, -1).forEach((line) => {
64
+ const log = types_1.EmulatorLog.fromJSON(line);
65
+ this.runtime.events.emit("log", log);
66
+ if (log.level === "FATAL") {
67
+ this.runtime.events.emit("log", new types_1.EmulatorLog("SYSTEM", "runtime-status", "killed"));
68
+ this.runtime.process.kill();
69
+ }
70
+ });
71
+ }
72
+ return lines[lines.length - 1];
73
+ }
43
74
  execute(frb, opts) {
44
75
  const execFrb = Object.assign({}, frb);
45
76
  const args = { frb: execFrb, opts };
46
77
  this.state = RuntimeWorkerState.BUSY;
47
- this.runtime.send(args);
78
+ this.runtime.process.send(JSON.stringify(args));
48
79
  }
49
80
  get state() {
50
81
  return this._state;
@@ -102,7 +133,7 @@ class RuntimeWorker {
102
133
  const timeout = new Promise((resolve, reject) => {
103
134
  setTimeout(() => {
104
135
  reject(new error_1.FirebaseError("Failed to load function."));
105
- }, 7000);
136
+ }, 30000);
106
137
  });
107
138
  while (true) {
108
139
  try {
@@ -142,7 +173,7 @@ class RuntimeWorkerPool {
142
173
  if (w.state === RuntimeWorkerState.IDLE) {
143
174
  this.log(`Shutting down IDLE worker (${w.key})`);
144
175
  w.state = RuntimeWorkerState.FINISHING;
145
- w.runtime.shutdown();
176
+ w.runtime.process.kill();
146
177
  }
147
178
  else if (w.state === RuntimeWorkerState.BUSY) {
148
179
  this.log(`Marking BUSY worker to finish (${w.key})`);
@@ -155,10 +186,10 @@ class RuntimeWorkerPool {
155
186
  for (const arr of this.workers.values()) {
156
187
  arr.forEach((w) => {
157
188
  if (w.state === RuntimeWorkerState.IDLE) {
158
- w.runtime.shutdown();
189
+ w.runtime.process.kill();
159
190
  }
160
191
  else {
161
- w.runtime.kill();
192
+ w.runtime.process.kill();
162
193
  }
163
194
  });
164
195
  }
@@ -20,7 +20,6 @@ class StoredFileMetadata {
20
20
  this.contentLanguage = opts.contentLanguage;
21
21
  this.customTime = opts.customTime;
22
22
  this.contentEncoding = opts.contentEncoding;
23
- this.customMetadata = opts.customMetadata;
24
23
  this.downloadTokens = opts.downloadTokens || [];
25
24
  if (opts.etag) {
26
25
  this.etag = opts.etag;
@@ -28,6 +27,16 @@ class StoredFileMetadata {
28
27
  else {
29
28
  this.etag = generateETag(this.generation, this.metageneration);
30
29
  }
30
+ if (opts.customMetadata) {
31
+ this.customMetadata = {};
32
+ for (const [k, v] of Object.entries(opts.customMetadata)) {
33
+ let stringVal = v;
34
+ if (typeof stringVal !== "string") {
35
+ stringVal = JSON.stringify(v);
36
+ }
37
+ this.customMetadata[k] = stringVal || "";
38
+ }
39
+ }
31
40
  this.timeCreated = opts.timeCreated ? new Date(opts.timeCreated) : new Date();
32
41
  this.updated = opts.updated ? new Date(opts.updated) : this.timeCreated;
33
42
  if (bytes) {
@@ -350,7 +350,7 @@ async function publishExtensionVersionFromLocalSource(args) {
350
350
  if (extension &&
351
351
  extension.latestVersion &&
352
352
  semver.lt(extensionSpec.version, extension.latestVersion)) {
353
- throw new error_1.FirebaseError(`The version you are trying to publish (${clc.bold(extensionSpec.version)}) is lower than the current version (${clc.bold(extension.latestVersion)}) for the extension '${clc.bold(`${args.publisherId}/${args.extensionId}`)}'. Please make sure this version is greater than the current version (${clc.bold(extension.latestVersion)}) inside of extension.yaml.\n`);
353
+ throw new error_1.FirebaseError(`The version you are trying to publish (${clc.bold(extensionSpec.version)}) is lower than the current version (${clc.bold(extension.latestVersion)}) for the extension '${clc.bold(`${args.publisherId}/${args.extensionId}`)}'. Please make sure this version is greater than the current version (${clc.bold(extension.latestVersion)}) inside of extension.yaml.\n`, { exit: 104 });
354
354
  }
355
355
  else if (extension &&
356
356
  extension.latestVersion &&
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateEndpointSecret = exports.pruneAndDestroySecrets = exports.pruneSecrets = exports.inUse = exports.of = exports.ensureSecret = exports.ensureValidKey = exports.labels = exports.isFirebaseManaged = void 0;
3
+ exports.updateEndpointSecret = exports.pruneAndDestroySecrets = exports.pruneSecrets = exports.inUse = exports.getSecretVersions = exports.of = exports.ensureSecret = exports.ensureValidKey = exports.labels = exports.isFirebaseManaged = void 0;
4
4
  const utils = require("../utils");
5
5
  const poller = require("../operation-poller");
6
6
  const gcf = require("../gcp/cloudfunctions");
@@ -85,6 +85,13 @@ function of(endpoints) {
85
85
  return endpoints.reduce((envs, endpoint) => [...envs, ...(endpoint.secretEnvironmentVariables || [])], []);
86
86
  }
87
87
  exports.of = of;
88
+ function getSecretVersions(endpoint) {
89
+ return (endpoint.secretEnvironmentVariables || []).reduce((memo, { secret, version }) => {
90
+ memo[secret] = version || "";
91
+ return memo;
92
+ }, {});
93
+ }
94
+ exports.getSecretVersions = getSecretVersions;
88
95
  function inUse(projectInfo, secret, endpoint) {
89
96
  const { projectId, projectNumber } = projectInfo;
90
97
  for (const sev of of([endpoint])) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureServiceAgentRole = exports.setIamPolicy = exports.getIamPolicy = exports.addVersion = exports.deleteSecret = exports.patchSecret = exports.createSecret = exports.toSecretVersionResourceName = exports.parseSecretVersionResourceName = exports.parseSecretResourceName = exports.secretExists = exports.destroySecretVersion = exports.accessSecretVersion = exports.getSecretVersion = exports.listSecretVersions = exports.listSecrets = exports.getSecret = exports.secretManagerConsoleUri = void 0;
3
+ exports.ensureServiceAgentRole = exports.setIamPolicy = exports.getIamPolicy = exports.addVersion = exports.deleteSecret = exports.patchSecret = exports.createSecret = exports.toSecretVersionResourceName = exports.parseSecretVersionResourceName = exports.parseSecretResourceName = exports.secretExists = exports.destroySecretVersion = exports.accessSecretVersion = exports.getSecretVersion = exports.listSecretVersions = exports.getSecretMetadata = exports.listSecrets = exports.getSecret = exports.secretManagerConsoleUri = void 0;
4
4
  const utils_1 = require("../utils");
5
5
  const error_1 = require("../error");
6
6
  const apiv2_1 = require("../apiv2");
@@ -44,6 +44,20 @@ async function listSecrets(projectId, filter) {
44
44
  return secrets;
45
45
  }
46
46
  exports.listSecrets = listSecrets;
47
+ async function getSecretMetadata(projectId, secretName, version) {
48
+ const secretInfo = {};
49
+ try {
50
+ secretInfo.secret = await getSecret(projectId, secretName);
51
+ secretInfo.secretVersion = getSecretVersion(projectId, secretName, version);
52
+ }
53
+ catch (err) {
54
+ if (err.status !== 404) {
55
+ throw err;
56
+ }
57
+ }
58
+ return secretInfo;
59
+ }
60
+ exports.getSecretMetadata = getSecretMetadata;
47
61
  async function listSecretVersions(projectId, name, filter) {
48
62
  const secrets = [];
49
63
  const path = `projects/${projectId}/secrets/${name}/versions`;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getServiceAccount = exports.getBucket = exports.deleteObject = exports.uploadObject = exports.upload = exports.getDefaultBucket = void 0;
3
+ exports.getServiceAccount = exports.listBuckets = exports.getBucket = exports.deleteObject = exports.uploadObject = exports.upload = exports.getDefaultBucket = void 0;
4
4
  const path = require("path");
5
5
  const api_1 = require("../api");
6
6
  const apiv2_1 = require("../apiv2");
@@ -80,6 +80,20 @@ async function getBucket(bucketName) {
80
80
  }
81
81
  }
82
82
  exports.getBucket = getBucket;
83
+ async function listBuckets(projectId) {
84
+ try {
85
+ const localAPIClient = new apiv2_1.Client({ urlPrefix: api_1.storageOrigin });
86
+ const result = await localAPIClient.get(`/storage/v1/b?project=${projectId}`);
87
+ return result.body.items.map((bucket) => bucket.name);
88
+ }
89
+ catch (err) {
90
+ logger_1.logger.debug(err);
91
+ throw new error_1.FirebaseError("Failed to read the storage buckets", {
92
+ original: err,
93
+ });
94
+ }
95
+ }
96
+ exports.listBuckets = listBuckets;
83
97
  async function getServiceAccount(projectId) {
84
98
  try {
85
99
  const localAPIClient = new apiv2_1.Client({ urlPrefix: api_1.storageOrigin });
package/lib/previews.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.previews = void 0;
4
4
  const lodash_1 = require("lodash");
5
5
  const configstore_1 = require("./configstore");
6
- exports.previews = Object.assign({ rtdbrules: false, ext: false, extdev: false, rtdbmanagement: false, golang: false, deletegcfartifacts: false, emulatoruisnapshot: false, frameworkawareness: false, functionsparams: false, crossservicerules: false }, configstore_1.configstore.get("previews"));
6
+ exports.previews = Object.assign({ rtdbrules: false, ext: false, extdev: false, rtdbmanagement: false, golang: false, deletegcfartifacts: false, emulatoruisnapshot: false, frameworkawareness: false, functionsparams: false, crossservicerules: false, skipdeployingnoopfunctions: false }, configstore_1.configstore.get("previews"));
7
7
  if (process.env.FIREBASE_CLI_PREVIEWS) {
8
8
  process.env.FIREBASE_CLI_PREVIEWS.split(",").forEach((feature) => {
9
9
  if ((0, lodash_1.has)(exports.previews, feature)) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "firebase-tools",
3
- "version": "11.8.0",
3
+ "version": "11.8.1",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "firebase-tools",
9
- "version": "11.8.0",
9
+ "version": "11.8.1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@google-cloud/pubsub": "^3.0.1",
@@ -49,7 +49,7 @@
49
49
  "node-fetch": "^2.6.7",
50
50
  "open": "^6.3.0",
51
51
  "ora": "^5.4.1",
52
- "portfinder": "^1.0.23",
52
+ "portfinder": "^1.0.32",
53
53
  "progress": "^2.0.3",
54
54
  "proxy-agent": "^5.0.0",
55
55
  "request": "^2.87.0",
@@ -9568,11 +9568,11 @@
9568
9568
  }
9569
9569
  },
9570
9570
  "node_modules/mkdirp": {
9571
- "version": "0.5.5",
9572
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
9573
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
9571
+ "version": "0.5.6",
9572
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
9573
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
9574
9574
  "dependencies": {
9575
- "minimist": "^1.2.5"
9575
+ "minimist": "^1.2.6"
9576
9576
  },
9577
9577
  "bin": {
9578
9578
  "mkdirp": "bin/cmd.js"
@@ -10909,13 +10909,13 @@
10909
10909
  }
10910
10910
  },
10911
10911
  "node_modules/portfinder": {
10912
- "version": "1.0.28",
10913
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
10914
- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
10912
+ "version": "1.0.32",
10913
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
10914
+ "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
10915
10915
  "dependencies": {
10916
- "async": "^2.6.2",
10917
- "debug": "^3.1.1",
10918
- "mkdirp": "^0.5.5"
10916
+ "async": "^2.6.4",
10917
+ "debug": "^3.2.7",
10918
+ "mkdirp": "^0.5.6"
10919
10919
  },
10920
10920
  "engines": {
10921
10921
  "node": ">= 0.12.0"
@@ -21853,11 +21853,11 @@
21853
21853
  }
21854
21854
  },
21855
21855
  "mkdirp": {
21856
- "version": "0.5.5",
21857
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
21858
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
21856
+ "version": "0.5.6",
21857
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
21858
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
21859
21859
  "requires": {
21860
- "minimist": "^1.2.5"
21860
+ "minimist": "^1.2.6"
21861
21861
  }
21862
21862
  },
21863
21863
  "mkdirp-classic": {
@@ -22876,13 +22876,13 @@
22876
22876
  }
22877
22877
  },
22878
22878
  "portfinder": {
22879
- "version": "1.0.28",
22880
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
22881
- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
22879
+ "version": "1.0.32",
22880
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
22881
+ "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
22882
22882
  "requires": {
22883
- "async": "^2.6.2",
22884
- "debug": "^3.1.1",
22885
- "mkdirp": "^0.5.5"
22883
+ "async": "^2.6.4",
22884
+ "debug": "^3.2.7",
22885
+ "mkdirp": "^0.5.6"
22886
22886
  },
22887
22887
  "dependencies": {
22888
22888
  "debug": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firebase-tools",
3
- "version": "11.8.0",
3
+ "version": "11.8.1",
4
4
  "description": "Command-Line Interface for Firebase",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {
@@ -33,6 +33,7 @@
33
33
  "test:hosting-rewrites": "bash ./scripts/hosting-tests/rewrites-tests/run.sh",
34
34
  "test:import-export": "bash ./scripts/emulator-import-export-tests/run.sh",
35
35
  "test:triggers-end-to-end": "bash ./scripts/triggers-end-to-end-tests/run.sh",
36
+ "test:triggers-end-to-end:inspect": "bash ./scripts/triggers-end-to-end-tests/run.sh inspect",
36
37
  "test:storage-deploy": "bash ./scripts/storage-deploy-tests/run.sh",
37
38
  "test:storage-emulator-integration": "bash ./scripts/storage-emulator-integration/run.sh"
38
39
  },
@@ -128,7 +129,7 @@
128
129
  "node-fetch": "^2.6.7",
129
130
  "open": "^6.3.0",
130
131
  "ora": "^5.4.1",
131
- "portfinder": "^1.0.23",
132
+ "portfinder": "^1.0.32",
132
133
  "progress": "^2.0.3",
133
134
  "proxy-agent": "^5.0.0",
134
135
  "request": "^2.87.0",
@@ -2,7 +2,7 @@ rules_version = '2';
2
2
  service firebase.storage {
3
3
  match /b/{bucket}/o {
4
4
  match /{allPaths=**} {
5
- allow read, write: if request.auth!=null;
5
+ allow read, write: if false;
6
6
  }
7
7
  }
8
8
  }