diff --git a/plugins/signals-node/api-report.md b/plugins/signals-node/api-report.md index cbf4142daf..52d7e37dac 100644 --- a/plugins/signals-node/api-report.md +++ b/plugins/signals-node/api-report.md @@ -22,9 +22,9 @@ export type SignalPayload = { }; // @public (undocumented) -export interface SignalService { +export type SignalService = { publish(signal: SignalPayload): Promise; -} +}; // @public (undocumented) export const signalService: ServiceRef; diff --git a/plugins/signals-node/src/SignalService.ts b/plugins/signals-node/src/SignalService.ts index 7d021ccf4e..f08a12661f 100644 --- a/plugins/signals-node/src/SignalService.ts +++ b/plugins/signals-node/src/SignalService.ts @@ -16,9 +16,9 @@ import { SignalPayload } from './types'; /** @public */ -export interface SignalService { +export type SignalService = { /** * Publishes a message to user refs to specific topic */ publish(signal: SignalPayload): Promise; -} +}; diff --git a/plugins/signals-react/api-report.md b/plugins/signals-react/api-report.md index ef4bc1b7fc..438b3e95cd 100644 --- a/plugins/signals-react/api-report.md +++ b/plugins/signals-react/api-report.md @@ -7,23 +7,18 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; // @public (undocumented) -export interface SignalApi { - // (undocumented) +export type SignalApi = { subscribe( channel: string, onMessage: (message: JsonObject) => void, - ): SignalSubscriber; -} + ): { + unsubscribe: () => void; + }; +}; // @public (undocumented) export const signalApiRef: ApiRef; -// @public (undocumented) -export interface SignalSubscriber { - // (undocumented) - unsubscribe(): void; -} - // @public (undocumented) export const useSignal: (channel: string) => { lastSignal: JsonObject | null; diff --git a/plugins/signals-react/src/api/SignalApi.ts b/plugins/signals-react/src/api/SignalApi.ts index b67b2ea0dc..b37b3ae2f5 100644 --- a/plugins/signals-react/src/api/SignalApi.ts +++ b/plugins/signals-react/src/api/SignalApi.ts @@ -22,14 +22,9 @@ export const signalApiRef = createApiRef({ }); /** @public */ -export interface SignalSubscriber { - unsubscribe(): void; -} - -/** @public */ -export interface SignalApi { +export type SignalApi = { subscribe( channel: string, onMessage: (message: JsonObject) => void, - ): SignalSubscriber; -} + ): { unsubscribe: () => void }; +}; diff --git a/plugins/signals/src/api/SignalClient.ts b/plugins/signals/src/api/SignalClient.ts index d6c4634264..ee4ed8756b 100644 --- a/plugins/signals/src/api/SignalClient.ts +++ b/plugins/signals/src/api/SignalClient.ts @@ -146,6 +146,20 @@ export class SignalClient implements SignalApi { url.protocol = url.protocol === 'http:' ? 'ws:' : 'wss:'; this.ws = new WebSocket(url.toString(), token); + this.ws.onmessage = (data: MessageEvent) => { + this.handleMessage(data); + }; + + this.ws.onerror = () => { + this.reconnect(); + }; + + this.ws.onclose = (ev: CloseEvent) => { + if (ev.code !== WS_CLOSE_NORMAL && ev.code !== WS_CLOSE_GOING_AWAY) { + this.reconnect(); + } + }; + // Wait until connection is open let connectSleep = 0; while ( @@ -160,20 +174,6 @@ export class SignalClient implements SignalApi { if (!this.ws || this.ws.readyState !== WebSocket.OPEN) { throw new Error('Connect timeout'); } - - this.ws.onmessage = (data: MessageEvent) => { - this.handleMessage(data); - }; - - this.ws.onerror = () => { - this.reconnect(); - }; - - this.ws.onclose = (ev: CloseEvent) => { - if (ev.code !== WS_CLOSE_NORMAL && ev.code !== WS_CLOSE_GOING_AWAY) { - this.reconnect(); - } - }; } private handleMessage(data: MessageEvent) {