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,44 @@
1
+ import type { DigitalTwinEngine } from '../engine/digital_twin_engine.js';
2
+ export interface ShutdownOptions {
3
+ /** Timeout before forcing exit (default: 30000ms) */
4
+ timeout?: number;
5
+ /** Signals to handle (default: ['SIGTERM', 'SIGINT']) */
6
+ signals?: NodeJS.Signals[];
7
+ /** Custom cleanup function to run before stopping engine */
8
+ onShutdown?: () => Promise<void>;
9
+ /** Custom logger function (default: console.log) */
10
+ logger?: (msg: string) => void;
11
+ }
12
+ /**
13
+ * Setup graceful shutdown handlers for a DigitalTwinEngine
14
+ *
15
+ * This helper registers signal handlers for graceful shutdown in production.
16
+ * It handles SIGTERM (from Kubernetes/Docker) and SIGINT (Ctrl+C) by default.
17
+ *
18
+ * @param engine The DigitalTwinEngine instance to shut down
19
+ * @param options Configuration options
20
+ * @returns Cleanup function to remove signal handlers
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { DigitalTwinEngine, setupGracefulShutdown } from 'digitaltwin-core'
25
+ *
26
+ * const engine = new DigitalTwinEngine({ ... })
27
+ *
28
+ * // Setup graceful shutdown before starting
29
+ * const cleanup = setupGracefulShutdown(engine, {
30
+ * timeout: 30000,
31
+ * signals: ['SIGTERM', 'SIGINT', 'SIGQUIT'],
32
+ * onShutdown: async () => {
33
+ * console.log('Performing custom cleanup...')
34
+ * }
35
+ * })
36
+ *
37
+ * await engine.start()
38
+ *
39
+ * // Later, if you need to remove handlers:
40
+ * // cleanup()
41
+ * ```
42
+ */
43
+ export declare function setupGracefulShutdown(engine: DigitalTwinEngine, options?: ShutdownOptions): () => void;
44
+ //# sourceMappingURL=graceful_shutdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graceful_shutdown.d.ts","sourceRoot":"","sources":["../../src/utils/graceful_shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAEzE,MAAM,WAAW,eAAe;IAC5B,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;IAC1B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,oDAAoD;IACpD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,eAAoB,GAAG,MAAM,IAAI,CAuD1G"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Setup graceful shutdown handlers for a DigitalTwinEngine
3
+ *
4
+ * This helper registers signal handlers for graceful shutdown in production.
5
+ * It handles SIGTERM (from Kubernetes/Docker) and SIGINT (Ctrl+C) by default.
6
+ *
7
+ * @param engine The DigitalTwinEngine instance to shut down
8
+ * @param options Configuration options
9
+ * @returns Cleanup function to remove signal handlers
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { DigitalTwinEngine, setupGracefulShutdown } from 'digitaltwin-core'
14
+ *
15
+ * const engine = new DigitalTwinEngine({ ... })
16
+ *
17
+ * // Setup graceful shutdown before starting
18
+ * const cleanup = setupGracefulShutdown(engine, {
19
+ * timeout: 30000,
20
+ * signals: ['SIGTERM', 'SIGINT', 'SIGQUIT'],
21
+ * onShutdown: async () => {
22
+ * console.log('Performing custom cleanup...')
23
+ * }
24
+ * })
25
+ *
26
+ * await engine.start()
27
+ *
28
+ * // Later, if you need to remove handlers:
29
+ * // cleanup()
30
+ * ```
31
+ */
32
+ export function setupGracefulShutdown(engine, options = {}) {
33
+ const { timeout = 30000, signals = ['SIGTERM', 'SIGINT'], onShutdown, logger = console.log } = options;
34
+ let isShuttingDown = false;
35
+ const shutdown = async (signal) => {
36
+ if (isShuttingDown) {
37
+ logger(`[Shutdown] Already shutting down, ignoring ${signal}`);
38
+ return;
39
+ }
40
+ isShuttingDown = true;
41
+ logger(`[Shutdown] Received ${signal}, initiating graceful shutdown...`);
42
+ // Set global timeout for force exit
43
+ const forceExitTimer = setTimeout(() => {
44
+ logger('[Shutdown] Timeout exceeded, forcing exit');
45
+ process.exit(1);
46
+ }, timeout);
47
+ forceExitTimer.unref();
48
+ try {
49
+ // Run custom shutdown logic first
50
+ if (onShutdown) {
51
+ await onShutdown();
52
+ }
53
+ // Stop the engine
54
+ await engine.stop();
55
+ clearTimeout(forceExitTimer);
56
+ logger('[Shutdown] Graceful shutdown completed');
57
+ process.exit(0);
58
+ }
59
+ catch (error) {
60
+ logger(`[Shutdown] Error during shutdown: ${error instanceof Error ? error.message : String(error)}`);
61
+ process.exit(1);
62
+ }
63
+ };
64
+ // Register signal handlers
65
+ const handlers = new Map();
66
+ signals.forEach(signal => {
67
+ const handler = () => shutdown(signal);
68
+ handlers.set(signal, handler);
69
+ process.on(signal, handler);
70
+ });
71
+ // Return cleanup function
72
+ return () => {
73
+ handlers.forEach((handler, signal) => {
74
+ process.removeListener(signal, handler);
75
+ });
76
+ handlers.clear();
77
+ };
78
+ }
79
+ //# sourceMappingURL=graceful_shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graceful_shutdown.js","sourceRoot":"","sources":["../../src/utils/graceful_shutdown.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAyB,EAAE,UAA2B,EAAE;IAC1F,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAA;IAEtG,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACtC,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,CAAC,8CAA8C,MAAM,EAAE,CAAC,CAAA;YAC9D,OAAM;QACV,CAAC;QAED,cAAc,GAAG,IAAI,CAAA;QACrB,MAAM,CAAC,uBAAuB,MAAM,mCAAmC,CAAC,CAAA;QAExE,oCAAoC;QACpC,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,MAAM,CAAC,2CAA2C,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,EAAE,OAAO,CAAC,CAAA;QACX,cAAc,CAAC,KAAK,EAAE,CAAA;QAEtB,IAAI,CAAC;YACD,kCAAkC;YAClC,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,UAAU,EAAE,CAAA;YACtB,CAAC;YAED,kBAAkB;YAClB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAEnB,YAAY,CAAC,cAAc,CAAC,CAAA;YAC5B,MAAM,CAAC,wCAAwC,CAAC,CAAA;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACL,CAAC,CAAA;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAA;IAEtD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACrB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACtC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC7B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,0BAA0B;IAC1B,OAAO,GAAG,EAAE;QACR,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,QAAQ,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC,CAAA;AACL,CAAC"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * @fileoverview HTTP response utilities for consistent API responses
3
+ *
4
+ * This module provides helper functions to create standardized DataResponse objects,
5
+ * reducing boilerplate code in component handlers and ensuring consistent API responses.
6
+ */
7
+ import type { DataResponse } from '../components/types.js';
8
+ /**
9
+ * HTTP status codes commonly used in the Digital Twin framework.
10
+ */
11
+ export declare const HttpStatus: {
12
+ readonly OK: 200;
13
+ readonly CREATED: 201;
14
+ readonly MULTI_STATUS: 207;
15
+ readonly BAD_REQUEST: 400;
16
+ readonly UNAUTHORIZED: 401;
17
+ readonly FORBIDDEN: 403;
18
+ readonly NOT_FOUND: 404;
19
+ readonly UNPROCESSABLE_ENTITY: 422;
20
+ readonly INTERNAL_SERVER_ERROR: 500;
21
+ };
22
+ export type HttpStatusCode = (typeof HttpStatus)[keyof typeof HttpStatus];
23
+ /**
24
+ * Creates a JSON response with the specified status and data.
25
+ *
26
+ * @param status - HTTP status code
27
+ * @param data - Data to serialize as JSON
28
+ * @returns DataResponse with JSON content type
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * return jsonResponse(200, { message: 'Success' })
33
+ * return jsonResponse(400, { error: 'Invalid input' })
34
+ * ```
35
+ */
36
+ export declare function jsonResponse(status: number, data: object): DataResponse;
37
+ /**
38
+ * Creates a successful JSON response (HTTP 200).
39
+ *
40
+ * @param data - Data to serialize as JSON
41
+ * @returns DataResponse with status 200
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * return successResponse({ message: 'Asset uploaded successfully' })
46
+ * ```
47
+ */
48
+ export declare function successResponse(data: object): DataResponse;
49
+ /**
50
+ * Creates an error response from an Error object or string.
51
+ *
52
+ * @param error - Error object or error message string
53
+ * @param status - HTTP status code (default: 500)
54
+ * @returns DataResponse with error message
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * return errorResponse(new Error('Something went wrong'))
59
+ * return errorResponse('Invalid input', 400)
60
+ * ```
61
+ */
62
+ export declare function errorResponse(error: unknown, status?: number): DataResponse;
63
+ /**
64
+ * Creates a 400 Bad Request response.
65
+ *
66
+ * @param message - Error message describing what's wrong with the request
67
+ * @returns DataResponse with status 400
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * return badRequestResponse('Missing required fields: description, source')
72
+ * ```
73
+ */
74
+ export declare function badRequestResponse(message: string): DataResponse;
75
+ /**
76
+ * Creates a 401 Unauthorized response.
77
+ *
78
+ * @param message - Error message (default: 'Authentication required')
79
+ * @returns DataResponse with status 401
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * return unauthorizedResponse()
84
+ * return unauthorizedResponse('Invalid authentication headers')
85
+ * ```
86
+ */
87
+ export declare function unauthorizedResponse(message?: string): DataResponse;
88
+ /**
89
+ * Creates a 403 Forbidden response.
90
+ *
91
+ * @param message - Error message describing why access is denied
92
+ * @returns DataResponse with status 403
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * return forbiddenResponse('You can only modify your own assets')
97
+ * ```
98
+ */
99
+ export declare function forbiddenResponse(message: string): DataResponse;
100
+ /**
101
+ * Creates a 404 Not Found response.
102
+ *
103
+ * @param message - Error message (default: 'Resource not found')
104
+ * @returns DataResponse with status 404
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * return notFoundResponse('Asset not found')
109
+ * ```
110
+ */
111
+ export declare function notFoundResponse(message?: string): DataResponse;
112
+ /**
113
+ * Creates a validation error response (HTTP 422 Unprocessable Entity).
114
+ *
115
+ * Used when request data fails schema validation.
116
+ *
117
+ * @param message - Validation error message
118
+ * @param errors - Optional array of field-level validation errors
119
+ * @returns DataResponse with status 422
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * return validationErrorResponse('id: must be a positive number')
124
+ * return validationErrorResponse('Validation failed', [{ field: 'id', message: 'must be positive' }])
125
+ * ```
126
+ */
127
+ export declare function validationErrorResponse(message: string, errors?: Array<{
128
+ field: string;
129
+ message: string;
130
+ }>): DataResponse;
131
+ /**
132
+ * Creates a plain text response.
133
+ *
134
+ * @param status - HTTP status code
135
+ * @param content - Text content
136
+ * @returns DataResponse with text/plain content type
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * return textResponse(404, 'Asset not found')
141
+ * ```
142
+ */
143
+ export declare function textResponse(status: number, content: string): DataResponse;
144
+ /**
145
+ * Creates a binary/file response.
146
+ *
147
+ * @param content - File content as Buffer
148
+ * @param contentType - MIME type of the file
149
+ * @param filename - Optional filename for Content-Disposition header (triggers download)
150
+ * @returns DataResponse with appropriate content type
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // For display/use in browser
155
+ * return fileResponse(buffer, 'model/gltf-binary')
156
+ *
157
+ * // For download
158
+ * return fileResponse(buffer, 'model/gltf-binary', 'model.glb')
159
+ * ```
160
+ */
161
+ export declare function fileResponse(content: Buffer, contentType: string, filename?: string): DataResponse;
162
+ /**
163
+ * Creates a 207 Multi-Status response for batch operations.
164
+ *
165
+ * @param message - Summary message
166
+ * @param results - Array of individual operation results
167
+ * @returns DataResponse with status 207
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * return multiStatusResponse('3/5 assets uploaded successfully', results)
172
+ * ```
173
+ */
174
+ export declare function multiStatusResponse(message: string, results: unknown[]): DataResponse;
175
+ //# sourceMappingURL=http_responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http_responses.d.ts","sourceRoot":"","sources":["../../src/utils/http_responses.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAG1D;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;CAUb,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAA;AAEzE;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAMvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAE1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAM3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAEhE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAkC,GAAG,YAAY,CAE9F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAE/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAA6B,GAAG,YAAY,CAErF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACnD,YAAY,CAMd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAM1E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAYlG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,CAErF"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * @fileoverview HTTP response utilities for consistent API responses
3
+ *
4
+ * This module provides helper functions to create standardized DataResponse objects,
5
+ * reducing boilerplate code in component handlers and ensuring consistent API responses.
6
+ */
7
+ import { DigitalTwinError } from '../errors/index.js';
8
+ /**
9
+ * HTTP status codes commonly used in the Digital Twin framework.
10
+ */
11
+ export const HttpStatus = {
12
+ OK: 200,
13
+ CREATED: 201,
14
+ MULTI_STATUS: 207,
15
+ BAD_REQUEST: 400,
16
+ UNAUTHORIZED: 401,
17
+ FORBIDDEN: 403,
18
+ NOT_FOUND: 404,
19
+ UNPROCESSABLE_ENTITY: 422,
20
+ INTERNAL_SERVER_ERROR: 500
21
+ };
22
+ /**
23
+ * Creates a JSON response with the specified status and data.
24
+ *
25
+ * @param status - HTTP status code
26
+ * @param data - Data to serialize as JSON
27
+ * @returns DataResponse with JSON content type
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * return jsonResponse(200, { message: 'Success' })
32
+ * return jsonResponse(400, { error: 'Invalid input' })
33
+ * ```
34
+ */
35
+ export function jsonResponse(status, data) {
36
+ return {
37
+ status,
38
+ content: JSON.stringify(data),
39
+ headers: { 'Content-Type': 'application/json' }
40
+ };
41
+ }
42
+ /**
43
+ * Creates a successful JSON response (HTTP 200).
44
+ *
45
+ * @param data - Data to serialize as JSON
46
+ * @returns DataResponse with status 200
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * return successResponse({ message: 'Asset uploaded successfully' })
51
+ * ```
52
+ */
53
+ export function successResponse(data) {
54
+ return jsonResponse(HttpStatus.OK, data);
55
+ }
56
+ /**
57
+ * Creates an error response from an Error object or string.
58
+ *
59
+ * @param error - Error object or error message string
60
+ * @param status - HTTP status code (default: 500)
61
+ * @returns DataResponse with error message
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * return errorResponse(new Error('Something went wrong'))
66
+ * return errorResponse('Invalid input', 400)
67
+ * ```
68
+ */
69
+ export function errorResponse(error, status) {
70
+ // Use statusCode from DigitalTwinError if available
71
+ const statusCode = error instanceof DigitalTwinError ? error.statusCode : (status ?? HttpStatus.INTERNAL_SERVER_ERROR);
72
+ const message = error instanceof Error ? error.message : String(error);
73
+ return jsonResponse(statusCode, { error: message });
74
+ }
75
+ /**
76
+ * Creates a 400 Bad Request response.
77
+ *
78
+ * @param message - Error message describing what's wrong with the request
79
+ * @returns DataResponse with status 400
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * return badRequestResponse('Missing required fields: description, source')
84
+ * ```
85
+ */
86
+ export function badRequestResponse(message) {
87
+ return jsonResponse(HttpStatus.BAD_REQUEST, { error: message });
88
+ }
89
+ /**
90
+ * Creates a 401 Unauthorized response.
91
+ *
92
+ * @param message - Error message (default: 'Authentication required')
93
+ * @returns DataResponse with status 401
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * return unauthorizedResponse()
98
+ * return unauthorizedResponse('Invalid authentication headers')
99
+ * ```
100
+ */
101
+ export function unauthorizedResponse(message = 'Authentication required') {
102
+ return jsonResponse(HttpStatus.UNAUTHORIZED, { error: message });
103
+ }
104
+ /**
105
+ * Creates a 403 Forbidden response.
106
+ *
107
+ * @param message - Error message describing why access is denied
108
+ * @returns DataResponse with status 403
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * return forbiddenResponse('You can only modify your own assets')
113
+ * ```
114
+ */
115
+ export function forbiddenResponse(message) {
116
+ return jsonResponse(HttpStatus.FORBIDDEN, { error: message });
117
+ }
118
+ /**
119
+ * Creates a 404 Not Found response.
120
+ *
121
+ * @param message - Error message (default: 'Resource not found')
122
+ * @returns DataResponse with status 404
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * return notFoundResponse('Asset not found')
127
+ * ```
128
+ */
129
+ export function notFoundResponse(message = 'Resource not found') {
130
+ return jsonResponse(HttpStatus.NOT_FOUND, { error: message });
131
+ }
132
+ /**
133
+ * Creates a validation error response (HTTP 422 Unprocessable Entity).
134
+ *
135
+ * Used when request data fails schema validation.
136
+ *
137
+ * @param message - Validation error message
138
+ * @param errors - Optional array of field-level validation errors
139
+ * @returns DataResponse with status 422
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * return validationErrorResponse('id: must be a positive number')
144
+ * return validationErrorResponse('Validation failed', [{ field: 'id', message: 'must be positive' }])
145
+ * ```
146
+ */
147
+ export function validationErrorResponse(message, errors) {
148
+ const body = { error: message };
149
+ if (errors) {
150
+ body.errors = errors;
151
+ }
152
+ return jsonResponse(HttpStatus.UNPROCESSABLE_ENTITY, body);
153
+ }
154
+ /**
155
+ * Creates a plain text response.
156
+ *
157
+ * @param status - HTTP status code
158
+ * @param content - Text content
159
+ * @returns DataResponse with text/plain content type
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * return textResponse(404, 'Asset not found')
164
+ * ```
165
+ */
166
+ export function textResponse(status, content) {
167
+ return {
168
+ status,
169
+ content,
170
+ headers: { 'Content-Type': 'text/plain' }
171
+ };
172
+ }
173
+ /**
174
+ * Creates a binary/file response.
175
+ *
176
+ * @param content - File content as Buffer
177
+ * @param contentType - MIME type of the file
178
+ * @param filename - Optional filename for Content-Disposition header (triggers download)
179
+ * @returns DataResponse with appropriate content type
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * // For display/use in browser
184
+ * return fileResponse(buffer, 'model/gltf-binary')
185
+ *
186
+ * // For download
187
+ * return fileResponse(buffer, 'model/gltf-binary', 'model.glb')
188
+ * ```
189
+ */
190
+ export function fileResponse(content, contentType, filename) {
191
+ const headers = { 'Content-Type': contentType };
192
+ if (filename) {
193
+ headers['Content-Disposition'] = `attachment; filename="${filename}"`;
194
+ }
195
+ return {
196
+ status: HttpStatus.OK,
197
+ content,
198
+ headers
199
+ };
200
+ }
201
+ /**
202
+ * Creates a 207 Multi-Status response for batch operations.
203
+ *
204
+ * @param message - Summary message
205
+ * @param results - Array of individual operation results
206
+ * @returns DataResponse with status 207
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * return multiStatusResponse('3/5 assets uploaded successfully', results)
211
+ * ```
212
+ */
213
+ export function multiStatusResponse(message, results) {
214
+ return jsonResponse(HttpStatus.MULTI_STATUS, { message, results });
215
+ }
216
+ //# sourceMappingURL=http_responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http_responses.js","sourceRoot":"","sources":["../../src/utils/http_responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { Logger, LogLevel } from './logger.js';
2
+ export { mapToDataRecord } from './map_to_data_record.js';
3
+ export { servableEndpoint } from './servable_endpoint.js';
4
+ export { extractZipContentStream, zipToDict, detectTilesetRootFile, normalizeArchivePaths, extractAndStoreArchive } from './zip_utils.js';
5
+ export type { ExtractedArchiveResult } from './zip_utils.js';
6
+ export { HttpStatus, jsonResponse, successResponse, errorResponse, badRequestResponse, unauthorizedResponse, forbiddenResponse, notFoundResponse, textResponse, fileResponse, multiStatusResponse } from './http_responses.js';
7
+ export type { HttpStatusCode } from './http_responses.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EACH,uBAAuB,EACvB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACzB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EACH,UAAU,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,6 @@
1
+ export { Logger, LogLevel } from './logger.js';
2
+ export { mapToDataRecord } from './map_to_data_record.js';
3
+ export { servableEndpoint } from './servable_endpoint.js';
4
+ export { extractZipContentStream, zipToDict, detectTilesetRootFile, normalizeArchivePaths, extractAndStoreArchive } from './zip_utils.js';
5
+ export { HttpStatus, jsonResponse, successResponse, errorResponse, badRequestResponse, unauthorizedResponse, forbiddenResponse, notFoundResponse, textResponse, fileResponse, multiStatusResponse } from './http_responses.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EACH,uBAAuB,EACvB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACzB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACH,UAAU,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACtB,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Enumeration of available logging levels.
3
+ *
4
+ * Levels are ordered by severity, with lower numbers being more verbose.
5
+ *
6
+ * @enum {number}
7
+ */
8
+ export declare enum LogLevel {
9
+ /** Debug messages - most verbose, includes internal state information */
10
+ DEBUG = 0,
11
+ /** Informational messages - general application flow */
12
+ INFO = 1,
13
+ /** Warning messages - potential issues that don't prevent operation */
14
+ WARN = 2,
15
+ /** Error messages - failures that affect functionality */
16
+ ERROR = 3,
17
+ /** Silent mode - no logging output */
18
+ SILENT = 4
19
+ }
20
+ /**
21
+ * Simple logger class for Digital Twin framework components.
22
+ *
23
+ * Provides structured logging with component identification and configurable levels.
24
+ * Automatically adjusts log level based on environment (silent in tests).
25
+ *
26
+ * @class Logger
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const logger = new Logger('MyCollector', LogLevel.DEBUG)
31
+ * logger.info('Starting data collection')
32
+ * logger.error('Failed to connect', error)
33
+ * ```
34
+ */
35
+ export declare class Logger {
36
+ private readonly componentName;
37
+ private readonly level;
38
+ /**
39
+ * Creates a new logger instance for a component.
40
+ *
41
+ * @param {string} componentName - Name of the component for log prefixing
42
+ * @param {LogLevel} level - Minimum log level to output (defaults based on NODE_ENV)
43
+ */
44
+ constructor(componentName: string, level?: LogLevel);
45
+ /**
46
+ * Logs debug information for development and troubleshooting.
47
+ *
48
+ * @param {string} message - Debug message
49
+ * @param {any} data - Optional additional data to log
50
+ */
51
+ debug(message: string, data?: any): void;
52
+ /**
53
+ * Logs informational messages about normal operation.
54
+ *
55
+ * @param {string} message - Information message
56
+ * @param {any} data - Optional additional data to log
57
+ */
58
+ info(message: string, data?: any): void;
59
+ /**
60
+ * Logs warning messages about potential issues.
61
+ *
62
+ * @param {string} message - Warning message
63
+ * @param {any} data - Optional additional data to log
64
+ */
65
+ warn(message: string, data?: any): void;
66
+ /**
67
+ * Logs error messages about failures and exceptions.
68
+ *
69
+ * @param {string} message - Error message
70
+ * @param {any} error - Optional error object or additional data
71
+ */
72
+ error(message: string, error?: any): void;
73
+ }
74
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oBAAY,QAAQ;IAChB,yEAAyE;IACzE,KAAK,IAAI;IACT,wDAAwD;IACxD,IAAI,IAAI;IACR,uEAAuE;IACvE,IAAI,IAAI;IACR,0DAA0D;IAC1D,KAAK,IAAI;IACT,sCAAsC;IACtC,MAAM,IAAI;CACb;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,MAAM;IAQX,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAR1B;;;;;OAKG;gBAEkB,aAAa,EAAE,MAAM,EACrB,KAAK,GAAE,QAA2E;IAGvG;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMjC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMhC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAMhC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;CAKrC"}