Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9bd7175
feat(config): add blockchainIndexer settings for real-time indexing p…
DevMuhdishaq Aug 23, 2026
6531fef
feat(blockchain-indexer): extend BlockchainEventType with Soroban eve…
DevMuhdishaq Aug 23, 2026
aa738e0
feat(blockchain-indexer): add IndexedEvent entity for unified event s…
DevMuhdishaq Aug 23, 2026
23ca86d
feat(blockchain-indexer): add EventNormalizer for Stellar/Soroban con…
DevMuhdishaq Aug 23, 2026
b442ff1
feat(blockchain-indexer): add HorizonStreamService for real-time SSE …
DevMuhdishaq Aug 23, 2026
5205b8f
feat(blockchain-indexer): add EventBufferService with deduplication a…
DevMuhdishaq Aug 23, 2026
4307939
feat(blockchain-indexer): add BatchedPersistenceService for high-thro…
DevMuhdishaq Aug 23, 2026
46910c1
feat(blockchain-indexer): add SubscriptionManager pub/sub for event d…
DevMuhdishaq Aug 23, 2026
7c0a62b
feat(blockchain-indexer): add EventWebSocketGateway for frontend subs…
DevMuhdishaq Aug 23, 2026
5817e0d
feat(blockchain-indexer): add LedgerIndexerService orchestrating the …
DevMuhdishaq Aug 23, 2026
ed0c1b6
feat(blockchain-indexer): add subscription DTOs and new REST endpoints
DevMuhdishaq Aug 23, 2026
935bf7c
feat(blockchain-indexer): wire real-time pipeline into module and add…
DevMuhdishaq Aug 23, 2026
9c48110
feat(analytics): expand metric entity
DevMuhdishaq Aug 23, 2026
5972d66
feat(analytics): track report execution times
DevMuhdishaq Aug 23, 2026
d512426
feat(analytics): add anomaly detection
DevMuhdishaq Aug 23, 2026
8e0030b
feat(analytics): add data pipeline
DevMuhdishaq Aug 23, 2026
ad0f66c
feat(analytics): add financial reporting
DevMuhdishaq Aug 23, 2026
88b3547
feat(analytics): add market analytics
DevMuhdishaq Aug 23, 2026
74b2a66
feat(analytics): add pool analytics
DevMuhdishaq Aug 23, 2026
95d6e48
feat(analytics): add trader performance analytics
DevMuhdishaq Aug 23, 2026
d00a8b4
feat(analytics): add scheduled reports
DevMuhdishaq Aug 23, 2026
87c10aa
feat(analytics): wire advanced analytics services
DevMuhdishaq Aug 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .freebuff/project-id
Original file line number Diff line number Diff line change
@@ -1 +1 @@
bda816df-5043-4c6f-b954-eea1f62f0859
f73c854c-c4c7-4221-9a92-d43adb261c3e
50 changes: 50 additions & 0 deletions src/config/configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,56 @@ export default () => ({
eventPageLimit: parseInt(process.env.SOROBAN_EVENT_PAGE_LIMIT ?? '100', 10),
},

blockchainIndexer: {
enabled: process.env.BLOCKCHAIN_INDEXER_ENABLED === 'true',
pollIntervalMs: parseInt(
process.env.BLOCKCHAIN_INDEXER_POLL_INTERVAL_MS ?? '2000',
10,
),
maxBackfillLedgers: parseInt(
process.env.BLOCKCHAIN_INDEXER_MAX_BACKFILL_LEDGERS ?? '1000',
10,
),
includeFailed: process.env.BLOCKCHAIN_INDEXER_INCLUDE_FAILED === 'true',
pageLimit: parseInt(process.env.BLOCKCHAIN_INDEXER_PAGE_LIMIT ?? '200', 10),
streamTtlSecs: parseInt(
process.env.BLOCKCHAIN_INDEXER_STREAM_TTL_SECS ?? '300',
10,
),
// Real-time WebSocket streaming settings
wsReconnectBaseDelayMs: parseInt(
process.env.BLOCKCHAIN_INDEXER_WS_RECONNECT_BASE_MS ?? '1000',
10,
),
wsReconnectMaxDelayMs: parseInt(
process.env.BLOCKCHAIN_INDEXER_WS_RECONNECT_MAX_MS ?? '30000',
10,
),
// In-memory event buffer
eventBufferSize: parseInt(
process.env.BLOCKCHAIN_INDEXER_BUFFER_SIZE ?? '10000',
10,
),
eventBufferTtlMs: parseInt(
process.env.BLOCKCHAIN_INDEXER_BUFFER_TTL_MS ?? '60000',
10,
),
// Batched persistence
batchFlushIntervalMs: parseInt(
process.env.BLOCKCHAIN_INDEXER_BATCH_FLUSH_MS ?? '1000',
10,
),
batchMaxSize: parseInt(
process.env.BLOCKCHAIN_INDEXER_BATCH_MAX_SIZE ?? '1000',
10,
),
// Retention policy
retentionDays: parseInt(
process.env.BLOCKCHAIN_INDEXER_RETENTION_DAYS ?? '90',
10,
),
},

rateLimit: {
strategy: process.env.RATE_LIMIT_STRATEGY ?? 'sliding_window',
defaultWindowSize: parseInt(process.env.RATE_LIMIT_DEFAULT_WINDOW ?? '60', 10),
Expand Down
8 changes: 8 additions & 0 deletions src/config/env.validation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ export const envValidationSchema = Joi.object({
BLOCKCHAIN_INDEXER_MAX_BACKFILL_LEDGERS: Joi.number().default(1000),
BLOCKCHAIN_INDEXER_STREAM_TTL_SECS: Joi.number().default(300),
BLOCKCHAIN_INDEXER_INCLUDE_FAILED: Joi.boolean().default(true),
BLOCKCHAIN_INDEXER_PAGE_LIMIT: Joi.number().default(200),
BLOCKCHAIN_INDEXER_WS_RECONNECT_BASE_MS: Joi.number().default(1000),
BLOCKCHAIN_INDEXER_WS_RECONNECT_MAX_MS: Joi.number().default(30000),
BLOCKCHAIN_INDEXER_BUFFER_SIZE: Joi.number().default(10000),
BLOCKCHAIN_INDEXER_BUFFER_TTL_MS: Joi.number().default(60000),
BLOCKCHAIN_INDEXER_BATCH_FLUSH_MS: Joi.number().default(1000),
BLOCKCHAIN_INDEXER_BATCH_MAX_SIZE: Joi.number().default(1000),
BLOCKCHAIN_INDEXER_RETENTION_DAYS: Joi.number().default(90),

// Rate limiting
RATE_LIMIT_STRATEGY: Joi.string()
Expand Down
Loading
Loading