Event Bus Connector Local Examples
Use these snippets to wire in-memory pub/sub flows for tests and lightweight runtime components.
LocalEventBusConnector
import { LocalEventBusConnector } from '@twin.org/event-bus-connector-local';
interface StatusPayload {
buildId: string;
status: 'started' | 'finished';
}
const connector = new LocalEventBusConnector();
const received: string[] = [];
console.log(connector.className()); // LocalEventBusConnector
const firstSubscription = await connector.subscribe<StatusPayload>('build.status', async event => {
received.push(`first:${event.data.buildId}:${event.data.status}`);
});
const secondSubscription = await connector.subscribe<StatusPayload>('build.status', async event => {
received.push(`second:${event.data.buildId}:${event.data.status}`);
});
await connector.publish<StatusPayload>('build.status', { buildId: 'B-100', status: 'started' });
await connector.unsubscribe(firstSubscription);
await connector.publish<StatusPayload>('build.status', { buildId: 'B-100', status: 'finished' });
await connector.unsubscribe(secondSubscription);
console.log(received); // ['first:B-100:started', 'second:B-100:started', 'second:B-100:finished']
import { ComponentFactory } from '@twin.org/core';
import { LocalEventBusConnector } from '@twin.org/event-bus-connector-local';
import type { ILoggingComponent } from '@twin.org/logging-models';
interface AuditPayload {
counter: number;
}
const logger: ILoggingComponent = {
className: () => 'ConsoleLogger',
log: async entry => {
console.log(entry.message); // publish
}
};
ComponentFactory.register('logging', () => logger);
const connector = new LocalEventBusConnector({
loggingComponentType: 'logging'
});
const subscriptionId = await connector.subscribe<AuditPayload>('audit.counter', async event => {
console.log(event.data.counter); // 3
});
await connector.publish<AuditPayload>('audit.counter', { counter: 3 });
await connector.unsubscribe(subscriptionId);