Skip to main content

AuthEventBus & Event Names

AuthEventBus is the central event backbone of the tools system. It extends Node's built-in EventEmitter and emits standardised AuthEventPayload objects so that downstream handlers — telemetry, SSE, webhooks, analytics — can react without coupling to each other.


Architecture


Setup

import { AuthEventBus } from '@nik2208/node-auth';

const bus = new AuthEventBus();

Pass bus to AuthConfigurator to have the auth router publish events automatically:

import { AuthConfigurator } from '@nik2208/node-auth';

const auth = new AuthConfigurator(config, userStore, { eventBus: bus });
app.use('/auth', auth.router());

Publishing events

import { AuthEventBus, AuthEventNames } from '@nik2208/node-auth';

bus.publish(AuthEventNames.AUTH_LOGIN_SUCCESS, {
userId: 'user-123',
tenantId: 'tenant-abc',
ip: '203.0.113.1',
userAgent: req.headers['user-agent'],
data: { method: 'local' },
});

Subscribing to events

// Specific event
bus.onEvent(AuthEventNames.AUTH_LOGIN_FAILED, (payload) => {
console.warn('Failed login', payload.userId, payload.ip);
});

// All events via wildcard
bus.onEvent('*', (payload) => {
metricsCounter.inc({ event: payload.event });
});

// Remove a listener
bus.offEvent(AuthEventNames.AUTH_LOGOUT, myHandler);

Event payload

interface AuthEventPayload {
event: string; // e.g. 'identity.auth.login.success'
timestamp: string; // ISO 8601
data?: unknown;
userId?: string;
tenantId?: string;
sessionId?: string;
correlationId?: string;
ip?: string;
userAgent?: string;
}

Full event catalogue (AuthEventNames)

ConstantEvent name
USER_CREATEDidentity.user.created
USER_DELETEDidentity.user.deleted
USER_EMAIL_VERIFIEDidentity.user.email.verified
USER_PASSWORD_CHANGEDidentity.user.password.changed
USER_2FA_ENABLEDidentity.user.2fa.enabled
USER_2FA_DISABLEDidentity.user.2fa.disabled
USER_LINKEDidentity.user.linked
USER_UNLINKEDidentity.user.unlinked
SESSION_CREATEDidentity.session.created
SESSION_REVOKEDidentity.session.revoked
SESSION_EXPIREDidentity.session.expired
SESSION_ROTATEDidentity.session.rotated
AUTH_LOGIN_SUCCESSidentity.auth.login.success
AUTH_LOGIN_FAILEDidentity.auth.login.failed
AUTH_LOGOUTidentity.auth.logout
AUTH_OAUTH_SUCCESSidentity.auth.oauth.success
AUTH_OAUTH_CONFLICTidentity.auth.oauth.conflict
TENANT_CREATEDidentity.tenant.created
TENANT_DELETEDidentity.tenant.deleted
TENANT_USER_ADDEDidentity.tenant.user.added
TENANT_USER_REMOVEDidentity.tenant.user.removed
ROLE_ASSIGNEDidentity.role.assigned
ROLE_REVOKEDidentity.role.revoked
PERMISSION_GRANTEDidentity.permission.granted
PERMISSION_REVOKEDidentity.permission.revoked

API reference

class AuthEventBus extends EventEmitter {
publish(eventName: string, payload: Partial<AuthEventPayload>): void;
onEvent(eventName: string, handler: (payload: AuthEventPayload) => void): this;
offEvent(eventName: string, handler: (payload: AuthEventPayload) => void): this;
}