chore: rename SignalService to SignalsService
Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
@@ -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
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-notifications-backend': patch
|
||||
'@backstage/plugin-signals-backend': patch
|
||||
---
|
||||
|
||||
Changed to use the refactored signal service naming
|
||||
@@ -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,
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -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<SignalService> = {
|
||||
const signalService: jest.Mocked<SignalsService> = {
|
||||
publish: jest.fn(),
|
||||
};
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('createRouter', () => {
|
||||
logger: getVoidLogger(),
|
||||
database: createDatabase(),
|
||||
discovery,
|
||||
signalService,
|
||||
signals: signalService,
|
||||
userInfo,
|
||||
httpAuth,
|
||||
auth,
|
||||
|
||||
@@ -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<NotificationReadSignal>({
|
||||
if (signals) {
|
||||
await signals.publish<NotificationReadSignal>({
|
||||
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<NotificationReadSignal>({
|
||||
if (signals) {
|
||||
await signals.publish<NotificationReadSignal>({
|
||||
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<NewNotificationSignal>({
|
||||
if (signals) {
|
||||
await signals.publish<NewNotificationSignal>({
|
||||
recipients: user,
|
||||
message: {
|
||||
action: 'new_notification',
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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`:
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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<TMessage extends JsonObject = JsonObject>(
|
||||
signal: SignalPayload<TMessage>,
|
||||
): Promise<void>;
|
||||
@@ -23,20 +26,26 @@ export type SignalPayload<TMessage extends JsonObject = JsonObject> = {
|
||||
message: TMessage;
|
||||
};
|
||||
|
||||
// @public @deprecated (undocumented)
|
||||
export interface SignalService extends SignalsService {}
|
||||
|
||||
// @public @deprecated (undocumented)
|
||||
export const signalService: ServiceRef<SignalsService, 'plugin'>;
|
||||
|
||||
// @public (undocumented)
|
||||
export interface SignalService {
|
||||
export interface SignalsService {
|
||||
publish<TMessage extends JsonObject = JsonObject>(
|
||||
signal: SignalPayload<TMessage>,
|
||||
): Promise<void>;
|
||||
}
|
||||
|
||||
// @public (undocumented)
|
||||
export const signalService: ServiceRef<SignalService, 'plugin'>;
|
||||
|
||||
// @public (undocumented)
|
||||
export type SignalServiceOptions = {
|
||||
export type SignalsServiceOptions = {
|
||||
events: EventsService;
|
||||
};
|
||||
|
||||
// @public (undocumented)
|
||||
export const signalsServiceRef: ServiceRef<SignalsService, 'plugin'>;
|
||||
|
||||
// (No @packageDocumentation comment for this package)
|
||||
```
|
||||
|
||||
+3
-3
@@ -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 = {
|
||||
+12
-6
@@ -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;
|
||||
+7
-1
@@ -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<TMessage>,
|
||||
): Promise<void>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
* @deprecated Use `SignalsService` instead
|
||||
*/
|
||||
export interface SignalService extends SignalsService {}
|
||||
@@ -15,6 +15,6 @@
|
||||
*/
|
||||
|
||||
export * from './lib';
|
||||
export * from './DefaultSignalService';
|
||||
export * from './SignalService';
|
||||
export * from './DefaultSignalsService';
|
||||
export * from './SignalsService';
|
||||
export * from './types';
|
||||
|
||||
@@ -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<SignalService>({
|
||||
export const signalsServiceRef = createServiceRef<SignalsService>({
|
||||
id: 'signals.service',
|
||||
scope: 'plugin',
|
||||
defaultFactory: async service =>
|
||||
@@ -32,7 +32,13 @@ export const signalService = createServiceRef<SignalService>({
|
||||
events: eventsServiceRef,
|
||||
},
|
||||
factory({ events }) {
|
||||
return DefaultSignalService.create({ events });
|
||||
return DefaultSignalsService.create({ events });
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
/**
|
||||
* @public
|
||||
* @deprecated Use `signalsServiceRef` instead
|
||||
*/
|
||||
export const signalService = signalsServiceRef;
|
||||
|
||||
@@ -19,7 +19,7 @@ import { JsonObject } from '@backstage/types';
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export type SignalServiceOptions = {
|
||||
export type SignalsServiceOptions = {
|
||||
events: EventsService;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user