Message Passing and Event Notification API
Overview
The BrightChain message passing system provides secure, decentralized messaging with event notifications.
Core Services
MessageCBLService
Creates and retrieves messages stored as CBL blocks.
const service = new MessageCBLService(cblService, checksumService, blockStore, metadataStore);
// Create message
const { messageId } = await service.createMessage(content, creator, {
messageType: 'chat',
senderId: 'user1',
recipients: ['user2', 'user3'],
priority: MessagePriority.NORMAL,
encryptionScheme: MessageEncryptionScheme.NONE,
});
// Retrieve message
const content = await service.getMessageContent(messageId);
const metadata = await service.getMessageMetadata(messageId);
MessageRouter
Routes messages to recipients using direct or gossip strategies.
const router = new MessageRouter(metadataStore, 'local-node-id');
// Route message
const result = await router.routeMessage(messageId, ['recipient1', 'recipient2']);
// Returns: { strategy, successfulRecipients, failedRecipients, errors }
MessageMetadataStore
Stores and queries message metadata.
// Query messages
const messages = await store.queryMessages({
recipientId: 'user1',
messageType: 'chat',
page: 0,
pageSize: 10,
});
// Update delivery status
await store.updateDeliveryStatus(messageId, recipientId, MessageDeliveryStatus.DELIVERED);
// Record acknowledgment
await store.recordAcknowledgment(messageId, recipientId, new Date());
Configuration
const config: IMessageSystemConfig = {
enableMessageSizedBlocks: true,
minMessageSizeThreshold: 256,
maxMessageSizeThreshold: 1048576,
paddingStrategy: 'zero',
storageRetryAttempts: 3,
storageRetryDelayMs: 1000,
routingTimeoutMs: 30000,
queryTimeoutMs: 5000,
eventEmissionRetries: 3,
defaultMessageTTLMs: 86400000,
maxRecipientsPerMessage: 1000,
};
Monitoring
const metrics = new MessageMetricsCollector();
const logger = new MessageLogger(LogLevel.INFO);
// Pass to services
const service = new MessageCBLService(
cblService, checksumService, blockStore, metadataStore,
config, metrics, logger
);
// Get metrics
const stats = metrics.getMetrics();
console.log(`Success rate: ${metrics.getDeliverySuccessRate()}`);
console.log(`Avg latency: ${metrics.getAverageDeliveryLatency()}ms`);
Error Handling
All services throw MessageError with specific error types:
INVALID_RECIPIENT: Invalid recipient formatINVALID_MESSAGE_TYPE: Invalid message typeMESSAGE_TOO_LARGE: Message exceeds size limitSTORAGE_FAILED: Storage operation failed after retriesDELIVERY_FAILED: Message delivery failedENCRYPTION_FAILED: Encryption operation failedMESSAGE_NOT_FOUND: Message not found
WebSocket Message Types
MESSAGE_SEND
{
type: 'message:send',
messageId: string,
content: Uint8Array,
recipients: string[]
}
MESSAGE_RECEIVED
{
type: 'message:received',
messageId: string,
senderId: string
}
MESSAGE_ACK
{
type: 'message:ack',
messageId: string,
recipientId: string,
status: MessageDeliveryStatus
}
MESSAGE_QUERY
{
type: 'message:query',
filters?: {
recipientId?: string,
senderId?: string,
messageType?: string
}
}
EVENT_SUBSCRIBE
{
type: 'message:event_subscribe',
filters?: {
eventType?: string,
senderId?: string,
recipientId?: string
}
}
Environment Variables
MESSAGE_ENABLE_SIZED_BLOCKS=true
MESSAGE_MIN_SIZE_THRESHOLD=256
MESSAGE_MAX_SIZE_THRESHOLD=1048576
MESSAGE_PADDING_STRATEGY=zero
MESSAGE_STORAGE_RETRY_ATTEMPTS=3
MESSAGE_STORAGE_RETRY_DELAY_MS=1000
MESSAGE_ROUTING_TIMEOUT_MS=30000
MESSAGE_QUERY_TIMEOUT_MS=5000
MESSAGE_EVENT_EMISSION_RETRIES=3
MESSAGE_DEFAULT_TTL_MS=86400000
MESSAGE_MAX_RECIPIENTS=1000