Skip to content

Commit 64cd50d

Browse files
committed
fix: prevent parsing undefined CDC header
1 parent bb606ca commit 64cd50d

File tree

5 files changed

+84
-73
lines changed

5 files changed

+84
-73
lines changed

dist/client.cjs

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -154,29 +154,31 @@ function parseEvent(schema, event) {
154154
const allFields = schema.type.getFields();
155155
const replayId = decodeReplayId(event.replayId);
156156
const payload = schema.type.fromBuffer(event.event.payload);
157-
try {
158-
payload.ChangeEventHeader.nulledFields = parseFieldBitmaps(
159-
allFields,
160-
payload.ChangeEventHeader.nulledFields
161-
);
162-
} catch (error) {
163-
throw new Error("Failed to parse nulledFields", { cause: error });
164-
}
165-
try {
166-
payload.ChangeEventHeader.diffFields = parseFieldBitmaps(
167-
allFields,
168-
payload.ChangeEventHeader.diffFields
169-
);
170-
} catch (error) {
171-
throw new Error("Failed to parse diffFields", { cause: error });
172-
}
173-
try {
174-
payload.ChangeEventHeader.changedFields = parseFieldBitmaps(
175-
allFields,
176-
payload.ChangeEventHeader.changedFields
177-
);
178-
} catch (error) {
179-
throw new Error("Failed to parse changedFields", { cause: error });
157+
if (payload.ChangeEventHeader) {
158+
try {
159+
payload.ChangeEventHeader.nulledFields = parseFieldBitmaps(
160+
allFields,
161+
payload.ChangeEventHeader.nulledFields
162+
);
163+
} catch (error) {
164+
throw new Error("Failed to parse nulledFields", { cause: error });
165+
}
166+
try {
167+
payload.ChangeEventHeader.diffFields = parseFieldBitmaps(
168+
allFields,
169+
payload.ChangeEventHeader.diffFields
170+
);
171+
} catch (error) {
172+
throw new Error("Failed to parse diffFields", { cause: error });
173+
}
174+
try {
175+
payload.ChangeEventHeader.changedFields = parseFieldBitmaps(
176+
allFields,
177+
payload.ChangeEventHeader.changedFields
178+
);
179+
} catch (error) {
180+
throw new Error("Failed to parse changedFields", { cause: error });
181+
}
180182
}
181183
return {
182184
replayId,
@@ -428,7 +430,9 @@ var PubSubApiClient = class {
428430
async #connectToPubSubApi(conMetadata) {
429431
try {
430432
const rootCert = import_fs2.default.readFileSync(import_certifi.default);
431-
const protoFilePath = (0, import_url.fileURLToPath)(new URL("./pubsub_api.proto?hash=961def31", "file://" + __filename));
433+
const protoFilePath = (0, import_url.fileURLToPath)(
434+
new URL("./pubsub_api.proto?hash=961def31", "file://" + __filename)
435+
);
432436
const packageDef = import_proto_loader.default.loadSync(protoFilePath, {});
433437
const grpcObj = import_grpc_js.default.loadPackageDefinition(packageDef);
434438
const sfdcPackage = grpcObj.eventbus.v1;

dist/client.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/client.js

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -126,29 +126,31 @@ function parseEvent(schema, event) {
126126
const allFields = schema.type.getFields();
127127
const replayId = decodeReplayId(event.replayId);
128128
const payload = schema.type.fromBuffer(event.event.payload);
129-
try {
130-
payload.ChangeEventHeader.nulledFields = parseFieldBitmaps(
131-
allFields,
132-
payload.ChangeEventHeader.nulledFields
133-
);
134-
} catch (error) {
135-
throw new Error("Failed to parse nulledFields", { cause: error });
136-
}
137-
try {
138-
payload.ChangeEventHeader.diffFields = parseFieldBitmaps(
139-
allFields,
140-
payload.ChangeEventHeader.diffFields
141-
);
142-
} catch (error) {
143-
throw new Error("Failed to parse diffFields", { cause: error });
144-
}
145-
try {
146-
payload.ChangeEventHeader.changedFields = parseFieldBitmaps(
147-
allFields,
148-
payload.ChangeEventHeader.changedFields
149-
);
150-
} catch (error) {
151-
throw new Error("Failed to parse changedFields", { cause: error });
129+
if (payload.ChangeEventHeader) {
130+
try {
131+
payload.ChangeEventHeader.nulledFields = parseFieldBitmaps(
132+
allFields,
133+
payload.ChangeEventHeader.nulledFields
134+
);
135+
} catch (error) {
136+
throw new Error("Failed to parse nulledFields", { cause: error });
137+
}
138+
try {
139+
payload.ChangeEventHeader.diffFields = parseFieldBitmaps(
140+
allFields,
141+
payload.ChangeEventHeader.diffFields
142+
);
143+
} catch (error) {
144+
throw new Error("Failed to parse diffFields", { cause: error });
145+
}
146+
try {
147+
payload.ChangeEventHeader.changedFields = parseFieldBitmaps(
148+
allFields,
149+
payload.ChangeEventHeader.changedFields
150+
);
151+
} catch (error) {
152+
throw new Error("Failed to parse changedFields", { cause: error });
153+
}
152154
}
153155
return {
154156
replayId,
@@ -400,7 +402,9 @@ var PubSubApiClient = class {
400402
async #connectToPubSubApi(conMetadata) {
401403
try {
402404
const rootCert = fs2.readFileSync(certifi);
403-
const protoFilePath = fileURLToPath(new URL("./pubsub_api.proto?hash=961def31", import.meta.url));
405+
const protoFilePath = fileURLToPath(
406+
new URL("./pubsub_api.proto?hash=961def31", import.meta.url)
407+
);
404408
const packageDef = protoLoader.loadSync(protoFilePath, {});
405409
const grpcObj = grpc.loadPackageDefinition(packageDef);
406410
const sfdcPackage = grpcObj.eventbus.v1;

dist/eventParser.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/eventParser.js

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,32 @@ export function parseEvent(schema, event) {
44
const allFields = schema.type.getFields();
55
const replayId = decodeReplayId(event.replayId);
66
const payload = schema.type.fromBuffer(event.event.payload); // This schema is the same which we retreived earlier in the GetSchema rpc.
7-
try {
8-
payload.ChangeEventHeader.nulledFields = parseFieldBitmaps(
9-
allFields,
10-
payload.ChangeEventHeader.nulledFields
11-
);
12-
} catch (error) {
13-
throw new Error('Failed to parse nulledFields', { cause: error });
14-
}
15-
try {
16-
payload.ChangeEventHeader.diffFields = parseFieldBitmaps(
17-
allFields,
18-
payload.ChangeEventHeader.diffFields
19-
);
20-
} catch (error) {
21-
throw new Error('Failed to parse diffFields', { cause: error });
22-
}
23-
try {
24-
payload.ChangeEventHeader.changedFields = parseFieldBitmaps(
25-
allFields,
26-
payload.ChangeEventHeader.changedFields
27-
);
28-
} catch (error) {
29-
throw new Error('Failed to parse changedFields', { cause: error });
7+
// Perform only if its a CDC Event
8+
if (payload.ChangeEventHeader) {
9+
try {
10+
payload.ChangeEventHeader.nulledFields = parseFieldBitmaps(
11+
allFields,
12+
payload.ChangeEventHeader.nulledFields
13+
);
14+
} catch (error) {
15+
throw new Error('Failed to parse nulledFields', { cause: error });
16+
}
17+
try {
18+
payload.ChangeEventHeader.diffFields = parseFieldBitmaps(
19+
allFields,
20+
payload.ChangeEventHeader.diffFields
21+
);
22+
} catch (error) {
23+
throw new Error('Failed to parse diffFields', { cause: error });
24+
}
25+
try {
26+
payload.ChangeEventHeader.changedFields = parseFieldBitmaps(
27+
allFields,
28+
payload.ChangeEventHeader.changedFields
29+
);
30+
} catch (error) {
31+
throw new Error('Failed to parse changedFields', { cause: error });
32+
}
3033
}
3134
return {
3235
replayId,

0 commit comments

Comments
 (0)