Skip to main content

Operator Management Service — Event Schemas

Status: populated Owner: Platform Engineering Last updated: 2026-04-18 Companion: APPLICATION_LOGIC · DATA_MODEL

1. Produced Events

All published to NATS JetStream stream OPERATOR_CONFIG.

SubjectConsumer(s)RetentionTrigger
operator.config.createdrouting-engine, smpp-connectorLimits, 7dNew operator created
operator.config.updatedrouting-engine, smpp-connectorLimits, 7dOperator or rule changed
operator.config.deletedrouting-engine, smpp-connectorLimits, 7dSoft-delete
operator.healthrouting-engineLimits, 24hHealth state transition

operator.config.created.v1

interface OperatorConfigCreatedEvent {
schemaVersion: '1';
eventId: string; // UUIDv4
operatorId: string;
name: string;
host: string;
port: number;
systemId: string;
bindType: 'TRANSCEIVER' | 'TRANSMITTER' | 'RECEIVER';
tpsLimit: {
maxTps: number;
burstMultiplier: number;
enforcementMode: 'HARD_REJECT' | 'SOFT_THROTTLE';
};
status: 'INACTIVE'; // always INACTIVE on create
createdAt: string; // ISO 8601
createdBy: string; // adminId
}

operator.config.updated.v1

interface OperatorConfigUpdatedEvent {
schemaVersion: '1';
eventId: string;
operatorId: string;
changedFields: string[]; // e.g. ['host', 'tpsLimit.maxTps', 'routingRules']
previousValues: Record<string, unknown>;
newValues: Record<string, unknown>;
updatedAt: string;
updatedBy: string;
}

Note: password is never included in event payloads. Consumers that need credentials must call the internal REST API.

operator.config.deleted.v1

interface OperatorConfigDeletedEvent {
schemaVersion: '1';
eventId: string;
operatorId: string;
deletedAt: string;
deletedBy: string;
}

operator.health.v1

interface OperatorHealthEvent {
schemaVersion: '1';
eventId: string;
operatorId: string;
previousState: 'HEALTHY' | 'DEGRADED' | 'UNHEALTHY' | 'UNKNOWN';
newState: 'HEALTHY' | 'DEGRADED' | 'UNHEALTHY' | 'UNKNOWN';
errorRate: number; // 0.0–1.0
bindError: string | null; // SMPP error code if bind lost
at: string; // ISO 8601
}

2. Consumed Events (Internal Only)

SubjectStreamProducerPurpose
operator.health.inboundOPERATOR_HEALTH_INBOUNDsmpp-connectorHealth state signal from active SMPP connections

operator.health.inbound.v1 (consumed)

interface SmppHealthInboundEvent {
schemaVersion: '1';
operatorId: string;
errorRate: number;
bindState: 'BOUND' | 'UNBOUND' | 'ERROR';
errorCode: string | null; // SMPP error code
reportedAt: string;
}

3. PII Policy

Config events contain no MSISDN or message body. They contain operator hostname and system_id — considered internal operational data (not personal data). No PII scrub required on these streams.

4. Schema Registry

All event schemas registered in the platform schema registry (Apicurio or NATS schema service). CI gate rejects schema-incompatible changes without a version bump.