From 63e110a4aaff73e800228fc2606a6e444baf1ecc Mon Sep 17 00:00:00 2001 From: ydah Date: Thu, 16 Jul 2026 00:47:34 +0900 Subject: [PATCH] Forward Relay subscription errors --- .../createRelaySubscriptionHandlerTest.ts | 31 +++++++++++++++++++ .../createRelaySubscriptionHandler.ts | 4 +-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/javascript_client/src/subscriptions/__tests__/createRelaySubscriptionHandlerTest.ts b/javascript_client/src/subscriptions/__tests__/createRelaySubscriptionHandlerTest.ts index af5732ff9bf..c9a33301aef 100644 --- a/javascript_client/src/subscriptions/__tests__/createRelaySubscriptionHandlerTest.ts +++ b/javascript_client/src/subscriptions/__tests__/createRelaySubscriptionHandlerTest.ts @@ -62,6 +62,37 @@ describe("createRelaySubscriptionHandler", () => { ] expect(performLog).toEqual(expectedLog) }) + + it("forwards transport errors to the Relay observer", () => { + var channel: any + var dummyActionCableConsumer = { + subscriptions: { + create: (_params: any, handlers: any) => { + channel = handlers + return { unsubscribe: () => true } + } + } + } + + var handler = createRelaySubscriptionHandler({ + cable: (dummyActionCableConsumer as unknown) as Consumer + }) + var observable = handler( + { id: "abc", text: null, name: "def", operationKind: "subscription", metadata: {} }, + {} + ) + var receivedError: Error | undefined + observable.subscribe({ + error: (error: Error) => { + receivedError = error + } + }) + + var error = new Error("Subscription failed") + channel.received({ result: { errors: error }, more: true }) + + expect(receivedError).toBe(error) + }) }) describe("createLegacyRelaySubscriptionHandler", () => { diff --git a/javascript_client/src/subscriptions/createRelaySubscriptionHandler.ts b/javascript_client/src/subscriptions/createRelaySubscriptionHandler.ts index 6036e254281..29bdb38582f 100644 --- a/javascript_client/src/subscriptions/createRelaySubscriptionHandler.ts +++ b/javascript_client/src/subscriptions/createRelaySubscriptionHandler.ts @@ -52,8 +52,8 @@ function createRelaySubscriptionHandler(options: ActionCableHandlerOptions | Pus variables, {}, { - onError: (_error: Error) => { - observer.error; + onError: (error: Error) => { + observer.error(error); }, onNext: (res: any) => { if (!res || !res.data) {