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.
- package/package.json +101 -106
- package/dist/auth/apisix_parser.d.ts +0 -146
- package/dist/auth/apisix_parser.d.ts.map +0 -1
- package/dist/auth/apisix_parser.js +0 -185
- package/dist/auth/apisix_parser.js.map +0 -1
- package/dist/auth/auth_config.d.ts +0 -126
- package/dist/auth/auth_config.d.ts.map +0 -1
- package/dist/auth/auth_config.js +0 -169
- package/dist/auth/auth_config.js.map +0 -1
- package/dist/auth/index.d.ts +0 -5
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -4
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/types.d.ts +0 -100
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -2
- package/dist/auth/types.js.map +0 -1
- package/dist/auth/user_service.d.ts +0 -86
- package/dist/auth/user_service.d.ts.map +0 -1
- package/dist/auth/user_service.js +0 -237
- package/dist/auth/user_service.js.map +0 -1
- package/dist/components/assets_manager.d.ts +0 -662
- package/dist/components/assets_manager.d.ts.map +0 -1
- package/dist/components/assets_manager.js +0 -1529
- package/dist/components/assets_manager.js.map +0 -1
- package/dist/components/async_upload.d.ts +0 -20
- package/dist/components/async_upload.d.ts.map +0 -1
- package/dist/components/async_upload.js +0 -10
- package/dist/components/async_upload.js.map +0 -1
- package/dist/components/collector.d.ts +0 -203
- package/dist/components/collector.d.ts.map +0 -1
- package/dist/components/collector.js +0 -202
- package/dist/components/collector.js.map +0 -1
- package/dist/components/custom_table_manager.d.ts +0 -503
- package/dist/components/custom_table_manager.d.ts.map +0 -1
- package/dist/components/custom_table_manager.js +0 -1052
- package/dist/components/custom_table_manager.js.map +0 -1
- package/dist/components/global_assets_handler.d.ts +0 -63
- package/dist/components/global_assets_handler.d.ts.map +0 -1
- package/dist/components/global_assets_handler.js +0 -127
- package/dist/components/global_assets_handler.js.map +0 -1
- package/dist/components/handler.d.ts +0 -104
- package/dist/components/handler.d.ts.map +0 -1
- package/dist/components/handler.js +0 -110
- package/dist/components/handler.js.map +0 -1
- package/dist/components/harvester.d.ts +0 -182
- package/dist/components/harvester.d.ts.map +0 -1
- package/dist/components/harvester.js +0 -393
- package/dist/components/harvester.js.map +0 -1
- package/dist/components/index.d.ts +0 -11
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -9
- package/dist/components/index.js.map +0 -1
- package/dist/components/interfaces.d.ts +0 -126
- package/dist/components/interfaces.d.ts.map +0 -1
- package/dist/components/interfaces.js +0 -8
- package/dist/components/interfaces.js.map +0 -1
- package/dist/components/map_manager.d.ts +0 -61
- package/dist/components/map_manager.d.ts.map +0 -1
- package/dist/components/map_manager.js +0 -242
- package/dist/components/map_manager.js.map +0 -1
- package/dist/components/tileset_manager.d.ts +0 -125
- package/dist/components/tileset_manager.d.ts.map +0 -1
- package/dist/components/tileset_manager.js +0 -618
- package/dist/components/tileset_manager.js.map +0 -1
- package/dist/components/types.d.ts +0 -226
- package/dist/components/types.d.ts.map +0 -1
- package/dist/components/types.js +0 -8
- package/dist/components/types.js.map +0 -1
- package/dist/database/adapters/knex_database_adapter.d.ts +0 -92
- package/dist/database/adapters/knex_database_adapter.d.ts.map +0 -1
- package/dist/database/adapters/knex_database_adapter.js +0 -647
- package/dist/database/adapters/knex_database_adapter.js.map +0 -1
- package/dist/database/database_adapter.d.ts +0 -251
- package/dist/database/database_adapter.d.ts.map +0 -1
- package/dist/database/database_adapter.js +0 -46
- package/dist/database/database_adapter.js.map +0 -1
- package/dist/engine/digital_twin_engine.d.ts +0 -253
- package/dist/engine/digital_twin_engine.d.ts.map +0 -1
- package/dist/engine/digital_twin_engine.js +0 -790
- package/dist/engine/digital_twin_engine.js.map +0 -1
- package/dist/engine/endpoints.d.ts +0 -47
- package/dist/engine/endpoints.d.ts.map +0 -1
- package/dist/engine/endpoints.js +0 -56
- package/dist/engine/endpoints.js.map +0 -1
- package/dist/engine/events.d.ts +0 -93
- package/dist/engine/events.d.ts.map +0 -1
- package/dist/engine/events.js +0 -71
- package/dist/engine/events.js.map +0 -1
- package/dist/engine/initializer.d.ts +0 -62
- package/dist/engine/initializer.d.ts.map +0 -1
- package/dist/engine/initializer.js +0 -108
- package/dist/engine/initializer.js.map +0 -1
- package/dist/engine/queue_manager.d.ts +0 -87
- package/dist/engine/queue_manager.d.ts.map +0 -1
- package/dist/engine/queue_manager.js +0 -196
- package/dist/engine/queue_manager.js.map +0 -1
- package/dist/engine/scheduler.d.ts +0 -30
- package/dist/engine/scheduler.d.ts.map +0 -1
- package/dist/engine/scheduler.js +0 -370
- package/dist/engine/scheduler.js.map +0 -1
- package/dist/engine/upload_processor.d.ts +0 -36
- package/dist/engine/upload_processor.d.ts.map +0 -1
- package/dist/engine/upload_processor.js +0 -101
- package/dist/engine/upload_processor.js.map +0 -1
- package/dist/env/env.d.ts +0 -134
- package/dist/env/env.d.ts.map +0 -1
- package/dist/env/env.js +0 -177
- package/dist/env/env.js.map +0 -1
- package/dist/index.d.ts +0 -49
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -57
- package/dist/index.js.map +0 -1
- package/dist/openapi/generator.d.ts +0 -93
- package/dist/openapi/generator.d.ts.map +0 -1
- package/dist/openapi/generator.js +0 -293
- package/dist/openapi/generator.js.map +0 -1
- package/dist/openapi/index.d.ts +0 -9
- package/dist/openapi/index.d.ts.map +0 -1
- package/dist/openapi/index.js +0 -9
- package/dist/openapi/index.js.map +0 -1
- package/dist/openapi/types.d.ts +0 -182
- package/dist/openapi/types.d.ts.map +0 -1
- package/dist/openapi/types.js +0 -16
- package/dist/openapi/types.js.map +0 -1
- package/dist/storage/adapters/local_storage_service.d.ts +0 -51
- package/dist/storage/adapters/local_storage_service.d.ts.map +0 -1
- package/dist/storage/adapters/local_storage_service.js +0 -110
- package/dist/storage/adapters/local_storage_service.js.map +0 -1
- package/dist/storage/adapters/ovh_storage_service.d.ts +0 -61
- package/dist/storage/adapters/ovh_storage_service.d.ts.map +0 -1
- package/dist/storage/adapters/ovh_storage_service.js +0 -172
- package/dist/storage/adapters/ovh_storage_service.js.map +0 -1
- package/dist/storage/storage_factory.d.ts +0 -14
- package/dist/storage/storage_factory.d.ts.map +0 -1
- package/dist/storage/storage_factory.js +0 -36
- package/dist/storage/storage_factory.js.map +0 -1
- package/dist/storage/storage_service.d.ts +0 -163
- package/dist/storage/storage_service.d.ts.map +0 -1
- package/dist/storage/storage_service.js +0 -54
- package/dist/storage/storage_service.js.map +0 -1
- package/dist/types/data_record.d.ts +0 -123
- package/dist/types/data_record.d.ts.map +0 -1
- package/dist/types/data_record.js +0 -8
- package/dist/types/data_record.js.map +0 -1
- package/dist/utils/http_responses.d.ts +0 -155
- package/dist/utils/http_responses.d.ts.map +0 -1
- package/dist/utils/http_responses.js +0 -190
- package/dist/utils/http_responses.js.map +0 -1
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -6
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -74
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -92
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/map_to_data_record.d.ts +0 -10
- package/dist/utils/map_to_data_record.d.ts.map +0 -1
- package/dist/utils/map_to_data_record.js +0 -36
- package/dist/utils/map_to_data_record.js.map +0 -1
- package/dist/utils/servable_endpoint.d.ts +0 -63
- package/dist/utils/servable_endpoint.d.ts.map +0 -1
- package/dist/utils/servable_endpoint.js +0 -67
- package/dist/utils/servable_endpoint.js.map +0 -1
- package/dist/utils/zip_utils.d.ts +0 -66
- package/dist/utils/zip_utils.d.ts.map +0 -1
- package/dist/utils/zip_utils.js +0 -169
- package/dist/utils/zip_utils.js.map +0 -1
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import { AssetsManager } from './assets_manager.js';
|
|
2
|
-
import { ApisixAuthParser } from '../auth/apisix_parser.js';
|
|
3
|
-
/**
|
|
4
|
-
* Specialized Assets Manager for handling map layer data.
|
|
5
|
-
*
|
|
6
|
-
* Extends the base AssetsManager with specialized logic for:
|
|
7
|
-
* - Processing JSON layer objects containing map data
|
|
8
|
-
* - Extracting and analyzing layer metadata
|
|
9
|
-
* - Storing layer-specific information
|
|
10
|
-
*
|
|
11
|
-
* Inherits all CRUD endpoints from AssetsManager:
|
|
12
|
-
* - GET /{name} - List all layers
|
|
13
|
-
* - POST /{name}/upload - Upload layer data (overridden)
|
|
14
|
-
* - GET /{name}/:id - Get layer data
|
|
15
|
-
* - PUT /{name}/:id - Update layer metadata
|
|
16
|
-
* - DELETE /{name}/:id - Delete layer
|
|
17
|
-
* - GET /{name}/:id/download - Download layer data
|
|
18
|
-
*/
|
|
19
|
-
export class MapManager extends AssetsManager {
|
|
20
|
-
/**
|
|
21
|
-
* Override the upload handler to process JSON layer objects instead of files.
|
|
22
|
-
*
|
|
23
|
-
* Processes the layer data:
|
|
24
|
-
* 1. Validates the layer object structure
|
|
25
|
-
* 2. Extracts layer-specific metadata
|
|
26
|
-
* 3. Stores the layer data as JSON
|
|
27
|
-
*
|
|
28
|
-
* @param req - HTTP request with layer JSON data
|
|
29
|
-
* @returns DataResponse with upload result
|
|
30
|
-
*/
|
|
31
|
-
async handleUpload(req) {
|
|
32
|
-
try {
|
|
33
|
-
if (!req || !req.body) {
|
|
34
|
-
return {
|
|
35
|
-
status: 400,
|
|
36
|
-
content: JSON.stringify({
|
|
37
|
-
error: 'Invalid request: missing request body'
|
|
38
|
-
}),
|
|
39
|
-
headers: { 'Content-Type': 'application/json' }
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
// Check authentication
|
|
43
|
-
if (!ApisixAuthParser.hasValidAuth(req.headers || {})) {
|
|
44
|
-
return {
|
|
45
|
-
status: 401,
|
|
46
|
-
content: JSON.stringify({
|
|
47
|
-
error: 'Authentication required'
|
|
48
|
-
}),
|
|
49
|
-
headers: { 'Content-Type': 'application/json' }
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
// Parse authenticated user
|
|
53
|
-
const authUser = ApisixAuthParser.parseAuthHeaders(req.headers || {});
|
|
54
|
-
if (!authUser) {
|
|
55
|
-
return {
|
|
56
|
-
status: 401,
|
|
57
|
-
content: JSON.stringify({
|
|
58
|
-
error: 'Invalid authentication headers'
|
|
59
|
-
}),
|
|
60
|
-
headers: { 'Content-Type': 'application/json' }
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
// Find or create user in database
|
|
64
|
-
const userRecord = await this.userService.findOrCreateUser(authUser);
|
|
65
|
-
if (!userRecord.id) {
|
|
66
|
-
return {
|
|
67
|
-
status: 500,
|
|
68
|
-
content: JSON.stringify({
|
|
69
|
-
error: 'Failed to retrieve user information'
|
|
70
|
-
}),
|
|
71
|
-
headers: { 'Content-Type': 'application/json' }
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
const { layer, description } = req.body;
|
|
75
|
-
if (!layer) {
|
|
76
|
-
return {
|
|
77
|
-
status: 400,
|
|
78
|
-
content: JSON.stringify({
|
|
79
|
-
error: 'Missing required field: layer (JSON object)'
|
|
80
|
-
}),
|
|
81
|
-
headers: { 'Content-Type': 'application/json' }
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
// Validate layer structure
|
|
85
|
-
if (typeof layer !== 'object' || layer === null) {
|
|
86
|
-
return {
|
|
87
|
-
status: 400,
|
|
88
|
-
content: JSON.stringify({
|
|
89
|
-
error: 'Layer must be a valid JSON object'
|
|
90
|
-
}),
|
|
91
|
-
headers: { 'Content-Type': 'application/json' }
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
// Analyze layer content
|
|
95
|
-
const layerInfo = this.analyzeLayerContent(layer);
|
|
96
|
-
const config = this.getConfiguration();
|
|
97
|
-
const now = new Date();
|
|
98
|
-
// Convert layer object to JSON string for storage
|
|
99
|
-
const layerJson = JSON.stringify(layer, null, 2);
|
|
100
|
-
const layerBuffer = Buffer.from(layerJson, 'utf-8');
|
|
101
|
-
// Generate filename from layer name or use timestamp
|
|
102
|
-
const filename = `${layerInfo.layer_name || 'layer'}_${Date.now()}.json`;
|
|
103
|
-
// Store layer data using framework pattern
|
|
104
|
-
const url = await this.storage.save(layerBuffer, config.name, filename);
|
|
105
|
-
// Create extended metadata with layer-specific fields
|
|
106
|
-
const metadata = {
|
|
107
|
-
name: config.name,
|
|
108
|
-
type: config.contentType || 'application/json',
|
|
109
|
-
url,
|
|
110
|
-
date: now,
|
|
111
|
-
description: description || layerInfo.description || 'Map layer',
|
|
112
|
-
source: req.body.source || 'uploaded',
|
|
113
|
-
owner_id: userRecord.id,
|
|
114
|
-
filename,
|
|
115
|
-
// Layer-specific metadata
|
|
116
|
-
layer_type: layerInfo.layer_type,
|
|
117
|
-
layer_name: layerInfo.layer_name,
|
|
118
|
-
geometry_type: layerInfo.geometry_type,
|
|
119
|
-
properties_count: layerInfo.properties_count
|
|
120
|
-
};
|
|
121
|
-
await this.db.save(metadata);
|
|
122
|
-
return {
|
|
123
|
-
status: 200,
|
|
124
|
-
content: JSON.stringify({
|
|
125
|
-
message: 'Layer uploaded successfully',
|
|
126
|
-
layer_name: layerInfo.layer_name,
|
|
127
|
-
geometry_type: layerInfo.geometry_type,
|
|
128
|
-
properties_count: layerInfo.properties_count
|
|
129
|
-
}),
|
|
130
|
-
headers: { 'Content-Type': 'application/json' }
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
return {
|
|
135
|
-
status: 500,
|
|
136
|
-
content: JSON.stringify({
|
|
137
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
138
|
-
}),
|
|
139
|
-
headers: { 'Content-Type': 'application/json' }
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Analyze layer content to extract metadata
|
|
145
|
-
* @param layer - The layer object to analyze
|
|
146
|
-
* @returns Layer metadata information
|
|
147
|
-
*/
|
|
148
|
-
analyzeLayerContent(layer) {
|
|
149
|
-
// Default values
|
|
150
|
-
let layer_type = 'unknown';
|
|
151
|
-
let layer_name = 'layer';
|
|
152
|
-
let geometry_type;
|
|
153
|
-
let properties_count = 0;
|
|
154
|
-
// Try to detect GeoJSON
|
|
155
|
-
if (layer.type === 'FeatureCollection' && Array.isArray(layer.features)) {
|
|
156
|
-
layer_type = 'geojson';
|
|
157
|
-
layer_name = layer.name || 'geojson_layer';
|
|
158
|
-
// Analyze first feature for geometry type
|
|
159
|
-
if (layer.features.length > 0) {
|
|
160
|
-
const firstFeature = layer.features[0];
|
|
161
|
-
if (firstFeature.geometry && firstFeature.geometry.type) {
|
|
162
|
-
geometry_type = firstFeature.geometry.type.toLowerCase();
|
|
163
|
-
}
|
|
164
|
-
// Count properties in first feature
|
|
165
|
-
if (firstFeature.properties) {
|
|
166
|
-
properties_count = Object.keys(firstFeature.properties).length;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Try to detect single GeoJSON Feature
|
|
171
|
-
else if (layer.type === 'Feature' && layer.geometry) {
|
|
172
|
-
layer_type = 'geojson_feature';
|
|
173
|
-
layer_name = layer.properties?.name || 'feature';
|
|
174
|
-
geometry_type = layer.geometry.type?.toLowerCase();
|
|
175
|
-
properties_count = layer.properties ? Object.keys(layer.properties).length : 0;
|
|
176
|
-
}
|
|
177
|
-
// Try to detect other common layer formats
|
|
178
|
-
else if (layer.layers && Array.isArray(layer.layers)) {
|
|
179
|
-
layer_type = 'layer_group';
|
|
180
|
-
layer_name = layer.name || 'layer_group';
|
|
181
|
-
properties_count = layer.layers.length;
|
|
182
|
-
}
|
|
183
|
-
// Generic object
|
|
184
|
-
else {
|
|
185
|
-
layer_type = 'custom';
|
|
186
|
-
layer_name = layer.name || layer.title || layer.id || 'custom_layer';
|
|
187
|
-
properties_count = Object.keys(layer).length;
|
|
188
|
-
}
|
|
189
|
-
// Extract description from various fields
|
|
190
|
-
const description = layer.description || layer.desc || layer.summary;
|
|
191
|
-
return {
|
|
192
|
-
layer_type,
|
|
193
|
-
layer_name,
|
|
194
|
-
geometry_type,
|
|
195
|
-
properties_count,
|
|
196
|
-
description
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Override retrieve to include layer-specific metadata in the response
|
|
201
|
-
*/
|
|
202
|
-
async retrieve() {
|
|
203
|
-
try {
|
|
204
|
-
const assets = await this.getAllAssets();
|
|
205
|
-
const config = this.getConfiguration();
|
|
206
|
-
// Transform to include layer metadata
|
|
207
|
-
const assetsWithMetadata = assets.map(asset => ({
|
|
208
|
-
id: asset.id,
|
|
209
|
-
name: asset.name,
|
|
210
|
-
date: asset.date,
|
|
211
|
-
contentType: asset.contentType,
|
|
212
|
-
description: asset.description || '',
|
|
213
|
-
source: asset.source || '',
|
|
214
|
-
owner_id: asset.owner_id || null,
|
|
215
|
-
filename: asset.filename || '',
|
|
216
|
-
// Layer-specific fields
|
|
217
|
-
layer_type: asset.layer_type || '',
|
|
218
|
-
layer_name: asset.layer_name || '',
|
|
219
|
-
geometry_type: asset.geometry_type || null,
|
|
220
|
-
properties_count: asset.properties_count || 0,
|
|
221
|
-
// URLs for frontend
|
|
222
|
-
url: `/${config.endpoint}/${asset.id}`,
|
|
223
|
-
download_url: `/${config.endpoint}/${asset.id}/download`
|
|
224
|
-
}));
|
|
225
|
-
return {
|
|
226
|
-
status: 200,
|
|
227
|
-
content: JSON.stringify(assetsWithMetadata),
|
|
228
|
-
headers: { 'Content-Type': 'application/json' }
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
return {
|
|
233
|
-
status: 500,
|
|
234
|
-
content: JSON.stringify({
|
|
235
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
236
|
-
}),
|
|
237
|
-
headers: { 'Content-Type': 'application/json' }
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
//# sourceMappingURL=map_manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"map_manager.js","sourceRoot":"","sources":["../../src/components/map_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { AssetsManager } from './assets_manager.js';
|
|
2
|
-
import type { DataResponse } from './types.js';
|
|
3
|
-
import type { OpenAPIComponentSpec } from '../openapi/types.js';
|
|
4
|
-
import type { HttpMethod } from '../engine/endpoints.js';
|
|
5
|
-
import type { AsyncUploadable } from './async_upload.js';
|
|
6
|
-
import type { Queue } from 'bullmq';
|
|
7
|
-
/**
|
|
8
|
-
* Metadata stored in database for a tileset.
|
|
9
|
-
* Simplified: Cesium accesses files directly from OVH.
|
|
10
|
-
*/
|
|
11
|
-
export interface TilesetMetadataRow {
|
|
12
|
-
id?: number;
|
|
13
|
-
name: string;
|
|
14
|
-
type: string;
|
|
15
|
-
/** Base path in storage for deletion (e.g., tilesets/123) */
|
|
16
|
-
url: string;
|
|
17
|
-
/** Public URL to tileset.json */
|
|
18
|
-
tileset_url: string;
|
|
19
|
-
date: Date;
|
|
20
|
-
description: string;
|
|
21
|
-
filename: string;
|
|
22
|
-
owner_id: number | null;
|
|
23
|
-
is_public?: boolean;
|
|
24
|
-
upload_status?: 'pending' | 'processing' | 'completed' | 'failed';
|
|
25
|
-
upload_job_id?: string;
|
|
26
|
-
upload_error?: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Specialized Assets Manager for handling 3D Tiles tilesets.
|
|
30
|
-
*
|
|
31
|
-
* This manager extracts uploaded ZIP files and stores each file in cloud storage (OVH S3),
|
|
32
|
-
* allowing Cesium and other 3D viewers to load tilesets directly via public URLs.
|
|
33
|
-
*
|
|
34
|
-
* ## How it works
|
|
35
|
-
*
|
|
36
|
-
* 1. User uploads a ZIP containing a 3D Tiles tileset
|
|
37
|
-
* 2. ZIP is extracted and all files are stored in OVH with public-read ACL
|
|
38
|
-
* 3. Database stores only the tileset.json URL and base path
|
|
39
|
-
* 4. Cesium loads tileset.json directly from OVH
|
|
40
|
-
* 5. Cesium fetches tiles using relative paths in tileset.json (directly from OVH)
|
|
41
|
-
*
|
|
42
|
-
* ## Endpoints
|
|
43
|
-
*
|
|
44
|
-
* - GET /{endpoint} - List all tilesets with their public URLs
|
|
45
|
-
* - POST /{endpoint} - Upload tileset ZIP (sync < 50MB, async >= 50MB)
|
|
46
|
-
* - GET /{endpoint}/:id/status - Poll async upload status
|
|
47
|
-
* - PUT /{endpoint}/:id - Update tileset metadata
|
|
48
|
-
* - DELETE /{endpoint}/:id - Delete tileset and all files from storage
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* ```typescript
|
|
52
|
-
* class MyTilesetManager extends TilesetManager {
|
|
53
|
-
* getConfiguration() {
|
|
54
|
-
* return {
|
|
55
|
-
* name: 'tilesets',
|
|
56
|
-
* description: 'Manage 3D Tiles tilesets',
|
|
57
|
-
* contentType: 'application/json',
|
|
58
|
-
* endpoint: 'api/tilesets',
|
|
59
|
-
* extension: '.zip'
|
|
60
|
-
* }
|
|
61
|
-
* }
|
|
62
|
-
* }
|
|
63
|
-
*
|
|
64
|
-
* // After upload, response contains:
|
|
65
|
-
* // { tileset_url: 'https://bucket.s3.../tilesets/123/tileset.json' }
|
|
66
|
-
* //
|
|
67
|
-
* // Cesium loads directly:
|
|
68
|
-
* // Cesium.Cesium3DTileset.fromUrl(tileset_url)
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
export declare abstract class TilesetManager extends AssetsManager implements AsyncUploadable {
|
|
72
|
-
/** Upload queue for async processing (injected by engine) */
|
|
73
|
-
protected uploadQueue: Queue | null;
|
|
74
|
-
/**
|
|
75
|
-
* Set the upload queue for async job processing.
|
|
76
|
-
* Called by DigitalTwinEngine during initialization.
|
|
77
|
-
*/
|
|
78
|
-
setUploadQueue(queue: Queue): void;
|
|
79
|
-
/**
|
|
80
|
-
* Handle tileset upload.
|
|
81
|
-
*
|
|
82
|
-
* - Files < 50MB: Synchronous extraction and upload
|
|
83
|
-
* - Files >= 50MB: Queued for async processing (returns 202)
|
|
84
|
-
*/
|
|
85
|
-
handleUpload(req: any): Promise<DataResponse>;
|
|
86
|
-
/**
|
|
87
|
-
* Authenticate user from request headers.
|
|
88
|
-
* Returns user ID on success, or error response on failure.
|
|
89
|
-
*/
|
|
90
|
-
private authenticateUser;
|
|
91
|
-
/**
|
|
92
|
-
* Queue upload for background processing. Returns HTTP 202 immediately.
|
|
93
|
-
*/
|
|
94
|
-
private handleAsyncUpload;
|
|
95
|
-
/**
|
|
96
|
-
* Process upload synchronously.
|
|
97
|
-
*/
|
|
98
|
-
private handleSyncUpload;
|
|
99
|
-
/**
|
|
100
|
-
* Get upload status for async uploads.
|
|
101
|
-
*/
|
|
102
|
-
handleGetStatus(req: any): Promise<DataResponse>;
|
|
103
|
-
/**
|
|
104
|
-
* List all tilesets with their public URLs.
|
|
105
|
-
*/
|
|
106
|
-
retrieve(req?: any): Promise<DataResponse>;
|
|
107
|
-
/**
|
|
108
|
-
* Delete tileset and all files from storage.
|
|
109
|
-
*/
|
|
110
|
-
handleDelete(req: any): Promise<DataResponse>;
|
|
111
|
-
/**
|
|
112
|
-
* Get HTTP endpoints for this manager.
|
|
113
|
-
*/
|
|
114
|
-
getEndpoints(): Array<{
|
|
115
|
-
method: HttpMethod;
|
|
116
|
-
path: string;
|
|
117
|
-
handler: (...args: any[]) => any;
|
|
118
|
-
responseType?: string;
|
|
119
|
-
}>;
|
|
120
|
-
/**
|
|
121
|
-
* Generate OpenAPI specification.
|
|
122
|
-
*/
|
|
123
|
-
getOpenAPISpec(): OpenAPIComponentSpec;
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=tileset_manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tileset_manager.d.ts","sourceRoot":"","sources":["../../src/components/tileset_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAcnC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAA;IACX,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,aAAa,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;IACjE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,8BAAsB,cAAe,SAAQ,aAAc,YAAW,eAAe;IACjF,6DAA6D;IAC7D,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAO;IAE1C;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlC;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDnD;;;OAGG;YACW,gBAAgB;IA0B9B;;OAEG;YACW,iBAAiB;IAgE/B;;OAEG;YACW,gBAAgB;IAqE9B;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAwCtD;;OAEG;IACG,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAyChD;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IA8DnD;;OAEG;IACH,YAAY,IAAI,KAAK,CAAC;QAClB,MAAM,EAAE,UAAU,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;QAChC,YAAY,CAAC,EAAE,MAAM,CAAA;KACxB,CAAC;IA0CF;;OAEG;IACH,cAAc,IAAI,oBAAoB;CA0LzC"}
|