Merge pull request #477 from nichtsam/pr/protocol-overwriting-transport-hooks

Pr/protocol overwriting transport hooks
This commit is contained in:
Inna Harper 2025-06-26 14:04:16 +01:00 • committed by GitHub
commit 71d309d0d8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 1 deletions

View file

@ -65,6 +65,22 @@ describe("protocol tests", () => {
expect(oncloseMock).toHaveBeenCalled();
});
test("should not overwrite existing hooks when connecting transports", async () => {
const oncloseMock = jest.fn();
const onerrorMock = jest.fn();
const onmessageMock = jest.fn();
transport.onclose = oncloseMock;
transport.onerror = onerrorMock;
transport.onmessage = onmessageMock;
await protocol.connect(transport);
transport.onclose();
transport.onerror(new Error());
transport.onmessage("");
expect(oncloseMock).toHaveBeenCalled();
expect(onerrorMock).toHaveBeenCalled();
expect(onmessageMock).toHaveBeenCalled();
});
describe("_meta preservation with onprogress", () => {
test("should preserve existing _meta when adding progressToken", async () => {
await protocol.connect(transport);

View file

@ -286,15 +286,21 @@ export abstract class Protocol<
*/
async connect(transport: Transport): Promise<void> {
this._transport = transport;
const _onclose = this.transport?.onclose;
this._transport.onclose = () => {
_onclose?.();
this._onclose();
};
const _onerror = this.transport?.onerror;
this._transport.onerror = (error: Error) => {
_onerror?.(error);
this._onerror(error);
};
const _onmessage = this._transport?.onmessage;
this._transport.onmessage = (message, extra) => {
_onmessage?.(message, extra);
if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
this._onresponse(message);
} else if (isJSONRPCRequest(message)) {
@ -302,7 +308,9 @@ export abstract class Protocol<
} else if (isJSONRPCNotification(message)) {
this._onnotification(message);
} else {
this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));
this._onerror(
new Error(`Unknown message type: ${JSON.stringify(message)}`),
);
}
};