Skip to main content

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);