@almadar/server 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/deepagent/__tests__/memory.test.d.ts +6 -0
- package/dist/deepagent/__tests__/memory.test.d.ts.map +1 -0
- package/dist/deepagent/__tests__/session.test.d.ts +6 -0
- package/dist/deepagent/__tests__/session.test.d.ts.map +1 -0
- package/dist/deepagent/__tests__/skill-agent.test.d.ts +6 -0
- package/dist/deepagent/__tests__/skill-agent.test.d.ts.map +1 -0
- package/dist/deepagent/memory.d.ts +17 -0
- package/dist/deepagent/memory.d.ts.map +1 -0
- package/dist/deepagent/session.d.ts +17 -0
- package/dist/deepagent/session.d.ts.map +1 -0
- package/dist/deepagent/skill-agent.d.ts +22 -0
- package/dist/deepagent/skill-agent.d.ts.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/db.d.ts +36 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/debugRouter.d.ts +20 -0
- package/dist/lib/debugRouter.d.ts.map +1 -0
- package/dist/lib/env.d.ts +16 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/eventBus.d.ts +46 -0
- package/dist/lib/eventBus.d.ts.map +1 -0
- package/dist/lib/eventBusTransport.d.ts +143 -0
- package/dist/lib/eventBusTransport.d.ts.map +1 -0
- package/dist/lib/eventPersistence.d.ts +151 -0
- package/dist/lib/eventPersistence.d.ts.map +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/logger.d.ts +7 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/serviceDiscovery.d.ts +168 -0
- package/dist/lib/serviceDiscovery.d.ts.map +1 -0
- package/dist/lib/websocket.d.ts +41 -0
- package/dist/lib/websocket.d.ts.map +1 -0
- package/dist/middleware/__tests__/multi-user.test.d.ts +6 -0
- package/dist/middleware/__tests__/multi-user.test.d.ts.map +1 -0
- package/dist/middleware/authenticateFirebase.d.ts +4 -0
- package/dist/middleware/authenticateFirebase.d.ts.map +1 -0
- package/dist/middleware/errorHandler.d.ts +53 -0
- package/dist/middleware/errorHandler.d.ts.map +1 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/multi-user.d.ts +34 -0
- package/dist/middleware/multi-user.d.ts.map +1 -0
- package/dist/middleware/validation.d.ts +15 -0
- package/dist/middleware/validation.d.ts.map +1 -0
- package/dist/routes/__tests__/observability.test.d.ts +6 -0
- package/dist/routes/__tests__/observability.test.d.ts.map +1 -0
- package/dist/services/DataService.d.ts +69 -0
- package/dist/services/DataService.d.ts.map +1 -0
- package/dist/services/MockDataService.d.ts +109 -0
- package/dist/services/MockDataService.d.ts.map +1 -0
- package/dist/services/index.d.ts +8 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/stores/ChangeSetStore.d.ts +24 -0
- package/dist/stores/ChangeSetStore.d.ts.map +1 -0
- package/dist/stores/SchemaProtectionService.d.ts +23 -0
- package/dist/stores/SchemaProtectionService.d.ts.map +1 -0
- package/dist/stores/SchemaStore.d.ts +52 -0
- package/dist/stores/SchemaStore.d.ts.map +1 -0
- package/dist/stores/SnapshotStore.d.ts +26 -0
- package/dist/stores/SnapshotStore.d.ts.map +1 -0
- package/dist/stores/ValidationStore.d.ts +19 -0
- package/dist/stores/ValidationStore.d.ts.map +1 -0
- package/dist/stores/firestoreFormat.d.ts +21 -0
- package/dist/stores/firestoreFormat.d.ts.map +1 -0
- package/dist/stores/index.d.ts +14 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/queryFilters.d.ts +77 -0
- package/dist/utils/queryFilters.d.ts.map +1 -0
- package/dist/websocket/__tests__/state-sync.test.d.ts +6 -0
- package/dist/websocket/__tests__/state-sync.test.d.ts.map +1 -0
- package/dist/websocket/state-sync.d.ts +39 -0
- package/dist/websocket/state-sync.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.test.d.ts","sourceRoot":"","sources":["../../../src/deepagent/__tests__/memory.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.test.d.ts","sourceRoot":"","sources":["../../../src/deepagent/__tests__/session.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-agent.test.d.ts","sourceRoot":"","sources":["../../../src/deepagent/__tests__/skill-agent.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Manager Singleton
|
|
3
|
+
*
|
|
4
|
+
* Provides Firestore-backed memory management for DeepAgent.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import { MemoryManager } from '@almadar/agent';
|
|
9
|
+
/**
|
|
10
|
+
* Get or create the MemoryManager singleton
|
|
11
|
+
*/
|
|
12
|
+
export declare function getMemoryManager(): MemoryManager;
|
|
13
|
+
/**
|
|
14
|
+
* Reset the MemoryManager (useful for testing)
|
|
15
|
+
*/
|
|
16
|
+
export declare function resetMemoryManager(): void;
|
|
17
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/deepagent/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAK/C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAehD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager Singleton
|
|
3
|
+
*
|
|
4
|
+
* Provides Firestore-backed session management with full GAP features.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import { SessionManager } from '@almadar/agent';
|
|
9
|
+
/**
|
|
10
|
+
* Get or create the SessionManager singleton
|
|
11
|
+
*/
|
|
12
|
+
export declare function getSessionManager(): SessionManager;
|
|
13
|
+
/**
|
|
14
|
+
* Reset the SessionManager (useful for testing)
|
|
15
|
+
*/
|
|
16
|
+
export declare function resetSessionManager(): void;
|
|
17
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/deepagent/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAchD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAclD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Agent Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates DeepAgent instances with full GAP feature integration.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import { type SkillAgentOptions, type SkillAgentResult } from '@almadar/agent';
|
|
9
|
+
import { getMemoryManager } from './memory.js';
|
|
10
|
+
import { getSessionManager } from './session.js';
|
|
11
|
+
interface ServerSkillAgentOptions extends SkillAgentOptions {
|
|
12
|
+
/** User ID from Firebase Auth */
|
|
13
|
+
userId: string;
|
|
14
|
+
/** App/Project ID for context */
|
|
15
|
+
appId?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a skill agent with full server-side GAP integration
|
|
19
|
+
*/
|
|
20
|
+
export declare function createServerSkillAgent(options: ServerSkillAgentOptions): Promise<SkillAgentResult>;
|
|
21
|
+
export { getMemoryManager, getSessionManager };
|
|
22
|
+
//# sourceMappingURL=skill-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-agent.d.ts","sourceRoot":"","sources":["../../src/deepagent/skill-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,UAAU,uBAAwB,SAAQ,iBAAiB;IACzD,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAsD3B;AAGD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @almadar/server - Shared server infrastructure for Almadar applications
|
|
3
|
+
*
|
|
4
|
+
* This package provides:
|
|
5
|
+
* - Database utilities (Firebase/Firestore)
|
|
6
|
+
* - Event bus for cross-trait communication
|
|
7
|
+
* - Express middleware (auth, error handling, validation)
|
|
8
|
+
* - Data services (mock and production)
|
|
9
|
+
* - Query filter utilities
|
|
10
|
+
*
|
|
11
|
+
* @packageDocumentation
|
|
12
|
+
*/
|
|
13
|
+
export { env } from './lib/env.js';
|
|
14
|
+
export { logger } from './lib/logger.js';
|
|
15
|
+
export { EventBus, serverEventBus, emitEntityEvent, type EventLogEntry } from './lib/eventBus.js';
|
|
16
|
+
export { DistributedEventBus, InMemoryTransport, RedisTransport, type IEventBusTransport, type TransportMessage, type TransportReceiver, type RedisTransportOptions, } from './lib/eventBusTransport.js';
|
|
17
|
+
export { EventPersistence, InMemoryEventStore, type PersistedEvent, type EventQuery, type EventPersistenceOptions, type IEventStore, } from './lib/eventPersistence.js';
|
|
18
|
+
export { debugEventsRouter } from './lib/debugRouter.js';
|
|
19
|
+
export { initializeFirebase, getFirestore, getAuth, admin, db } from './lib/db.js';
|
|
20
|
+
export { setupEventBroadcast, getWebSocketServer, closeWebSocketServer, getConnectedClientCount, } from './lib/websocket.js';
|
|
21
|
+
export { errorHandler, notFoundHandler, asyncHandler, AppError, NotFoundError, ValidationError, UnauthorizedError, ForbiddenError, ConflictError, } from './middleware/errorHandler.js';
|
|
22
|
+
export { validateBody, validateQuery, validateParams } from './middleware/validation.js';
|
|
23
|
+
export { authenticateFirebase } from './middleware/authenticateFirebase.js';
|
|
24
|
+
export { mockDataService, MockDataService, type FieldSchema, type EntitySchema, } from './services/MockDataService.js';
|
|
25
|
+
export { dataService, seedMockData, type DataService, type EntitySeedConfig, type PaginationOptions, type PaginatedResult, } from './services/DataService.js';
|
|
26
|
+
export { toFirestoreFormat, fromFirestoreFormat, SchemaStore, SnapshotStore, ChangeSetStore, ValidationStore, SchemaProtectionService, } from './stores/index.js';
|
|
27
|
+
export { parseQueryFilters, applyFiltersToQuery, extractPaginationParams, type ParsedFilter, type FirestoreWhereFilterOp, type PaginationParams, } from './utils/queryFilters.js';
|
|
28
|
+
export { getMemoryManager, resetMemoryManager, } from './deepagent/memory.js';
|
|
29
|
+
export { getSessionManager, resetSessionManager, } from './deepagent/session.js';
|
|
30
|
+
export { createServerSkillAgent, getMemoryManager as getAgentMemoryManager, getSessionManager as getAgentSessionManager, } from './deepagent/skill-agent.js';
|
|
31
|
+
export { multiUserMiddleware, verifyFirebaseAuth, } from './middleware/multi-user.js';
|
|
32
|
+
export { setupStateSyncWebSocket } from './websocket/state-sync.js';
|
|
33
|
+
export { ServiceDiscovery, InMemoryServiceRegistry, type ServiceRegistration, type ServiceRegistryOptions, type IServiceRegistry, } from './lib/serviceDiscovery.js';
|
|
34
|
+
export { default as observabilityRouter } from './routes/observability.js';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,WAAW,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAG5E,OAAO,EACL,eAAe,EACf,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,gBAAgB,IAAI,qBAAqB,EACzC,iBAAiB,IAAI,sBAAsB,GAC5C,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,GACtB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/lib/db.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Accessors & Initialization
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - `initializeFirebase()` — convenience function to init Firebase from env vars
|
|
6
|
+
* - `getFirestore()`, `getAuth()` — accessors for Firebase services
|
|
7
|
+
* - `db` — lazy Firestore proxy (no eager initialization)
|
|
8
|
+
*
|
|
9
|
+
* The consuming application MUST call `initializeFirebase()` or
|
|
10
|
+
* `admin.initializeApp()` before using any Firebase-dependent features.
|
|
11
|
+
*/
|
|
12
|
+
import admin from 'firebase-admin';
|
|
13
|
+
/**
|
|
14
|
+
* Initialize Firebase Admin SDK from environment variables.
|
|
15
|
+
*
|
|
16
|
+
* Reads: FIREBASE_PROJECT_ID, FIREBASE_CLIENT_EMAIL, FIREBASE_PRIVATE_KEY,
|
|
17
|
+
* FIREBASE_SERVICE_ACCOUNT_PATH, FIRESTORE_EMULATOR_HOST
|
|
18
|
+
*
|
|
19
|
+
* Safe to call multiple times — returns existing app if already initialized.
|
|
20
|
+
*/
|
|
21
|
+
export declare function initializeFirebase(): admin.app.App;
|
|
22
|
+
/**
|
|
23
|
+
* Get Firestore instance from the pre-initialized Firebase app.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getFirestore(): admin.firestore.Firestore;
|
|
26
|
+
/**
|
|
27
|
+
* Get Firebase Auth instance from the pre-initialized Firebase app.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getAuth(): admin.auth.Auth;
|
|
30
|
+
export { admin };
|
|
31
|
+
/**
|
|
32
|
+
* Lazy Firestore proxy — resolves on first property access, not at import time.
|
|
33
|
+
* This prevents the "Firebase not initialized" error during module loading.
|
|
34
|
+
*/
|
|
35
|
+
export declare const db: admin.firestore.Firestore;
|
|
36
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/lib/db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEnC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAwDlD;AAgBD;;GAEG;AACH,wBAAgB,YAAY,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,CAExD;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAEzC;AAGD,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,EAAE,2BAMb,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Events Router
|
|
3
|
+
*
|
|
4
|
+
* Provides diagnostic endpoints for inspecting the server EventBus.
|
|
5
|
+
* Only active when NODE_ENV=development.
|
|
6
|
+
*
|
|
7
|
+
* Endpoints:
|
|
8
|
+
* GET /event-log - Recent emitted events with listener counts
|
|
9
|
+
* DELETE /event-log - Clear the event log
|
|
10
|
+
* GET /listeners - Registered listener counts per event
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
import { Router } from 'express';
|
|
15
|
+
/**
|
|
16
|
+
* Creates an Express router with debug endpoints for the server EventBus.
|
|
17
|
+
* Returns a no-op router in production (no routes registered).
|
|
18
|
+
*/
|
|
19
|
+
export declare function debugEventsRouter(): Router;
|
|
20
|
+
//# sourceMappingURL=debugRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugRouter.d.ts","sourceRoot":"","sources":["../../src/lib/debugRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAyB1C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const env: {
|
|
2
|
+
NODE_ENV: "development" | "production" | "test";
|
|
3
|
+
PORT: number;
|
|
4
|
+
CORS_ORIGIN: string | string[];
|
|
5
|
+
API_PREFIX: string;
|
|
6
|
+
USE_MOCK_DATA: boolean;
|
|
7
|
+
DATABASE_URL?: string | undefined;
|
|
8
|
+
FIREBASE_PROJECT_ID?: string | undefined;
|
|
9
|
+
FIREBASE_CLIENT_EMAIL?: string | undefined;
|
|
10
|
+
FIREBASE_PRIVATE_KEY?: string | undefined;
|
|
11
|
+
FIREBASE_SERVICE_ACCOUNT_PATH?: string | undefined;
|
|
12
|
+
FIRESTORE_EMULATOR_HOST?: string | undefined;
|
|
13
|
+
FIREBASE_AUTH_EMULATOR_HOST?: string | undefined;
|
|
14
|
+
MOCK_SEED?: number | undefined;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/lib/env.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,GAAG;;;;;;;;;;;;;;CAAc,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server EventBus - Singleton for server-side cross-trait communication
|
|
3
|
+
*
|
|
4
|
+
* This EventBus enables:
|
|
5
|
+
* - Server-side trait event emission after CRUD operations
|
|
6
|
+
* - Server-side trait listeners responding to events
|
|
7
|
+
* - Cross-client event broadcast via WebSocket
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
type EventHandler = (payload: unknown, meta?: Record<string, unknown>) => void;
|
|
12
|
+
export interface EventLogEntry {
|
|
13
|
+
event: string;
|
|
14
|
+
payload: unknown;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
listenerCount: number;
|
|
17
|
+
wildcardListenerCount: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Simple EventBus implementation for server-side events
|
|
21
|
+
*/
|
|
22
|
+
export declare class EventBus {
|
|
23
|
+
private handlers;
|
|
24
|
+
private debug;
|
|
25
|
+
private eventLog;
|
|
26
|
+
constructor(options?: {
|
|
27
|
+
debug?: boolean;
|
|
28
|
+
});
|
|
29
|
+
on(event: string, handler: EventHandler): () => void;
|
|
30
|
+
off(event: string, handler: EventHandler): void;
|
|
31
|
+
emit(event: string, payload?: unknown, meta?: Record<string, unknown>): void;
|
|
32
|
+
getRecentEvents(limit?: number): EventLogEntry[];
|
|
33
|
+
clearEventLog(): void;
|
|
34
|
+
getListenerCounts(): Record<string, number>;
|
|
35
|
+
clear(): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Singleton EventBus instance for server-side event communication.
|
|
39
|
+
*/
|
|
40
|
+
export declare const serverEventBus: EventBus;
|
|
41
|
+
/**
|
|
42
|
+
* Type-safe event emission helper
|
|
43
|
+
*/
|
|
44
|
+
export declare function emitEntityEvent(entityType: string, action: 'CREATED' | 'UPDATED' | 'DELETED', payload: Record<string, unknown>): void;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=eventBus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../../src/lib/eventBus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAID;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;IAIzC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAYpD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAI/C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAgD5E,eAAe,CAAC,KAAK,SAAK,GAAG,aAAa,EAAE;IAI5C,aAAa,IAAI,IAAI;IAIrB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ3C,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAEzB,CAAC;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAGN"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventBus Transport Layer — Pluggable backends for distributed event communication
|
|
3
|
+
*
|
|
4
|
+
* Transports enable emit/listen to work across processes:
|
|
5
|
+
* - InMemoryTransport: Default, same-process (no-op relay)
|
|
6
|
+
* - RedisTransport: Redis pub/sub for cross-process communication
|
|
7
|
+
*
|
|
8
|
+
* The DistributedEventBus wraps the existing EventBus and relays events
|
|
9
|
+
* through a transport. Local listeners still fire immediately; the transport
|
|
10
|
+
* handles cross-process delivery.
|
|
11
|
+
*
|
|
12
|
+
* @packageDocumentation
|
|
13
|
+
*/
|
|
14
|
+
import { type EventLogEntry } from './eventBus.js';
|
|
15
|
+
/**
|
|
16
|
+
* Message shape sent over the transport wire.
|
|
17
|
+
*/
|
|
18
|
+
export interface TransportMessage {
|
|
19
|
+
event: string;
|
|
20
|
+
payload: unknown;
|
|
21
|
+
meta?: Record<string, unknown>;
|
|
22
|
+
/** Source instance ID to prevent echo loops */
|
|
23
|
+
sourceId: string;
|
|
24
|
+
timestamp: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Callback invoked when a message arrives from another process.
|
|
28
|
+
*/
|
|
29
|
+
export type TransportReceiver = (message: TransportMessage) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Pluggable transport interface for cross-process event delivery.
|
|
32
|
+
*/
|
|
33
|
+
export interface IEventBusTransport {
|
|
34
|
+
/** Publish a message to the transport */
|
|
35
|
+
publish(message: TransportMessage): Promise<void>;
|
|
36
|
+
/** Subscribe to incoming messages from other processes */
|
|
37
|
+
subscribe(receiver: TransportReceiver): Promise<void>;
|
|
38
|
+
/** Unsubscribe and clean up resources */
|
|
39
|
+
close(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* No-op transport for single-process mode.
|
|
43
|
+
* Events stay in the local EventBus only.
|
|
44
|
+
*/
|
|
45
|
+
export declare class InMemoryTransport implements IEventBusTransport {
|
|
46
|
+
publish(): Promise<void>;
|
|
47
|
+
subscribe(): Promise<void>;
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Options for RedisTransport.
|
|
52
|
+
*/
|
|
53
|
+
export interface RedisTransportOptions {
|
|
54
|
+
/** Redis channel name for event relay (default: 'almadar:events') */
|
|
55
|
+
channel?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Publish function — sends serialized message to Redis channel.
|
|
58
|
+
* This is injected so we don't depend on a specific Redis client library.
|
|
59
|
+
*/
|
|
60
|
+
publishFn: (channel: string, message: string) => Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Subscribe function — registers a callback for messages on a Redis channel.
|
|
63
|
+
* This is injected so we don't depend on a specific Redis client library.
|
|
64
|
+
*/
|
|
65
|
+
subscribeFn: (channel: string, callback: (message: string) => void) => Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Unsubscribe/cleanup function.
|
|
68
|
+
*/
|
|
69
|
+
closeFn?: () => Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Redis pub/sub transport for cross-process event delivery.
|
|
73
|
+
*
|
|
74
|
+
* Uses dependency-injected publish/subscribe functions so the transport
|
|
75
|
+
* is not coupled to any specific Redis client library (ioredis, redis, etc.).
|
|
76
|
+
*
|
|
77
|
+
* Usage with ioredis:
|
|
78
|
+
* ```typescript
|
|
79
|
+
* import Redis from 'ioredis';
|
|
80
|
+
* const pub = new Redis(process.env.REDIS_URL);
|
|
81
|
+
* const sub = new Redis(process.env.REDIS_URL);
|
|
82
|
+
*
|
|
83
|
+
* const transport = new RedisTransport({
|
|
84
|
+
* publishFn: (ch, msg) => pub.publish(ch, msg).then(() => {}),
|
|
85
|
+
* subscribeFn: (ch, cb) => { sub.subscribe(ch); sub.on('message', (_, msg) => cb(msg)); return Promise.resolve(); },
|
|
86
|
+
* closeFn: async () => { await pub.quit(); await sub.quit(); },
|
|
87
|
+
* });
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare class RedisTransport implements IEventBusTransport {
|
|
91
|
+
private channel;
|
|
92
|
+
private publishFn;
|
|
93
|
+
private subscribeFn;
|
|
94
|
+
private closeFn;
|
|
95
|
+
constructor(options: RedisTransportOptions);
|
|
96
|
+
publish(message: TransportMessage): Promise<void>;
|
|
97
|
+
subscribe(receiver: TransportReceiver): Promise<void>;
|
|
98
|
+
close(): Promise<void>;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* DistributedEventBus wraps the existing EventBus and relays events
|
|
102
|
+
* through a pluggable transport for cross-process communication.
|
|
103
|
+
*
|
|
104
|
+
* - Local emit → fires local listeners + publishes to transport
|
|
105
|
+
* - Transport message received → fires local listeners (skips re-publish)
|
|
106
|
+
*
|
|
107
|
+
* Drop-in replacement for EventBus — same API, same singleton pattern.
|
|
108
|
+
*/
|
|
109
|
+
export declare class DistributedEventBus {
|
|
110
|
+
private localBus;
|
|
111
|
+
private transport;
|
|
112
|
+
private instanceId;
|
|
113
|
+
private isRelaying;
|
|
114
|
+
constructor(options?: {
|
|
115
|
+
debug?: boolean;
|
|
116
|
+
transport?: IEventBusTransport;
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* Initialize the transport subscription. Call once at startup.
|
|
120
|
+
*/
|
|
121
|
+
connect(): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Emit an event locally and publish to transport for other processes.
|
|
124
|
+
*/
|
|
125
|
+
emit(event: string, payload?: unknown, meta?: Record<string, unknown>): void;
|
|
126
|
+
/** Subscribe to an event */
|
|
127
|
+
on(event: string, handler: (payload: unknown, meta?: Record<string, unknown>) => void): () => void;
|
|
128
|
+
/** Unsubscribe from an event */
|
|
129
|
+
off(event: string, handler: (payload: unknown, meta?: Record<string, unknown>) => void): void;
|
|
130
|
+
/** Get recent events (dev diagnostics) */
|
|
131
|
+
getRecentEvents(limit?: number): EventLogEntry[];
|
|
132
|
+
/** Clear event log */
|
|
133
|
+
clearEventLog(): void;
|
|
134
|
+
/** Get listener counts */
|
|
135
|
+
getListenerCounts(): Record<string, number>;
|
|
136
|
+
/** Clear all listeners and log */
|
|
137
|
+
clear(): void;
|
|
138
|
+
/** Disconnect transport */
|
|
139
|
+
disconnect(): Promise<void>;
|
|
140
|
+
/** Get the instance ID (for debugging) */
|
|
141
|
+
getInstanceId(): string;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=eventBusTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventBusTransport.d.ts","sourceRoot":"","sources":["../../src/lib/eventBusTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Persistence Layer — Optional durable event storage for replay and debugging
|
|
3
|
+
*
|
|
4
|
+
* Wraps the EventBus to persist emitted events. Supports:
|
|
5
|
+
* - In-memory storage (default, for development)
|
|
6
|
+
* - Configurable retention (TTL-based cleanup)
|
|
7
|
+
* - Replay API: query events by name, time range, or source
|
|
8
|
+
* - Required for saga compensation and distributed debugging
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
/** Persisted event record */
|
|
13
|
+
export interface PersistedEvent {
|
|
14
|
+
/** Unique event ID */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Event name (e.g., 'LLM_RESPONSE') */
|
|
17
|
+
eventName: string;
|
|
18
|
+
/** Event payload */
|
|
19
|
+
payload: unknown;
|
|
20
|
+
/** Source orbital/service that emitted this event */
|
|
21
|
+
source: string;
|
|
22
|
+
/** Timestamp when event was emitted */
|
|
23
|
+
timestamp: number;
|
|
24
|
+
/** Trace ID for distributed tracing correlation */
|
|
25
|
+
traceId: string;
|
|
26
|
+
/** Optional metadata */
|
|
27
|
+
meta?: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
/** Query filters for replaying events */
|
|
30
|
+
export interface EventQuery {
|
|
31
|
+
/** Filter by event name (exact match) */
|
|
32
|
+
eventName?: string;
|
|
33
|
+
/** Filter by source orbital */
|
|
34
|
+
source?: string;
|
|
35
|
+
/** Filter by trace ID */
|
|
36
|
+
traceId?: string;
|
|
37
|
+
/** Events after this timestamp */
|
|
38
|
+
after?: number;
|
|
39
|
+
/** Events before this timestamp */
|
|
40
|
+
before?: number;
|
|
41
|
+
/** Maximum number of events to return */
|
|
42
|
+
limit?: number;
|
|
43
|
+
/** Sort order */
|
|
44
|
+
order?: 'asc' | 'desc';
|
|
45
|
+
}
|
|
46
|
+
/** Options for the event persistence layer */
|
|
47
|
+
export interface EventPersistenceOptions {
|
|
48
|
+
/** Whether persistence is enabled (default: true) */
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
/** TTL in milliseconds for event retention (default: 24 hours) */
|
|
51
|
+
retentionMs?: number;
|
|
52
|
+
/** Maximum events to store (default: 10000) */
|
|
53
|
+
maxEvents?: number;
|
|
54
|
+
/** Cleanup interval in milliseconds (default: 5 minutes) */
|
|
55
|
+
cleanupIntervalMs?: number;
|
|
56
|
+
/** Default source identifier */
|
|
57
|
+
defaultSource?: string;
|
|
58
|
+
}
|
|
59
|
+
/** Storage backend interface */
|
|
60
|
+
export interface IEventStore {
|
|
61
|
+
/** Persist an event */
|
|
62
|
+
store(event: PersistedEvent): Promise<void>;
|
|
63
|
+
/** Query events */
|
|
64
|
+
query(filters: EventQuery): Promise<PersistedEvent[]>;
|
|
65
|
+
/** Get a single event by ID */
|
|
66
|
+
get(id: string): Promise<PersistedEvent | null>;
|
|
67
|
+
/** Delete events older than timestamp */
|
|
68
|
+
deleteOlderThan(timestamp: number): Promise<number>;
|
|
69
|
+
/** Get total event count */
|
|
70
|
+
count(): Promise<number>;
|
|
71
|
+
/** Clear all stored events */
|
|
72
|
+
clear(): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* In-memory event store for development and testing.
|
|
76
|
+
*/
|
|
77
|
+
export declare class InMemoryEventStore implements IEventStore {
|
|
78
|
+
private events;
|
|
79
|
+
private index;
|
|
80
|
+
store(event: PersistedEvent): Promise<void>;
|
|
81
|
+
query(filters: EventQuery): Promise<PersistedEvent[]>;
|
|
82
|
+
get(id: string): Promise<PersistedEvent | null>;
|
|
83
|
+
deleteOlderThan(timestamp: number): Promise<number>;
|
|
84
|
+
count(): Promise<number>;
|
|
85
|
+
clear(): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Event persistence layer that can be attached to an EventBus.
|
|
89
|
+
*
|
|
90
|
+
* Usage:
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const persistence = new EventPersistence({ retentionMs: 3600000 });
|
|
93
|
+
* persistence.startCleanup();
|
|
94
|
+
*
|
|
95
|
+
* // Persist an event
|
|
96
|
+
* await persistence.persist('LLM_RESPONSE', { content: '...' }, { source: 'llm-service' });
|
|
97
|
+
*
|
|
98
|
+
* // Replay events
|
|
99
|
+
* const events = await persistence.replay({ eventName: 'LLM_RESPONSE', limit: 10 });
|
|
100
|
+
*
|
|
101
|
+
* // Stop cleanup on shutdown
|
|
102
|
+
* persistence.stopCleanup();
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare class EventPersistence {
|
|
106
|
+
private store;
|
|
107
|
+
private options;
|
|
108
|
+
private cleanupTimer;
|
|
109
|
+
constructor(options?: EventPersistenceOptions, store?: IEventStore);
|
|
110
|
+
/**
|
|
111
|
+
* Persist an event.
|
|
112
|
+
*/
|
|
113
|
+
persist(eventName: string, payload: unknown, meta?: {
|
|
114
|
+
source?: string;
|
|
115
|
+
traceId?: string;
|
|
116
|
+
[key: string]: unknown;
|
|
117
|
+
}): Promise<PersistedEvent>;
|
|
118
|
+
/**
|
|
119
|
+
* Replay events matching the query filters.
|
|
120
|
+
*/
|
|
121
|
+
replay(query: EventQuery): Promise<PersistedEvent[]>;
|
|
122
|
+
/**
|
|
123
|
+
* Get a single event by ID.
|
|
124
|
+
*/
|
|
125
|
+
getEvent(id: string): Promise<PersistedEvent | null>;
|
|
126
|
+
/**
|
|
127
|
+
* Get event count.
|
|
128
|
+
*/
|
|
129
|
+
getEventCount(): Promise<number>;
|
|
130
|
+
/**
|
|
131
|
+
* Run cleanup — delete events older than retention period.
|
|
132
|
+
*/
|
|
133
|
+
cleanup(): Promise<number>;
|
|
134
|
+
/**
|
|
135
|
+
* Start periodic cleanup timer.
|
|
136
|
+
*/
|
|
137
|
+
startCleanup(): void;
|
|
138
|
+
/**
|
|
139
|
+
* Stop periodic cleanup timer.
|
|
140
|
+
*/
|
|
141
|
+
stopCleanup(): void;
|
|
142
|
+
/**
|
|
143
|
+
* Clear all persisted events.
|
|
144
|
+
*/
|
|
145
|
+
clear(): Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Get the underlying store (for testing or custom queries).
|
|
148
|
+
*/
|
|
149
|
+
getStore(): IEventStore;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=eventPersistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventPersistence.d.ts","sourceRoot":"","sources":["../../src/lib/eventPersistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,yCAAyC;AACzC,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,mBAAmB;IACnB,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACtD,+BAA+B;IAC/B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,yCAAyC;IACzC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,4BAA4B;IAC5B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,8BAA8B;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD;;GAEG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAA0C;IAEjD,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgCrD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI/C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAanD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,YAAY,CAA+C;gBAEvD,OAAO,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,EAAE,WAAW;IAWlE;;OAEG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACnE,OAAO,CAAC,cAAc,CAAC;IAkB1B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI1D;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI1D;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAKhC;;OAEG;IACH,YAAY,IAAI,IAAI;IASpB;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,QAAQ,IAAI,WAAW;CAGxB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { env } from './env.js';
|
|
2
|
+
export { getFirestore, getAuth, admin } from './db.js';
|
|
3
|
+
export { logger } from './logger.js';
|
|
4
|
+
export { serverEventBus, emitEntityEvent } from './eventBus.js';
|
|
5
|
+
export { setupEventBroadcast, getWebSocketServer, closeWebSocketServer, getConnectedClientCount, } from './websocket.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const logger: {
|
|
2
|
+
debug: (message: string, meta?: unknown) => void;
|
|
3
|
+
info: (message: string, meta?: unknown) => void;
|
|
4
|
+
warn: (message: string, meta?: unknown) => void;
|
|
5
|
+
error: (message: string, meta?: unknown) => void;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,MAAM;qBACA,MAAM,SAAS,OAAO;oBAKvB,MAAM,SAAS,OAAO;oBAKtB,MAAM,SAAS,OAAO;qBAKrB,MAAM,SAAS,OAAO;CAKxC,CAAC"}
|