@cepseudo/assets 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +204 -0
  3. package/dist/assets_manager.d.ts +643 -0
  4. package/dist/assets_manager.d.ts.map +1 -0
  5. package/dist/assets_manager.js +1217 -0
  6. package/dist/assets_manager.js.map +1 -0
  7. package/dist/assets_openapi.d.ts +9 -0
  8. package/dist/assets_openapi.d.ts.map +1 -0
  9. package/dist/assets_openapi.js +391 -0
  10. package/dist/assets_openapi.js.map +1 -0
  11. package/dist/async_upload.d.ts +20 -0
  12. package/dist/async_upload.d.ts.map +1 -0
  13. package/dist/async_upload.js +10 -0
  14. package/dist/async_upload.js.map +1 -0
  15. package/dist/index.d.ts +18 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +17 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/map_manager.d.ts +61 -0
  20. package/dist/map_manager.d.ts.map +1 -0
  21. package/dist/map_manager.js +217 -0
  22. package/dist/map_manager.js.map +1 -0
  23. package/dist/presigned_upload_service.d.ts +52 -0
  24. package/dist/presigned_upload_service.d.ts.map +1 -0
  25. package/dist/presigned_upload_service.js +152 -0
  26. package/dist/presigned_upload_service.js.map +1 -0
  27. package/dist/tileset_manager.d.ts +128 -0
  28. package/dist/tileset_manager.d.ts.map +1 -0
  29. package/dist/tileset_manager.js +705 -0
  30. package/dist/tileset_manager.js.map +1 -0
  31. package/dist/upload_processor.d.ts +42 -0
  32. package/dist/upload_processor.d.ts.map +1 -0
  33. package/dist/upload_processor.js +138 -0
  34. package/dist/upload_processor.js.map +1 -0
  35. package/dist/upload_reconciler.d.ts +44 -0
  36. package/dist/upload_reconciler.d.ts.map +1 -0
  37. package/dist/upload_reconciler.js +140 -0
  38. package/dist/upload_reconciler.js.map +1 -0
  39. package/dist/utils/zip_utils.d.ts +66 -0
  40. package/dist/utils/zip_utils.d.ts.map +1 -0
  41. package/dist/utils/zip_utils.js +169 -0
  42. package/dist/utils/zip_utils.js.map +1 -0
  43. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tileset_manager.js","sourceRoot":"","sources":["../src/tileset_manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type Job } from 'bullmq';
2
+ import type { ConnectionOptions } from 'bullmq';
3
+ import type { StorageService } from '@cepseudo/storage';
4
+ import type { DatabaseAdapter } from '@cepseudo/database';
5
+ export interface TilesetUploadJobData {
6
+ type: 'tileset';
7
+ recordId: number;
8
+ tempFilePath: string;
9
+ componentName: string;
10
+ userId: number;
11
+ filename: string;
12
+ description: string;
13
+ /** S3 key for presigned uploads (when set, download from S3 instead of reading temp file) */
14
+ presignedKey?: string;
15
+ }
16
+ export type UploadJobData = TilesetUploadJobData;
17
+ export type UploadStatus = 'pending' | 'processing' | 'completed' | 'failed';
18
+ /**
19
+ * Background worker for processing large file uploads (tileset extraction).
20
+ * Prevents HTTP timeout by queuing jobs and processing asynchronously.
21
+ *
22
+ * Flow:
23
+ * 1. Read ZIP from temp file
24
+ * 2. Extract and upload all files to storage (OVH S3)
25
+ * 3. Update database with tileset_url and base_path
26
+ * 4. Clean up temp file
27
+ */
28
+ export declare class UploadProcessor {
29
+ private worker;
30
+ private storage;
31
+ private db;
32
+ constructor(storage: StorageService, db: DatabaseAdapter);
33
+ start(connection: ConnectionOptions): void;
34
+ stop(): Promise<void>;
35
+ private processJob;
36
+ /**
37
+ * Process a tileset upload job. Public for testability.
38
+ */
39
+ processTilesetUpload(job: Job<TilesetUploadJobData>): Promise<void>;
40
+ private updateRecordStatus;
41
+ }
42
+ //# sourceMappingURL=upload_processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload_processor.d.ts","sourceRoot":"","sources":["../src/upload_processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,GAAG,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAOzD,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,SAAS,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAChD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE5E;;;;;;;;;GASG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,EAAE,CAAiB;gBAEf,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe;IAKxD,KAAK,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAWpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,UAAU;IAQxB;;OAEG;IACG,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAuG3D,kBAAkB;CAGnC"}
@@ -0,0 +1,138 @@
1
+ import { Worker } from 'bullmq';
2
+ import { extractAndStoreArchive } from './utils/zip_utils.js';
3
+ import { safeAsync, safeCleanup, Logger } from '@cepseudo/shared';
4
+ import fs from 'fs/promises';
5
+ const logger = new Logger('UploadProcessor');
6
+ /**
7
+ * Background worker for processing large file uploads (tileset extraction).
8
+ * Prevents HTTP timeout by queuing jobs and processing asynchronously.
9
+ *
10
+ * Flow:
11
+ * 1. Read ZIP from temp file
12
+ * 2. Extract and upload all files to storage (OVH S3)
13
+ * 3. Update database with tileset_url and base_path
14
+ * 4. Clean up temp file
15
+ */
16
+ export class UploadProcessor {
17
+ constructor(storage, db) {
18
+ this.worker = null;
19
+ this.storage = storage;
20
+ this.db = db;
21
+ }
22
+ start(connection) {
23
+ this.worker = new Worker('dt-uploads', async (job) => this.processJob(job), {
24
+ connection,
25
+ concurrency: 2,
26
+ limiter: { max: 5, duration: 60000 }
27
+ });
28
+ this.worker.on('completed', job => console.log(`[UploadProcessor] Job ${job.id} completed`));
29
+ this.worker.on('failed', (job, err) => console.error(`[UploadProcessor] Job ${job?.id} failed:`, err.message));
30
+ }
31
+ async stop() {
32
+ if (this.worker) {
33
+ await this.worker.close();
34
+ this.worker = null;
35
+ }
36
+ }
37
+ async processJob(job) {
38
+ if (job.data.type === 'tileset') {
39
+ await this.processTilesetUpload(job);
40
+ }
41
+ else {
42
+ throw new Error(`Unknown upload job type: ${String(job.data.type)}`);
43
+ }
44
+ }
45
+ /**
46
+ * Process a tileset upload job. Public for testability.
47
+ */
48
+ async processTilesetUpload(job) {
49
+ const { recordId, tempFilePath, componentName, presignedKey } = job.data;
50
+ let basePath = null;
51
+ try {
52
+ await this.updateRecordStatus(recordId, componentName, 'processing');
53
+ await job.updateProgress(10);
54
+ // Read ZIP file from presigned S3 key or temp file
55
+ let zipBuffer;
56
+ if (presignedKey) {
57
+ zipBuffer = await this.storage.retrieve(presignedKey).catch(err => {
58
+ throw new Error(`Failed to download presigned file from storage: ${err.message}`);
59
+ });
60
+ }
61
+ else {
62
+ zipBuffer = await fs.readFile(tempFilePath).catch(err => {
63
+ throw new Error(`Failed to read temp file: ${err.message}`);
64
+ });
65
+ }
66
+ await job.updateProgress(20);
67
+ // Generate unique base path
68
+ basePath = `${componentName}/${Date.now()}`;
69
+ // Extract and upload all files to storage
70
+ const extractResult = await extractAndStoreArchive(zipBuffer, this.storage, basePath);
71
+ await job.updateProgress(80);
72
+ // Validate tileset.json exists
73
+ if (!extractResult.root_file) {
74
+ // Clean up uploaded files (basePath is always set at this point)
75
+ if (basePath) {
76
+ const pathToDelete = basePath;
77
+ await safeAsync(() => this.storage.deleteByPrefix(pathToDelete), 'cleanup storage on invalid tileset', logger);
78
+ }
79
+ throw new Error('Invalid tileset: no tileset.json found in the ZIP archive');
80
+ }
81
+ // Build the public URL for tileset.json
82
+ const tilesetPath = `${basePath}/${extractResult.root_file}`;
83
+ const tilesetUrl = this.storage.getPublicUrl(tilesetPath);
84
+ // Update database record (url = basePath for deletion)
85
+ await this.db.updateById(componentName, recordId, {
86
+ url: basePath,
87
+ tileset_url: tilesetUrl,
88
+ upload_status: 'completed'
89
+ });
90
+ await job.updateProgress(90);
91
+ // Clean up source file
92
+ if (presignedKey) {
93
+ // Delete the original ZIP from S3 (extraction created individual files)
94
+ await safeAsync(() => this.storage.delete(presignedKey), 'cleanup presigned ZIP after extraction', logger);
95
+ }
96
+ else if (tempFilePath) {
97
+ await safeAsync(() => fs.unlink(tempFilePath), 'cleanup temp file after upload', logger);
98
+ }
99
+ await job.updateProgress(100);
100
+ logger.info(`Tileset ${recordId} uploaded: ${extractResult.file_count} files`);
101
+ }
102
+ catch (error) {
103
+ // Update record as failed (don't delete - keep for debugging)
104
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
105
+ await safeAsync(() => this.db.updateById(componentName, recordId, {
106
+ upload_status: 'failed',
107
+ upload_error: errorMessage
108
+ }), 'update record status to failed', logger);
109
+ // Clean up: uploaded files and source file
110
+ const pathToClean = basePath; // Capture for closure
111
+ const cleanupOps = [];
112
+ if (pathToClean) {
113
+ cleanupOps.push({
114
+ operation: () => this.storage.deleteByPrefix(pathToClean),
115
+ context: 'cleanup storage on upload error'
116
+ });
117
+ }
118
+ if (presignedKey) {
119
+ cleanupOps.push({
120
+ operation: () => this.storage.delete(presignedKey),
121
+ context: 'cleanup presigned ZIP on upload error'
122
+ });
123
+ }
124
+ else if (tempFilePath) {
125
+ cleanupOps.push({
126
+ operation: () => fs.unlink(tempFilePath),
127
+ context: 'cleanup temp file on upload error'
128
+ });
129
+ }
130
+ await safeCleanup(cleanupOps, logger);
131
+ throw error;
132
+ }
133
+ }
134
+ async updateRecordStatus(id, tableName, status) {
135
+ await this.db.updateById(tableName, id, { upload_status: status });
136
+ }
137
+ }
138
+ //# sourceMappingURL=upload_processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload_processor.js","sourceRoot":"","sources":["../src/upload_processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAA;AAIzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE5B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAiB5C;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IAKxB,YAAY,OAAuB,EAAE,EAAmB;QAJhD,WAAM,GAAkB,IAAI,CAAA;QAKhC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,UAA6B;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,GAAuB,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC5F,UAAU;YACV,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;SACvC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;QAC5F,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAClH,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACtB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,GAAuB;QAC5C,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAgC,CAAC,CAAA;QACrE,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAE,GAAG,CAAC,IAA2C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChH,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,GAA8B;QACrD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;QACxE,IAAI,QAAQ,GAAkB,IAAI,CAAA;QAElC,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;YACpE,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YAE5B,mDAAmD;YACnD,IAAI,SAAiB,CAAA;YACrB,IAAI,YAAY,EAAE,CAAC;gBACf,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC9D,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;gBACrF,CAAC,CAAC,CAAA;YACN,CAAC;iBAAM,CAAC;gBACJ,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACpD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC/D,CAAC,CAAC,CAAA;YACN,CAAC;YACD,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YAE5B,4BAA4B;YAC5B,QAAQ,GAAG,GAAG,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YAE3C,0CAA0C;YAC1C,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YACrF,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YAE5B,+BAA+B;YAC/B,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC3B,iEAAiE;gBACjE,IAAI,QAAQ,EAAE,CAAC;oBACX,MAAM,YAAY,GAAG,QAAQ,CAAA;oBAC7B,MAAM,SAAS,CACX,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,EAC/C,oCAAoC,EACpC,MAAM,CACT,CAAA;gBACL,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;YAChF,CAAC;YAED,wCAAwC;YACxC,MAAM,WAAW,GAAG,GAAG,QAAQ,IAAI,aAAa,CAAC,SAAS,EAAE,CAAA;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;YAEzD,uDAAuD;YACvD,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE;gBAC9C,GAAG,EAAE,QAAQ;gBACb,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,WAAW;aAC7B,CAAC,CAAA;YACF,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YAE5B,uBAAuB;YACvB,IAAI,YAAY,EAAE,CAAC;gBACf,wEAAwE;gBACxE,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,wCAAwC,EAAE,MAAM,CAAC,CAAA;YAC9G,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACtB,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,gCAAgC,EAAE,MAAM,CAAC,CAAA;YAC5F,CAAC;YACD,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;YAE7B,MAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,cAAc,aAAa,CAAC,UAAU,QAAQ,CAAC,CAAA;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,8DAA8D;YAC9D,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YAC7E,MAAM,SAAS,CACX,GAAG,EAAE,CACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE;gBACxC,aAAa,EAAE,QAAQ;gBACvB,YAAY,EAAE,YAAY;aAC7B,CAAC,EACN,gCAAgC,EAChC,MAAM,CACT,CAAA;YAED,2CAA2C;YAC3C,MAAM,WAAW,GAAG,QAAQ,CAAA,CAAC,sBAAsB;YACnD,MAAM,UAAU,GAAkE,EAAE,CAAA;YACpF,IAAI,WAAW,EAAE,CAAC;gBACd,UAAU,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC;oBACzD,OAAO,EAAE,iCAAiC;iBAC7C,CAAC,CAAA;YACN,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;oBAClD,OAAO,EAAE,uCAAuC;iBACnD,CAAC,CAAA;YACN,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACtB,UAAU,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;oBACxC,OAAO,EAAE,mCAAmC;iBAC/C,CAAC,CAAA;YACN,CAAC;YACD,MAAM,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAErC,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,SAAiB,EAAE,MAAoB;QAChF,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;IACtE,CAAC;CACJ"}
@@ -0,0 +1,44 @@
1
+ import type { StorageService } from '@cepseudo/storage';
2
+ import type { DatabaseAdapter } from '@cepseudo/database';
3
+ export interface ReconciliationResult {
4
+ checked: number;
5
+ completed: number;
6
+ expired: number;
7
+ skipped: number;
8
+ }
9
+ export interface UploadReconcilerOptions {
10
+ intervalMs?: number;
11
+ }
12
+ /**
13
+ * Periodically reconciles pending presigned uploads.
14
+ *
15
+ * Checks all records with upload_status='pending' and presigned_key set:
16
+ * - If presigned URL expired and file exists on S3 → mark completed
17
+ * - If presigned URL expired and no file on S3 → mark expired
18
+ * - If presigned URL not expired and file exists → mark completed (early confirm)
19
+ * - If presigned URL not expired and no file → skip (still waiting)
20
+ */
21
+ export declare class UploadReconciler {
22
+ private db;
23
+ private storage;
24
+ private intervalMs;
25
+ private timer;
26
+ private tableNames;
27
+ constructor(db: DatabaseAdapter, storage: StorageService, options?: UploadReconcilerOptions);
28
+ /**
29
+ * Register table names to reconcile.
30
+ * Call this before start() to tell the reconciler which tables to check.
31
+ */
32
+ registerTables(names: string[]): void;
33
+ start(): void;
34
+ stop(): void;
35
+ /**
36
+ * Run reconciliation across all registered tables.
37
+ */
38
+ reconcile(): Promise<ReconciliationResult>;
39
+ /**
40
+ * Reconcile pending presigned uploads for a specific table.
41
+ */
42
+ reconcileTable(tableName: string): Promise<ReconciliationResult>;
43
+ }
44
+ //# sourceMappingURL=upload_reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload_reconciler.d.ts","sourceRoot":"","sources":["../src/upload_reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAKzD,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,UAAU,CAAe;gBAErB,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAM3F;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAQrC,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC;IA6BhD;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAoEzE"}
@@ -0,0 +1,140 @@
1
+ import { safeAsync, Logger } from '@cepseudo/shared';
2
+ const logger = new Logger('UploadReconciler');
3
+ /**
4
+ * Periodically reconciles pending presigned uploads.
5
+ *
6
+ * Checks all records with upload_status='pending' and presigned_key set:
7
+ * - If presigned URL expired and file exists on S3 → mark completed
8
+ * - If presigned URL expired and no file on S3 → mark expired
9
+ * - If presigned URL not expired and file exists → mark completed (early confirm)
10
+ * - If presigned URL not expired and no file → skip (still waiting)
11
+ */
12
+ export class UploadReconciler {
13
+ constructor(db, storage, options) {
14
+ this.timer = null;
15
+ this.tableNames = [];
16
+ this.db = db;
17
+ this.storage = storage;
18
+ this.intervalMs = options?.intervalMs ?? 5 * 60 * 1000; // 5 minutes default
19
+ }
20
+ /**
21
+ * Register table names to reconcile.
22
+ * Call this before start() to tell the reconciler which tables to check.
23
+ */
24
+ registerTables(names) {
25
+ for (const name of names) {
26
+ if (!this.tableNames.includes(name)) {
27
+ this.tableNames.push(name);
28
+ }
29
+ }
30
+ }
31
+ start() {
32
+ if (this.timer)
33
+ return;
34
+ if (this.tableNames.length === 0) {
35
+ logger.info('No tables registered, upload reconciler not started');
36
+ return;
37
+ }
38
+ logger.info(`Starting upload reconciler (interval: ${this.intervalMs}ms, tables: ${this.tableNames.join(', ')})`);
39
+ this.timer = setInterval(() => {
40
+ safeAsync(() => this.reconcile(), 'upload reconciliation cycle', logger);
41
+ }, this.intervalMs);
42
+ }
43
+ stop() {
44
+ if (this.timer) {
45
+ clearInterval(this.timer);
46
+ this.timer = null;
47
+ logger.info('Upload reconciler stopped');
48
+ }
49
+ }
50
+ /**
51
+ * Run reconciliation across all registered tables.
52
+ */
53
+ async reconcile() {
54
+ const totals = {
55
+ checked: 0,
56
+ completed: 0,
57
+ expired: 0,
58
+ skipped: 0
59
+ };
60
+ if (!this.storage.supportsPresignedUrls()) {
61
+ return totals;
62
+ }
63
+ for (const tableName of this.tableNames) {
64
+ const result = await this.reconcileTable(tableName);
65
+ totals.checked += result.checked;
66
+ totals.completed += result.completed;
67
+ totals.expired += result.expired;
68
+ totals.skipped += result.skipped;
69
+ }
70
+ if (totals.checked > 0) {
71
+ logger.info(`Reconciliation totals: checked=${totals.checked}, completed=${totals.completed}, expired=${totals.expired}, skipped=${totals.skipped}`);
72
+ }
73
+ return totals;
74
+ }
75
+ /**
76
+ * Reconcile pending presigned uploads for a specific table.
77
+ */
78
+ async reconcileTable(tableName) {
79
+ const result = {
80
+ checked: 0,
81
+ completed: 0,
82
+ expired: 0,
83
+ skipped: 0
84
+ };
85
+ if (!this.storage.supportsPresignedUrls()) {
86
+ return result;
87
+ }
88
+ try {
89
+ // Find all pending records with a presigned_key
90
+ const pendingRecords = await this.db.findByConditions(tableName, {
91
+ upload_status: 'pending'
92
+ });
93
+ const now = new Date();
94
+ for (const record of pendingRecords) {
95
+ if (!record.presigned_key)
96
+ continue;
97
+ result.checked++;
98
+ const isExpired = record.presigned_expires_at
99
+ ? new Date(record.presigned_expires_at) < now
100
+ : false;
101
+ try {
102
+ const existsResult = await this.storage.objectExists(record.presigned_key);
103
+ if (existsResult.exists) {
104
+ // File uploaded — mark completed
105
+ await this.db.updateById(tableName, record.id, {
106
+ upload_status: 'completed',
107
+ url: record.presigned_key
108
+ });
109
+ result.completed++;
110
+ logger.info(`Reconciled record ${record.id}: completed (file found)`);
111
+ }
112
+ else if (isExpired) {
113
+ // URL expired and no file — mark expired
114
+ await this.db.updateById(tableName, record.id, {
115
+ upload_status: 'expired'
116
+ });
117
+ result.expired++;
118
+ logger.info(`Reconciled record ${record.id}: expired`);
119
+ }
120
+ else {
121
+ // URL not expired, no file yet — skip
122
+ result.skipped++;
123
+ }
124
+ }
125
+ catch (error) {
126
+ logger.warn(`Failed to reconcile record ${record.id}: ${error instanceof Error ? error.message : 'Unknown error'}`);
127
+ result.skipped++;
128
+ }
129
+ }
130
+ if (result.checked > 0) {
131
+ logger.info(`Reconciliation for ${tableName}: checked=${result.checked}, completed=${result.completed}, expired=${result.expired}, skipped=${result.skipped}`);
132
+ }
133
+ }
134
+ catch (error) {
135
+ logger.warn(`Failed to reconcile table ${tableName}: ${error instanceof Error ? error.message : 'Unknown error'}`);
136
+ }
137
+ return result;
138
+ }
139
+ }
140
+ //# sourceMappingURL=upload_reconciler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload_reconciler.js","sourceRoot":"","sources":["../src/upload_reconciler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { StorageService } from '@cepseudo/storage';
2
+ /**
3
+ * Result of extracting and storing a ZIP archive
4
+ */
5
+ export interface ExtractedArchiveResult {
6
+ /** The root/main file path (e.g., 'tileset.json') */
7
+ root_file?: string;
8
+ /** Total number of files extracted */
9
+ file_count: number;
10
+ }
11
+ /**
12
+ * Extracts the content of a zip file as a stream (for large files)
13
+ * @param zipBuffer - The content of the zip file as Buffer
14
+ * @returns A generator yielding tuples containing the name and content of each file in the zip file
15
+ */
16
+ export declare function extractZipContentStream(zipBuffer: Buffer): AsyncGenerator<[string, string | Buffer]>;
17
+ /**
18
+ * Converts a zip file to a dictionary containing all files and their contents
19
+ * @param zipBuffer - The content of the zip file as Buffer
20
+ * @returns A dictionary containing the content of the zip file
21
+ */
22
+ export declare function zipToDict(zipBuffer: Buffer): Promise<Record<string, string | Buffer>>;
23
+ /**
24
+ * Detects the root file for 3D Tiles tilesets
25
+ * Looks for tileset.json or similar entry point files
26
+ * @param files - List of file paths in the archive
27
+ * @returns The path to the root file, or undefined if not found
28
+ */
29
+ export declare function detectTilesetRootFile(files: string[]): string | undefined;
30
+ /**
31
+ * Normalizes file paths from ZIP archives
32
+ * Removes leading directory if all files share the same root folder
33
+ * @param files - Original file paths from the archive
34
+ * @returns Normalized file paths (original -> normalized)
35
+ */
36
+ export declare function normalizeArchivePaths(files: string[]): Map<string, string>;
37
+ /**
38
+ * Extracts a ZIP archive and stores each file individually using the storage service.
39
+ *
40
+ * This function:
41
+ * 1. Extracts all files from the ZIP
42
+ * 2. Normalizes paths (removes common root directory if present)
43
+ * 3. Stores each file using the storage service with a unique base path
44
+ * 4. Returns the root file path and file count
45
+ *
46
+ * Files are uploaded in parallel batches for performance.
47
+ *
48
+ * @param zipBuffer - The ZIP file content as a Buffer
49
+ * @param storage - The storage service to use for saving files
50
+ * @param basePath - Base path/folder for storing extracted files (e.g., 'tilesets/1234567890')
51
+ * @returns ExtractedArchiveResult with root file and file count
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const result = await extractAndStoreArchive(zipBuffer, storage, 'tilesets/1234567890')
56
+ * // result.root_file = 'tileset.json'
57
+ * // result.file_count = 42
58
+ *
59
+ * // Files are stored at:
60
+ * // tilesets/1234567890/tileset.json
61
+ * // tilesets/1234567890/tiles/tile_0.b3dm
62
+ * // etc.
63
+ * ```
64
+ */
65
+ export declare function extractAndStoreArchive(zipBuffer: Buffer, storage: StorageService, basePath: string): Promise<ExtractedArchiveResult>;
66
+ //# sourceMappingURL=zip_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip_utils.d.ts","sourceRoot":"","sources":["../../src/utils/zip_utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAA;CACrB;AAED;;;;GAIG;AACH,wBAAuB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAqB3G;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAQ3F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAezE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAuEjC"}