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.
- package/LICENSE +20 -20
- package/README.md +494 -359
- package/dist/auth/apisix_parser.d.ts +141 -0
- package/dist/auth/apisix_parser.d.ts.map +1 -0
- package/dist/auth/apisix_parser.js +161 -0
- package/dist/auth/apisix_parser.js.map +1 -0
- package/dist/auth/auth_config.d.ts +126 -0
- package/dist/auth/auth_config.d.ts.map +1 -0
- package/dist/auth/auth_config.js +169 -0
- package/dist/auth/auth_config.js.map +1 -0
- package/dist/auth/auth_provider.d.ts +118 -0
- package/dist/auth/auth_provider.d.ts.map +1 -0
- package/dist/auth/auth_provider.js +8 -0
- package/dist/auth/auth_provider.js.map +1 -0
- package/dist/auth/auth_provider_factory.d.ts +91 -0
- package/dist/auth/auth_provider_factory.d.ts.map +1 -0
- package/dist/auth/auth_provider_factory.js +146 -0
- package/dist/auth/auth_provider_factory.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/providers/gateway_auth_provider.d.ts +78 -0
- package/dist/auth/providers/gateway_auth_provider.d.ts.map +1 -0
- package/dist/auth/providers/gateway_auth_provider.js +109 -0
- package/dist/auth/providers/gateway_auth_provider.js.map +1 -0
- package/dist/auth/providers/index.d.ts +4 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +4 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/providers/jwt_auth_provider.d.ts +91 -0
- package/dist/auth/providers/jwt_auth_provider.d.ts.map +1 -0
- package/dist/auth/providers/jwt_auth_provider.js +204 -0
- package/dist/auth/providers/jwt_auth_provider.js.map +1 -0
- package/dist/auth/providers/no_auth_provider.d.ts +61 -0
- package/dist/auth/providers/no_auth_provider.d.ts.map +1 -0
- package/dist/auth/providers/no_auth_provider.js +76 -0
- package/dist/auth/providers/no_auth_provider.js.map +1 -0
- package/dist/auth/types.d.ts +100 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/user_service.d.ts +86 -0
- package/dist/auth/user_service.d.ts.map +1 -0
- package/dist/auth/user_service.js +237 -0
- package/dist/auth/user_service.js.map +1 -0
- package/dist/components/assets_manager.d.ts +662 -0
- package/dist/components/assets_manager.d.ts.map +1 -0
- package/dist/components/assets_manager.js +1537 -0
- package/dist/components/assets_manager.js.map +1 -0
- package/dist/components/async_upload.d.ts +20 -0
- package/dist/components/async_upload.d.ts.map +1 -0
- package/dist/components/async_upload.js +10 -0
- package/dist/components/async_upload.js.map +1 -0
- package/dist/components/collector.d.ts +203 -0
- package/dist/components/collector.d.ts.map +1 -0
- package/dist/components/collector.js +214 -0
- package/dist/components/collector.js.map +1 -0
- package/dist/components/custom_table_manager.d.ts +503 -0
- package/dist/components/custom_table_manager.d.ts.map +1 -0
- package/dist/components/custom_table_manager.js +1023 -0
- package/dist/components/custom_table_manager.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 +104 -0
- package/dist/components/handler.d.ts.map +1 -0
- package/dist/components/handler.js +110 -0
- package/dist/components/handler.js.map +1 -0
- package/dist/components/harvester.d.ts +182 -0
- package/dist/components/harvester.d.ts.map +1 -0
- package/dist/components/harvester.js +406 -0
- package/dist/components/harvester.js.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/interfaces.d.ts +126 -0
- package/dist/components/interfaces.d.ts.map +1 -0
- package/dist/components/interfaces.js +8 -0
- package/dist/components/interfaces.js.map +1 -0
- package/dist/components/map_manager.d.ts +61 -0
- package/dist/components/map_manager.d.ts.map +1 -0
- package/dist/components/map_manager.js +242 -0
- package/dist/components/map_manager.js.map +1 -0
- package/dist/components/tileset_manager.d.ts +125 -0
- package/dist/components/tileset_manager.d.ts.map +1 -0
- package/dist/components/tileset_manager.js +623 -0
- package/dist/components/tileset_manager.js.map +1 -0
- package/dist/components/types.d.ts +226 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +8 -0
- package/dist/components/types.js.map +1 -0
- package/dist/database/adapters/knex_database_adapter.d.ts +97 -0
- package/dist/database/adapters/knex_database_adapter.d.ts.map +1 -0
- package/dist/database/adapters/knex_database_adapter.js +729 -0
- package/dist/database/adapters/knex_database_adapter.js.map +1 -0
- package/dist/database/database_adapter.d.ts +262 -0
- package/dist/database/database_adapter.d.ts.map +1 -0
- package/dist/database/database_adapter.js +46 -0
- package/dist/database/database_adapter.js.map +1 -0
- package/dist/engine/digital_twin_engine.d.ts +295 -0
- package/dist/engine/digital_twin_engine.d.ts.map +1 -0
- package/dist/engine/digital_twin_engine.js +907 -0
- package/dist/engine/digital_twin_engine.js.map +1 -0
- package/dist/engine/endpoints.d.ts +47 -0
- package/dist/engine/endpoints.d.ts.map +1 -0
- package/dist/engine/endpoints.js +88 -0
- package/dist/engine/endpoints.js.map +1 -0
- package/dist/engine/error_handler.d.ts +20 -0
- package/dist/engine/error_handler.d.ts.map +1 -0
- package/dist/engine/error_handler.js +69 -0
- package/dist/engine/error_handler.js.map +1 -0
- package/dist/engine/events.d.ts +93 -0
- package/dist/engine/events.d.ts.map +1 -0
- package/dist/engine/events.js +71 -0
- package/dist/engine/events.js.map +1 -0
- package/dist/engine/health.d.ts +112 -0
- package/dist/engine/health.d.ts.map +1 -0
- package/dist/engine/health.js +190 -0
- package/dist/engine/health.js.map +1 -0
- package/dist/engine/initializer.d.ts +62 -0
- package/dist/engine/initializer.d.ts.map +1 -0
- package/dist/engine/initializer.js +108 -0
- package/dist/engine/initializer.js.map +1 -0
- package/dist/engine/queue_manager.d.ts +87 -0
- package/dist/engine/queue_manager.d.ts.map +1 -0
- package/dist/engine/queue_manager.js +196 -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/engine/upload_processor.d.ts +36 -0
- package/dist/engine/upload_processor.d.ts.map +1 -0
- package/dist/engine/upload_processor.js +113 -0
- package/dist/engine/upload_processor.js.map +1 -0
- package/dist/env/env.d.ts +134 -0
- package/dist/env/env.d.ts.map +1 -0
- package/dist/env/env.js +177 -0
- package/dist/env/env.js.map +1 -0
- package/dist/errors/index.d.ts +94 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +149 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/openapi/generator.d.ts +93 -0
- package/dist/openapi/generator.d.ts.map +1 -0
- package/dist/openapi/generator.js +293 -0
- package/dist/openapi/generator.js.map +1 -0
- package/dist/openapi/index.d.ts +9 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +9 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/types.d.ts +182 -0
- package/dist/openapi/types.d.ts.map +1 -0
- package/dist/openapi/types.js +16 -0
- package/dist/openapi/types.js.map +1 -0
- package/dist/storage/adapters/local_storage_service.d.ts +57 -0
- package/dist/storage/adapters/local_storage_service.d.ts.map +1 -0
- package/dist/storage/adapters/local_storage_service.js +132 -0
- package/dist/storage/adapters/local_storage_service.js.map +1 -0
- package/dist/storage/adapters/ovh_storage_service.d.ts +72 -0
- package/dist/storage/adapters/ovh_storage_service.d.ts.map +1 -0
- package/dist/storage/adapters/ovh_storage_service.js +205 -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 +43 -0
- package/dist/storage/storage_factory.js.map +1 -0
- package/dist/storage/storage_service.d.ts +163 -0
- package/dist/storage/storage_service.d.ts.map +1 -0
- package/dist/storage/storage_service.js +58 -0
- package/dist/storage/storage_service.js.map +1 -0
- package/dist/types/data_record.d.ts +123 -0
- package/dist/types/data_record.d.ts.map +1 -0
- package/dist/types/data_record.js +8 -0
- package/dist/types/data_record.js.map +1 -0
- package/dist/utils/graceful_shutdown.d.ts +44 -0
- package/dist/utils/graceful_shutdown.d.ts.map +1 -0
- package/dist/utils/graceful_shutdown.js +79 -0
- package/dist/utils/graceful_shutdown.js.map +1 -0
- package/dist/utils/http_responses.d.ts +175 -0
- package/dist/utils/http_responses.d.ts.map +1 -0
- package/dist/utils/http_responses.js +216 -0
- package/dist/utils/http_responses.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +74 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +92 -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 +36 -0
- package/dist/utils/map_to_data_record.js.map +1 -0
- package/dist/utils/safe_async.d.ts +50 -0
- package/dist/utils/safe_async.d.ts.map +1 -0
- package/dist/utils/safe_async.js +90 -0
- package/dist/utils/safe_async.js.map +1 -0
- package/dist/utils/servable_endpoint.d.ts +63 -0
- package/dist/utils/servable_endpoint.d.ts.map +1 -0
- package/dist/utils/servable_endpoint.js +67 -0
- package/dist/utils/servable_endpoint.js.map +1 -0
- package/dist/utils/zip_utils.d.ts +66 -0
- package/dist/utils/zip_utils.d.ts.map +1 -0
- package/dist/utils/zip_utils.js +169 -0
- package/dist/utils/zip_utils.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +7 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/schemas.d.ts +273 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +82 -0
- package/dist/validation/schemas.js.map +1 -0
- package/dist/validation/validate.d.ts +49 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +110 -0
- package/dist/validation/validate.js.map +1 -0
- 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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,GAAG;IACjB,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,oBAAoB,EAAE,GAAG;IACzB,qBAAqB,EAAE,GAAG;CACpB,CAAA;AAIV;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAY;IACrD,OAAO;QACH,MAAM;QACN,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAClD,CAAA;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,OAAO,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,MAAe;IACzD,oDAAoD;IACpD,MAAM,UAAU,GACZ,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAA;IACvG,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtE,OAAO,YAAY,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACvD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAC9C,OAAO,YAAY,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACnE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB,yBAAyB;IAC5E,OAAO,YAAY,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACpE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC7C,OAAO,YAAY,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACjE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,oBAAoB;IACnE,OAAO,YAAY,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACjE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CACnC,OAAe,EACf,MAAkD;IAElD,MAAM,IAAI,GAA0E,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;IACtG,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IACD,OAAO,YAAY,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAe;IACxD,OAAO;QACH,MAAM;QACN,OAAO;QACP,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;KAC5C,CAAA;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,WAAmB,EAAE,QAAiB;IAChF,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,WAAW,EAAE,CAAA;IAEvE,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,qBAAqB,CAAC,GAAG,yBAAyB,QAAQ,GAAG,CAAA;IACzE,CAAC;IAED,OAAO;QACH,MAAM,EAAE,UAAU,CAAC,EAAE;QACrB,OAAO;QACP,OAAO;KACV,CAAA;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAkB;IACnE,OAAO,YAAY,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -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"}
|