digitaltwin-core 0.1.0
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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/components/assets_manager.d.ts +384 -0
- package/dist/components/assets_manager.d.ts.map +1 -0
- package/dist/components/assets_manager.js +637 -0
- package/dist/components/assets_manager.js.map +1 -0
- package/dist/components/collector.d.ts +62 -0
- package/dist/components/collector.d.ts.map +1 -0
- package/dist/components/collector.js +80 -0
- package/dist/components/collector.js.map +1 -0
- package/dist/components/global_assets_handler.d.ts +63 -0
- package/dist/components/global_assets_handler.d.ts.map +1 -0
- package/dist/components/global_assets_handler.js +127 -0
- package/dist/components/global_assets_handler.js.map +1 -0
- package/dist/components/handler.d.ts +33 -0
- package/dist/components/handler.d.ts.map +1 -0
- package/dist/components/handler.js +27 -0
- package/dist/components/handler.js.map +1 -0
- package/dist/components/harvester.d.ts +54 -0
- package/dist/components/harvester.d.ts.map +1 -0
- package/dist/components/harvester.js +253 -0
- package/dist/components/harvester.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/interfaces.d.ts +18 -0
- package/dist/components/interfaces.d.ts.map +1 -0
- package/dist/components/interfaces.js +2 -0
- package/dist/components/interfaces.js.map +1 -0
- package/dist/components/types.d.ts +47 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +2 -0
- package/dist/components/types.js.map +1 -0
- package/dist/database/adapters/knex_database_adapter.d.ts +47 -0
- package/dist/database/adapters/knex_database_adapter.d.ts.map +1 -0
- package/dist/database/adapters/knex_database_adapter.js +180 -0
- package/dist/database/adapters/knex_database_adapter.js.map +1 -0
- package/dist/database/database_adapter.d.ts +92 -0
- package/dist/database/database_adapter.d.ts.map +1 -0
- package/dist/database/database_adapter.js +6 -0
- package/dist/database/database_adapter.js.map +1 -0
- package/dist/engine/digital_twin_engine.d.ts +237 -0
- package/dist/engine/digital_twin_engine.d.ts.map +1 -0
- package/dist/engine/digital_twin_engine.js +574 -0
- package/dist/engine/digital_twin_engine.js.map +1 -0
- package/dist/engine/endpoints.d.ts +7 -0
- package/dist/engine/endpoints.d.ts.map +1 -0
- package/dist/engine/endpoints.js +18 -0
- package/dist/engine/endpoints.js.map +1 -0
- package/dist/engine/events.d.ts +13 -0
- package/dist/engine/events.d.ts.map +1 -0
- package/dist/engine/events.js +11 -0
- package/dist/engine/events.js.map +1 -0
- package/dist/engine/initializer.d.ts +8 -0
- package/dist/engine/initializer.d.ts.map +1 -0
- package/dist/engine/initializer.js +23 -0
- package/dist/engine/initializer.js.map +1 -0
- package/dist/engine/queue_manager.d.ts +78 -0
- package/dist/engine/queue_manager.d.ts.map +1 -0
- package/dist/engine/queue_manager.js +167 -0
- package/dist/engine/queue_manager.js.map +1 -0
- package/dist/engine/scheduler.d.ts +30 -0
- package/dist/engine/scheduler.d.ts.map +1 -0
- package/dist/engine/scheduler.js +378 -0
- package/dist/engine/scheduler.js.map +1 -0
- package/dist/env/env.d.ts +25 -0
- package/dist/env/env.d.ts.map +1 -0
- package/dist/env/env.js +55 -0
- package/dist/env/env.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/storage/adapters/local_storage_service.d.ts +29 -0
- package/dist/storage/adapters/local_storage_service.d.ts.map +1 -0
- package/dist/storage/adapters/local_storage_service.js +50 -0
- package/dist/storage/adapters/local_storage_service.js.map +1 -0
- package/dist/storage/adapters/ovh_storage_service.d.ts +32 -0
- package/dist/storage/adapters/ovh_storage_service.d.ts.map +1 -0
- package/dist/storage/adapters/ovh_storage_service.js +70 -0
- package/dist/storage/adapters/ovh_storage_service.js.map +1 -0
- package/dist/storage/storage_factory.d.ts +14 -0
- package/dist/storage/storage_factory.d.ts.map +1 -0
- package/dist/storage/storage_factory.js +36 -0
- package/dist/storage/storage_factory.js.map +1 -0
- package/dist/storage/storage_service.d.ts +26 -0
- package/dist/storage/storage_service.d.ts.map +1 -0
- package/dist/storage/storage_service.js +7 -0
- package/dist/storage/storage_service.js.map +1 -0
- package/dist/types/data_record.d.ts +17 -0
- package/dist/types/data_record.d.ts.map +1 -0
- package/dist/types/data_record.js +2 -0
- package/dist/types/data_record.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +35 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/map_to_data_record.d.ts +10 -0
- package/dist/utils/map_to_data_record.d.ts.map +1 -0
- package/dist/utils/map_to_data_record.js +21 -0
- package/dist/utils/map_to_data_record.js.map +1 -0
- package/dist/utils/servable_endpoint.d.ts +6 -0
- package/dist/utils/servable_endpoint.d.ts.map +1 -0
- package/dist/utils/servable_endpoint.js +15 -0
- package/dist/utils/servable_endpoint.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { DataRecord } from '../types/data_record.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structure used to store metadata about a data blob in the database.
|
|
4
|
+
*
|
|
5
|
+
* Extended to support asset-specific fields for AssetsManager components.
|
|
6
|
+
* These fields are optional and only used by AssetsManager instances.
|
|
7
|
+
*/
|
|
8
|
+
export interface MetadataRow {
|
|
9
|
+
/** Unique identifier of the data row */
|
|
10
|
+
id?: number;
|
|
11
|
+
/** Logical name of the data source (usually the collector name) */
|
|
12
|
+
name: string;
|
|
13
|
+
/** MIME type of the associated blob (e.g. 'application/json') */
|
|
14
|
+
type: string;
|
|
15
|
+
/** Path or URL where the blob is stored (resolved by the StorageService) */
|
|
16
|
+
url: string;
|
|
17
|
+
/** Timestamp indicating when the data was collected */
|
|
18
|
+
date: Date;
|
|
19
|
+
/** Human-readable description of the asset (AssetsManager only) */
|
|
20
|
+
description?: string;
|
|
21
|
+
/** Source URL for data provenance (AssetsManager only) */
|
|
22
|
+
source?: string;
|
|
23
|
+
/** ID of the user who owns this asset (AssetsManager only) */
|
|
24
|
+
owner_id?: string | null;
|
|
25
|
+
/** Original filename provided by the user (AssetsManager only) */
|
|
26
|
+
filename?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extended abstraction for the database layer with advanced querying capabilities.
|
|
30
|
+
*/
|
|
31
|
+
export declare abstract class DatabaseAdapter {
|
|
32
|
+
abstract save(meta: MetadataRow): Promise<DataRecord>;
|
|
33
|
+
abstract delete(id: string): Promise<void>;
|
|
34
|
+
abstract getById(id: string): Promise<DataRecord | undefined>;
|
|
35
|
+
abstract getLatestByName(name: string): Promise<DataRecord | undefined>;
|
|
36
|
+
abstract doesTableExists(name: string): Promise<boolean>;
|
|
37
|
+
abstract createTable(name: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Get the first (oldest) record for a given component name.
|
|
40
|
+
* @param name - The component name
|
|
41
|
+
* @returns The oldest DataRecord or undefined if none found
|
|
42
|
+
*/
|
|
43
|
+
abstract getFirstByName(name: string): Promise<DataRecord | undefined>;
|
|
44
|
+
/**
|
|
45
|
+
* Get records between two dates for a given component.
|
|
46
|
+
* @param name - The component name
|
|
47
|
+
* @param startDate - Start date (inclusive)
|
|
48
|
+
* @param endDate - End date (exclusive), optional
|
|
49
|
+
* @param limit - Maximum number of records to return, optional
|
|
50
|
+
* @returns Array of DataRecords matching the criteria
|
|
51
|
+
*/
|
|
52
|
+
abstract getByDateRange(name: string, startDate: Date, endDate?: Date, limit?: number): Promise<DataRecord[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Get records after a specific date for a given component.
|
|
55
|
+
* @param name - The component name
|
|
56
|
+
* @param afterDate - Date to search after (exclusive)
|
|
57
|
+
* @param limit - Maximum number of records to return
|
|
58
|
+
* @returns Array of DataRecords after the specified date
|
|
59
|
+
*/
|
|
60
|
+
abstract getAfterDate(name: string, afterDate: Date, limit?: number): Promise<DataRecord[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Get the latest record before a specific date for a given component.
|
|
63
|
+
* @param name - The component name
|
|
64
|
+
* @param beforeDate - Date to search before (exclusive)
|
|
65
|
+
* @returns The latest DataRecord before the date, or undefined if none found
|
|
66
|
+
*/
|
|
67
|
+
abstract getLatestBefore(name: string, beforeDate: Date): Promise<DataRecord | undefined>;
|
|
68
|
+
/**
|
|
69
|
+
* Get the latest N records before a specific date for a given component.
|
|
70
|
+
* @param name - The component name
|
|
71
|
+
* @param beforeDate - Date to search before (exclusive)
|
|
72
|
+
* @param limit - Number of records to return
|
|
73
|
+
* @returns Array of the latest DataRecords before the date
|
|
74
|
+
*/
|
|
75
|
+
abstract getLatestRecordsBefore(name: string, beforeDate: Date, limit: number): Promise<DataRecord[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Check if any records exist after a specific date for a given component.
|
|
78
|
+
* @param name - The component name
|
|
79
|
+
* @param afterDate - Date to check after (exclusive)
|
|
80
|
+
* @returns True if records exist after the date, false otherwise
|
|
81
|
+
*/
|
|
82
|
+
abstract hasRecordsAfterDate(name: string, afterDate: Date): Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* Count records for a given component within a date range.
|
|
85
|
+
* @param name - The component name
|
|
86
|
+
* @param startDate - Start date (inclusive)
|
|
87
|
+
* @param endDate - End date (exclusive), optional
|
|
88
|
+
* @returns Number of records in the range
|
|
89
|
+
*/
|
|
90
|
+
abstract countByDateRange(name: string, startDate: Date, endDate?: Date): Promise<number>;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=database_adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database_adapter.d.ts","sourceRoot":"","sources":["../../src/database/database_adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IACxB,wCAAwC;IACxC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAA;IACX,uDAAuD;IACvD,IAAI,EAAE,IAAI,CAAA;IAGV,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,8BAAsB,eAAe;IAGjC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACxD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAEtE;;;;;;;OAOG;IACH,QAAQ,CAAC,cAAc,CACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,EACf,OAAO,CAAC,EAAE,IAAI,EACd,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,EAAE,CAAC;IAExB;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,EACf,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,EAAE,CAAC;IAExB;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,IAAI,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAElC;;;;;;OAMG;IACH,QAAQ,CAAC,sBAAsB,CAC3B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,IAAI,EAChB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,EAAE,CAAC;IAExB;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CACxB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,GAChB,OAAO,CAAC,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,EACf,OAAO,CAAC,EAAE,IAAI,GACf,OAAO,CAAC,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database_adapter.js","sourceRoot":"","sources":["../../src/database/database_adapter.ts"],"names":[],"mappings":"AAgCA;;GAEG;AACH,MAAM,OAAgB,eAAe;CA8FpC"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { Collector } from '../components/collector.js';
|
|
2
|
+
import { Harvester } from '../components/harvester.js';
|
|
3
|
+
import { Handler } from '../components/handler.js';
|
|
4
|
+
import { AssetsManager } from '../components/assets_manager.js';
|
|
5
|
+
import { StorageService } from '../storage/storage_service.js';
|
|
6
|
+
import { DatabaseAdapter } from '../database/database_adapter.js';
|
|
7
|
+
import { ConnectionOptions } from 'bullmq';
|
|
8
|
+
import { LogLevel } from "../utils/logger.js";
|
|
9
|
+
import { QueueConfig } from './queue_manager.js';
|
|
10
|
+
/**
|
|
11
|
+
* Result of component validation
|
|
12
|
+
*/
|
|
13
|
+
export interface ComponentValidationResult {
|
|
14
|
+
/** Component name */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Component type */
|
|
17
|
+
type: 'collector' | 'harvester' | 'handler' | 'assets_manager';
|
|
18
|
+
/** Validation status */
|
|
19
|
+
valid: boolean;
|
|
20
|
+
/** Validation errors if any */
|
|
21
|
+
errors: string[];
|
|
22
|
+
/** Validation warnings if any */
|
|
23
|
+
warnings: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Overall validation result
|
|
27
|
+
*/
|
|
28
|
+
export interface ValidationResult {
|
|
29
|
+
/** Overall validation status */
|
|
30
|
+
valid: boolean;
|
|
31
|
+
/** Individual component results */
|
|
32
|
+
components: ComponentValidationResult[];
|
|
33
|
+
/** Engine-level errors */
|
|
34
|
+
engineErrors: string[];
|
|
35
|
+
/** Summary statistics */
|
|
36
|
+
summary: {
|
|
37
|
+
total: number;
|
|
38
|
+
valid: number;
|
|
39
|
+
invalid: number;
|
|
40
|
+
warnings: number;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Configuration options for the Digital Twin Engine
|
|
45
|
+
*
|
|
46
|
+
* @interface EngineOptions
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const options: EngineOptions = {
|
|
50
|
+
* storage: storageService,
|
|
51
|
+
* database: databaseAdapter,
|
|
52
|
+
* collectors: [myCollector],
|
|
53
|
+
* harvesters: [myHarvester],
|
|
54
|
+
* handlers: [myHandler],
|
|
55
|
+
* server: { port: 3000, host: 'localhost' },
|
|
56
|
+
* queues: {
|
|
57
|
+
* multiQueue: true,
|
|
58
|
+
* workers: { collectors: 2, harvesters: 1 }
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export interface EngineOptions {
|
|
64
|
+
/** Array of data collectors to register with the engine */
|
|
65
|
+
collectors?: Collector[];
|
|
66
|
+
/** Array of data harvesters to register with the engine */
|
|
67
|
+
harvesters?: Harvester[];
|
|
68
|
+
/** Array of request handlers to register with the engine */
|
|
69
|
+
handlers?: Handler[];
|
|
70
|
+
/** Array of assets managers to register with the engine */
|
|
71
|
+
assetsManagers?: AssetsManager[];
|
|
72
|
+
/** Storage service instance for persisting data (required) */
|
|
73
|
+
storage: StorageService;
|
|
74
|
+
/** Database adapter instance for data operations (required) */
|
|
75
|
+
database: DatabaseAdapter;
|
|
76
|
+
/** Redis connection options for queue management */
|
|
77
|
+
redis?: ConnectionOptions;
|
|
78
|
+
/** Queue configuration options */
|
|
79
|
+
queues?: {
|
|
80
|
+
/** Enable multi-queue mode (default: true) */
|
|
81
|
+
multiQueue?: boolean;
|
|
82
|
+
/** Worker configuration for different component types */
|
|
83
|
+
workers?: {
|
|
84
|
+
/** Number of collector workers (default: 1) */
|
|
85
|
+
collectors?: number;
|
|
86
|
+
/** Number of harvester workers (default: 1) */
|
|
87
|
+
harvesters?: number;
|
|
88
|
+
};
|
|
89
|
+
/** Additional queue configuration options */
|
|
90
|
+
options?: QueueConfig['queueOptions'];
|
|
91
|
+
};
|
|
92
|
+
/** HTTP server configuration */
|
|
93
|
+
server?: {
|
|
94
|
+
/** Server port (default: 3000) */
|
|
95
|
+
port: number;
|
|
96
|
+
/** Server host (default: '0.0.0.0') */
|
|
97
|
+
host?: string;
|
|
98
|
+
};
|
|
99
|
+
/** Logging configuration */
|
|
100
|
+
logging?: {
|
|
101
|
+
/** Log level (default: LogLevel.INFO) */
|
|
102
|
+
level: LogLevel;
|
|
103
|
+
/** Log format (default: 'text') */
|
|
104
|
+
format?: 'json' | 'text';
|
|
105
|
+
};
|
|
106
|
+
/** Dry run mode - validate configuration without persisting data (default: false) */
|
|
107
|
+
dryRun?: boolean;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Digital Twin Engine - Core orchestrator for collectors, harvesters, and handlers
|
|
111
|
+
*
|
|
112
|
+
* The engine manages the lifecycle of all components, sets up queues for processing,
|
|
113
|
+
* exposes HTTP endpoints, and handles the overall coordination of the digital twin system.
|
|
114
|
+
*
|
|
115
|
+
* @class DigitalTwinEngine
|
|
116
|
+
* @example
|
|
117
|
+
* ```TypeScript
|
|
118
|
+
* import { DigitalTwinEngine } from './digital_twin_engine.js'
|
|
119
|
+
* import { StorageServiceFactory } from '../storage/storage_factory.js'
|
|
120
|
+
* import { KnexDatabaseAdapter } from '../database/adapters/knex_database_adapter.js'
|
|
121
|
+
*
|
|
122
|
+
* const storage = StorageServiceFactory.create()
|
|
123
|
+
* const database = new KnexDatabaseAdapter({ client: 'sqlite3', connection: ':memory:' }, storage)
|
|
124
|
+
*
|
|
125
|
+
* const engine = new DigitalTwinEngine({
|
|
126
|
+
* storage,
|
|
127
|
+
* database,
|
|
128
|
+
* collectors: [myCollector],
|
|
129
|
+
* server: { port: 3000 }
|
|
130
|
+
* })
|
|
131
|
+
*
|
|
132
|
+
* await engine.start()
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export declare class DigitalTwinEngine {
|
|
136
|
+
#private;
|
|
137
|
+
/**
|
|
138
|
+
* Creates a new Digital Twin Engine instance
|
|
139
|
+
*
|
|
140
|
+
* @param {EngineOptions} options - Configuration options for the engine
|
|
141
|
+
* @throws {Error} If required options (storage, database) are missing
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```TypeScript
|
|
145
|
+
* const engine = new DigitalTwinEngine({
|
|
146
|
+
* storage: myStorageService,
|
|
147
|
+
* database: myDatabaseAdapter,
|
|
148
|
+
* collectors: [collector1, collector2],
|
|
149
|
+
* server: { port: 4000, host: 'localhost' }
|
|
150
|
+
* })
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
constructor(options: EngineOptions);
|
|
154
|
+
/**
|
|
155
|
+
* Starts the Digital Twin Engine
|
|
156
|
+
*
|
|
157
|
+
* This method:
|
|
158
|
+
* 1. Initializes all registered components (collectors, harvesters, handlers)
|
|
159
|
+
* 2. Set up HTTP endpoints for component access
|
|
160
|
+
* 3. Configures and starts background job queues
|
|
161
|
+
* 4. Starts the HTTP server
|
|
162
|
+
* 5. Exposes queue monitoring endpoints
|
|
163
|
+
*
|
|
164
|
+
* @async
|
|
165
|
+
* @returns {Promise<void>}
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```TypeScript
|
|
169
|
+
* await engine.start()
|
|
170
|
+
* console.log('Engine is running!')
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
start(): Promise<void>;
|
|
174
|
+
/**
|
|
175
|
+
* Get the server port
|
|
176
|
+
*
|
|
177
|
+
* @returns {number | undefined} The server port or undefined if not started
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```TypeScript
|
|
181
|
+
* const port = engine.getPort()
|
|
182
|
+
* console.log(`Server running on port ${port}`)
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
getPort(): number | undefined;
|
|
186
|
+
/**
|
|
187
|
+
* Stops the Digital Twin Engine gracefully
|
|
188
|
+
*
|
|
189
|
+
* This method:
|
|
190
|
+
* 1. Closes HTTP server
|
|
191
|
+
* 2. Closes all queue connections
|
|
192
|
+
* 3. Stops background workers
|
|
193
|
+
* 4. Clean up resources
|
|
194
|
+
*
|
|
195
|
+
* @async
|
|
196
|
+
* @returns {Promise<void>}
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```TypeScript
|
|
200
|
+
* await engine.stop()
|
|
201
|
+
* console.log('Engine stopped gracefully')
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
stop(): Promise<void>;
|
|
205
|
+
/**
|
|
206
|
+
* Validate the engine configuration and all components
|
|
207
|
+
*
|
|
208
|
+
* This method checks that all components are properly configured and can be initialized
|
|
209
|
+
* without actually creating tables or starting the server.
|
|
210
|
+
*
|
|
211
|
+
* @returns {Promise<ValidationResult>} Comprehensive validation results
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```typescript
|
|
215
|
+
* const result = await engine.validateConfiguration()
|
|
216
|
+
* if (!result.valid) {
|
|
217
|
+
* console.error('Validation errors:', result.engineErrors)
|
|
218
|
+
* }
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
validateConfiguration(): Promise<ValidationResult>;
|
|
222
|
+
/**
|
|
223
|
+
* Test all components by running their core methods without persistence
|
|
224
|
+
*
|
|
225
|
+
* @returns {Promise<ComponentValidationResult[]>} Test results for each component
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* const results = await engine.testComponents()
|
|
230
|
+
* results.forEach(result => {
|
|
231
|
+
* console.log(`${result.name}: ${result.valid ? '✅' : '❌'}`)
|
|
232
|
+
* })
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
testComponents(): Promise<ComponentValidationResult[]>;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=digital_twin_engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digital_twin_engine.d.ts","sourceRoot":"","sources":["../../src/engine/digital_twin_engine.ts"],"names":[],"mappings":"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"}
|