UNPKG

@iota-big3/sdk-gateway

Version:

Universal API Gateway with protocol translation, intelligent routing, rate limiting, health checking, and caching

157 lines 4.89 kB
"use strict"; /** * Event-Driven Architecture Type Definitions * * @module event-architecture-types * @description Comprehensive types for event-driven systems including: * - Event definitions and schemas * - Event sourcing patterns * - Message queuing and streaming * - Pub/Sub patterns * - Event stores and projections * - CQRS (Command Query Responsibility Segregation) * - Saga/Orchestration patterns * - Dead letter queues and error handling * * Designed for type-safe event-driven architectures */ Object.defineProperty(exports, "__esModule", { value: true }); exports.eventArchitectureTypes = exports.SagaStatus = exports.AckStatus = exports.QueueType = exports.SubscriptionStatus = void 0; exports.validateEventOrder = validateEventOrder; exports.calculateStreamStats = calculateStreamStats; exports.canCompensateSaga = canCompensateSaga; /** * Subscription status */ var SubscriptionStatus; (function (SubscriptionStatus) { SubscriptionStatus["Active"] = "ACTIVE"; SubscriptionStatus["Paused"] = "PAUSED"; SubscriptionStatus["Catching_Up"] = "CATCHING_UP"; SubscriptionStatus["Disconnected"] = "DISCONNECTED"; SubscriptionStatus["Error"] = "ERROR"; })(SubscriptionStatus || (exports.SubscriptionStatus = SubscriptionStatus = {})); /** * Queue types */ var QueueType; (function (QueueType) { QueueType["Standard"] = "STANDARD"; QueueType["FIFO"] = "FIFO"; QueueType["Priority"] = "PRIORITY"; QueueType["Delay"] = "DELAY"; QueueType["Topic"] = "TOPIC"; })(QueueType || (exports.QueueType = QueueType = {})); /** * Acknowledgment status */ var AckStatus; (function (AckStatus) { AckStatus["Ack"] = "ACK"; AckStatus["Nack"] = "NACK"; AckStatus["Reject"] = "REJECT"; AckStatus["Requeue"] = "REQUEUE"; // Put back in queue })(AckStatus || (exports.AckStatus = AckStatus = {})); /** * Saga status */ var SagaStatus; (function (SagaStatus) { SagaStatus["Running"] = "RUNNING"; SagaStatus["Completed"] = "COMPLETED"; SagaStatus["Failed"] = "FAILED"; SagaStatus["Compensating"] = "COMPENSATING"; SagaStatus["Compensated"] = "COMPENSATED"; SagaStatus["Suspended"] = "SUSPENDED"; })(SagaStatus || (exports.SagaStatus = SagaStatus = {})); // ============================================ // Validation Functions // ============================================ /** * Validate event ordering in stream */ function validateEventOrder(events) { for (let i = 1; i < events.length; i++) { const prev = events[i - 1]; const curr = events[i]; if (!prev || !curr) { continue; // Skip if undefined } if (curr.sequence <= prev.sequence) { return { success: false, error: `Event sequence out of order: ${curr.sequence} <= ${prev.sequence}` }; } if (new Date(curr.timestamp) < new Date(prev.timestamp)) { return { success: false, error: `Event timestamp out of order: ${curr.timestamp} < ${prev.timestamp}` }; } } return { success: true, data: true }; } /** * Calculate event stream statistics */ function calculateStreamStats(events) { if (events.length === 0) { return { eventCount: 0, firstEvent: null, lastEvent: null, duration: 0, eventsPerSecond: 0, eventTypes: {} }; } const first = events[0]; const last = events[events.length - 1]; if (!first || !last) { return { eventCount: events.length, firstEvent: null, lastEvent: null, duration: 0, eventsPerSecond: 0, eventTypes: {} }; } const duration = new Date(last.timestamp).getTime() - new Date(first.timestamp).getTime(); const eventTypes = events.reduce((acc, e) => { acc[e.eventType] = (acc[e.eventType] || 0) + 1; return acc; }, {}); return { eventCount: events.length, firstEvent: first.timestamp, lastEvent: last.timestamp, duration: duration / 1000, // seconds eventsPerSecond: events.length / (duration / 1000), eventTypes }; } /** * Check if saga can be compensated */ function canCompensateSaga(saga) { return saga.status === SagaStatus.Failed && saga.state.compensations.length > 0 && saga.state.compensations.some(c => !c.executed); } // ============================================ // Export Event Architecture Types // ============================================ exports.eventArchitectureTypes = { // Enums SubscriptionStatus, QueueType, AckStatus, SagaStatus, // Functions validateEventOrder, calculateStreamStats, canCompensateSaga }; //# sourceMappingURL=event-architecture-types.js.map