allsource_core/lib.rs
1//! # AllSource Core - High-Performance Event Store
2//!
3//! A high-performance event sourcing platform built in Rust, following Clean Architecture principles.
4//!
5//! ## Architecture Overview
6//!
7//! The codebase follows a layered Clean Architecture:
8//!
9//! ```text
10//! ┌─────────────────────────────────────────────────────────────┐
11//! │ Infrastructure Layer │
12//! │ (HTTP handlers, WebSocket, persistence, security) │
13//! │ infrastructure::web, infrastructure::persistence, │
14//! │ infrastructure::security, infrastructure::repositories │
15//! ├─────────────────────────────────────────────────────────────┤
16//! │ Application Layer │
17//! │ (Use cases, services, DTOs) │
18//! │ application::use_cases, application::services, │
19//! │ application::dto │
20//! ├─────────────────────────────────────────────────────────────┤
21//! │ Domain Layer │
22//! │ (Entities, value objects, repository traits) │
23//! │ domain::entities, domain::value_objects, │
24//! │ domain::repositories │
25//! └─────────────────────────────────────────────────────────────┘
26//! ```
27//!
28//! ## Module Organization
29//!
30//! - **domain**: Core business entities, value objects, and repository traits
31//! - **application**: Use cases, services, and DTOs that orchestrate domain logic
32//! - **infrastructure**: Concrete implementations (web, persistence, security)
33//!
34//! ## Quick Start
35//!
36//! ```rust,ignore
37//! use allsource_core::{EventStore, Event, IngestEventRequest};
38//!
39//! let store = EventStore::new();
40//! let event = Event::from_strings(
41//! "user.created".to_string(),
42//! "user-123".to_string(),
43//! "default".to_string(),
44//! serde_json::json!({"name": "Alice"}),
45//! None,
46//! )?;
47//! store.ingest(event)?;
48//! ```
49
50// Safety: no unsafe code allowed in this crate
51#![forbid(unsafe_code)]
52// Development suppressions — tighten progressively
53#![allow(dead_code)]
54#![allow(unused_variables)]
55#![allow(deprecated)]
56// Clippy — allow patterns justified by architecture
57#![allow(clippy::too_many_arguments)]
58#![allow(clippy::type_complexity)]
59#![allow(clippy::module_inception)]
60
61// =============================================================================
62// Clean Architecture Layers
63// =============================================================================
64
65/// Layer 1: Domain Layer - Enterprise Business Rules
66///
67/// Contains pure business entities, value objects, and repository traits.
68/// This layer has ZERO external dependencies.
69pub mod domain;
70
71/// Layer 2: Application Layer - Application Business Rules
72///
73/// Contains use cases that orchestrate domain entities and services.
74/// Depends only on the domain layer.
75pub mod application;
76
77/// Layer 3: Infrastructure Layer - Interface Adapters
78///
79/// Contains concrete implementations of abstractions.
80/// Depends on domain and application layers.
81pub mod infrastructure;
82
83// =============================================================================
84// Shared Modules
85// =============================================================================
86
87/// Error types for the entire crate
88pub mod error;
89
90/// Main EventStore facade
91pub mod store;
92
93/// Advanced security module (anomaly detection, encryption, KMS)
94pub mod security;
95
96/// Shared test fixture builders for integration tests and cross-crate use
97pub mod test_utils;
98
99/// Async webhook delivery worker
100#[cfg(feature = "server")]
101pub mod webhook_worker;
102
103/// AllSource Prime — unified agent memory engine (requires `prime` feature)
104#[cfg(feature = "prime")]
105pub mod prime;
106
107/// Ergonomic embedded-mode facade (requires `embedded` feature)
108#[cfg(feature = "embedded")]
109pub mod embedded;
110
111#[cfg(feature = "embedded")]
112pub use embedded::EmbeddedCore;
113
114// =============================================================================
115// Public API - Commonly Used Types
116// =============================================================================
117
118// Domain layer exports
119pub use domain::{entities, entities::Event, repositories};
120
121// Application layer exports
122pub use application::{
123 dto::{IngestEventRequest, QueryEventsRequest},
124 services::{
125 AnalyticsEngine, ExactlyOnceConfig, ExactlyOnceRegistry, Pipeline, PipelineConfig,
126 PipelineManager, ProjectionManager, ReplayManager, SchemaEvolutionManager, SchemaRegistry,
127 },
128};
129
130// Infrastructure layer exports
131#[cfg(feature = "server")]
132pub use infrastructure::security::{AuthManager, Permission, Role};
133#[cfg(feature = "server")]
134pub use infrastructure::web::{WebSocketManager, serve};
135pub use infrastructure::{
136 persistence::{
137 CompactionConfig, CompactionManager, EventIndex, ParquetStorage, SnapshotConfig,
138 SnapshotManager, WALConfig, WriteAheadLog,
139 },
140 security::RateLimiter,
141};
142
143// Error handling
144pub use error::{AllSourceError, Result};
145
146// =============================================================================
147// Backward-Compatible Aliases (for binaries and external users)
148// =============================================================================
149
150/// Auth module re-export for backward compatibility
151#[cfg(feature = "server")]
152pub mod auth {
153 pub use crate::infrastructure::security::{AuthManager, Permission, Role};
154}
155
156/// Rate limiting module re-export
157pub mod rate_limit {
158 pub use crate::infrastructure::security::rate_limit::{RateLimitConfig, RateLimiter};
159}
160
161/// Tenant module re-export
162pub mod tenant {
163 pub use crate::domain::entities::{Tenant, TenantQuotas};
164}
165
166/// Config module re-export
167pub mod config {
168 pub use crate::infrastructure::config::*;
169}
170
171/// Backup module re-export
172pub mod backup {
173 pub use crate::infrastructure::persistence::backup::*;
174}
175
176/// API v1 module re-export
177#[cfg(feature = "server")]
178pub mod api_v1 {
179 pub use crate::infrastructure::web::api_v1::{AppState, AtomicNodeRole, NodeRole, serve_v1};
180}
181
182/// Replication module re-export (enterprise feature)
183#[cfg(feature = "replication")]
184pub mod replication {
185 pub use crate::infrastructure::replication::{
186 FollowerReplicationStatus, ReplicationMode, ReplicationStatus, WalReceiver, WalShipper,
187 };
188}
189#[cfg(not(feature = "replication"))]
190pub mod replication {
191 pub use crate::infrastructure::replication::{
192 FollowerReplicationStatus, ReplicationMode, ReplicationStatus, WalReceiver, WalShipper,
193 };
194}
195
196/// Cluster module re-export
197pub mod cluster {
198 pub use crate::infrastructure::cluster::{
199 ClusterManager, ClusterMember, ClusterStatus, ConflictResolution, CrdtResolver,
200 GeoReplicationConfig, GeoReplicationManager, GeoReplicationStatus, GeoSyncRequest,
201 GeoSyncResponse, HlcTimestamp, HybridLogicalClock, MemberRole, MergeStrategy, Node,
202 NodeRegistry, PeerHealth, PeerRegion, PeerStatus, ReplicatedEvent, RequestRouter,
203 VersionVector, VoteRequest, VoteResponse,
204 };
205}
206
207/// RESP3 (Redis wire protocol) server re-export
208#[cfg(feature = "server")]
209pub mod resp {
210 pub use crate::infrastructure::resp::RespServer;
211}
212
213/// Advanced query features re-export (v2.0)
214pub mod query {
215 #[cfg(feature = "analytics")]
216 pub use crate::infrastructure::query::eventql::{
217 EventQLRequest, EventQLResponse, execute_eventql,
218 };
219 pub use crate::infrastructure::query::{
220 geospatial::{
221 BoundingBox, Coordinate, GeoEventResult, GeoIndex, GeoQueryRequest, RadiusQuery,
222 execute_geo_query, haversine_distance,
223 },
224 graphql::{
225 GraphQLError, GraphQLRequest, GraphQLResponse, QueryField, event_to_json,
226 introspection_schema, parse_query,
227 },
228 };
229}
230
231// Main store facade
232pub use store::EventStore;
233
234// =============================================================================
235// Tests
236// =============================================================================
237
238#[cfg(test)]
239mod security_integration_tests;