googleapis / googleapis/google-cloudevents

Bug when decoding some of those proto in firebase

Open
#623 1 comment 0 reactions 0 assignees View on GitHub
api: eventarc priority: p2 type: bug
Dominant language
JavaScript
Stars
171
Forks
34
PR merge metrics
No merged PRs in 30d

Description

Hi,

I have a bug when using `firebase-emulator`, here are some logs and the error

```js
{"severity":"INFO","message":"------ runCloudEvent: calling trigger with {\n specversion: '1.0',\n type: 'google.cloud.firestore.document.v1.created',\n source: '//firestore.googleapis.com/projects/projects/demo-gouach/databases/(default)',\n id: 'e0cfdd27-757a-4217-a68e-7eb7145c0c2a',\n subject: 'documents/battery-bms-types/1865_v3.1',\n time: '2025-02-21T13:48:14Z',\n datacontenttype: 'application/protobuf',\n dataschema: 'https://github.com/googleapis/google-cloudevents/blob/main/proto/google/events/cloud/firestore/v1/data.proto',\n location: 'us-central1',\n project: 'demo-gouach',\n database: '(default)',\n namespace: '(default)',\n document: 'battery-bms-types/1865_v3.1',\n data: \n}"}
```
```js
{"severity":"ERROR","message":"Error: Failed to decode protobuf and create a snapshot.\n at entryFromArgs (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/logger/index.js:133:19)\n at Object.error (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/logger/index.js:120:11)\n at createSnapshotFromProtobuf (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/common/providers/firestore.js:61:16)\n at createSnapshot (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/v2/providers/firestore.js:172:59)\n at makeFirestoreEvent (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/v2/providers/firestore.js:209:15)\n at func (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/v2/providers/firestore.js:300:32)\n at /Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:526:16\n at runFunction (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:506:15)\n at runCloudEvent (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:523:11)\n at processBackground (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:490:16)"}
```
```
⚠ functions: TypeError: Cannot read properties of undefined (reading 'cloud')
at Function.decode (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/protos/compiledFirestore.js:1529:130)
at createSnapshotFromProtobuf (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/common/providers/firestore.js:57:52)
at createSnapshot (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/v2/providers/firestore.js:172:59)
at makeFirestoreEvent (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/v2/providers/firestore.js:209:15)
at func (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-functions@6.3.2_firebase-admin@13.1.0_encoding@0.1.13_/node_modules/firebase-functions/lib/v2/providers/firestore.js:300:32)
at /Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:526:16
at runFunction (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:506:15)
at runCloudEvent (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:523:11)
at processBackground (/Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:490:16)
at /Users/primet/work/gouach/code/gouach-backend/node_modules/.pnpm/firebase-tools@13.31.1_encoding@0.1.13/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:692:27
⚠ Your function was killed because it raised an unhandled error.
```

I dumped the protobuf `data.bin` and downloaded the `data.proto` from the given URL, that I join on this error, here is what happens when I decode it "raw" and with the schema

```sh
cat data.bin|protoc --decode_raw
```

```
1 {
1: "projects/demo-gouach/databases/(default)/documents/battery-bms-types/1865_v3.1"
2 {
1: "description"
2 {
17: "The v3.1 BMS for 1865 cells"
}
}
2 {
1: "fields"
2 {
6 {
1 {
1: "version"
2 {
17: "v3.1"
}
}
1 {
1: "cell_format"
2 {
17: "1865"
}
}
1 {
1: "min_voltage"
2 {
2: 8
}
}
1 {
1: "wired_communication_protocol"
2 {
17: "CAN"
}
}
1 {
1: "screw_sensing"
2 {
1: 1
}
}
1 {
1: "predischarge_current_amps"
2 {
3: 0x3fe3333333333333
}
}
1 {
1: "mosfet_count"
2 {
2: 12
}
}
1 {
1: "can_ic_model"
2 {
17: "TCAN1051H_SOIC"
}
}
1 {
1: "mosfet_model"
2 {
17: "BSC040N08"
}
}
1 {
1: "esp32_silicon_version"
2 {
17: "v3"
}
}
1 {
1: "can_resistor_model"
2 {
17: "TLP170G"
}
}
1 {
1: "esp32_flash_size_mb"
2 {
2: 16
}
}
1 {
1: "power_supply_model"
2 {
17: "LM5010A"
}
}
1 {
1: "battery_ic_model"
2 {
17: "BQ76952"
}
}
1 {
1: "shunt_count"
2 {
2: 3
}
}
1 {
1: "shunt_individual_value_milli_ohms"
2 {
2: 2
}
}
1 {
1: "fuse_model"
2 {
17: "0684L9400-01"
}
}
}
}
}
2 {
1: "created_at"
2 {
3: 0x41d9ee20f3a96873
}
}
2 {
1: "created_by_id"
2 {
17: "iKAl8bUSDYoAHQAEvdyMScLRJWaT"
}
}
2 {
1: "created_by_email"
2 {
17: "batbot@gouach.com"
}
}
3 {
1: 1740145614
2: 653618000
}
4 {
1: 1740145614
2: 653618000
}
}
3: ""
```

and with the schema

```sh
git clone https://github.com/googleapis/googleapis.git
protoc --proto_path=. --proto_path=googleapis --decode=google.events.cloud.firestore.v1.DocumentEventData data.proto < data.bin
```

```
value {
name: "projects/demo-gouach/databases/(default)/documents/battery-bms-types/1865_v3.1"
fields {
key: "created_at"
value {
double_value: 1740145614.647
}
}
fields {
key: "created_by_email"
value {
string_value: "batbot@gouach.com"
}
}
fields {
key: "created_by_id"
value {
string_value: "iKAl8bUSDYoAHQAEvdyMScLRJWaT"
}
}
fields {
key: "description"
value {
string_value: "The v3.1 BMS for 1865 cells"
}
}
fields {
key: "fields"
value {
map_value {
fields {
key: "battery_ic_model"
value {
string_value: "BQ76952"
}
}
fields {
key: "can_ic_model"
value {
string_value: "TCAN1051H_SOIC"
}
}
fields {
key: "can_resistor_model"
value {
string_value: "TLP170G"
}
}
fields {
key: "cell_format"
value {
string_value: "1865"
}
}
fields {
key: "esp32_flash_size_mb"
value {
integer_value: 16
}
}
fields {
key: "esp32_silicon_version"
value {
string_value: "v3"
}
}
fields {
key: "fuse_model"
value {
string_value: "0684L9400-01"
}
}
fields {
key: "min_voltage"
value {
integer_value: 8
}
}
fields {
key: "mosfet_count"
value {
integer_value: 12
}
}
fields {
key: "mosfet_model"
value {
string_value: "BSC040N08"
}
}
fields {
key: "power_supply_model"
value {
string_value: "LM5010A"
}
}
fields {
key: "predischarge_current_amps"
value {
double_value: 0.6
}
}
fields {
key: "screw_sensing"
value {
boolean_value: true
}
}
fields {
key: "shunt_count"
value {
integer_value: 3
}
}
fields {
key: "shunt_individual_value_milli_ohms"
value {
integer_value: 2
}
}
fields {
key: "version"
value {
string_value: "v3.1"
}
}
fields {
key: "wired_communication_protocol"
value {
string_value: "CAN"
}
}
}
}
}
create_time {
seconds: 1740145614
nanos: 653618000
}
update_time {
seconds: 1740145614
nanos: 653618000
}
}
update_mask {
}
```

[Archive.zip](https://github.com/user-attachments/files/18907598/Archive.zip)

So it seems I manage to parse the protobuf just fine, not sure why it doesn't work in the code (I have the latest firebase-tools, and all the latest versions of the firebase packages, the "fake test database" that does this bug is created from scratch using a script, so there's no stall data or whatever)

this is the code to generate the data

```ts
function createdByBot(data: any, created_at: number | undefined = undefined) {
if (batbotUser === undefined) {
throw new Error("Expected batbotUser to be set");
}
return {
...data,
created_at: created_at || clientTimestamp(),
created_by_id: batbotUser.uid,
created_by_email: batbotEmail,
};
}

const item = createdByBot({
id: "1865_v3.1",
description: "The v3.1 BMS for 1865 cells",
fields: {
version: "v3.1",
cell_format: "1865",
min_voltage: 8,
wired_communication_protocol: "CAN",
screw_sensing: true,
predischarge_current_amps: 0.6,
mosfet_count: 12,
can_ic_model: "TCAN1051H_SOIC",
mosfet_model: "BSC040N08",
esp32_silicon_version: "v3",
can_resistor_model: "TLP170G",
esp32_flash_size_mb: 16,
power_supply_model: "LM5010A",
battery_ic_model: "BQ76952",
shunt_count: 3,
shunt_individual_value_milli_ohms: 2,
fuse_model: "0684L9400-01",
},
})
```

Also when I use the same script in a staging environment (using a real Firebase instance, and not the emulator) it works just fine

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.