Sitelet https://github.com/open-rpc/client-js/commit/e762764
Skip to content

Commit e762764

Browse files
committed
fix: corrects handling for response payloads
This change is necessary to resolve payloads with non undefined responses correctly. It includes a expanded test for missing id on error response fixes #75
1 parent c222e1d commit e762764

4 files changed

Lines changed: 12 additions & 4 deletions

File tree

‎src/Request.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export interface IJSONRPCError {
2727

2828
export interface IJSONRPCResponse {
2929
jsonrpc: "2.0";
30-
id: string | number; // can also be null
30+
id?: string | number; // can also be null
3131
result?: any;
3232
error?: IJSONRPCError;
3333
}

‎src/__mocks__/requestData.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export const generateMockNotificationResponse = (result: any, error?: any): req.
3636
};
3737
};
3838

39-
export const generateMockErrorResponse = (id: number, data: any): req.IJSONRPCResponse => {
39+
export const generateMockErrorResponse = (id: number | undefined, data: any): req.IJSONRPCResponse => {
4040
return {
4141
id,
4242
jsonrpc: "2.0",

‎src/transports/TransportRequestManager.test.ts‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ describe("Transport Request Manager", () => {
5252
expect(err.message).toContain("Error message");
5353
});
5454

55+
it("should error on error response without id", () => {
56+
const errPayload = reqData.generateMockErrorResponse(undefined, "haha");
57+
delete errPayload.id;
58+
const payload = JSON.stringify(errPayload);
59+
const err = transportReqMan.resolveResponse(payload, false) as Error;
60+
expect(err.message).toContain("Error message");
61+
});
62+
5563
it("should error on missing id to resolve and emit error", (done) => {
5664
transportReqMan.transportEventChannel.on("error", (e) => {
5765
expect(e.message).toContain("Could not resolve");
@@ -88,7 +96,7 @@ describe("Transport Request Manager", () => {
8896
});
8997

9098
it("should emit response on response && resolve response", (done) => {
91-
const res = reqData.generateMockResponse(1, "hello");
99+
const res = reqData.generateMockResponse(1, false);
92100
// Add request to queue
93101
const prom = transportReqMan.addRequest({
94102
request: reqData.generateMockRequest(1, "foo", ["bar"]),

‎src/transports/TransportRequestManager.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class TransportRequestManager {
8888
if (data instanceof Array) {
8989
payload = data;
9090
}
91-
return payload.every((datum) => (datum.result || datum.error));
91+
return payload.every((datum) => (datum.result !== undefined || datum.error !== undefined));
9292
}
9393

9494
private processResult(payload: any, prom: IRequestPromise) {

0 commit comments

Comments
 (0)