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.
| Subject | Consumer(s) | Retention | Trigger |
|---|---|---|---|
operator.config.created | routing-engine, smpp-connector | Limits, 7d | New operator created |
operator.config.updated | routing-engine, smpp-connector | Limits, 7d | Operator or rule changed |
operator.config.deleted | routing-engine, smpp-connector | Limits, 7d | Soft-delete |
operator.health | routing-engine | Limits, 24h | Health 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)
| Subject | Stream | Producer | Purpose |
|---|---|---|---|
operator.health.inbound | OPERATOR_HEALTH_INBOUND | smpp-connector | Health 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.