digitaltwin-core 0.14.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +218 -1
  2. package/dist/auth/apisix_parser.d.ts +56 -56
  3. package/dist/auth/apisix_parser.d.ts.map +1 -1
  4. package/dist/auth/apisix_parser.js +72 -86
  5. package/dist/auth/apisix_parser.js.map +1 -1
  6. package/dist/auth/auth_provider.d.ts +118 -0
  7. package/dist/auth/auth_provider.d.ts.map +1 -0
  8. package/dist/auth/auth_provider.js +8 -0
  9. package/dist/auth/auth_provider.js.map +1 -0
  10. package/dist/auth/auth_provider_factory.d.ts +91 -0
  11. package/dist/auth/auth_provider_factory.d.ts.map +1 -0
  12. package/dist/auth/auth_provider_factory.js +146 -0
  13. package/dist/auth/auth_provider_factory.js.map +1 -0
  14. package/dist/auth/index.d.ts +4 -1
  15. package/dist/auth/index.d.ts.map +1 -1
  16. package/dist/auth/index.js +3 -0
  17. package/dist/auth/index.js.map +1 -1
  18. package/dist/auth/providers/gateway_auth_provider.d.ts +78 -0
  19. package/dist/auth/providers/gateway_auth_provider.d.ts.map +1 -0
  20. package/dist/auth/providers/gateway_auth_provider.js +109 -0
  21. package/dist/auth/providers/gateway_auth_provider.js.map +1 -0
  22. package/dist/auth/providers/index.d.ts +4 -0
  23. package/dist/auth/providers/index.d.ts.map +1 -0
  24. package/dist/auth/providers/index.js +4 -0
  25. package/dist/auth/providers/index.js.map +1 -0
  26. package/dist/auth/providers/jwt_auth_provider.d.ts +91 -0
  27. package/dist/auth/providers/jwt_auth_provider.d.ts.map +1 -0
  28. package/dist/auth/providers/jwt_auth_provider.js +204 -0
  29. package/dist/auth/providers/jwt_auth_provider.js.map +1 -0
  30. package/dist/auth/providers/no_auth_provider.d.ts +61 -0
  31. package/dist/auth/providers/no_auth_provider.d.ts.map +1 -0
  32. package/dist/auth/providers/no_auth_provider.js +76 -0
  33. package/dist/auth/providers/no_auth_provider.js.map +1 -0
  34. package/dist/auth/types.d.ts +5 -3
  35. package/dist/auth/types.d.ts.map +1 -1
  36. package/dist/components/assets_manager.d.ts +1 -1
  37. package/dist/components/assets_manager.d.ts.map +1 -1
  38. package/dist/components/assets_manager.js +54 -48
  39. package/dist/components/assets_manager.js.map +1 -1
  40. package/dist/components/collector.d.ts.map +1 -1
  41. package/dist/components/collector.js +30 -18
  42. package/dist/components/collector.js.map +1 -1
  43. package/dist/components/custom_table_manager.d.ts.map +1 -1
  44. package/dist/components/custom_table_manager.js +36 -65
  45. package/dist/components/custom_table_manager.js.map +1 -1
  46. package/dist/components/global_assets_handler.d.ts +4 -2
  47. package/dist/components/global_assets_handler.d.ts.map +1 -1
  48. package/dist/components/global_assets_handler.js.map +1 -1
  49. package/dist/components/harvester.d.ts.map +1 -1
  50. package/dist/components/harvester.js +46 -33
  51. package/dist/components/harvester.js.map +1 -1
  52. package/dist/components/interfaces.d.ts +3 -2
  53. package/dist/components/interfaces.d.ts.map +1 -1
  54. package/dist/components/map_manager.d.ts.map +1 -1
  55. package/dist/components/map_manager.js.map +1 -1
  56. package/dist/components/tileset_manager.d.ts +2 -1
  57. package/dist/components/tileset_manager.d.ts.map +1 -1
  58. package/dist/components/tileset_manager.js +20 -15
  59. package/dist/components/tileset_manager.js.map +1 -1
  60. package/dist/database/adapters/knex_database_adapter.d.ts +6 -1
  61. package/dist/database/adapters/knex_database_adapter.d.ts.map +1 -1
  62. package/dist/database/adapters/knex_database_adapter.js +118 -36
  63. package/dist/database/adapters/knex_database_adapter.js.map +1 -1
  64. package/dist/database/database_adapter.d.ts +13 -1
  65. package/dist/database/database_adapter.d.ts.map +1 -1
  66. package/dist/database/database_adapter.js.map +1 -1
  67. package/dist/engine/component_types.d.ts +95 -0
  68. package/dist/engine/component_types.d.ts.map +1 -0
  69. package/dist/engine/component_types.js +93 -0
  70. package/dist/engine/component_types.js.map +1 -0
  71. package/dist/engine/digital_twin_engine.d.ts +121 -6
  72. package/dist/engine/digital_twin_engine.d.ts.map +1 -1
  73. package/dist/engine/digital_twin_engine.js +402 -74
  74. package/dist/engine/digital_twin_engine.js.map +1 -1
  75. package/dist/engine/endpoints.d.ts.map +1 -1
  76. package/dist/engine/endpoints.js +35 -3
  77. package/dist/engine/endpoints.js.map +1 -1
  78. package/dist/engine/error_handler.d.ts +20 -0
  79. package/dist/engine/error_handler.d.ts.map +1 -0
  80. package/dist/engine/error_handler.js +69 -0
  81. package/dist/engine/error_handler.js.map +1 -0
  82. package/dist/engine/events.d.ts +1 -1
  83. package/dist/engine/events.d.ts.map +1 -1
  84. package/dist/engine/events.js.map +1 -1
  85. package/dist/engine/health.d.ts +112 -0
  86. package/dist/engine/health.d.ts.map +1 -0
  87. package/dist/engine/health.js +190 -0
  88. package/dist/engine/health.js.map +1 -0
  89. package/dist/engine/initializer.d.ts.map +1 -1
  90. package/dist/engine/initializer.js +6 -4
  91. package/dist/engine/initializer.js.map +1 -1
  92. package/dist/engine/scheduler.d.ts.map +1 -1
  93. package/dist/engine/scheduler.js +17 -9
  94. package/dist/engine/scheduler.js.map +1 -1
  95. package/dist/engine/upload_processor.d.ts.map +1 -1
  96. package/dist/engine/upload_processor.js +24 -12
  97. package/dist/engine/upload_processor.js.map +1 -1
  98. package/dist/errors/index.d.ts +94 -0
  99. package/dist/errors/index.d.ts.map +1 -0
  100. package/dist/errors/index.js +149 -0
  101. package/dist/errors/index.js.map +1 -0
  102. package/dist/index.d.ts +9 -0
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +13 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/loader/component_loader.d.ts +128 -0
  107. package/dist/loader/component_loader.d.ts.map +1 -0
  108. package/dist/loader/component_loader.js +330 -0
  109. package/dist/loader/component_loader.js.map +1 -0
  110. package/dist/loader/index.d.ts +19 -0
  111. package/dist/loader/index.d.ts.map +1 -0
  112. package/dist/loader/index.js +19 -0
  113. package/dist/loader/index.js.map +1 -0
  114. package/dist/storage/adapters/local_storage_service.d.ts +6 -0
  115. package/dist/storage/adapters/local_storage_service.d.ts.map +1 -1
  116. package/dist/storage/adapters/local_storage_service.js +26 -4
  117. package/dist/storage/adapters/local_storage_service.js.map +1 -1
  118. package/dist/storage/adapters/ovh_storage_service.d.ts.map +1 -1
  119. package/dist/storage/adapters/ovh_storage_service.js +5 -6
  120. package/dist/storage/adapters/ovh_storage_service.js.map +1 -1
  121. package/dist/storage/storage_factory.d.ts.map +1 -1
  122. package/dist/storage/storage_factory.js +4 -1
  123. package/dist/storage/storage_factory.js.map +1 -1
  124. package/dist/storage/storage_service.d.ts.map +1 -1
  125. package/dist/storage/storage_service.js +6 -2
  126. package/dist/storage/storage_service.js.map +1 -1
  127. package/dist/types/http.d.ts +156 -0
  128. package/dist/types/http.d.ts.map +1 -0
  129. package/dist/types/http.js +8 -0
  130. package/dist/types/http.js.map +1 -0
  131. package/dist/utils/graceful_shutdown.d.ts +44 -0
  132. package/dist/utils/graceful_shutdown.d.ts.map +1 -0
  133. package/dist/utils/graceful_shutdown.js +79 -0
  134. package/dist/utils/graceful_shutdown.js.map +1 -0
  135. package/dist/utils/http_responses.d.ts +20 -0
  136. package/dist/utils/http_responses.d.ts.map +1 -1
  137. package/dist/utils/http_responses.js +28 -2
  138. package/dist/utils/http_responses.js.map +1 -1
  139. package/dist/utils/logger.d.ts +8 -8
  140. package/dist/utils/logger.d.ts.map +1 -1
  141. package/dist/utils/logger.js +8 -8
  142. package/dist/utils/logger.js.map +1 -1
  143. package/dist/utils/safe_async.d.ts +50 -0
  144. package/dist/utils/safe_async.d.ts.map +1 -0
  145. package/dist/utils/safe_async.js +90 -0
  146. package/dist/utils/safe_async.js.map +1 -0
  147. package/dist/validation/index.d.ts +3 -0
  148. package/dist/validation/index.d.ts.map +1 -0
  149. package/dist/validation/index.js +7 -0
  150. package/dist/validation/index.js.map +1 -0
  151. package/dist/validation/schemas.d.ts +273 -0
  152. package/dist/validation/schemas.d.ts.map +1 -0
  153. package/dist/validation/schemas.js +82 -0
  154. package/dist/validation/schemas.js.map +1 -0
  155. package/dist/validation/validate.d.ts +49 -0
  156. package/dist/validation/validate.d.ts.map +1 -0
  157. package/dist/validation/validate.js +110 -0
  158. package/dist/validation/validate.js.map +1 -0
  159. package/package.json +14 -8
@@ -0,0 +1,110 @@
1
+ import vine, { errors } from '@vinejs/vine';
2
+ import { ValidationError } from '../errors/index.js';
3
+ /**
4
+ * Validates data using a pre-compiled VineJS validator.
5
+ * @param validator - Compiled VineJS validator
6
+ * @param data - Data to validate
7
+ * @param context - Optional context for error messages
8
+ * @returns Validated and typed data
9
+ * @throws ValidationError if validation fails
10
+ */
11
+ export async function validateData(validator, data, context) {
12
+ try {
13
+ const result = await validator.validate(data);
14
+ return result;
15
+ }
16
+ catch (error) {
17
+ if (error instanceof errors.E_VALIDATION_ERROR) {
18
+ const messages = error.messages
19
+ .map((e) => `${e.field}: ${e.message}`)
20
+ .join(', ');
21
+ throw new ValidationError(context ? `${context}: ${messages}` : messages, {
22
+ errors: error.messages
23
+ });
24
+ }
25
+ throw error;
26
+ }
27
+ }
28
+ /**
29
+ * Validates data and returns result without throwing.
30
+ * Useful for optional validation or when you want to handle errors manually.
31
+ * @param validator - Compiled VineJS validator
32
+ * @param data - Data to validate
33
+ * @returns Object with success status, data (if valid), or errors (if invalid)
34
+ */
35
+ export async function safeValidate(validator, data) {
36
+ try {
37
+ const validated = await validator.validate(data);
38
+ return { success: true, data: validated };
39
+ }
40
+ catch (error) {
41
+ if (error instanceof errors.E_VALIDATION_ERROR) {
42
+ return { success: false, errors: error.messages };
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ /**
48
+ * Validates query parameters, coercing string values to appropriate types.
49
+ * Query params from Express are always strings, so we need to convert them.
50
+ * @param validator - Compiled VineJS validator
51
+ * @param query - Query object from Express request
52
+ * @param context - Optional context for error messages
53
+ * @returns Validated and typed query parameters
54
+ */
55
+ export async function validateQuery(validator, query, context) {
56
+ // Coerce query string values to appropriate types
57
+ const coerced = {};
58
+ for (const [key, value] of Object.entries(query)) {
59
+ if (value === undefined || value === '') {
60
+ continue; // Skip empty values
61
+ }
62
+ if (typeof value === 'string') {
63
+ // Try to coerce to number
64
+ const num = Number(value);
65
+ if (!isNaN(num) && value.trim() !== '') {
66
+ coerced[key] = num;
67
+ }
68
+ // Try to coerce to boolean
69
+ else if (value.toLowerCase() === 'true') {
70
+ coerced[key] = true;
71
+ }
72
+ else if (value.toLowerCase() === 'false') {
73
+ coerced[key] = false;
74
+ }
75
+ else {
76
+ coerced[key] = value;
77
+ }
78
+ }
79
+ else {
80
+ coerced[key] = value;
81
+ }
82
+ }
83
+ return validateData(validator, coerced, context);
84
+ }
85
+ /**
86
+ * Validates path parameters (e.g., :id in routes).
87
+ * @param validator - Compiled VineJS validator
88
+ * @param params - Params object from Express request
89
+ * @param context - Optional context for error messages
90
+ * @returns Validated and typed parameters
91
+ */
92
+ export async function validateParams(validator, params, context) {
93
+ // Coerce param values (always strings from Express)
94
+ const coerced = {};
95
+ for (const [key, value] of Object.entries(params)) {
96
+ if (value === undefined)
97
+ continue;
98
+ const num = Number(value);
99
+ if (!isNaN(num) && value.trim() !== '') {
100
+ coerced[key] = num;
101
+ }
102
+ else {
103
+ coerced[key] = value;
104
+ }
105
+ }
106
+ return validateData(validator, coerced, context);
107
+ }
108
+ // Re-export vine for custom schema creation
109
+ export { vine };
110
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validation/validate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "digitaltwin-core",
3
- "version": "0.14.3",
3
+ "version": "1.0.1",
4
4
  "description": "Minimalist framework to collect and handle data in a Digital Twin project",
5
5
  "license": "MIT",
6
6
  "author": "Axel Hoffmann",
@@ -23,6 +23,8 @@
23
23
  "dev": "tsc --watch",
24
24
  "clean": "rimraf dist tsconfig.tsbuildinfo",
25
25
  "test": "node -r ./bin/set-test-env.cjs --import ts-node-maintained/register/esm --enable-source-maps bin/test.ts",
26
+ "test:coverage": "c8 node -r ./bin/set-test-env.cjs --import ts-node-maintained/register/esm --enable-source-maps bin/test.ts",
27
+ "test:coverage:html": "c8 --reporter=html node -r ./bin/set-test-env.cjs --import ts-node-maintained/register/esm --enable-source-maps bin/test.ts",
26
28
  "lint": "eslint src/**/*.ts",
27
29
  "lint:fix": "eslint src/**/*.ts --fix",
28
30
  "format": "prettier --write \"src/**/*.ts\"",
@@ -56,12 +58,14 @@
56
58
  "@japa/assert": "^4.1.0",
57
59
  "@japa/runner": "^4.3.0",
58
60
  "@testcontainers/redis": "^11.3.1",
61
+ "@types/better-sqlite3": "^7.6.13",
62
+ "@types/compression": "^1.7.5",
59
63
  "@types/cors": "^2.8.19",
60
- "@types/ioredis-mock": "^8.2.6",
61
- "@types/jszip": "^3.4.0",
64
+ "@types/jsonwebtoken": "^9.0.10",
62
65
  "@types/lodash": "^4.17.20",
63
66
  "@types/multer": "^2.0.0",
64
- "@types/uuid": "^10.0.0",
67
+ "better-sqlite3": "^12.6.0",
68
+ "c8": "^10.1.3",
65
69
  "eslint": "^9.0.0",
66
70
  "globals": "^15.0.0",
67
71
  "prettier": "^3.0.0",
@@ -91,14 +95,16 @@
91
95
  }
92
96
  },
93
97
  "dependencies": {
94
- "@aws-sdk/client-s3": "^3.850.0",
98
+ "@aws-sdk/client-s3": "^3.981.0",
99
+ "@vinejs/vine": "^4.2.0",
95
100
  "bullmq": "^5.56.5",
101
+ "compression": "^1.7.5",
96
102
  "cors": "^2.8.5",
97
103
  "ioredis": "^5.6.1",
104
+ "jsonwebtoken": "^9.0.3",
98
105
  "jszip": "^3.10.1",
99
- "lodash": "^4.17.21",
106
+ "lodash": "^4.17.23",
100
107
  "multer": "^2.0.2",
101
- "ultimate-express": "^2.0.9",
102
- "uuid": "^11.1.0"
108
+ "ultimate-express": "^2.0.9"
103
109
  }
104
110
  }