[REQUIRED] Environment info
firebase-tools: 15.20.0
firebase-admin: 14.0.0
Platform: Linux (Ubuntu 26.04) and macOS (Tahoe 26.5.1)
[REQUIRED] Test case
Make sure to set edition: "enterprise" in firebase.json.
{
"emulators": {
"firestore": {
"port": 8080,
"edition": "enterprise"
},
"singleProjectMode": true
},
"firestore": {
"database": "enterprise",
"edition": "enterprise",
"location": "eur3",
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
}
}
[REQUIRED] Steps to reproduce
Simply run example below in the Admin SDK environment. It doesn't have to be an aggregate query, any query will do.
import { initializeApp } from 'firebase-admin/app';
import { getFirestore } from 'firebase-admin/firestore';
const app = initializeApp();
const firestore = getFirestore(app);
await firestore.runTransaction(async (transaction) => {
const querySnapshot = await transaction.get(
firestore.collection('test').count()
);
console.log(querySnapshot.data().count);
});
[REQUIRED] Expected behavior
Transaction to execute and return the result.
[REQUIRED] Actual behavior
Instead it results in an UNKNOWN error.
{"severity":"ERROR","message":"Unhandled error Error: 2 UNKNOWN: \n at callErrorFromStatus (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/call.js:32:19)\n at Object.onReceiveStatus (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/client.js:359:73)\n at Object.onReceiveStatus (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:327:181)\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/resolving-call.js:135:78\n at process.processTicksAndRejections (node:internal/process/task_queues:85:11)\nfor call at\n at ServiceClientImpl.makeServerStreamRequest (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/client.js:342:32)\n at ServiceClientImpl.<anonymous> (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/make-client.js:105:19)\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/v1/firestore_client.js:257:29\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/google-gax@5.0.7/node_modules/google-gax/build/src/streamingCalls/streamingApiCaller.js:39:28\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/google-gax@5.0.7/node_modules/google-gax/build/src/normalCalls/timeout.js:44:16\n at Object.request (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/google-gax@5.0.7/node_modules/google-gax/build/src/streamingCalls/streaming.js:248:40)\n at Timeout.makeRequest [as _onTimeout] (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/retry-request@8.0.3/node_modules/retry-request/index.js:159:28)\n at listOnTimeout (node:internal/timers:605:17)\n at process.processTimers (node:internal/timers:541:7)\nCaused by: Error\n at QueryUtil._getResponse (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/reference/query-util.js:47:23)\n at Query._getResponse (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/reference/query.js:905:32)\n at Query._get (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/reference/query.js:898:35)\n at Transaction.getQueryFn (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/transaction.js:579:22)\n at Transaction.withLazyStartedTransaction (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/transaction.js:551:48)\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/transaction.js:125:29\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/telemetry/enabled-trace-util.js:125:30\n at NoopContextManager.with (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:14:19)\n at ContextAPI.with (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/api/context.js:51:46)\n at NoopTracer.startActiveSpan (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:54:31) {\n code: 2,\n details: '',\n metadata: Metadata {\n internalRepr: Map(1) { 'content-type' => [Array] },\n opaqueData: Map(0) {},\n options: {}\n }\n}"}
[REQUIRED] Environment info
firebase-tools: 15.20.0
firebase-admin: 14.0.0
Platform: Linux (Ubuntu 26.04) and macOS (Tahoe 26.5.1)
[REQUIRED] Test case
Make sure to set
edition: "enterprise"infirebase.json.{ "emulators": { "firestore": { "port": 8080, "edition": "enterprise" }, "singleProjectMode": true }, "firestore": { "database": "enterprise", "edition": "enterprise", "location": "eur3", "rules": "firestore.rules", "indexes": "firestore.indexes.json" } }[REQUIRED] Steps to reproduce
Simply run example below in the Admin SDK environment. It doesn't have to be an aggregate query, any query will do.
[REQUIRED] Expected behavior
Transaction to execute and return the result.
[REQUIRED] Actual behavior
Instead it results in an UNKNOWN error.
{"severity":"ERROR","message":"Unhandled error Error: 2 UNKNOWN: \n at callErrorFromStatus (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/call.js:32:19)\n at Object.onReceiveStatus (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/client.js:359:73)\n at Object.onReceiveStatus (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:327:181)\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/resolving-call.js:135:78\n at process.processTicksAndRejections (node:internal/process/task_queues:85:11)\nfor call at\n at ServiceClientImpl.makeServerStreamRequest (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/client.js:342:32)\n at ServiceClientImpl.<anonymous> (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@grpc+grpc-js@1.14.4/node_modules/@grpc/grpc-js/build/src/make-client.js:105:19)\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/v1/firestore_client.js:257:29\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/google-gax@5.0.7/node_modules/google-gax/build/src/streamingCalls/streamingApiCaller.js:39:28\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/google-gax@5.0.7/node_modules/google-gax/build/src/normalCalls/timeout.js:44:16\n at Object.request (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/google-gax@5.0.7/node_modules/google-gax/build/src/streamingCalls/streaming.js:248:40)\n at Timeout.makeRequest [as _onTimeout] (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/retry-request@8.0.3/node_modules/retry-request/index.js:159:28)\n at listOnTimeout (node:internal/timers:605:17)\n at process.processTimers (node:internal/timers:541:7)\nCaused by: Error\n at QueryUtil._getResponse (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/reference/query-util.js:47:23)\n at Query._getResponse (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/reference/query.js:905:32)\n at Query._get (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/reference/query.js:898:35)\n at Transaction.getQueryFn (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/transaction.js:579:22)\n at Transaction.withLazyStartedTransaction (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/transaction.js:551:48)\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/transaction.js:125:29\n at /Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@google-cloud+firestore@8.6.0/node_modules/@google-cloud/firestore/build/src/telemetry/enabled-trace-util.js:125:30\n at NoopContextManager.with (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js:14:19)\n at ContextAPI.with (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/api/context.js:51:46)\n at NoopTracer.startActiveSpan (/Users/someuser/Sites/someproject/functions/node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js:54:31) {\n code: 2,\n details: '',\n metadata: Metadata {\n internalRepr: Map(1) { 'content-type' => [Array] },\n opaqueData: Map(0) {},\n options: {}\n }\n}"}