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.