From 6d84ee63ce8af3254cf766c5b4c239125a506d5f Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Tue, 12 Mar 2024 08:54:03 +0200 Subject: [PATCH] chore: rename SignalService to SignalsService Signed-off-by: Heikki Hellgren --- .changeset/neat-penguins-fix.md | 6 +++ .changeset/tasty-ants-know.md | 6 +++ packages/backend/src/index.ts | 6 +-- packages/backend/src/types.ts | 4 +- plugins/notifications-backend/src/plugin.ts | 6 +-- .../src/service/router.test.ts | 6 +-- .../src/service/router.ts | 18 +++---- .../src/service/standaloneServer.ts | 6 +-- plugins/signals-backend/README.md | 2 +- .../src/service/standaloneServer.ts | 4 +- plugins/signals-node/README.md | 54 ++++++++++++++++--- plugins/signals-node/api-report.md | 23 +++++--- ....test.ts => DefaultSignalsService.test.ts} | 6 +-- ...nalService.ts => DefaultSignalsService.ts} | 18 ++++--- .../{SignalService.ts => SignalsService.ts} | 8 ++- plugins/signals-node/src/index.ts | 4 +- plugins/signals-node/src/lib.ts | 14 +++-- plugins/signals-node/src/types.ts | 2 +- 18 files changed, 137 insertions(+), 56 deletions(-) create mode 100644 .changeset/neat-penguins-fix.md create mode 100644 .changeset/tasty-ants-know.md rename plugins/signals-node/src/{DefaultSignalService.test.ts => DefaultSignalsService.test.ts} (84%) rename plugins/signals-node/src/{DefaultSignalService.ts => DefaultSignalsService.ts} (70%) rename plugins/signals-node/src/{SignalService.ts => SignalsService.ts} (85%) diff --git a/.changeset/neat-penguins-fix.md b/.changeset/neat-penguins-fix.md new file mode 100644 index 0000000000..cd85607974 --- /dev/null +++ b/.changeset/neat-penguins-fix.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-signals-node': patch +--- + +Renamed `SignalService` to `SignalsService` and `signalService` to `signalServiceRef` +to follow the naming scheme of services and their references diff --git a/.changeset/tasty-ants-know.md b/.changeset/tasty-ants-know.md new file mode 100644 index 0000000000..ef2a66ca3d --- /dev/null +++ b/.changeset/tasty-ants-know.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-notifications-backend': patch +'@backstage/plugin-signals-backend': patch +--- + +Changed to use the refactored signal service naming diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index d94b82211f..026fff643e 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -74,7 +74,7 @@ import { DefaultEventsService } from '@backstage/plugin-events-node'; import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'; import { MeterProvider } from '@opentelemetry/sdk-metrics'; import { metrics } from '@opentelemetry/api'; -import { DefaultSignalService } from '@backstage/plugin-signals-node'; +import { DefaultSignalsService } from '@backstage/plugin-signals-node'; // Expose opentelemetry metrics using a Prometheus exporter on // http://localhost:9464/metrics . See prometheus.yml in packages/backend for @@ -105,7 +105,7 @@ function makeCreateEnv(config: Config) { root.child({ type: 'plugin' }), eventsService, ); - const signalService = DefaultSignalService.create({ + const signalsService = DefaultSignalsService.create({ events: eventsService, }); @@ -130,7 +130,7 @@ function makeCreateEnv(config: Config) { permissions, scheduler, identity, - signalService, + signals: signalsService, }; }; } diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 7d9cd19310..a75b1620c4 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -27,7 +27,7 @@ import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { EventBroker, EventsService } from '@backstage/plugin-events-node'; -import { SignalService } from '@backstage/plugin-signals-node'; +import { SignalsService } from '@backstage/plugin-signals-node'; export type PluginEnvironment = { logger: Logger; @@ -45,5 +45,5 @@ export type PluginEnvironment = { */ eventBroker: EventBroker; events: EventsService; - signalService: SignalService; + signals: SignalsService; }; diff --git a/plugins/notifications-backend/src/plugin.ts b/plugins/notifications-backend/src/plugin.ts index 29d444efd3..9f4c5912fd 100644 --- a/plugins/notifications-backend/src/plugin.ts +++ b/plugins/notifications-backend/src/plugin.ts @@ -19,7 +19,7 @@ import { createBackendPlugin, } from '@backstage/backend-plugin-api'; import { createRouter } from './service/router'; -import { signalService } from '@backstage/plugin-signals-node'; +import { signalsServiceRef } from '@backstage/plugin-signals-node'; import { NotificationProcessor, notificationsProcessingExtensionPoint, @@ -66,7 +66,7 @@ export const notificationsPlugin = createBackendPlugin({ logger: coreServices.logger, database: coreServices.database, discovery: coreServices.discovery, - signals: signalService, + signals: signalsServiceRef, }, async init({ auth, @@ -86,7 +86,7 @@ export const notificationsPlugin = createBackendPlugin({ logger, database, discovery, - signalService: signals, + signals, processors: processingExtensions.processors, }), ); diff --git a/plugins/notifications-backend/src/service/router.test.ts b/plugins/notifications-backend/src/service/router.test.ts index 13cb5e2f54..3f091bac4b 100644 --- a/plugins/notifications-backend/src/service/router.test.ts +++ b/plugins/notifications-backend/src/service/router.test.ts @@ -23,7 +23,7 @@ import request from 'supertest'; import { createRouter } from './router'; import { ConfigReader } from '@backstage/config'; -import { SignalService } from '@backstage/plugin-signals-node'; +import { SignalsService } from '@backstage/plugin-signals-node'; import { mockServices } from '@backstage/backend-test-utils'; function createDatabase(): PluginDatabaseManager { @@ -42,7 +42,7 @@ function createDatabase(): PluginDatabaseManager { describe('createRouter', () => { let app: express.Express; - const signalService: jest.Mocked = { + const signalService: jest.Mocked = { publish: jest.fn(), }; @@ -56,7 +56,7 @@ describe('createRouter', () => { logger: getVoidLogger(), database: createDatabase(), discovery, - signalService, + signals: signalService, userInfo, httpAuth, auth, diff --git a/plugins/notifications-backend/src/service/router.ts b/plugins/notifications-backend/src/service/router.ts index 519919c6d4..d360d2cadd 100644 --- a/plugins/notifications-backend/src/service/router.ts +++ b/plugins/notifications-backend/src/service/router.ts @@ -38,7 +38,7 @@ import { LoggerService, UserInfoService, } from '@backstage/backend-plugin-api'; -import { SignalService } from '@backstage/plugin-signals-node'; +import { SignalsService } from '@backstage/plugin-signals-node'; import { NewNotificationSignal, Notification, @@ -53,7 +53,7 @@ export interface RouterOptions { auth: AuthService; httpAuth: HttpAuthService; userInfo: UserInfoService; - signalService?: SignalService; + signals?: SignalsService; catalog?: CatalogApi; processors?: NotificationProcessor[]; } @@ -71,7 +71,7 @@ export async function createRouter( discovery, catalog, processors, - signalService, + signals, } = options; const catalogClient = @@ -245,8 +245,8 @@ export async function createRouter( if (read === true) { await store.markRead({ user, ids }); - if (signalService) { - await signalService.publish({ + if (signals) { + await signals.publish({ recipients: [user], message: { action: 'notification_read', notification_ids: ids }, channel: 'notifications', @@ -255,8 +255,8 @@ export async function createRouter( } else if (read === false) { await store.markUnread({ user: user, ids }); - if (signalService) { - await signalService.publish({ + if (signals) { + await signals.publish({ recipients: [user], message: { action: 'notification_unread', notification_ids: ids }, channel: 'notifications', @@ -343,8 +343,8 @@ export async function createRouter( processorSendNotification(ret); notifications.push(ret); - if (signalService) { - await signalService.publish({ + if (signals) { + await signals.publish({ recipients: user, message: { action: 'new_notification', diff --git a/plugins/notifications-backend/src/service/standaloneServer.ts b/plugins/notifications-backend/src/service/standaloneServer.ts index 817c35f739..5445d9b6b4 100644 --- a/plugins/notifications-backend/src/service/standaloneServer.ts +++ b/plugins/notifications-backend/src/service/standaloneServer.ts @@ -32,7 +32,7 @@ import { CatalogRequestOptions, GetEntitiesByRefsRequest, } from '@backstage/catalog-client'; -import { DefaultSignalService } from '@backstage/plugin-signals-node'; +import { DefaultSignalsService } from '@backstage/plugin-signals-node'; import { EventParams, EventsService, @@ -112,7 +112,7 @@ export async function startStandaloneServer( }, }; - const signalService = DefaultSignalService.create({ events }); + const signalService = DefaultSignalsService.create({ events }); // TODO: Move to use services instead this hack const { auth, httpAuth, userInfo } = createLegacyAuthAdapters< any, @@ -128,7 +128,7 @@ export async function startStandaloneServer( database: dbMock, catalog: catalogApi, discovery, - signalService, + signals: signalService, auth, httpAuth, userInfo, diff --git a/plugins/signals-backend/README.md b/plugins/signals-backend/README.md index ff1fcb6562..d76038a38e 100644 --- a/plugins/signals-backend/README.md +++ b/plugins/signals-backend/README.md @@ -6,7 +6,7 @@ Signals plugin allows backend plugins to publish messages to frontend plugins. ## Getting started -First install the `@backstage/plugin-signals-node` plugin to get the `SignalService` set up. +First install the `@backstage/plugin-signals-node` plugin to get the `SignalsService` set up. Next, add Signals router to your backend in `packages/backend/src/plugins/signals.ts`: diff --git a/plugins/signals-backend/src/service/standaloneServer.ts b/plugins/signals-backend/src/service/standaloneServer.ts index b143ce3684..c92ab3797e 100644 --- a/plugins/signals-backend/src/service/standaloneServer.ts +++ b/plugins/signals-backend/src/service/standaloneServer.ts @@ -21,7 +21,7 @@ import { import { Server } from 'http'; import { Logger } from 'winston'; import { createRouter } from './router'; -import { DefaultSignalService } from '@backstage/plugin-signals-node'; +import { DefaultSignalsService } from '@backstage/plugin-signals-node'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; import { EventParams, @@ -63,7 +63,7 @@ export async function startStandaloneServer( }, }; - const signals = DefaultSignalService.create({ + const signals = DefaultSignalsService.create({ events, }); diff --git a/plugins/signals-node/README.md b/plugins/signals-node/README.md index 5e738a849d..c8b056577a 100644 --- a/plugins/signals-node/README.md +++ b/plugins/signals-node/README.md @@ -6,28 +6,70 @@ Signals plugin allows backend plugins to publish messages to frontend plugins. ## Getting started +### New backend system + +In `packages/backend/index.ts`, add the signals backend: + +```ts +backend.add(import('@backstage/plugin-signals-backend')); +``` + +To use signals in your plugin, add it as a dependency to `my-plugin/plugin.ts`: + +```ts +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { signalsServiceRef } from '@backstage/plugin-signals-node'; + +export const myPlugin = createBackendPlugin({ + pluginId: 'my-plugin', + register(env) { + env.registerInit({ + deps: { + httpRouter: coreServices.httpRouter, + signals: signalsServiceRef, + }, + async init({ httpRouter, signals }) { + httpRouter.use( + await createRouter({ + signals, + }), + ); + }, + }); + }, +}); +``` + +### Old backend system + Add SignalService to your plugin environment in `packages/backend/src/types.ts`: ```ts -import { SignalService } from '@backstage/plugin-signals-node'; +import { SignalsService } from '@backstage/plugin-signals-node'; export type PluginEnvironment = { // ... - signalService: SignalService; + signals: SignalsService; }; ``` Add it also to your `makeCreateEnv` to allow access from the other plugins: ```ts -import { SignalService } from '@backstage/plugin-signals-node'; +import { + SignalsService, + DefaultSignalsService, +} from '@backstage/plugin-signals-node'; import { DefaultEventBroker } from '@backstage/plugin-events-backend'; function makeCreateEnv(config: Config) { // ... const eventBroker = new DefaultEventBroker(root.child({ type: 'plugin' })); - const signalService = DefaultSignalService.create({ + const signalsService = DefaultSignalsService.create({ eventBroker, }); @@ -36,7 +78,7 @@ function makeCreateEnv(config: Config) { return { logger, eventBroker, - signalService, + signals: signalsService, // ... }; }; @@ -54,7 +96,7 @@ all subscribers, you can use `null` as `recipients` parameter. ```ts // Periodic sending example setInterval(async () => { - await signalService.publish({ + await signals.publish({ recipients: null, channel: 'my_plugin', message: { diff --git a/plugins/signals-node/api-report.md b/plugins/signals-node/api-report.md index 21c35e5e36..16f6277ff2 100644 --- a/plugins/signals-node/api-report.md +++ b/plugins/signals-node/api-report.md @@ -7,10 +7,13 @@ import { EventsService } from '@backstage/plugin-events-node'; import { JsonObject } from '@backstage/types'; import { ServiceRef } from '@backstage/backend-plugin-api'; +// @public @deprecated (undocumented) +export const DefaultSignalService: typeof DefaultSignalsService; + // @public (undocumented) -export class DefaultSignalService implements SignalService { +export class DefaultSignalsService implements SignalsService { // (undocumented) - static create(options: SignalServiceOptions): DefaultSignalService; + static create(options: SignalsServiceOptions): DefaultSignalsService; publish( signal: SignalPayload, ): Promise; @@ -23,20 +26,26 @@ export type SignalPayload = { message: TMessage; }; +// @public @deprecated (undocumented) +export interface SignalService extends SignalsService {} + +// @public @deprecated (undocumented) +export const signalService: ServiceRef; + // @public (undocumented) -export interface SignalService { +export interface SignalsService { publish( signal: SignalPayload, ): Promise; } // @public (undocumented) -export const signalService: ServiceRef; - -// @public (undocumented) -export type SignalServiceOptions = { +export type SignalsServiceOptions = { events: EventsService; }; +// @public (undocumented) +export const signalsServiceRef: ServiceRef; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/signals-node/src/DefaultSignalService.test.ts b/plugins/signals-node/src/DefaultSignalsService.test.ts similarity index 84% rename from plugins/signals-node/src/DefaultSignalService.test.ts rename to plugins/signals-node/src/DefaultSignalsService.test.ts index 0b868d8ec4..194b3c0077 100644 --- a/plugins/signals-node/src/DefaultSignalService.test.ts +++ b/plugins/signals-node/src/DefaultSignalsService.test.ts @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { DefaultSignalService } from './DefaultSignalService'; +import { DefaultSignalsService } from './DefaultSignalsService'; -describe('DefaultSignalService', () => { +describe('DefaultSignalsService', () => { const mockEvents = { publish: jest.fn(), subscribe: jest.fn(), }; - const service = DefaultSignalService.create({ events: mockEvents }); + const service = DefaultSignalsService.create({ events: mockEvents }); it('should publish signal', () => { const signal = { diff --git a/plugins/signals-node/src/DefaultSignalService.ts b/plugins/signals-node/src/DefaultSignalsService.ts similarity index 70% rename from plugins/signals-node/src/DefaultSignalService.ts rename to plugins/signals-node/src/DefaultSignalsService.ts index e3ffba8d7b..ca1412c6fa 100644 --- a/plugins/signals-node/src/DefaultSignalService.ts +++ b/plugins/signals-node/src/DefaultSignalsService.ts @@ -14,19 +14,19 @@ * limitations under the License. */ import { EventsService } from '@backstage/plugin-events-node'; -import { SignalPayload, SignalServiceOptions } from './types'; -import { SignalService } from './SignalService'; +import { SignalPayload, SignalsServiceOptions } from './types'; +import { SignalsService } from './SignalsService'; import { JsonObject } from '@backstage/types'; /** @public */ -export class DefaultSignalService implements SignalService { +export class DefaultSignalsService implements SignalsService { private events: EventsService; - static create(options: SignalServiceOptions) { - return new DefaultSignalService(options); + static create(options: SignalsServiceOptions) { + return new DefaultSignalsService(options); } - private constructor(options: SignalServiceOptions) { + private constructor(options: SignalsServiceOptions) { ({ events: this.events } = options); } @@ -43,3 +43,9 @@ export class DefaultSignalService implements SignalService { }); } } + +/** + * @public + * @deprecated Use `DefaultSignalsService` instead + */ +export const DefaultSignalService = DefaultSignalsService; diff --git a/plugins/signals-node/src/SignalService.ts b/plugins/signals-node/src/SignalsService.ts similarity index 85% rename from plugins/signals-node/src/SignalService.ts rename to plugins/signals-node/src/SignalsService.ts index 7011c6c525..f338ceaaad 100644 --- a/plugins/signals-node/src/SignalService.ts +++ b/plugins/signals-node/src/SignalsService.ts @@ -17,7 +17,7 @@ import { SignalPayload } from './types'; import { JsonObject } from '@backstage/types'; /** @public */ -export interface SignalService { +export interface SignalsService { /** * Publishes a signal to user refs to specific topic * @param signal - Signal to publish @@ -26,3 +26,9 @@ export interface SignalService { signal: SignalPayload, ): Promise; } + +/** + * @public + * @deprecated Use `SignalsService` instead + */ +export interface SignalService extends SignalsService {} diff --git a/plugins/signals-node/src/index.ts b/plugins/signals-node/src/index.ts index f9c220b1e9..822670040f 100644 --- a/plugins/signals-node/src/index.ts +++ b/plugins/signals-node/src/index.ts @@ -15,6 +15,6 @@ */ export * from './lib'; -export * from './DefaultSignalService'; -export * from './SignalService'; +export * from './DefaultSignalsService'; +export * from './SignalsService'; export * from './types'; diff --git a/plugins/signals-node/src/lib.ts b/plugins/signals-node/src/lib.ts index 7e811cb10e..1eed90e273 100644 --- a/plugins/signals-node/src/lib.ts +++ b/plugins/signals-node/src/lib.ts @@ -17,12 +17,12 @@ import { createServiceFactory, createServiceRef, } from '@backstage/backend-plugin-api'; -import { DefaultSignalService } from './DefaultSignalService'; -import { SignalService } from './SignalService'; +import { DefaultSignalsService } from './DefaultSignalsService'; +import { SignalsService } from './SignalsService'; import { eventsServiceRef } from '@backstage/plugin-events-node'; /** @public */ -export const signalService = createServiceRef({ +export const signalsServiceRef = createServiceRef({ id: 'signals.service', scope: 'plugin', defaultFactory: async service => @@ -32,7 +32,13 @@ export const signalService = createServiceRef({ events: eventsServiceRef, }, factory({ events }) { - return DefaultSignalService.create({ events }); + return DefaultSignalsService.create({ events }); }, }), }); + +/** + * @public + * @deprecated Use `signalsServiceRef` instead + */ +export const signalService = signalsServiceRef; diff --git a/plugins/signals-node/src/types.ts b/plugins/signals-node/src/types.ts index efd45c56c0..9ea5ffa031 100644 --- a/plugins/signals-node/src/types.ts +++ b/plugins/signals-node/src/types.ts @@ -19,7 +19,7 @@ import { JsonObject } from '@backstage/types'; /** * @public */ -export type SignalServiceOptions = { +export type SignalsServiceOptions = { events: EventsService; };