@iota-big3/sdk-gateway
Version:
Universal API Gateway with protocol translation, intelligent routing, rate limiting, health checking, and caching
157 lines • 4.89 kB
JavaScript
;
/**
* 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