digitaltwin-core 0.14.2 → 1.0.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.
Files changed (227) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +494 -359
  3. package/dist/auth/apisix_parser.d.ts +141 -0
  4. package/dist/auth/apisix_parser.d.ts.map +1 -0
  5. package/dist/auth/apisix_parser.js +161 -0
  6. package/dist/auth/apisix_parser.js.map +1 -0
  7. package/dist/auth/auth_config.d.ts +126 -0
  8. package/dist/auth/auth_config.d.ts.map +1 -0
  9. package/dist/auth/auth_config.js +169 -0
  10. package/dist/auth/auth_config.js.map +1 -0
  11. package/dist/auth/auth_provider.d.ts +118 -0
  12. package/dist/auth/auth_provider.d.ts.map +1 -0
  13. package/dist/auth/auth_provider.js +8 -0
  14. package/dist/auth/auth_provider.js.map +1 -0
  15. package/dist/auth/auth_provider_factory.d.ts +91 -0
  16. package/dist/auth/auth_provider_factory.d.ts.map +1 -0
  17. package/dist/auth/auth_provider_factory.js +146 -0
  18. package/dist/auth/auth_provider_factory.js.map +1 -0
  19. package/dist/auth/index.d.ts +8 -0
  20. package/dist/auth/index.d.ts.map +1 -0
  21. package/dist/auth/index.js +7 -0
  22. package/dist/auth/index.js.map +1 -0
  23. package/dist/auth/providers/gateway_auth_provider.d.ts +78 -0
  24. package/dist/auth/providers/gateway_auth_provider.d.ts.map +1 -0
  25. package/dist/auth/providers/gateway_auth_provider.js +109 -0
  26. package/dist/auth/providers/gateway_auth_provider.js.map +1 -0
  27. package/dist/auth/providers/index.d.ts +4 -0
  28. package/dist/auth/providers/index.d.ts.map +1 -0
  29. package/dist/auth/providers/index.js +4 -0
  30. package/dist/auth/providers/index.js.map +1 -0
  31. package/dist/auth/providers/jwt_auth_provider.d.ts +91 -0
  32. package/dist/auth/providers/jwt_auth_provider.d.ts.map +1 -0
  33. package/dist/auth/providers/jwt_auth_provider.js +204 -0
  34. package/dist/auth/providers/jwt_auth_provider.js.map +1 -0
  35. package/dist/auth/providers/no_auth_provider.d.ts +61 -0
  36. package/dist/auth/providers/no_auth_provider.d.ts.map +1 -0
  37. package/dist/auth/providers/no_auth_provider.js +76 -0
  38. package/dist/auth/providers/no_auth_provider.js.map +1 -0
  39. package/dist/auth/types.d.ts +100 -0
  40. package/dist/auth/types.d.ts.map +1 -0
  41. package/dist/auth/types.js +2 -0
  42. package/dist/auth/types.js.map +1 -0
  43. package/dist/auth/user_service.d.ts +86 -0
  44. package/dist/auth/user_service.d.ts.map +1 -0
  45. package/dist/auth/user_service.js +237 -0
  46. package/dist/auth/user_service.js.map +1 -0
  47. package/dist/components/assets_manager.d.ts +662 -0
  48. package/dist/components/assets_manager.d.ts.map +1 -0
  49. package/dist/components/assets_manager.js +1537 -0
  50. package/dist/components/assets_manager.js.map +1 -0
  51. package/dist/components/async_upload.d.ts +20 -0
  52. package/dist/components/async_upload.d.ts.map +1 -0
  53. package/dist/components/async_upload.js +10 -0
  54. package/dist/components/async_upload.js.map +1 -0
  55. package/dist/components/collector.d.ts +203 -0
  56. package/dist/components/collector.d.ts.map +1 -0
  57. package/dist/components/collector.js +214 -0
  58. package/dist/components/collector.js.map +1 -0
  59. package/dist/components/custom_table_manager.d.ts +503 -0
  60. package/dist/components/custom_table_manager.d.ts.map +1 -0
  61. package/dist/components/custom_table_manager.js +1023 -0
  62. package/dist/components/custom_table_manager.js.map +1 -0
  63. package/dist/components/global_assets_handler.d.ts +63 -0
  64. package/dist/components/global_assets_handler.d.ts.map +1 -0
  65. package/dist/components/global_assets_handler.js +127 -0
  66. package/dist/components/global_assets_handler.js.map +1 -0
  67. package/dist/components/handler.d.ts +104 -0
  68. package/dist/components/handler.d.ts.map +1 -0
  69. package/dist/components/handler.js +110 -0
  70. package/dist/components/handler.js.map +1 -0
  71. package/dist/components/harvester.d.ts +182 -0
  72. package/dist/components/harvester.d.ts.map +1 -0
  73. package/dist/components/harvester.js +406 -0
  74. package/dist/components/harvester.js.map +1 -0
  75. package/dist/components/index.d.ts +11 -0
  76. package/dist/components/index.d.ts.map +1 -0
  77. package/dist/components/index.js +9 -0
  78. package/dist/components/index.js.map +1 -0
  79. package/dist/components/interfaces.d.ts +126 -0
  80. package/dist/components/interfaces.d.ts.map +1 -0
  81. package/dist/components/interfaces.js +8 -0
  82. package/dist/components/interfaces.js.map +1 -0
  83. package/dist/components/map_manager.d.ts +61 -0
  84. package/dist/components/map_manager.d.ts.map +1 -0
  85. package/dist/components/map_manager.js +242 -0
  86. package/dist/components/map_manager.js.map +1 -0
  87. package/dist/components/tileset_manager.d.ts +125 -0
  88. package/dist/components/tileset_manager.d.ts.map +1 -0
  89. package/dist/components/tileset_manager.js +623 -0
  90. package/dist/components/tileset_manager.js.map +1 -0
  91. package/dist/components/types.d.ts +226 -0
  92. package/dist/components/types.d.ts.map +1 -0
  93. package/dist/components/types.js +8 -0
  94. package/dist/components/types.js.map +1 -0
  95. package/dist/database/adapters/knex_database_adapter.d.ts +97 -0
  96. package/dist/database/adapters/knex_database_adapter.d.ts.map +1 -0
  97. package/dist/database/adapters/knex_database_adapter.js +729 -0
  98. package/dist/database/adapters/knex_database_adapter.js.map +1 -0
  99. package/dist/database/database_adapter.d.ts +262 -0
  100. package/dist/database/database_adapter.d.ts.map +1 -0
  101. package/dist/database/database_adapter.js +46 -0
  102. package/dist/database/database_adapter.js.map +1 -0
  103. package/dist/engine/digital_twin_engine.d.ts +295 -0
  104. package/dist/engine/digital_twin_engine.d.ts.map +1 -0
  105. package/dist/engine/digital_twin_engine.js +907 -0
  106. package/dist/engine/digital_twin_engine.js.map +1 -0
  107. package/dist/engine/endpoints.d.ts +47 -0
  108. package/dist/engine/endpoints.d.ts.map +1 -0
  109. package/dist/engine/endpoints.js +88 -0
  110. package/dist/engine/endpoints.js.map +1 -0
  111. package/dist/engine/error_handler.d.ts +20 -0
  112. package/dist/engine/error_handler.d.ts.map +1 -0
  113. package/dist/engine/error_handler.js +69 -0
  114. package/dist/engine/error_handler.js.map +1 -0
  115. package/dist/engine/events.d.ts +93 -0
  116. package/dist/engine/events.d.ts.map +1 -0
  117. package/dist/engine/events.js +71 -0
  118. package/dist/engine/events.js.map +1 -0
  119. package/dist/engine/health.d.ts +112 -0
  120. package/dist/engine/health.d.ts.map +1 -0
  121. package/dist/engine/health.js +190 -0
  122. package/dist/engine/health.js.map +1 -0
  123. package/dist/engine/initializer.d.ts +62 -0
  124. package/dist/engine/initializer.d.ts.map +1 -0
  125. package/dist/engine/initializer.js +108 -0
  126. package/dist/engine/initializer.js.map +1 -0
  127. package/dist/engine/queue_manager.d.ts +87 -0
  128. package/dist/engine/queue_manager.d.ts.map +1 -0
  129. package/dist/engine/queue_manager.js +196 -0
  130. package/dist/engine/queue_manager.js.map +1 -0
  131. package/dist/engine/scheduler.d.ts +30 -0
  132. package/dist/engine/scheduler.d.ts.map +1 -0
  133. package/dist/engine/scheduler.js +378 -0
  134. package/dist/engine/scheduler.js.map +1 -0
  135. package/dist/engine/upload_processor.d.ts +36 -0
  136. package/dist/engine/upload_processor.d.ts.map +1 -0
  137. package/dist/engine/upload_processor.js +113 -0
  138. package/dist/engine/upload_processor.js.map +1 -0
  139. package/dist/env/env.d.ts +134 -0
  140. package/dist/env/env.d.ts.map +1 -0
  141. package/dist/env/env.js +177 -0
  142. package/dist/env/env.js.map +1 -0
  143. package/dist/errors/index.d.ts +94 -0
  144. package/dist/errors/index.d.ts.map +1 -0
  145. package/dist/errors/index.js +149 -0
  146. package/dist/errors/index.js.map +1 -0
  147. package/dist/index.d.ts +55 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +65 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/openapi/generator.d.ts +93 -0
  152. package/dist/openapi/generator.d.ts.map +1 -0
  153. package/dist/openapi/generator.js +293 -0
  154. package/dist/openapi/generator.js.map +1 -0
  155. package/dist/openapi/index.d.ts +9 -0
  156. package/dist/openapi/index.d.ts.map +1 -0
  157. package/dist/openapi/index.js +9 -0
  158. package/dist/openapi/index.js.map +1 -0
  159. package/dist/openapi/types.d.ts +182 -0
  160. package/dist/openapi/types.d.ts.map +1 -0
  161. package/dist/openapi/types.js +16 -0
  162. package/dist/openapi/types.js.map +1 -0
  163. package/dist/storage/adapters/local_storage_service.d.ts +57 -0
  164. package/dist/storage/adapters/local_storage_service.d.ts.map +1 -0
  165. package/dist/storage/adapters/local_storage_service.js +132 -0
  166. package/dist/storage/adapters/local_storage_service.js.map +1 -0
  167. package/dist/storage/adapters/ovh_storage_service.d.ts +72 -0
  168. package/dist/storage/adapters/ovh_storage_service.d.ts.map +1 -0
  169. package/dist/storage/adapters/ovh_storage_service.js +205 -0
  170. package/dist/storage/adapters/ovh_storage_service.js.map +1 -0
  171. package/dist/storage/storage_factory.d.ts +14 -0
  172. package/dist/storage/storage_factory.d.ts.map +1 -0
  173. package/dist/storage/storage_factory.js +43 -0
  174. package/dist/storage/storage_factory.js.map +1 -0
  175. package/dist/storage/storage_service.d.ts +163 -0
  176. package/dist/storage/storage_service.d.ts.map +1 -0
  177. package/dist/storage/storage_service.js +58 -0
  178. package/dist/storage/storage_service.js.map +1 -0
  179. package/dist/types/data_record.d.ts +123 -0
  180. package/dist/types/data_record.d.ts.map +1 -0
  181. package/dist/types/data_record.js +8 -0
  182. package/dist/types/data_record.js.map +1 -0
  183. package/dist/utils/graceful_shutdown.d.ts +44 -0
  184. package/dist/utils/graceful_shutdown.d.ts.map +1 -0
  185. package/dist/utils/graceful_shutdown.js +79 -0
  186. package/dist/utils/graceful_shutdown.js.map +1 -0
  187. package/dist/utils/http_responses.d.ts +175 -0
  188. package/dist/utils/http_responses.d.ts.map +1 -0
  189. package/dist/utils/http_responses.js +216 -0
  190. package/dist/utils/http_responses.js.map +1 -0
  191. package/dist/utils/index.d.ts +8 -0
  192. package/dist/utils/index.d.ts.map +1 -0
  193. package/dist/utils/index.js +6 -0
  194. package/dist/utils/index.js.map +1 -0
  195. package/dist/utils/logger.d.ts +74 -0
  196. package/dist/utils/logger.d.ts.map +1 -0
  197. package/dist/utils/logger.js +92 -0
  198. package/dist/utils/logger.js.map +1 -0
  199. package/dist/utils/map_to_data_record.d.ts +10 -0
  200. package/dist/utils/map_to_data_record.d.ts.map +1 -0
  201. package/dist/utils/map_to_data_record.js +36 -0
  202. package/dist/utils/map_to_data_record.js.map +1 -0
  203. package/dist/utils/safe_async.d.ts +50 -0
  204. package/dist/utils/safe_async.d.ts.map +1 -0
  205. package/dist/utils/safe_async.js +90 -0
  206. package/dist/utils/safe_async.js.map +1 -0
  207. package/dist/utils/servable_endpoint.d.ts +63 -0
  208. package/dist/utils/servable_endpoint.d.ts.map +1 -0
  209. package/dist/utils/servable_endpoint.js +67 -0
  210. package/dist/utils/servable_endpoint.js.map +1 -0
  211. package/dist/utils/zip_utils.d.ts +66 -0
  212. package/dist/utils/zip_utils.d.ts.map +1 -0
  213. package/dist/utils/zip_utils.js +169 -0
  214. package/dist/utils/zip_utils.js.map +1 -0
  215. package/dist/validation/index.d.ts +3 -0
  216. package/dist/validation/index.d.ts.map +1 -0
  217. package/dist/validation/index.js +7 -0
  218. package/dist/validation/index.js.map +1 -0
  219. package/dist/validation/schemas.d.ts +273 -0
  220. package/dist/validation/schemas.d.ts.map +1 -0
  221. package/dist/validation/schemas.js +82 -0
  222. package/dist/validation/schemas.js.map +1 -0
  223. package/dist/validation/validate.d.ts +49 -0
  224. package/dist/validation/validate.d.ts.map +1 -0
  225. package/dist/validation/validate.js +110 -0
  226. package/dist/validation/validate.js.map +1 -0
  227. package/package.json +23 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex_database_adapter.js","sourceRoot":"","sources":["../../../src/database/adapters/knex_database_adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * @fileoverview Database abstraction layer for digital twin data persistence
3
+ *
4
+ * This module defines the abstract DatabaseAdapter interface that provides
5
+ * unified database operations across different database backends (SQLite, PostgreSQL).
6
+ * Implementations handle component data storage, metadata management, and querying.
7
+ */
8
+ import type { DataRecord } from '../types/data_record.js';
9
+ /**
10
+ * Structure used to store metadata about a data blob in the database.
11
+ *
12
+ * MetadataRow represents a single row in a component's database table,
13
+ * linking stored binary data (via URL) with its metadata. Extended to
14
+ * support asset-specific fields for AssetsManager components.
15
+ *
16
+ * @interface MetadataRow
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Basic collector metadata
21
+ * const metadata: MetadataRow = {
22
+ * name: 'weather-collector',
23
+ * type: 'application/json',
24
+ * url: '/storage/weather/2024-01-15.json',
25
+ * date: new Date()
26
+ * }
27
+ *
28
+ * // Asset metadata with ownership
29
+ * const assetMetadata: MetadataRow = {
30
+ * name: 'gltf-assets',
31
+ * type: 'model/gltf-binary',
32
+ * url: '/storage/assets/building.glb',
33
+ * date: new Date(),
34
+ * description: '3D building model',
35
+ * source: 'https://data-source.com/buildings',
36
+ * owner_id: 123,
37
+ * filename: 'building.glb',
38
+ * is_public: true
39
+ * }
40
+ * ```
41
+ */
42
+ export interface MetadataRow {
43
+ /** Unique identifier of the data row (auto-generated on insert) */
44
+ id?: number;
45
+ /** Logical name of the data source (component name, used as table identifier) */
46
+ name: string;
47
+ /** MIME type of the associated blob (e.g. 'application/json', 'model/gltf-binary') */
48
+ type: string;
49
+ /** Path or URL where the blob is stored (resolved by the StorageService) */
50
+ url: string;
51
+ /** Timestamp indicating when the data was collected or uploaded */
52
+ date: Date;
53
+ /** Human-readable description of the asset (AssetsManager only) */
54
+ description?: string;
55
+ /** Source URL for data provenance (AssetsManager only) */
56
+ source?: string;
57
+ /** ID of the user who owns this asset (AssetsManager only) */
58
+ owner_id?: number | null;
59
+ /** Original filename provided by the user (AssetsManager only) */
60
+ filename?: string;
61
+ /** Whether the asset is publicly accessible (AssetsManager only) */
62
+ is_public?: boolean;
63
+ }
64
+ /**
65
+ * Abstract database adapter providing unified data operations for all components.
66
+ *
67
+ * DatabaseAdapter defines the contract for database operations used throughout the
68
+ * digital twin system. Implementations provide concrete database access using specific
69
+ * backends (SQLite, PostgreSQL) while maintaining a consistent API.
70
+ *
71
+ * The adapter handles:
72
+ * - Table creation and schema migration for components
73
+ * - CRUD operations for collected data and assets
74
+ * - Time-based and count-based queries for harvesters
75
+ * - Custom table operations for CustomTableManager components
76
+ *
77
+ * @abstract
78
+ * @class DatabaseAdapter
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * // Using KnexDatabaseAdapter (concrete implementation)
83
+ * const database = KnexDatabaseAdapter.forSQLite({
84
+ * filename: './data/digitaltwin.db'
85
+ * }, storage)
86
+ *
87
+ * // Save collector data
88
+ * await database.save({
89
+ * name: 'weather-collector',
90
+ * type: 'application/json',
91
+ * url: await storage.save(buffer, 'weather-collector'),
92
+ * date: new Date()
93
+ * })
94
+ *
95
+ * // Query latest data
96
+ * const latest = await database.getLatestByName('weather-collector')
97
+ * const data = await latest?.data()
98
+ * ```
99
+ */
100
+ export declare abstract class DatabaseAdapter {
101
+ /**
102
+ * Saves metadata and returns the created DataRecord.
103
+ * @param meta - Metadata to save
104
+ * @returns The created DataRecord with data() function for lazy loading
105
+ */
106
+ abstract save(meta: MetadataRow): Promise<DataRecord>;
107
+ /**
108
+ * Deletes a record by ID from a specific component's table.
109
+ * @param id - Record ID to delete
110
+ * @param name - Component/table name
111
+ */
112
+ abstract delete(id: string, name: string): Promise<void>;
113
+ /**
114
+ * Retrieves a specific record by ID from a component's table.
115
+ * @param id - Record ID to retrieve
116
+ * @param name - Component/table name
117
+ * @returns The DataRecord or undefined if not found
118
+ */
119
+ abstract getById(id: string, name: string): Promise<DataRecord | undefined>;
120
+ /**
121
+ * Gets the most recent record for a component.
122
+ * @param name - Component/table name
123
+ * @returns The latest DataRecord or undefined if table is empty
124
+ */
125
+ abstract getLatestByName(name: string): Promise<DataRecord | undefined>;
126
+ /**
127
+ * Checks if a table exists in the database.
128
+ * @param name - Table name to check
129
+ * @returns true if table exists, false otherwise
130
+ */
131
+ abstract doesTableExists(name: string): Promise<boolean>;
132
+ /**
133
+ * Creates a standard component table with default columns.
134
+ * @param name - Table name to create
135
+ */
136
+ abstract createTable(name: string): Promise<void>;
137
+ /**
138
+ * Create a table with custom columns for CustomTableManager components
139
+ * @param name - Table name
140
+ * @param columns - Column definitions (name -> SQL type)
141
+ */
142
+ abstract createTableWithColumns(name: string, columns: Record<string, string>): Promise<void>;
143
+ /**
144
+ * Migrate existing table schema to add missing columns and indexes.
145
+ *
146
+ * Only performs safe operations like adding columns with defaults or nullable.
147
+ * Returns an array of migration messages describing what was done.
148
+ *
149
+ * @param name - Table name to migrate
150
+ * @returns Array of migration messages
151
+ */
152
+ abstract migrateTableSchema(name: string): Promise<string[]>;
153
+ /**
154
+ * Get the first (oldest) record for a given component name.
155
+ * @param name - The component name
156
+ * @returns The oldest DataRecord or undefined if none found
157
+ */
158
+ abstract getFirstByName(name: string): Promise<DataRecord | undefined>;
159
+ /**
160
+ * Get records between two dates for a given component.
161
+ * @param name - The component name
162
+ * @param startDate - Start date (inclusive)
163
+ * @param endDate - End date (exclusive), optional
164
+ * @param limit - Maximum number of records to return, optional
165
+ * @returns Array of DataRecords matching the criteria
166
+ */
167
+ abstract getByDateRange(name: string, startDate: Date, endDate?: Date, limit?: number): Promise<DataRecord[]>;
168
+ /**
169
+ * Get records after a specific date for a given component.
170
+ * @param name - The component name
171
+ * @param afterDate - Date to search after (exclusive)
172
+ * @param limit - Maximum number of records to return
173
+ * @returns Array of DataRecords after the specified date
174
+ */
175
+ abstract getAfterDate(name: string, afterDate: Date, limit?: number): Promise<DataRecord[]>;
176
+ /**
177
+ * Get the latest record before a specific date for a given component.
178
+ * @param name - The component name
179
+ * @param beforeDate - Date to search before (exclusive)
180
+ * @returns The latest DataRecord before the date, or undefined if none found
181
+ */
182
+ abstract getLatestBefore(name: string, beforeDate: Date): Promise<DataRecord | undefined>;
183
+ /**
184
+ * Get the latest N records before a specific date for a given component.
185
+ * @param name - The component name
186
+ * @param beforeDate - Date to search before (exclusive)
187
+ * @param limit - Number of records to return
188
+ * @returns Array of the latest DataRecords before the date
189
+ */
190
+ abstract getLatestRecordsBefore(name: string, beforeDate: Date, limit: number): Promise<DataRecord[]>;
191
+ /**
192
+ * Check if any records exist after a specific date for a given component.
193
+ * @param name - The component name
194
+ * @param afterDate - Date to check after (exclusive)
195
+ * @returns True if records exist after the date, false otherwise
196
+ */
197
+ abstract hasRecordsAfterDate(name: string, afterDate: Date): Promise<boolean>;
198
+ /**
199
+ * Count records for a given component within a date range.
200
+ * @param name - The component name
201
+ * @param startDate - Start date (inclusive)
202
+ * @param endDate - End date (exclusive), optional
203
+ * @returns Number of records in the range
204
+ */
205
+ abstract countByDateRange(name: string, startDate: Date, endDate?: Date): Promise<number>;
206
+ /**
207
+ * Updates asset metadata fields directly without changing the record ID.
208
+ * This is preferred over delete+insert for updating metadata.
209
+ *
210
+ * @param tableName - Component/table name
211
+ * @param id - Record ID to update
212
+ * @param data - Partial metadata to update (description, source, is_public)
213
+ * @returns The updated DataRecord
214
+ * @throws Error if record not found
215
+ */
216
+ abstract updateAssetMetadata(tableName: string, id: number, data: Partial<Pick<MetadataRow, 'description' | 'source' | 'is_public'>>): Promise<DataRecord>;
217
+ /**
218
+ * Find records by column conditions for CustomTableManager components.
219
+ * @param tableName - Table name to query
220
+ * @param conditions - Key-value pairs to match
221
+ * @returns Array of matching records
222
+ */
223
+ abstract findByConditions(tableName: string, conditions: Record<string, any>): Promise<DataRecord[]>;
224
+ /**
225
+ * Update a record by ID for CustomTableManager components.
226
+ * @param tableName - Table name to update
227
+ * @param id - Record ID to update
228
+ * @param data - Data to update (excluding id, created_at, updated_at)
229
+ * @returns Promise that resolves when update is complete
230
+ */
231
+ abstract updateById(tableName: string, id: number, data: Record<string, any>): Promise<void>;
232
+ /**
233
+ * Find records for custom tables (returns raw database rows, not DataRecords)
234
+ * This bypasses mapToDataRecord() which assumes standard table structure
235
+ * @param tableName - Table name to query
236
+ * @param conditions - Key-value pairs to match (empty for all records)
237
+ * @returns Array of raw database rows
238
+ */
239
+ abstract findCustomTableRecords(tableName: string, conditions?: Record<string, any>): Promise<any[]>;
240
+ /**
241
+ * Get a single custom table record by ID (returns raw database row, not DataRecord)
242
+ * @param tableName - Table name to query
243
+ * @param id - Record ID
244
+ * @returns Raw database row or null if not found
245
+ */
246
+ abstract getCustomTableRecordById(tableName: string, id: number): Promise<any | null>;
247
+ /**
248
+ * Insert a record into a custom table (returns the new record ID)
249
+ * @param tableName - Table name to insert into
250
+ * @param data - Data to insert (created_at/updated_at will be added automatically)
251
+ * @returns The ID of the new record
252
+ */
253
+ abstract insertCustomTableRecord(tableName: string, data: Record<string, any>): Promise<number>;
254
+ /**
255
+ * Closes all database connections gracefully.
256
+ * This method should be called when shutting down the application
257
+ * to ensure proper cleanup of connection pools.
258
+ * @returns Promise that resolves when all connections are closed
259
+ */
260
+ abstract close(): Promise<void>;
261
+ }
262
+ //# 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":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Database abstraction layer for digital twin data persistence
3
+ *
4
+ * This module defines the abstract DatabaseAdapter interface that provides
5
+ * unified database operations across different database backends (SQLite, PostgreSQL).
6
+ * Implementations handle component data storage, metadata management, and querying.
7
+ */
8
+ /**
9
+ * Abstract database adapter providing unified data operations for all components.
10
+ *
11
+ * DatabaseAdapter defines the contract for database operations used throughout the
12
+ * digital twin system. Implementations provide concrete database access using specific
13
+ * backends (SQLite, PostgreSQL) while maintaining a consistent API.
14
+ *
15
+ * The adapter handles:
16
+ * - Table creation and schema migration for components
17
+ * - CRUD operations for collected data and assets
18
+ * - Time-based and count-based queries for harvesters
19
+ * - Custom table operations for CustomTableManager components
20
+ *
21
+ * @abstract
22
+ * @class DatabaseAdapter
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // Using KnexDatabaseAdapter (concrete implementation)
27
+ * const database = KnexDatabaseAdapter.forSQLite({
28
+ * filename: './data/digitaltwin.db'
29
+ * }, storage)
30
+ *
31
+ * // Save collector data
32
+ * await database.save({
33
+ * name: 'weather-collector',
34
+ * type: 'application/json',
35
+ * url: await storage.save(buffer, 'weather-collector'),
36
+ * date: new Date()
37
+ * })
38
+ *
39
+ * // Query latest data
40
+ * const latest = await database.getLatestByName('weather-collector')
41
+ * const data = await latest?.data()
42
+ * ```
43
+ */
44
+ export class DatabaseAdapter {
45
+ }
46
+ //# sourceMappingURL=database_adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database_adapter.js","sourceRoot":"","sources":["../../src/database/database_adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8DH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,OAAgB,eAAe;CAkMpC"}
@@ -0,0 +1,295 @@
1
+ import type { Collector } from '../components/collector.js';
2
+ import type { Harvester } from '../components/harvester.js';
3
+ import type { Handler } from '../components/handler.js';
4
+ import type { AssetsManager } from '../components/assets_manager.js';
5
+ import type { CustomTableManager } from '../components/custom_table_manager.js';
6
+ import type { StorageService } from '../storage/storage_service.js';
7
+ import type { DatabaseAdapter } from '../database/database_adapter.js';
8
+ import type { ConnectionOptions } from 'bullmq';
9
+ import { LogLevel } from '../utils/logger.js';
10
+ import type { QueueConfig } from './queue_manager.js';
11
+ import { type HealthCheckFn } from './health.js';
12
+ /**
13
+ * Result of component validation
14
+ */
15
+ export interface ComponentValidationResult {
16
+ /** Component name */
17
+ name: string;
18
+ /** Component type */
19
+ type: 'collector' | 'harvester' | 'handler' | 'assets_manager' | 'custom_table_manager';
20
+ /** Validation status */
21
+ valid: boolean;
22
+ /** Validation errors if any */
23
+ errors: string[];
24
+ /** Validation warnings if any */
25
+ warnings: string[];
26
+ }
27
+ /**
28
+ * Overall validation result
29
+ */
30
+ export interface ValidationResult {
31
+ /** Overall validation status */
32
+ valid: boolean;
33
+ /** Individual component results */
34
+ components: ComponentValidationResult[];
35
+ /** Engine-level errors */
36
+ engineErrors: string[];
37
+ /** Summary statistics */
38
+ summary: {
39
+ total: number;
40
+ valid: number;
41
+ invalid: number;
42
+ warnings: number;
43
+ };
44
+ }
45
+ /**
46
+ * Configuration options for the Digital Twin Engine
47
+ *
48
+ * @interface EngineOptions
49
+ * @example
50
+ * ```typescript
51
+ * const options: EngineOptions = {
52
+ * storage: storageService,
53
+ * database: databaseAdapter,
54
+ * collectors: [myCollector],
55
+ * harvesters: [myHarvester],
56
+ * handlers: [myHandler],
57
+ * server: { port: 3000, host: 'localhost' },
58
+ * queues: {
59
+ * multiQueue: true,
60
+ * workers: { collectors: 2, harvesters: 1 }
61
+ * }
62
+ * }
63
+ * ```
64
+ */
65
+ export interface EngineOptions {
66
+ /** Array of data collectors to register with the engine */
67
+ collectors?: Collector[];
68
+ /** Array of data harvesters to register with the engine */
69
+ harvesters?: Harvester[];
70
+ /** Array of request handlers to register with the engine */
71
+ handlers?: Handler[];
72
+ /** Array of assets managers to register with the engine */
73
+ assetsManagers?: AssetsManager[];
74
+ /** Array of custom table managers to register with the engine */
75
+ customTableManagers?: CustomTableManager[];
76
+ /** Storage service instance for persisting data (required) */
77
+ storage: StorageService;
78
+ /** Database adapter instance for data operations (required) */
79
+ database: DatabaseAdapter;
80
+ /** Redis connection options for queue management */
81
+ redis?: ConnectionOptions;
82
+ /** Queue configuration options */
83
+ queues?: {
84
+ /** Enable multi-queue mode (default: true) */
85
+ multiQueue?: boolean;
86
+ /** Worker configuration for different component types */
87
+ workers?: {
88
+ /** Number of collector workers (default: 1) */
89
+ collectors?: number;
90
+ /** Number of harvester workers (default: 1) */
91
+ harvesters?: number;
92
+ };
93
+ /** Additional queue configuration options */
94
+ options?: QueueConfig['queueOptions'];
95
+ };
96
+ /** HTTP server configuration */
97
+ server?: {
98
+ /** Server port (default: 3000) */
99
+ port: number;
100
+ /** Server host (default: '0.0.0.0') */
101
+ host?: string;
102
+ };
103
+ /** Logging configuration */
104
+ logging?: {
105
+ /** Log level (default: LogLevel.INFO) */
106
+ level: LogLevel;
107
+ /** Log format (default: 'text') */
108
+ format?: 'json' | 'text';
109
+ };
110
+ /** Dry run mode - validate configuration without persisting data (default: false) */
111
+ dryRun?: boolean;
112
+ /**
113
+ * Enable automatic schema migration for existing tables (default: true)
114
+ *
115
+ * When enabled, the engine will automatically add missing columns with safe defaults
116
+ * to existing tables at startup. Only safe operations are performed:
117
+ * - Adding columns with DEFAULT values
118
+ * - Adding nullable columns
119
+ * - Adding indexes
120
+ *
121
+ * Set to false to require manual migrations via SQL scripts.
122
+ */
123
+ autoMigration?: boolean;
124
+ }
125
+ /**
126
+ * Digital Twin Engine - Core orchestrator for collectors, harvesters, and handlers
127
+ *
128
+ * The engine manages the lifecycle of all components, sets up queues for processing,
129
+ * exposes HTTP endpoints, and handles the overall coordination of the digital twin system.
130
+ *
131
+ * @class DigitalTwinEngine
132
+ * @example
133
+ * ```TypeScript
134
+ * import { DigitalTwinEngine } from './digital_twin_engine.js'
135
+ * import { StorageServiceFactory } from '../storage/storage_factory.js'
136
+ * import { KnexDatabaseAdapter } from '../database/adapters/knex_database_adapter.js'
137
+ *
138
+ * const storage = StorageServiceFactory.create()
139
+ * const database = new KnexDatabaseAdapter({ client: 'sqlite3', connection: ':memory:' }, storage)
140
+ *
141
+ * const engine = new DigitalTwinEngine({
142
+ * storage,
143
+ * database,
144
+ * collectors: [myCollector],
145
+ * server: { port: 3000 }
146
+ * })
147
+ *
148
+ * await engine.start()
149
+ * ```
150
+ */
151
+ export declare class DigitalTwinEngine {
152
+ #private;
153
+ /**
154
+ * Creates a new Digital Twin Engine instance
155
+ *
156
+ * @param {EngineOptions} options - Configuration options for the engine
157
+ * @throws {Error} If required options (storage, database) are missing
158
+ *
159
+ * @example
160
+ * ```TypeScript
161
+ * const engine = new DigitalTwinEngine({
162
+ * storage: myStorageService,
163
+ * database: myDatabaseAdapter,
164
+ * collectors: [collector1, collector2],
165
+ * server: { port: 4000, host: 'localhost' }
166
+ * })
167
+ * ```
168
+ */
169
+ constructor(options: EngineOptions);
170
+ /**
171
+ * Starts the Digital Twin Engine
172
+ *
173
+ * This method:
174
+ * 1. Initializes all registered components (collectors, harvesters, handlers)
175
+ * 2. Set up HTTP endpoints for component access
176
+ * 3. Configures and starts background job queues
177
+ * 4. Starts the HTTP server
178
+ * 5. Exposes queue monitoring endpoints
179
+ *
180
+ * @async
181
+ * @returns {Promise<void>}
182
+ *
183
+ * @example
184
+ * ```TypeScript
185
+ * await engine.start()
186
+ * console.log('Engine is running!')
187
+ * ```
188
+ */
189
+ start(): Promise<void>;
190
+ /**
191
+ * Get the server port
192
+ *
193
+ * @returns {number | undefined} The server port or undefined if not started
194
+ *
195
+ * @example
196
+ * ```TypeScript
197
+ * const port = engine.getPort()
198
+ * console.log(`Server running on port ${port}`)
199
+ * ```
200
+ */
201
+ getPort(): number | undefined;
202
+ /**
203
+ * Configure the shutdown timeout (in ms)
204
+ * @param timeout Timeout in milliseconds (default: 30000)
205
+ */
206
+ setShutdownTimeout(timeout: number): void;
207
+ /**
208
+ * Check if the engine is currently shutting down
209
+ * @returns true if shutdown is in progress
210
+ */
211
+ isShuttingDown(): boolean;
212
+ /**
213
+ * Register a custom health check
214
+ * @param name Unique name for the check
215
+ * @param checkFn Function that performs the check
216
+ *
217
+ * @example
218
+ * ```typescript
219
+ * engine.registerHealthCheck('external-api', async () => {
220
+ * try {
221
+ * const res = await fetch('https://api.example.com/health')
222
+ * return { status: res.ok ? 'up' : 'down' }
223
+ * } catch (error) {
224
+ * return { status: 'down', error: error.message }
225
+ * }
226
+ * })
227
+ * ```
228
+ */
229
+ registerHealthCheck(name: string, checkFn: HealthCheckFn): void;
230
+ /**
231
+ * Remove a custom health check
232
+ * @param name Name of the check to remove
233
+ * @returns true if the check was removed, false if it didn't exist
234
+ */
235
+ removeHealthCheck(name: string): boolean;
236
+ /**
237
+ * Get list of registered health check names
238
+ */
239
+ getHealthCheckNames(): string[];
240
+ /**
241
+ * Stops the Digital Twin Engine with graceful shutdown
242
+ *
243
+ * This method:
244
+ * 1. Prevents new work from being accepted
245
+ * 2. Removes all event listeners
246
+ * 3. Closes HTTP server
247
+ * 4. Drains queues and waits for active jobs
248
+ * 5. Closes all queue workers
249
+ * 6. Stops upload processor
250
+ * 7. Closes queue manager
251
+ * 8. Closes database connections
252
+ *
253
+ * @async
254
+ * @returns {Promise<void>}
255
+ *
256
+ * @example
257
+ * ```TypeScript
258
+ * await engine.stop()
259
+ * console.log('Engine stopped gracefully')
260
+ * ```
261
+ */
262
+ stop(): Promise<void>;
263
+ /**
264
+ * Validate the engine configuration and all components
265
+ *
266
+ * This method checks that all components are properly configured and can be initialized
267
+ * without actually creating tables or starting the server.
268
+ *
269
+ * @returns {Promise<ValidationResult>} Comprehensive validation results
270
+ *
271
+ * @example
272
+ * ```typescript
273
+ * const result = await engine.validateConfiguration()
274
+ * if (!result.valid) {
275
+ * console.error('Validation errors:', result.engineErrors)
276
+ * }
277
+ * ```
278
+ */
279
+ validateConfiguration(): Promise<ValidationResult>;
280
+ /**
281
+ * Test all components by running their core methods without persistence
282
+ *
283
+ * @returns {Promise<ComponentValidationResult[]>} Test results for each component
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * const results = await engine.testComponents()
288
+ * results.forEach(result => {
289
+ * console.log(`${result.name}: ${result.valid ? '✅' : '❌'}`)
290
+ * })
291
+ * ```
292
+ */
293
+ testComponents(): Promise<ComponentValidationResult[]>;
294
+ }
295
+ //# sourceMappingURL=digital_twin_engine.d.ts.map