digitaltwin-core 0.13.3 → 0.14.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 (169) hide show
  1. package/package.json +101 -106
  2. package/dist/auth/apisix_parser.d.ts +0 -146
  3. package/dist/auth/apisix_parser.d.ts.map +0 -1
  4. package/dist/auth/apisix_parser.js +0 -185
  5. package/dist/auth/apisix_parser.js.map +0 -1
  6. package/dist/auth/auth_config.d.ts +0 -126
  7. package/dist/auth/auth_config.d.ts.map +0 -1
  8. package/dist/auth/auth_config.js +0 -169
  9. package/dist/auth/auth_config.js.map +0 -1
  10. package/dist/auth/index.d.ts +0 -5
  11. package/dist/auth/index.d.ts.map +0 -1
  12. package/dist/auth/index.js +0 -4
  13. package/dist/auth/index.js.map +0 -1
  14. package/dist/auth/types.d.ts +0 -100
  15. package/dist/auth/types.d.ts.map +0 -1
  16. package/dist/auth/types.js +0 -2
  17. package/dist/auth/types.js.map +0 -1
  18. package/dist/auth/user_service.d.ts +0 -86
  19. package/dist/auth/user_service.d.ts.map +0 -1
  20. package/dist/auth/user_service.js +0 -237
  21. package/dist/auth/user_service.js.map +0 -1
  22. package/dist/components/assets_manager.d.ts +0 -662
  23. package/dist/components/assets_manager.d.ts.map +0 -1
  24. package/dist/components/assets_manager.js +0 -1529
  25. package/dist/components/assets_manager.js.map +0 -1
  26. package/dist/components/async_upload.d.ts +0 -20
  27. package/dist/components/async_upload.d.ts.map +0 -1
  28. package/dist/components/async_upload.js +0 -10
  29. package/dist/components/async_upload.js.map +0 -1
  30. package/dist/components/collector.d.ts +0 -203
  31. package/dist/components/collector.d.ts.map +0 -1
  32. package/dist/components/collector.js +0 -202
  33. package/dist/components/collector.js.map +0 -1
  34. package/dist/components/custom_table_manager.d.ts +0 -503
  35. package/dist/components/custom_table_manager.d.ts.map +0 -1
  36. package/dist/components/custom_table_manager.js +0 -1052
  37. package/dist/components/custom_table_manager.js.map +0 -1
  38. package/dist/components/global_assets_handler.d.ts +0 -63
  39. package/dist/components/global_assets_handler.d.ts.map +0 -1
  40. package/dist/components/global_assets_handler.js +0 -127
  41. package/dist/components/global_assets_handler.js.map +0 -1
  42. package/dist/components/handler.d.ts +0 -104
  43. package/dist/components/handler.d.ts.map +0 -1
  44. package/dist/components/handler.js +0 -110
  45. package/dist/components/handler.js.map +0 -1
  46. package/dist/components/harvester.d.ts +0 -182
  47. package/dist/components/harvester.d.ts.map +0 -1
  48. package/dist/components/harvester.js +0 -393
  49. package/dist/components/harvester.js.map +0 -1
  50. package/dist/components/index.d.ts +0 -11
  51. package/dist/components/index.d.ts.map +0 -1
  52. package/dist/components/index.js +0 -9
  53. package/dist/components/index.js.map +0 -1
  54. package/dist/components/interfaces.d.ts +0 -126
  55. package/dist/components/interfaces.d.ts.map +0 -1
  56. package/dist/components/interfaces.js +0 -8
  57. package/dist/components/interfaces.js.map +0 -1
  58. package/dist/components/map_manager.d.ts +0 -61
  59. package/dist/components/map_manager.d.ts.map +0 -1
  60. package/dist/components/map_manager.js +0 -242
  61. package/dist/components/map_manager.js.map +0 -1
  62. package/dist/components/tileset_manager.d.ts +0 -125
  63. package/dist/components/tileset_manager.d.ts.map +0 -1
  64. package/dist/components/tileset_manager.js +0 -618
  65. package/dist/components/tileset_manager.js.map +0 -1
  66. package/dist/components/types.d.ts +0 -226
  67. package/dist/components/types.d.ts.map +0 -1
  68. package/dist/components/types.js +0 -8
  69. package/dist/components/types.js.map +0 -1
  70. package/dist/database/adapters/knex_database_adapter.d.ts +0 -92
  71. package/dist/database/adapters/knex_database_adapter.d.ts.map +0 -1
  72. package/dist/database/adapters/knex_database_adapter.js +0 -647
  73. package/dist/database/adapters/knex_database_adapter.js.map +0 -1
  74. package/dist/database/database_adapter.d.ts +0 -251
  75. package/dist/database/database_adapter.d.ts.map +0 -1
  76. package/dist/database/database_adapter.js +0 -46
  77. package/dist/database/database_adapter.js.map +0 -1
  78. package/dist/engine/digital_twin_engine.d.ts +0 -253
  79. package/dist/engine/digital_twin_engine.d.ts.map +0 -1
  80. package/dist/engine/digital_twin_engine.js +0 -790
  81. package/dist/engine/digital_twin_engine.js.map +0 -1
  82. package/dist/engine/endpoints.d.ts +0 -47
  83. package/dist/engine/endpoints.d.ts.map +0 -1
  84. package/dist/engine/endpoints.js +0 -56
  85. package/dist/engine/endpoints.js.map +0 -1
  86. package/dist/engine/events.d.ts +0 -93
  87. package/dist/engine/events.d.ts.map +0 -1
  88. package/dist/engine/events.js +0 -71
  89. package/dist/engine/events.js.map +0 -1
  90. package/dist/engine/initializer.d.ts +0 -62
  91. package/dist/engine/initializer.d.ts.map +0 -1
  92. package/dist/engine/initializer.js +0 -108
  93. package/dist/engine/initializer.js.map +0 -1
  94. package/dist/engine/queue_manager.d.ts +0 -87
  95. package/dist/engine/queue_manager.d.ts.map +0 -1
  96. package/dist/engine/queue_manager.js +0 -196
  97. package/dist/engine/queue_manager.js.map +0 -1
  98. package/dist/engine/scheduler.d.ts +0 -30
  99. package/dist/engine/scheduler.d.ts.map +0 -1
  100. package/dist/engine/scheduler.js +0 -370
  101. package/dist/engine/scheduler.js.map +0 -1
  102. package/dist/engine/upload_processor.d.ts +0 -36
  103. package/dist/engine/upload_processor.d.ts.map +0 -1
  104. package/dist/engine/upload_processor.js +0 -101
  105. package/dist/engine/upload_processor.js.map +0 -1
  106. package/dist/env/env.d.ts +0 -134
  107. package/dist/env/env.d.ts.map +0 -1
  108. package/dist/env/env.js +0 -177
  109. package/dist/env/env.js.map +0 -1
  110. package/dist/index.d.ts +0 -49
  111. package/dist/index.d.ts.map +0 -1
  112. package/dist/index.js +0 -57
  113. package/dist/index.js.map +0 -1
  114. package/dist/openapi/generator.d.ts +0 -93
  115. package/dist/openapi/generator.d.ts.map +0 -1
  116. package/dist/openapi/generator.js +0 -293
  117. package/dist/openapi/generator.js.map +0 -1
  118. package/dist/openapi/index.d.ts +0 -9
  119. package/dist/openapi/index.d.ts.map +0 -1
  120. package/dist/openapi/index.js +0 -9
  121. package/dist/openapi/index.js.map +0 -1
  122. package/dist/openapi/types.d.ts +0 -182
  123. package/dist/openapi/types.d.ts.map +0 -1
  124. package/dist/openapi/types.js +0 -16
  125. package/dist/openapi/types.js.map +0 -1
  126. package/dist/storage/adapters/local_storage_service.d.ts +0 -51
  127. package/dist/storage/adapters/local_storage_service.d.ts.map +0 -1
  128. package/dist/storage/adapters/local_storage_service.js +0 -110
  129. package/dist/storage/adapters/local_storage_service.js.map +0 -1
  130. package/dist/storage/adapters/ovh_storage_service.d.ts +0 -61
  131. package/dist/storage/adapters/ovh_storage_service.d.ts.map +0 -1
  132. package/dist/storage/adapters/ovh_storage_service.js +0 -172
  133. package/dist/storage/adapters/ovh_storage_service.js.map +0 -1
  134. package/dist/storage/storage_factory.d.ts +0 -14
  135. package/dist/storage/storage_factory.d.ts.map +0 -1
  136. package/dist/storage/storage_factory.js +0 -36
  137. package/dist/storage/storage_factory.js.map +0 -1
  138. package/dist/storage/storage_service.d.ts +0 -163
  139. package/dist/storage/storage_service.d.ts.map +0 -1
  140. package/dist/storage/storage_service.js +0 -54
  141. package/dist/storage/storage_service.js.map +0 -1
  142. package/dist/types/data_record.d.ts +0 -123
  143. package/dist/types/data_record.d.ts.map +0 -1
  144. package/dist/types/data_record.js +0 -8
  145. package/dist/types/data_record.js.map +0 -1
  146. package/dist/utils/http_responses.d.ts +0 -155
  147. package/dist/utils/http_responses.d.ts.map +0 -1
  148. package/dist/utils/http_responses.js +0 -190
  149. package/dist/utils/http_responses.js.map +0 -1
  150. package/dist/utils/index.d.ts +0 -8
  151. package/dist/utils/index.d.ts.map +0 -1
  152. package/dist/utils/index.js +0 -6
  153. package/dist/utils/index.js.map +0 -1
  154. package/dist/utils/logger.d.ts +0 -74
  155. package/dist/utils/logger.d.ts.map +0 -1
  156. package/dist/utils/logger.js +0 -92
  157. package/dist/utils/logger.js.map +0 -1
  158. package/dist/utils/map_to_data_record.d.ts +0 -10
  159. package/dist/utils/map_to_data_record.d.ts.map +0 -1
  160. package/dist/utils/map_to_data_record.js +0 -36
  161. package/dist/utils/map_to_data_record.js.map +0 -1
  162. package/dist/utils/servable_endpoint.d.ts +0 -63
  163. package/dist/utils/servable_endpoint.d.ts.map +0 -1
  164. package/dist/utils/servable_endpoint.js +0 -67
  165. package/dist/utils/servable_endpoint.js.map +0 -1
  166. package/dist/utils/zip_utils.d.ts +0 -66
  167. package/dist/utils/zip_utils.d.ts.map +0 -1
  168. package/dist/utils/zip_utils.js +0 -169
  169. package/dist/utils/zip_utils.js.map +0 -1
@@ -1,110 +0,0 @@
1
- import { StorageService } from '../storage_service.js';
2
- import fs from 'fs/promises';
3
- import path from 'path';
4
- /**
5
- * Local filesystem-based implementation of the StorageService.
6
- * Saves files in a configured folder using a timestamp as filename.
7
- */
8
- export class LocalStorageService extends StorageService {
9
- constructor(baseDir = 'data') {
10
- super();
11
- this.baseDir = baseDir;
12
- }
13
- /**
14
- * Saves the given buffer to disk under a unique filename.
15
- * @param buffer - Content to save
16
- * @param collectorName - Name of the collector (used for folder)
17
- * @param extension - Optional file extension (e.g. 'json', 'txt')
18
- * @returns Relative path to the saved file
19
- */
20
- async save(buffer, collectorName, extension) {
21
- const now = new Date();
22
- const timestamp = now.toISOString().replace(/[:.]/g, '-');
23
- const folder = collectorName || 'default';
24
- const filename = extension ? `${timestamp}.${extension}` : timestamp;
25
- const dirPath = path.join(this.baseDir, folder);
26
- const filePath = path.join(dirPath, filename);
27
- await fs.mkdir(dirPath, { recursive: true });
28
- await fs.writeFile(filePath, buffer);
29
- // return relative path (e.g., 'mycollector/2025-07-07T15-45-22-456Z.json')
30
- return path.join(folder, filename);
31
- }
32
- /**
33
- * Retrieves a file as buffer using its relative path.
34
- * @param relativePath - Filename previously returned by `save`
35
- * @returns File content as Buffer
36
- */
37
- async retrieve(relativePath) {
38
- const filePath = path.join(this.baseDir, relativePath);
39
- return fs.readFile(filePath);
40
- }
41
- /**
42
- * Deletes a stored file.
43
- * @param relativePath - Filename previously returned by `save`
44
- */
45
- async delete(relativePath) {
46
- const filePath = path.join(this.baseDir, relativePath);
47
- await fs.rm(filePath, { force: true });
48
- }
49
- /**
50
- * Saves the given buffer to disk at a specific path (preserves filename).
51
- * Unlike save(), this method does not auto-generate a timestamp filename.
52
- * @param buffer - Content to save
53
- * @param relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
54
- * @returns The same relative path that was provided
55
- */
56
- async saveWithPath(buffer, relativePath) {
57
- const filePath = path.join(this.baseDir, relativePath);
58
- const dirPath = path.dirname(filePath);
59
- await fs.mkdir(dirPath, { recursive: true });
60
- await fs.writeFile(filePath, buffer);
61
- return relativePath;
62
- }
63
- /**
64
- * Returns a local file path for the stored file.
65
- * Note: For local storage, this returns a relative file path, not an HTTP URL.
66
- * In production, use a cloud storage service (OVH, S3) for public URLs.
67
- * @param relativePath - The storage path of the file
68
- * @returns The file path (relative to baseDir)
69
- */
70
- getPublicUrl(relativePath) {
71
- // For local storage, return the file path
72
- // In a real deployment, you'd need Express static serving or similar
73
- return path.join(this.baseDir, relativePath);
74
- }
75
- /**
76
- * Deletes all files under a given prefix (folder).
77
- * @param prefix - The folder/prefix to delete (e.g., 'tilesets/123')
78
- * @returns Number of files deleted
79
- */
80
- async deleteByPrefix(prefix) {
81
- const folderPath = path.join(this.baseDir, prefix);
82
- try {
83
- // Check if folder exists
84
- await fs.access(folderPath);
85
- // Count files before deletion
86
- const countFiles = async (dir) => {
87
- let count = 0;
88
- const entries = await fs.readdir(dir, { withFileTypes: true });
89
- for (const entry of entries) {
90
- if (entry.isDirectory()) {
91
- count += await countFiles(path.join(dir, entry.name));
92
- }
93
- else {
94
- count++;
95
- }
96
- }
97
- return count;
98
- };
99
- const fileCount = await countFiles(folderPath);
100
- // Delete folder recursively
101
- await fs.rm(folderPath, { recursive: true, force: true });
102
- return fileCount;
103
- }
104
- catch {
105
- // Folder doesn't exist
106
- return 0;
107
- }
108
- }
109
- }
110
- //# sourceMappingURL=local_storage_service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local_storage_service.js","sourceRoot":"","sources":["../../../src/storage/adapters/local_storage_service.ts"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import { StorageService } from '../storage_service.js';
2
- export interface OvhS3Config {
3
- accessKey: string;
4
- secretKey: string;
5
- endpoint: string;
6
- region?: string;
7
- bucket: string;
8
- }
9
- export declare class OvhS3StorageService extends StorageService {
10
- #private;
11
- constructor(config: OvhS3Config);
12
- /**
13
- * Uploads a file to the OVH S3-compatible object storage.
14
- * @param buffer - File contents to upload
15
- * @param collectorName - Folder/prefix to store under
16
- * @param extension - Optional file extension (e.g. 'json')
17
- * @returns The relative path (key) of the stored object
18
- */
19
- save(buffer: Buffer, collectorName: string, extension?: string): Promise<string>;
20
- /**
21
- * Downloads and returns a stored object as a Buffer.
22
- * @param relativePath - The key/path of the object to retrieve
23
- * @returns The object contents as a Buffer
24
- */
25
- retrieve(relativePath: string): Promise<Buffer>;
26
- /**
27
- * Deletes an object from the storage bucket.
28
- * @param relativePath - The key/path of the object to delete
29
- */
30
- delete(relativePath: string): Promise<void>;
31
- /**
32
- * Uploads a file to OVH S3 at a specific path (preserves filename).
33
- * Unlike save(), this method does not auto-generate a timestamp filename.
34
- * Files are uploaded with public-read ACL for direct access (e.g., Cesium tilesets).
35
- * @param buffer - File contents to upload
36
- * @param relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
37
- * @returns The same relative path that was provided
38
- */
39
- saveWithPath(buffer: Buffer, relativePath: string): Promise<string>;
40
- /**
41
- * Deletes multiple objects in batch using S3 DeleteObjects API.
42
- * Much faster than individual deletes - can delete up to 1000 objects per request.
43
- * @param paths - Array of object keys to delete
44
- */
45
- deleteBatch(paths: string[]): Promise<void>;
46
- /**
47
- * Returns the public URL for a stored file.
48
- * Constructs the OVH S3 public URL format: https://{bucket}.{endpoint_host}/{key}
49
- * @param relativePath - The storage path/key of the file
50
- * @returns The public URL to access the file directly
51
- */
52
- getPublicUrl(relativePath: string): string;
53
- /**
54
- * Deletes all objects under a given prefix (folder).
55
- * Lists objects by prefix and deletes them in batches for performance.
56
- * @param prefix - The folder/prefix to delete (e.g., 'tilesets/123')
57
- * @returns Number of files deleted
58
- */
59
- deleteByPrefix(prefix: string): Promise<number>;
60
- }
61
- //# sourceMappingURL=ovh_storage_service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ovh_storage_service.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/ovh_storage_service.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAGtD,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,mBAAoB,SAAQ,cAAc;;gBAKvC,MAAM,EAAE,WAAW;IAkB/B;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBtF;;;;OAIG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBrD;;;OAGG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAazE;;;;OAIG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCjD;;;;;OAKG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAO1C;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyCxD"}
@@ -1,172 +0,0 @@
1
- /**
2
- * OVH Object Storage implementation of StorageService
3
- * via S3-compatible API using @aws-sdk/client-s3
4
- */
5
- import { S3Client, PutObjectCommand, GetObjectCommand, DeleteObjectCommand, DeleteObjectsCommand, ListObjectsV2Command, ObjectCannedACL } from '@aws-sdk/client-s3';
6
- import { StorageService } from '../storage_service.js';
7
- export class OvhS3StorageService extends StorageService {
8
- #s3;
9
- #bucket;
10
- #endpoint;
11
- constructor(config) {
12
- super();
13
- this.#bucket = config.bucket;
14
- this.#endpoint = config.endpoint;
15
- this.#s3 = new S3Client({
16
- endpoint: config.endpoint,
17
- region: config.region ?? 'gra',
18
- credentials: {
19
- accessKeyId: config.accessKey,
20
- secretAccessKey: config.secretKey
21
- },
22
- forcePathStyle: false,
23
- // Match Python boto3 config for OVH compatibility
24
- requestChecksumCalculation: 'WHEN_REQUIRED',
25
- responseChecksumValidation: 'WHEN_REQUIRED'
26
- });
27
- }
28
- /**
29
- * Uploads a file to the OVH S3-compatible object storage.
30
- * @param buffer - File contents to upload
31
- * @param collectorName - Folder/prefix to store under
32
- * @param extension - Optional file extension (e.g. 'json')
33
- * @returns The relative path (key) of the stored object
34
- */
35
- async save(buffer, collectorName, extension) {
36
- const now = new Date();
37
- const timestamp = now.toISOString().replace(/[:.]/g, '-');
38
- const key = `${collectorName || 'default'}/${timestamp}${extension ? '.' + extension : ''}`;
39
- await this.#s3.send(new PutObjectCommand({
40
- Bucket: this.#bucket,
41
- Key: key,
42
- Body: buffer,
43
- ACL: ObjectCannedACL.private
44
- }));
45
- return key;
46
- }
47
- /**
48
- * Downloads and returns a stored object as a Buffer.
49
- * @param relativePath - The key/path of the object to retrieve
50
- * @returns The object contents as a Buffer
51
- */
52
- async retrieve(relativePath) {
53
- const res = await this.#s3.send(new GetObjectCommand({
54
- Bucket: this.#bucket,
55
- Key: relativePath
56
- }));
57
- const chunks = [];
58
- const stream = res.Body;
59
- for await (const chunk of stream) {
60
- chunks.push(Buffer.from(chunk));
61
- }
62
- return Buffer.concat(chunks);
63
- }
64
- /**
65
- * Deletes an object from the storage bucket.
66
- * @param relativePath - The key/path of the object to delete
67
- */
68
- async delete(relativePath) {
69
- await this.#s3.send(new DeleteObjectCommand({
70
- Bucket: this.#bucket,
71
- Key: relativePath
72
- }));
73
- }
74
- /**
75
- * Uploads a file to OVH S3 at a specific path (preserves filename).
76
- * Unlike save(), this method does not auto-generate a timestamp filename.
77
- * Files are uploaded with public-read ACL for direct access (e.g., Cesium tilesets).
78
- * @param buffer - File contents to upload
79
- * @param relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
80
- * @returns The same relative path that was provided
81
- */
82
- async saveWithPath(buffer, relativePath) {
83
- await this.#s3.send(new PutObjectCommand({
84
- Bucket: this.#bucket,
85
- Key: relativePath,
86
- Body: buffer,
87
- ACL: ObjectCannedACL.public_read
88
- }));
89
- return relativePath;
90
- }
91
- /**
92
- * Deletes multiple objects in batch using S3 DeleteObjects API.
93
- * Much faster than individual deletes - can delete up to 1000 objects per request.
94
- * @param paths - Array of object keys to delete
95
- */
96
- async deleteBatch(paths) {
97
- if (paths.length === 0)
98
- return;
99
- // S3 DeleteObjects supports max 1000 objects per request
100
- const BATCH_SIZE = 1000;
101
- const batches = [];
102
- for (let i = 0; i < paths.length; i += BATCH_SIZE) {
103
- batches.push(paths.slice(i, i + BATCH_SIZE));
104
- }
105
- // Process batches in parallel (but limit concurrency to avoid overwhelming the API)
106
- const MAX_CONCURRENT = 5;
107
- for (let i = 0; i < batches.length; i += MAX_CONCURRENT) {
108
- const concurrentBatches = batches.slice(i, i + MAX_CONCURRENT);
109
- await Promise.all(concurrentBatches.map(batch => this.#s3
110
- .send(new DeleteObjectsCommand({
111
- Bucket: this.#bucket,
112
- Delete: {
113
- Objects: batch.map(key => ({ Key: key })),
114
- Quiet: true // Don't return info about each deleted object
115
- }
116
- }))
117
- .catch(() => {
118
- // Ignore batch delete errors - files may already be deleted
119
- })));
120
- }
121
- }
122
- /**
123
- * Returns the public URL for a stored file.
124
- * Constructs the OVH S3 public URL format: https://{bucket}.{endpoint_host}/{key}
125
- * @param relativePath - The storage path/key of the file
126
- * @returns The public URL to access the file directly
127
- */
128
- getPublicUrl(relativePath) {
129
- // Extract host from endpoint (e.g., 'https://s3.gra.io.cloud.ovh.net' -> 's3.gra.io.cloud.ovh.net')
130
- const endpointHost = this.#endpoint.replace(/^https?:\/\//, '');
131
- // OVH S3 URL format: https://{bucket}.{endpoint_host}/{key}
132
- return `https://${this.#bucket}.${endpointHost}/${relativePath}`;
133
- }
134
- /**
135
- * Deletes all objects under a given prefix (folder).
136
- * Lists objects by prefix and deletes them in batches for performance.
137
- * @param prefix - The folder/prefix to delete (e.g., 'tilesets/123')
138
- * @returns Number of files deleted
139
- */
140
- async deleteByPrefix(prefix) {
141
- let totalDeleted = 0;
142
- let continuationToken;
143
- // Ensure prefix ends with '/' to avoid partial matches
144
- const normalizedPrefix = prefix.endsWith('/') ? prefix : `${prefix}/`;
145
- do {
146
- // List objects with prefix (max 1000 per request)
147
- const listResponse = await this.#s3.send(new ListObjectsV2Command({
148
- Bucket: this.#bucket,
149
- Prefix: normalizedPrefix,
150
- ContinuationToken: continuationToken
151
- }));
152
- const objects = listResponse.Contents || [];
153
- if (objects.length === 0)
154
- break;
155
- // Delete objects in batch
156
- const keys = objects.map(obj => obj.Key).filter((key) => !!key);
157
- if (keys.length > 0) {
158
- await this.#s3.send(new DeleteObjectsCommand({
159
- Bucket: this.#bucket,
160
- Delete: {
161
- Objects: keys.map(key => ({ Key: key })),
162
- Quiet: true
163
- }
164
- }));
165
- totalDeleted += keys.length;
166
- }
167
- continuationToken = listResponse.NextContinuationToken;
168
- } while (continuationToken);
169
- return totalDeleted;
170
- }
171
- }
172
- //# sourceMappingURL=ovh_storage_service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ovh_storage_service.js","sourceRoot":"","sources":["../../../src/storage/adapters/ovh_storage_service.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { StorageService } from './storage_service.js';
2
- export declare class StorageServiceFactory {
3
- /**
4
- * Creates and returns an instance of StorageService
5
- * based on the STORAGE_CONFIG environment variable.
6
- *
7
- * - 'local': returns a LocalStorageService
8
- * - 'ovh': returns an OvhS3StorageService
9
- *
10
- * @throws Error if STORAGE_CONFIG is not supported
11
- */
12
- static create(): StorageService;
13
- }
14
- //# sourceMappingURL=storage_factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage_factory.d.ts","sourceRoot":"","sources":["../../src/storage/storage_factory.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,qBAAa,qBAAqB;IAC9B;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,IAAI,cAAc;CAoBlC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Factory class for creating the appropriate StorageService
3
- * implementation based on environment configuration.
4
- */
5
- import { Env } from '../env/env.js';
6
- import { OvhS3StorageService } from './adapters/ovh_storage_service.js';
7
- import { LocalStorageService } from './adapters/local_storage_service.js';
8
- export class StorageServiceFactory {
9
- /**
10
- * Creates and returns an instance of StorageService
11
- * based on the STORAGE_CONFIG environment variable.
12
- *
13
- * - 'local': returns a LocalStorageService
14
- * - 'ovh': returns an OvhS3StorageService
15
- *
16
- * @throws Error if STORAGE_CONFIG is not supported
17
- */
18
- static create() {
19
- const env = Env.config;
20
- switch (env.STORAGE_CONFIG) {
21
- case 'local':
22
- return new LocalStorageService(env.LOCAL_STORAGE_DIR || 'data');
23
- case 'ovh':
24
- return new OvhS3StorageService({
25
- accessKey: env.OVH_ACCESS_KEY,
26
- secretKey: env.OVH_SECRET_KEY,
27
- endpoint: env.OVH_ENDPOINT,
28
- bucket: env.OVH_BUCKET,
29
- region: env.OVH_REGION ?? 'gra'
30
- });
31
- default:
32
- throw new Error(`Unsupported STORAGE_CONFIG: ${env.STORAGE_CONFIG}`);
33
- }
34
- }
35
- }
36
- //# sourceMappingURL=storage_factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage_factory.js","sourceRoot":"","sources":["../../src/storage/storage_factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAGzE,MAAM,OAAO,qBAAqB;IAC9B;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM;QACT,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;QAEtB,QAAQ,GAAG,CAAC,cAAc,EAAE,CAAC;YACzB,KAAK,OAAO;gBACR,OAAO,IAAI,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,CAAA;YAEnE,KAAK,KAAK;gBACN,OAAO,IAAI,mBAAmB,CAAC;oBAC3B,SAAS,EAAE,GAAG,CAAC,cAAc;oBAC7B,SAAS,EAAE,GAAG,CAAC,cAAc;oBAC7B,QAAQ,EAAE,GAAG,CAAC,YAAY;oBAC1B,MAAM,EAAE,GAAG,CAAC,UAAU;oBACtB,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;iBAClC,CAAC,CAAA;YAEN;gBACI,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,cAAc,EAAE,CAAC,CAAA;QAC5E,CAAC;IACL,CAAC;CACJ"}
@@ -1,163 +0,0 @@
1
- /**
2
- * Abstract base class for storage service implementations.
3
- *
4
- * Defines the contract for persisting and retrieving binary data in the Digital Twin framework.
5
- * Concrete implementations provide storage backends like local filesystem, AWS S3, Azure Blob, etc.
6
- *
7
- * @abstract
8
- * @class StorageService
9
- *
10
- * @example
11
- * ```typescript
12
- * // Implement for specific storage backend
13
- * class S3StorageService extends StorageService {
14
- * async save(buffer: Buffer, collectorName: string, extension?: string): Promise<string> {
15
- * // Upload to S3 bucket
16
- * return 's3://bucket/path/to/file'
17
- * }
18
- *
19
- * async retrieve(path: string): Promise<Buffer> {
20
- * // Download from S3
21
- * return buffer
22
- * }
23
- *
24
- * async delete(path: string): Promise<void> {
25
- * // Delete from S3
26
- * }
27
- * }
28
- * ```
29
- */
30
- export declare abstract class StorageService {
31
- /**
32
- * Persists binary data and returns a unique identifier for retrieval.
33
- *
34
- * The storage implementation should ensure the returned path/URL is unique
35
- * and can be used later to retrieve the exact same data.
36
- *
37
- * @abstract
38
- * @param {Buffer} buffer - Binary data to store
39
- * @param {string} collectorName - Component name for organizing storage (used as folder/prefix)
40
- * @param {string} extension - Optional file extension for proper content handling
41
- * @returns {Promise<string>} Unique storage identifier (path, URL, or key)
42
- * @throws {Error} When storage operation fails
43
- *
44
- * @example
45
- * ```typescript
46
- * const buffer = Buffer.from('{"temperature": 23.5}')
47
- * const path = await storage.save(buffer, 'weather-sensor', 'json')
48
- * // Returns: '/storage/weather-sensor/2024-01-15_14-30-00.json'
49
- * ```
50
- */
51
- abstract save(buffer: Buffer, collectorName: string, extension?: string): Promise<string>;
52
- /**
53
- * Retrieves previously stored binary data.
54
- *
55
- * Uses the identifier returned by save() to fetch the original data.
56
- *
57
- * @abstract
58
- * @param {string} path - Storage identifier from save() operation
59
- * @returns {Promise<Buffer>} The original binary data
60
- * @throws {Error} When file doesn't exist or retrieval fails
61
- *
62
- * @example
63
- * ```typescript
64
- * const path = '/storage/weather-sensor/2024-01-15_14-30-00.json'
65
- * const data = await storage.retrieve(path)
66
- * const json = JSON.parse(data.toString())
67
- * ```
68
- */
69
- abstract retrieve(path: string): Promise<Buffer>;
70
- /**
71
- * Removes stored data permanently.
72
- *
73
- * Deletes the data associated with the given storage identifier.
74
- *
75
- * @abstract
76
- * @param {string} path - Storage identifier from save() operation
77
- * @returns {Promise<void>}
78
- * @throws {Error} When deletion fails or path doesn't exist
79
- *
80
- * @example
81
- * ```typescript
82
- * const path = '/storage/weather-sensor/old-data.json'
83
- * await storage.delete(path)
84
- * ```
85
- */
86
- abstract delete(path: string): Promise<void>;
87
- /**
88
- * Persists binary data at a specific path (no auto-generated filename).
89
- *
90
- * Unlike save(), this method stores the file at the exact path specified,
91
- * preserving the original filename and directory structure.
92
- * Useful for extracting archives where file paths must be preserved.
93
- *
94
- * @param {Buffer} buffer - Binary data to store
95
- * @param {string} relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
96
- * @returns {Promise<string>} The same path that was provided (for consistency)
97
- * @throws {Error} When storage operation fails
98
- *
99
- * @example
100
- * ```typescript
101
- * const buffer = Buffer.from('{"asset": {"version": "1.0"}}')
102
- * const path = await storage.saveWithPath(buffer, 'tilesets/123/tileset.json')
103
- * // Returns: 'tilesets/123/tileset.json'
104
- * ```
105
- */
106
- abstract saveWithPath(buffer: Buffer, relativePath: string): Promise<string>;
107
- /**
108
- * Deletes multiple files in batch for better performance.
109
- *
110
- * Default implementation calls delete() sequentially, but storage backends
111
- * can override this with optimized bulk delete operations (e.g., S3 DeleteObjects).
112
- *
113
- * @param {string[]} paths - Array of storage identifiers to delete
114
- * @returns {Promise<void>}
115
- *
116
- * @example
117
- * ```typescript
118
- * await storage.deleteBatch([
119
- * 'tilesets/123/tileset.json',
120
- * 'tilesets/123/tile_0.b3dm',
121
- * 'tilesets/123/tile_1.b3dm'
122
- * ])
123
- * ```
124
- */
125
- deleteBatch(paths: string[]): Promise<void>;
126
- /**
127
- * Returns the public URL for a stored file.
128
- *
129
- * For cloud storage (S3, OVH, Azure), this returns the direct HTTP URL.
130
- * For local storage, this may return a relative path or throw an error.
131
- *
132
- * @abstract
133
- * @param {string} relativePath - The storage path/key of the file
134
- * @returns {string} The public URL to access the file directly
135
- *
136
- * @example
137
- * ```typescript
138
- * const url = storage.getPublicUrl('tilesets/123/tileset.json')
139
- * // Returns: 'https://bucket.s3.region.cloud.ovh.net/tilesets/123/tileset.json'
140
- * ```
141
- */
142
- abstract getPublicUrl(relativePath: string): string;
143
- /**
144
- * Deletes all files under a given prefix/folder.
145
- *
146
- * This is more efficient than deleteBatch() when you don't know all file paths,
147
- * as it lists objects by prefix and deletes them in bulk.
148
- * Useful for deleting entire tilesets or component data.
149
- *
150
- * @abstract
151
- * @param {string} prefix - The folder/prefix to delete (e.g., 'tilesets/123')
152
- * @returns {Promise<number>} Number of files deleted
153
- *
154
- * @example
155
- * ```typescript
156
- * const count = await storage.deleteByPrefix('tilesets/123')
157
- * // Deletes all files starting with 'tilesets/123/'
158
- * console.log(`Deleted ${count} files`)
159
- * ```
160
- */
161
- abstract deleteByPrefix(prefix: string): Promise<number>;
162
- }
163
- //# sourceMappingURL=storage_service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage_service.d.ts","sourceRoot":"","sources":["../../src/storage/storage_service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,8BAAsB,cAAc;IAChC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEzF;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhD;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE5E;;;;;;;;;;;;;;;;;OAiBG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAEnD;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAC3D"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Abstract base class for storage service implementations.
3
- *
4
- * Defines the contract for persisting and retrieving binary data in the Digital Twin framework.
5
- * Concrete implementations provide storage backends like local filesystem, AWS S3, Azure Blob, etc.
6
- *
7
- * @abstract
8
- * @class StorageService
9
- *
10
- * @example
11
- * ```typescript
12
- * // Implement for specific storage backend
13
- * class S3StorageService extends StorageService {
14
- * async save(buffer: Buffer, collectorName: string, extension?: string): Promise<string> {
15
- * // Upload to S3 bucket
16
- * return 's3://bucket/path/to/file'
17
- * }
18
- *
19
- * async retrieve(path: string): Promise<Buffer> {
20
- * // Download from S3
21
- * return buffer
22
- * }
23
- *
24
- * async delete(path: string): Promise<void> {
25
- * // Delete from S3
26
- * }
27
- * }
28
- * ```
29
- */
30
- export class StorageService {
31
- /**
32
- * Deletes multiple files in batch for better performance.
33
- *
34
- * Default implementation calls delete() sequentially, but storage backends
35
- * can override this with optimized bulk delete operations (e.g., S3 DeleteObjects).
36
- *
37
- * @param {string[]} paths - Array of storage identifiers to delete
38
- * @returns {Promise<void>}
39
- *
40
- * @example
41
- * ```typescript
42
- * await storage.deleteBatch([
43
- * 'tilesets/123/tileset.json',
44
- * 'tilesets/123/tile_0.b3dm',
45
- * 'tilesets/123/tile_1.b3dm'
46
- * ])
47
- * ```
48
- */
49
- async deleteBatch(paths) {
50
- // Default sequential implementation - subclasses can override with bulk operations
51
- await Promise.all(paths.map(path => this.delete(path).catch(() => { })));
52
- }
53
- }
54
- //# sourceMappingURL=storage_service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage_service.js","sourceRoot":"","sources":["../../src/storage/storage_service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAgB,cAAc;IAiFhC;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,WAAW,CAAC,KAAe;QAC7B,mFAAmF;QACnF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3E,CAAC;CAuCJ"}