@mesh-sync/worker-backend-client 4.0.21 → 4.0.24-pr.51.20260312132340

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/README.md CHANGED
@@ -183,52 +183,6 @@ Used for:
183
183
 
184
184
 
185
185
 
186
- ### ekg-edge-batch-create-completed
187
-
188
- **Description:** Completion event for EKG edge batch creation with propagation results.
189
-
190
- **Method:** `client.ekgEdgeBatchCreateCompleted(data)`
191
-
192
- **Payload Type:** `EkgEdgeBatchCreateCompletedMessage`
193
-
194
- **Fields:**
195
-
196
- - `requestId` (string) [✓]: Original request ID from ekg-edge-batch-create-request
197
-
198
- - `success` (boolean) [✓]: Whether the batch operation succeeded
199
-
200
- - `statistics` (object) [✓]: Batch operation statistics
201
-
202
- - `conflicts` (array) [✗]: List of high-conflict edges requiring review
203
-
204
- - `errors` (array) [✗]: Errors encountered during processing
205
-
206
- - `graphMetrics` (object) [✗]: Overall graph state after this batch
207
-
208
-
209
-
210
- ### ekg-edge-batch-create-request
211
-
212
- **Description:** Create multiple EKG edges with Dempster-Shafer mass functions. Triggered by metamodel detection completion.
213
-
214
- **Method:** `client.ekgEdgeBatchCreateRequest(data)`
215
-
216
- **Payload Type:** `EkgEdgeBatchCreateRequestMessage`
217
-
218
- **Fields:**
219
-
220
- - `requestId` (string) [✓]: Unique request ID for tracking (e.g., metamodel detection job ID)
221
-
222
- - `source` (string) [✓]: Source of the edges: metamodel-heuristic, manual, taxonomy-import, etc.
223
-
224
- - `edges` (array) [✓]: Batch of edges to create/update in the EKG
225
-
226
- - `propagationOptions` (object) [✗]: Options for evidential edge propagation after edge creation
227
-
228
- - `webhookUrl` (string) [✗]: Optional webhook URL for async completion notification
229
-
230
-
231
-
232
186
  ### etsy-analytics-sync-completed
233
187
 
234
188
  **Description:** Contains synced analytics data for Etsy listings. Backend stores this in etsy_analytics_snapshots table and indexes to ELK.
@@ -464,63 +418,81 @@ Retry Configuration:
464
418
 
465
419
 
466
420
 
467
- ### marketplace-analytics-sync-completed
421
+ ### ip-check-completed
468
422
 
469
- **Description:** Contains synced analytics data for marketplace listings. Backend stores this in marketplace_analytics_snapshots table and indexes to ELK. Works with any marketplace provider.
423
+ **Description:** Contains IP verification results including trademark risk, copyright risk, detected brands/franchises, and analysis confidence scores
470
424
 
471
- **Method:** `client.marketplaceAnalyticsSyncCompleted(data)`
425
+ **Method:** `client.ipCheckCompleted(data)`
472
426
 
473
- **Payload Type:** `MarketplaceAnalyticsSyncCompletedMessage`
427
+ **Payload Type:** `IpCheckCompletedMessage`
474
428
 
475
429
  **Fields:**
476
430
 
477
- - `originalJobId` (string) [✗]: BullMQ job ID from original request
431
+ - `modelId` (string) [✗]: Model UUID that was analyzed
478
432
 
479
- - `marketplaceProvider` (string) [✗]: Marketplace provider type (etsy, ebay, etc.)
433
+ - `ownerId` (string) [✗]: Owner user ID
480
434
 
481
- - `status` (string) [✗]: Sync result (SUCCESS, PARTIAL_SUCCESS, or FAILED)
435
+ - `entityType` (string) [✗]: Type of entity checked: 'model' or 'metamodel'
482
436
 
483
- - `syncedCount` (integer) [✗]: Number of listings successfully synced
437
+ - `status` (string) [✗]: Overall IP check outcome: 'clear', 'flagged', or 'error'
484
438
 
485
- - `errorCount` (integer) [✗]: Number of listings that failed
439
+ - `trademarkRisk` (string) [✗]: Detected trademark infringement risk level: 'none', 'low', 'medium', 'high'
486
440
 
487
- - `results` (array) [✗]: Analytics for each synced listing
441
+ - `copyrightRisk` (string) [✗]: Detected copyright infringement risk level: 'none', 'low', 'medium', 'high'
488
442
 
489
- - `errors` (array) [✗]: Errors for failed listings
443
+ - `matchedBrands` (array) [✗]: Brand names detected in model name or content
444
+
445
+ - `matchedFranchises` (array) [✗]: Franchise/character names detected
446
+
447
+ - `similarModelsCount` (integer) [✗]: Number of visually similar models found
448
+
449
+ - `confidence` (number) [✗]: Overall confidence score for the analysis (0.0-1.0)
450
+
451
+ - `riskScorePercent` (integer) [✗]: Risk score as 0-100 integer (FR-024: >70 HIGH, 40-70 MEDIUM, <40 LOW)
452
+
453
+ - `riskLevel` (string) [✗]: Overall risk level: 'none', 'low', 'medium', 'high'
454
+
455
+ - `recommendation` (string) [✗]: Recommended action: 'block' (HIGH risk), 'warn' (MEDIUM risk), 'allow' (LOW/NONE risk)
456
+
457
+ - `suggestedChanges` (object) [✗]: Suggested modifications to reduce IP risk
490
458
 
491
- - `syncedAt` (string) [✗]: When sync completed (ISO 8601)
459
+ - `heuristicResults` (object) [✗]: Detailed results from each heuristic check
492
460
 
493
- - `nextScheduledSync` (string) [✗]: When next automatic sync should occur (ISO 8601)
461
+ - `error` (object) [✗]: Error details if status is 'error'
494
462
 
463
+ - `processingDurationMs` (integer) [✗]: Total processing time in milliseconds
495
464
 
496
465
 
497
- ### marketplace-analytics-sync-request
498
466
 
499
- **Description:** Syncs analytics data from marketplace API for one or more listings. Fetches views, favorites, sales, revenue, and traffic source data. Can sync: specific listings, all user listings, or shop-level analytics. Works with any marketplace provider that supports analytics (etsy, ebay, etc.).
467
+ ### ip-check-request
500
468
 
501
- **Method:** `client.marketplaceAnalyticsSyncRequest(data)`
469
+ **Description:** Triggers intellectual property verification analysis for a model thumbnail, detecting potential trademark and copyright issues using perceptual hashing, text analysis, and optional reverse image search.
502
470
 
503
- **Payload Type:** `MarketplaceAnalyticsSyncRequestMessage`
471
+ **Method:** `client.ipCheckRequest(data)`
472
+
473
+ **Payload Type:** `IpCheckRequestMessage`
504
474
 
505
475
  **Fields:**
506
476
 
507
- - `marketplaceProvider` (string) [✗]: Marketplace provider type (etsy, ebay, etc.)
477
+ - `modelId` (string) [✗]: Unique identifier for the model to analyze
508
478
 
509
- - `marketplaceConnectionId` (string) [✗]: UUID of the marketplace connection configuration
479
+ - `ownerId` (string) [✗]: User ID who owns the model
510
480
 
511
- - `listingIds` (array) [✗]: Internal listing UUIDs to sync. Empty array = sync all for user.
481
+ - `entityType` (string) [✗]: Type of entity being checked: 'model' or 'metamodel'
512
482
 
513
- - `userId` (string) [✗]: UUID of user whose listings to sync (if listingIds empty)
483
+ - `modelName` (string) [✗]: Name of the model for trademark/franchise text detection
514
484
 
515
- - `externalShopId` (string) [✗]: External marketplace shop ID for shop-level analytics
485
+ - `tags` (array) [✗]: Model tags for IP reference detection
516
486
 
517
- - `timeRange` (object) [✗]: Date range for historical analytics
487
+ - `description` (string) [✗]: Model description for text-based IP analysis
518
488
 
519
- - `syncOptions` (object) [✗]: Optional sync configuration
489
+ - `thumbnailUrl` (string) [✗]: URL to fetch the thumbnail image for visual analysis
520
490
 
521
- - `marketplaceCredentials` (object) [✗]: Encrypted marketplace credentials (retrieved from marketplaceConnectionId)
491
+ - `minioPath` (string) [✗]: Path to thumbnail in MinIO if stored internally
522
492
 
523
- - `webhookUrl` (string) [✗]: Callback URL for completion notification
493
+ - `additionalImageUrls` (array) [✗]: Optional additional images for more comprehensive analysis (e.g., 360° views)
494
+
495
+ - `analysisOptions` (object) [✗]: Optional analysis configuration
524
496
 
525
497
 
526
498
 
@@ -667,6 +639,41 @@ This is typically triggered after initial connection or periodically to keep mar
667
639
 
668
640
 
669
641
 
642
+ ### marketplace-intelligence-completed
643
+
644
+ **Description:** Response from marketplace intelligence scraping.
645
+ Contains aggregated similarity data from marketplace searches.
646
+
647
+ Consumed by worker-backend to update pipeline context before
648
+ sellability analysis runs.
649
+
650
+
651
+ **Method:** `client.marketplaceIntelligenceCompleted(data)`
652
+
653
+ **Payload Type:** `MarketplaceIntelligenceCompletedMessage`
654
+
655
+ **Fields:**
656
+
657
+ - `modelId` (string) [✓]: UUID of the model that was researched
658
+
659
+ - `ownerId` (string) [✓]: UUID of the model owner
660
+
661
+ - `status` (string) [✓]: Result status
662
+
663
+ - `marketData` (object) [✗]: Aggregated market intelligence across all scraped marketplaces
664
+
665
+ - `marketplaceBreakdown` (array) [✗]: Results per marketplace
666
+
667
+ - `similarityScore` (number) [✗]: How saturated the market is for this model type (0=unique, 100=very common)
668
+
669
+ - `error` (object) [✗]: Error information if status is FAILED
670
+
671
+ - `analyzedAt` (string) [✗]: When the analysis completed
672
+
673
+ - `analysisVersion` (string) [✗]: Version of the intelligence collector
674
+
675
+
676
+
670
677
  ### marketplace-intelligence-event
671
678
 
672
679
  **Description:** Public marketplace intelligence data scraped from external marketplaces.
@@ -712,6 +719,43 @@ Used for market research, pricing optimization, and trend detection.
712
719
 
713
720
 
714
721
 
722
+ ### marketplace-intelligence-request
723
+
724
+ **Description:** Triggers automated marketplace scraping to find similar/competing listings
725
+ for a given model. This is a pipeline stage that runs after metadata generation
726
+ to inform sellability analysis with real market data.
727
+
728
+ The worker-analytic-collector (or marketplace-connectors worker) will:
729
+ 1. Use model metadata (title, tags, category) to build search queries
730
+ 2. Scrape connected marketplaces (Etsy, eBay, etc.) for similar listings
731
+ 3. Emit marketplace-intelligence-event results for Elasticsearch indexing
732
+ 4. Return aggregated similarity data to the pipeline context
733
+
734
+ Pipeline integration:
735
+ - Triggered after: metadata-generation (needs model title/tags/category)
736
+ - Results feed into: sellability-analysis (market positioning data)
737
+
738
+
739
+ **Method:** `client.marketplaceIntelligenceRequest(data)`
740
+
741
+ **Payload Type:** `MarketplaceIntelligenceRequestMessage`
742
+
743
+ **Fields:**
744
+
745
+ - `modelId` (string) [✓]: UUID of the model to research
746
+
747
+ - `ownerId` (string) [✓]: UUID of the model owner
748
+
749
+ - `searchContext` (object) [✗]: Model metadata used to build marketplace search queries
750
+
751
+ - `scrapingOptions` (object) [✗]: Configuration for the marketplace scraping
752
+
753
+ - `pipelineId` (string) [✗]: Pipeline execution ID for correlation
754
+
755
+ - `executionId` (string) [✗]: Pipeline execution UUID for correlation
756
+
757
+
758
+
715
759
  ### marketplace-listing-description-generation-completed
716
760
 
717
761
  **Description:** Notifies backend that marketplace description generation completed. Contains generated description with metadata tracking (AI model, confidence, generation timestamp) and suggested price.
@@ -1017,76 +1061,6 @@ Includes bidirectional sync: - Pull: Fetch listings from marketplace to update l
1017
1061
 
1018
1062
 
1019
1063
 
1020
- ### marketplace-publish-listing-completed
1021
-
1022
- **Description:** Indicates completion of marketplace listing publication. Contains external listing ID and URL, or error details if failed. Works with any marketplace provider (etsy, ebay, etc.).
1023
-
1024
- **Method:** `client.marketplacePublishListingCompleted(data)`
1025
-
1026
- **Payload Type:** `MarketplacePublishListingCompletedMessage`
1027
-
1028
- **Fields:**
1029
-
1030
- - `originalJobId` (string) [✗]: BullMQ job ID from original request
1031
-
1032
- - `listingId` (string) [✗]: Internal marketplace_items UUID
1033
-
1034
- - `metamodelId` (string) [✗]: UUID of the metamodel that was published
1035
-
1036
- - `marketplaceProvider` (string) [✗]: Marketplace provider type (etsy, ebay, etc.)
1037
-
1038
- - `materialName` (string) [✗]: Material variant name
1039
-
1040
- - `status` (string) [✗]: Publication result (SUCCESS or FAILED)
1041
-
1042
- - `externalListingId` (string) [✗]: External marketplace listing ID (only if status=SUCCESS)
1043
-
1044
- - `externalListingUrl` (string) [✗]: URL to view listing on marketplace (only if status=SUCCESS)
1045
-
1046
- - `externalFileId` (string) [✗]: External marketplace file ID (only if status=SUCCESS)
1047
-
1048
- - `error` (object) [✗]: Error details (only if status=FAILED)
1049
-
1050
- - `publishedAt` (string) [✗]: When the listing was created (ISO 8601, only if status=SUCCESS)
1051
-
1052
- - `processingDuration` (integer) [✗]: Processing time in milliseconds
1053
-
1054
-
1055
-
1056
- ### marketplace-publish-listing-request
1057
-
1058
- **Description:** Publishes a single metamodel listing to a marketplace for a specific material variant. Creates listing, uploads digital file, and returns external listing ID. This message is enqueued for EACH material variant when publishing a metamodel. The marketplace type (etsy, ebay, etc.) is determined by the marketplaceProvider field.
1059
-
1060
- **Method:** `client.marketplacePublishListingRequest(data)`
1061
-
1062
- **Payload Type:** `MarketplacePublishListingRequestMessage`
1063
-
1064
- **Fields:**
1065
-
1066
- - `listingId` (string) [✗]: Internal marketplace_items table UUID
1067
-
1068
- - `metamodelId` (string) [✗]: UUID of the metamodel being published
1069
-
1070
- - `ownerId` (string) [✗]: UUID of the user who owns the metamodel
1071
-
1072
- - `marketplaceProvider` (string) [✗]: Marketplace provider type (etsy, ebay, leboncoin, etc.)
1073
-
1074
- - `marketplaceConnectionId` (string) [✗]: UUID of the marketplace connection configuration
1075
-
1076
- - `materialVariant` (object) [✗]: Material-specific listing configuration
1077
-
1078
- - `baseListingData` (object) [✗]: Common listing information shared across variants
1079
-
1080
- - `publishOptions` (object) [✗]: Publishing configuration (marketplace-specific options)
1081
-
1082
- - `marketplaceCredentials` (object) [✗]: Encrypted marketplace credentials (retrieved from marketplaceConnectionId)
1083
-
1084
- - `fileMetadata` (object) [✗]: Digital file to upload
1085
-
1086
- - `webhookUrl` (string) [✗]: Callback URL for completion notification
1087
-
1088
-
1089
-
1090
1064
  ### media-batch-download-completed
1091
1065
 
1092
1066
  **Description:** Notifies that a batch media download has been completed.
@@ -1323,7 +1297,7 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1323
1297
 
1324
1298
  ### model-finder-index-request
1325
1299
 
1326
- **Description:** Request to index a 3D model for similarity search.
1300
+ **Description:** DEPRECATED (2026-02-18) FR-023 retired. Merge 3D rendering into worker-file-vectorize.
1327
1301
 
1328
1302
  **Method:** `client.modelFinderIndexRequest(data)`
1329
1303
 
@@ -1339,7 +1313,7 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1339
1313
 
1340
1314
  ### model-finder-response
1341
1315
 
1342
- **Description:** Response containing search results from the model finder.
1316
+ **Description:** DEPRECATED (2026-02-18) FR-023 retired. Merge 3D rendering into worker-file-vectorize.
1343
1317
 
1344
1318
  **Method:** `client.modelFinderResponse(data)`
1345
1319
 
@@ -1355,7 +1329,7 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1355
1329
 
1356
1330
  ### model-finder-search-request
1357
1331
 
1358
- **Description:** Request to search for similar 3D models.
1332
+ **Description:** DEPRECATED (2026-02-18) FR-023 retired. Merge 3D rendering into worker-file-vectorize.
1359
1333
 
1360
1334
  **Method:** `client.modelFinderSearchRequest(data)`
1361
1335
 
@@ -1449,6 +1423,76 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1449
1423
 
1450
1424
 
1451
1425
 
1426
+ ### model-print-analysis-completed
1427
+
1428
+ **Description:** Reports completion of 3D print analysis — contains estimation, printability, and cost breakdown per FR-022
1429
+
1430
+ **Method:** `client.modelPrintAnalysisCompleted(data)`
1431
+
1432
+ **Payload Type:** `ModelPrintAnalysisCompletedMessage`
1433
+
1434
+ **Fields:**
1435
+
1436
+ - `originalJobId` (string) [✗]: ID of the original analysis request job
1437
+
1438
+ - `modelId` (string) [✗]: UUID of the analysed model
1439
+
1440
+ - `status` (string) [✗]: Analysis result status
1441
+
1442
+ - `errorMessage` (string) [✗]: Error description when status is FAILED
1443
+
1444
+ - `material` (string) [✗]: Material type used for estimation
1445
+
1446
+ - `quality` (string) [✗]: Quality preset used
1447
+
1448
+ - `printTimeMinutes` (number) [✗]: Estimated total print time in minutes
1449
+
1450
+ - `materialGrams` (number) [✗]: Estimated material consumption in grams (body only)
1451
+
1452
+ - `needsSupport` (boolean) [✗]: Whether the model requires support structures
1453
+
1454
+ - `supportMaterialGrams` (number) [✗]: Estimated support material in grams
1455
+
1456
+ - `overhangPercentage` (number) [✗]: Percentage of surface area with overhangs > 45°
1457
+
1458
+ - `minWallThicknessMm` (number) [✗]: Thinnest detected wall in millimeters
1459
+
1460
+ - `solidVolumeCm3` (number) [✗]: Solid volume of the mesh in cm³
1461
+
1462
+ - `surfaceAreaCm2` (number) [✗]: Total surface area in cm²
1463
+
1464
+ - `boundingBox` (object) [✗]: Bounding box in millimeters
1465
+
1466
+ - `estimatedCostEUR` (number) [✗]: Total estimated production cost in EUR
1467
+
1468
+ - `costBreakdown` (object) [✗]: Granular cost breakdown per WF-009 MaterialCostCalculatorService
1469
+
1470
+
1471
+
1472
+ ### model-print-analysis-request
1473
+
1474
+ **Description:** Triggers 3D print analysis for a model — estimates print time, material usage, support needs, and cost breakdown per FR-022
1475
+
1476
+ **Method:** `client.modelPrintAnalysisRequest(data)`
1477
+
1478
+ **Payload Type:** `ModelPrintAnalysisRequestMessage`
1479
+
1480
+ **Fields:**
1481
+
1482
+ - `modelId` (string) [✗]: UUID of the model to analyse
1483
+
1484
+ - `ownerId` (string) [✗]: UUID of the user who owns the model
1485
+
1486
+ - `material` (string) [✗]: Material type enum value (e.g. PLA, PETG, RESIN_STANDARD)
1487
+
1488
+ - `quality` (string) [✗]: Print quality preset
1489
+
1490
+ - `webhookUrl` (string) [✗]: URL called when analysis completes or fails
1491
+
1492
+ - `minioPath` (string) [✗]: Path to model in MinIO storage for geometry analysis (e.g. 'raw_models/{modelId}/original.glb')
1493
+
1494
+
1495
+
1452
1496
  ### model-sellability-analysis-completed
1453
1497
 
1454
1498
  **Description:** Contains sellability analysis results including Etsy-specific recommendations, material pricing, and marketplace compatibility scores
@@ -1629,6 +1673,8 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1629
1673
 
1630
1674
  - `recommendedOrientation` (object) [✗]: Recommended print orientation for minimal support material and best results
1631
1675
 
1676
+ - `slicerRecommendations` (object) [✗]: Slicer-derived recommended print settings based on model analysis (feeds into print job creation as defaults)
1677
+
1632
1678
  - `originalUnit` (string) [✗]: Original file format unit detected from metadata or inferred from scale
1633
1679
 
1634
1680
  - `formatVersion` (string) [✗]: File format version (e.g., 'STL Binary', 'OBJ v4', 'PLY 1.0')
@@ -1679,6 +1725,226 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1679
1725
 
1680
1726
 
1681
1727
 
1728
+ ### slicing-fdm-request
1729
+
1730
+ **Description:** Request FDM slicing simulation via OrcaSlicer (preferred) or heuristic fallback. Accepts OrcaSlicer-compatible printer/process/filament JSON profiles.
1731
+
1732
+ **Method:** `client.slicingFdmRequest(data)`
1733
+
1734
+ **Payload Type:** `SlicingFdmRequestMessage`
1735
+
1736
+ **Fields:**
1737
+
1738
+ - `modelId` (string) [✗]: UUID of the model
1739
+
1740
+ - `storageItemId` (string) [✗]: UUID or path of the storage item to download the STL/3MF
1741
+
1742
+ - `profileId` (string) [✗]: UUID of the user's slicer profile from the database
1743
+
1744
+ - `profileName` (string) [✗]: Human-readable profile name (e.g. 'My Bambu X1C - PLA Fine')
1745
+
1746
+ - `printerProfile` (object) [✗]: OrcaSlicer printer profile JSON: nozzle_diameter, bed_shape, max speeds, acceleration, retraction
1747
+
1748
+ - `processProfile` (object) [✗]: OrcaSlicer process profile JSON: layer_height, sparse_infill_density, wall_loops, speeds, support settings
1749
+
1750
+ - `filamentProfile` (object) [✗]: OrcaSlicer filament profile JSON: filament_type, filament_density, temperature, flow_ratio, retraction
1751
+
1752
+ - `layerHeight` (number) [✗]: Override: layer height in mm (takes precedence over processProfile)
1753
+
1754
+ - `infillPercentage` (number) [✗]: Override: infill percentage (0-100)
1755
+
1756
+ - `nozzleDiameter` (number) [✗]: Override: nozzle diameter in mm
1757
+
1758
+ - `printSpeed` (number) [✗]: Override: outer wall print speed in mm/s
1759
+
1760
+ - `wallCount` (integer) [✗]: Override: number of wall loops / perimeters
1761
+
1762
+ - `supportEnabled` (boolean) [✗]: Override: generate support structures
1763
+
1764
+ - `materialDensity` (number) [✗]: Override: filament density in g/cm³ (default: 1.24 PLA)
1765
+
1766
+ - `webhookUrl` (string) [✗]: URL to POST the slicing result back to
1767
+
1768
+
1769
+
1770
+ ### slicing-fdm-result
1771
+
1772
+ **Description:** Result of FDM slicing simulation from OrcaSlicer (toolpath) or heuristic fallback. Contains exact physical metrics for cost calculation.
1773
+
1774
+ **Method:** `client.slicingFdmResult(data)`
1775
+
1776
+ **Payload Type:** `SlicingFdmResultMessage`
1777
+
1778
+ **Fields:**
1779
+
1780
+ - `modelId` (string) [✗]: UUID of the model
1781
+
1782
+ - `status` (string) [✗]: Status of the simulation
1783
+
1784
+ - `printTimeHours` (number) [✗]: Exact print time in hours (from toolpath analysis)
1785
+
1786
+ - `materialWeightGrams` (number) [✗]: Total filament weight in grams (including supports)
1787
+
1788
+ - `materialVolumeCm3` (number) [✗]: Extruded material volume in cm³
1789
+
1790
+ - `maxZHeightMM` (number) [✗]: Maximum Z height in mm
1791
+
1792
+ - `supportMaterialWeightGrams` (number) [✗]: Support structure filament weight in grams
1793
+
1794
+ - `layerCount` (integer) [✗]: Total number of layers
1795
+
1796
+ - `totalExtrusionLengthMm` (number) [✗]: Total filament extrusion length in mm
1797
+
1798
+ - `slicingMethod` (string) [✗]: Engine that produced the result
1799
+
1800
+ - `slicerVersion` (string) [✗]: Version of the slicer engine used
1801
+
1802
+ - `profileUsed` (string) [✗]: Name or ID of the slicer profile used
1803
+
1804
+ - `errorCode` (string) [✗]: Error code if simulation failed
1805
+
1806
+ - `errorMessage` (string) [✗]: Error message if simulation failed
1807
+
1808
+
1809
+
1810
+ ### slicing-sla-request
1811
+
1812
+ **Description:** Request SLA/MSLA slicing simulation via PySLM cross-sectional analysis. Accepts resin printer profile with exposure, lift, and layer parameters.
1813
+
1814
+ **Method:** `client.slicingSlaRequest(data)`
1815
+
1816
+ **Payload Type:** `SlicingSlaRequestMessage`
1817
+
1818
+ **Fields:**
1819
+
1820
+ - `modelId` (string) [✗]: UUID of the model
1821
+
1822
+ - `storageItemId` (string) [✗]: UUID or path of the storage item to download the STL/3MF
1823
+
1824
+ - `technology` (string) [✗]: SLA or MSLA
1825
+
1826
+ - `profileId` (string) [✗]: UUID of the user's slicer profile from the database
1827
+
1828
+ - `profileName` (string) [✗]: Human-readable profile name (e.g. 'Elegoo Mars 3 - Standard Grey')
1829
+
1830
+ - `layerHeight` (number) [✗]: Layer height in mm (default: 0.05)
1831
+
1832
+ - `exposureTime` (number) [✗]: Normal layer UV exposure time in seconds (default: 2.5)
1833
+
1834
+ - `bottomExposureTime` (number) [✗]: Bottom/burn-in layer exposure time in seconds (default: 30)
1835
+
1836
+ - `bottomLayers` (integer) [✗]: Number of bottom/burn-in layers (default: 5)
1837
+
1838
+ - `liftHeight` (number) [✗]: Platform lift height in mm between layers (default: 5.0)
1839
+
1840
+ - `liftSpeed` (number) [✗]: Platform lift speed in mm/min (default: 60)
1841
+
1842
+ - `retractSpeed` (number) [✗]: Platform retract speed in mm/min (default: 150)
1843
+
1844
+ - `resinDensity` (number) [✗]: Resin density in g/cm³ (default: 1.1)
1845
+
1846
+ - `supportEnabled` (boolean) [✗]: Generate support structures (default: true for SLA)
1847
+
1848
+ - `webhookUrl` (string) [✗]: URL to POST the slicing result back to
1849
+
1850
+
1851
+
1852
+ ### slicing-sla-result
1853
+
1854
+ **Description:** Result of SLA/MSLA slicing simulation from PySLM cross-sectional analysis. Contains exact resin usage and print time metrics.
1855
+
1856
+ **Method:** `client.slicingSlaResult(data)`
1857
+
1858
+ **Payload Type:** `SlicingSlaResultMessage`
1859
+
1860
+ **Fields:**
1861
+
1862
+ - `modelId` (string) [✗]: UUID of the model
1863
+
1864
+ - `status` (string) [✗]: Status of the simulation
1865
+
1866
+ - `printTimeHours` (number) [✗]: Exact print time in hours (from cross-sectional analysis)
1867
+
1868
+ - `materialWeightGrams` (number) [✗]: Total resin weight in grams (including supports)
1869
+
1870
+ - `materialVolumeCm3` (number) [✗]: Cured resin volume in cm³ (from cross-sectional area integration)
1871
+
1872
+ - `maxZHeightMM` (number) [✗]: Maximum Z height in mm
1873
+
1874
+ - `supportMaterialWeightGrams` (number) [✗]: Support structure resin weight in grams
1875
+
1876
+ - `layerCount` (integer) [✗]: Total number of layers
1877
+
1878
+ - `maxCrossSectionAreaMm2` (number) [✗]: Maximum cross-sectional area in mm² (affects MSLA peel force)
1879
+
1880
+ - `slicingMethod` (string) [✗]: Engine that produced the result
1881
+
1882
+ - `slicerVersion` (string) [✗]: Version of PySLM / trimesh used
1883
+
1884
+ - `profileUsed` (string) [✗]: Name or ID of the slicer profile used
1885
+
1886
+ - `errorCode` (string) [✗]: Error code if simulation failed
1887
+
1888
+ - `errorMessage` (string) [✗]: Error message if simulation failed
1889
+
1890
+
1891
+
1892
+ ### texture-generation-completed
1893
+
1894
+ **Description:** Emitted when AI texture generation completes (success or failure). Contains artifact S3 URLs on success, or error details on failure. The credit reservation should be confirmed (success) or released (failure) based on the status.
1895
+
1896
+ **Method:** `client.textureGenerationCompleted(data)`
1897
+
1898
+ **Payload Type:** `TextureGenerationCompletedMessage`
1899
+
1900
+ **Fields:**
1901
+
1902
+ - `jobId` (string) [✗]: The unique job identifier matching the original request.
1903
+
1904
+ - `modelId` (string) [✗]: The ID of the model that was textured.
1905
+
1906
+ - `tenantId` (string) [✗]: The tenant who owns the model.
1907
+
1908
+ - `status` (string) [✗]: The result status of the texture generation.
1909
+
1910
+ - `artifacts` (object) [✗]: S3 URLs of generated texture artifacts. Present only when status is 'completed'.
1911
+
1912
+ - `error` (object) [✗]: Error details. Present only when status is 'failed'.
1913
+
1914
+ - `metrics` (object) [✗]: Pipeline performance metrics.
1915
+
1916
+ - `creditReservationId` (string) [✗]: Credit reservation ID to confirm (on success) or release (on failure).
1917
+
1918
+
1919
+
1920
+ ### texture-generation-request
1921
+
1922
+ **Description:** Request AI-powered texture generation for a 3D model. Requires a mesh file URL and a text prompt describing the desired texture. Credits are reserved before dispatch.
1923
+
1924
+ **Method:** `client.textureGenerationRequest(data)`
1925
+
1926
+ **Payload Type:** `TextureGenerationRequestMessage`
1927
+
1928
+ **Fields:**
1929
+
1930
+ - `jobId` (string) [✗]: Unique job identifier for tracking.
1931
+
1932
+ - `modelId` (string) [✗]: The unique identifier for the model to texture.
1933
+
1934
+ - `tenantId` (string) [✗]: The identifier of the tenant requesting the generation.
1935
+
1936
+ - `meshUrl` (string) [✗]: S3 URL to the source mesh file (GLB, OBJ, or STL).
1937
+
1938
+ - `prompt` (string) [✗]: Text description of the desired texture (1-500 characters). Example: 'weathered bronze with green patina'.
1939
+
1940
+ - `stylePreset` (string) [✗]: Style preset to guide the texture generation aesthetic.
1941
+
1942
+ - `resolution` (integer) [✗]: Output texture resolution (width = height in pixels).
1943
+
1944
+ - `creditReservationId` (string) [✗]: Credit reservation ID from the credit ledger. Must be confirmed on completion or released on failure.
1945
+
1946
+
1947
+
1682
1948
  ### thumbnail-generation-completed
1683
1949
 
1684
1950
  **Description:** Handles thumbnail generation completed.
@@ -1701,6 +1967,8 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1701
1967
 
1702
1968
  - `gltfPreviewPath` (string) [✗]: The path to the generated GLTF/GLB 3D preview file.
1703
1969
 
1970
+ - `animatedPreviewPath` (string) [✗]: The path to the generated animated MP4 preview file.
1971
+
1704
1972
  - `errorMessage` (string) [✗]: An error message if the thumbnail generation failed.
1705
1973
 
1706
1974
  - `storageLocation` (object) [✗]: The storage location of the model.
@@ -1761,6 +2029,8 @@ Used for:
1761
2029
 
1762
2030
  **Fields:**
1763
2031
 
2032
+ - `eventVersion` (string) [✓]: Schema version for forward-compatible evolution
2033
+
1764
2034
  - `eventType` (string) [✓]: Category of user engagement event
1765
2035
 
1766
2036
  - `action` (string) [✓]: Specific user action performed
@@ -1769,7 +2039,7 @@ Used for:
1769
2039
 
1770
2040
  - `userId` (string) [✓]: Unique identifier of the user
1771
2041
 
1772
- - `userEmail` (string) [✗]: User's email (hashed for privacy in analytics)
2042
+ - `userEmail` (string) [✗]: User's email — MUST be SHA-256 hashed at the producer side before publishing (GDPR/CNIL compliance). Never send raw email.
1773
2043
 
1774
2044
  - `userCreatedAt` (string) [✗]: When the user account was created (for cohort analysis)
1775
2045
 
@@ -1777,7 +2047,9 @@ Used for:
1777
2047
 
1778
2048
  - `sessionId` (string) [✗]: User session identifier for grouping actions
1779
2049
 
1780
- - `requestId` (string) [✗]: Request ID for correlation with logs
2050
+ - `requestId` (string) [✗]: Request ID for correlation with backend logs
2051
+
2052
+ - `correlationId` (string) [✗]: Correlation ID to link engagement events across frontend and backend boundaries, and to pipeline traces
1781
2053
 
1782
2054
  - `actionDetails` (object) [✗]: Additional context about the action
1783
2055
 
@@ -1969,12 +2241,6 @@ Used for:
1969
2241
  - Compliance and audit trails
1970
2242
 
1971
2243
 
1972
- - `ekgEdgeBatchCreateCompleted(data: EkgEdgeBatchCreateCompletedMessage): Promise<JobResponse>`
1973
- - Completion event for EKG edge batch creation with propagation results.
1974
-
1975
- - `ekgEdgeBatchCreateRequest(data: EkgEdgeBatchCreateRequestMessage): Promise<JobResponse>`
1976
- - Create multiple EKG edges with Dempster-Shafer mass functions. Triggered by metamodel detection completion.
1977
-
1978
2244
  - `etsyAnalyticsSyncCompleted(data: EtsyAnalyticsSyncCompletedMessage): Promise<JobResponse>`
1979
2245
  - Contains synced analytics data for Etsy listings. Backend stores this in etsy_analytics_snapshots table and indexes to ELK.
1980
2246
 
@@ -2014,11 +2280,11 @@ Retry Configuration:
2014
2280
  - `fileVectorizeRequest(data: FileVectorizeRequestMessage): Promise<JobResponse>`
2015
2281
  - Request to generate a vector embedding for an image file using CLIP.
2016
2282
 
2017
- - `marketplaceAnalyticsSyncCompleted(data: MarketplaceAnalyticsSyncCompletedMessage): Promise<JobResponse>`
2018
- - Contains synced analytics data for marketplace listings. Backend stores this in marketplace_analytics_snapshots table and indexes to ELK. Works with any marketplace provider.
2283
+ - `ipCheckCompleted(data: IpCheckCompletedMessage): Promise<JobResponse>`
2284
+ - Contains IP verification results including trademark risk, copyright risk, detected brands/franchises, and analysis confidence scores
2019
2285
 
2020
- - `marketplaceAnalyticsSyncRequest(data: MarketplaceAnalyticsSyncRequestMessage): Promise<JobResponse>`
2021
- - Syncs analytics data from marketplace API for one or more listings. Fetches views, favorites, sales, revenue, and traffic source data. Can sync: specific listings, all user listings, or shop-level analytics. Works with any marketplace provider that supports analytics (etsy, ebay, etc.).
2286
+ - `ipCheckRequest(data: IpCheckRequestMessage): Promise<JobResponse>`
2287
+ - Triggers intellectual property verification analysis for a model thumbnail, detecting potential trademark and copyright issues using perceptual hashing, text analysis, and optional reverse image search.
2022
2288
 
2023
2289
  - `marketplaceConnectionSyncCompleted(data: MarketplaceConnectionSyncCompletedMessage): Promise<JobResponse>`
2024
2290
  - Notification that marketplace connection sync has completed. Contains updated connection metadata, profile information, and sync statistics.
@@ -2037,6 +2303,14 @@ This is typically triggered after initial connection or periodically to keep mar
2037
2303
  - Requests rotation/refresh of marketplace connection credentials. This is used for: - OAuth token refresh when tokens are near expiry - API key rotation for enhanced security - Re-authentication after connection errors - Scheduled credential updates
2038
2304
 
2039
2305
 
2306
+ - `marketplaceIntelligenceCompleted(data: MarketplaceIntelligenceCompletedMessage): Promise<JobResponse>`
2307
+ - Response from marketplace intelligence scraping.
2308
+ Contains aggregated similarity data from marketplace searches.
2309
+
2310
+ Consumed by worker-backend to update pipeline context before
2311
+ sellability analysis runs.
2312
+
2313
+
2040
2314
  - `marketplaceIntelligenceEvent(data: MarketplaceIntelligenceEventMessage): Promise<JobResponse>`
2041
2315
  - Public marketplace intelligence data scraped from external marketplaces.
2042
2316
 
@@ -2055,6 +2329,22 @@ Consumed by worker-analytic-collector for Elasticsearch indexing.
2055
2329
  Used for market research, pricing optimization, and trend detection.
2056
2330
 
2057
2331
 
2332
+ - `marketplaceIntelligenceRequest(data: MarketplaceIntelligenceRequestMessage): Promise<JobResponse>`
2333
+ - Triggers automated marketplace scraping to find similar/competing listings
2334
+ for a given model. This is a pipeline stage that runs after metadata generation
2335
+ to inform sellability analysis with real market data.
2336
+
2337
+ The worker-analytic-collector (or marketplace-connectors worker) will:
2338
+ 1. Use model metadata (title, tags, category) to build search queries
2339
+ 2. Scrape connected marketplaces (Etsy, eBay, etc.) for similar listings
2340
+ 3. Emit marketplace-intelligence-event results for Elasticsearch indexing
2341
+ 4. Return aggregated similarity data to the pipeline context
2342
+
2343
+ Pipeline integration:
2344
+ - Triggered after: metadata-generation (needs model title/tags/category)
2345
+ - Results feed into: sellability-analysis (market positioning data)
2346
+
2347
+
2058
2348
  - `marketplaceListingDescriptionGenerationCompleted(data: MarketplaceListingDescriptionGenerationCompletedMessage): Promise<JobResponse>`
2059
2349
  - Notifies backend that marketplace description generation completed. Contains generated description with metadata tracking (AI model, confidence, generation timestamp) and suggested price.
2060
2350
 
@@ -2088,12 +2378,6 @@ Includes bidirectional sync: - Pull: Fetch listings from marketplace to update l
2088
2378
  - `marketplaceListingUpdateRequest(data: MarketplaceListingUpdateRequestMessage): Promise<JobResponse>`
2089
2379
  - Request to update an existing listing on a marketplace (price, quantity, etc.)
2090
2380
 
2091
- - `marketplacePublishListingCompleted(data: MarketplacePublishListingCompletedMessage): Promise<JobResponse>`
2092
- - Indicates completion of marketplace listing publication. Contains external listing ID and URL, or error details if failed. Works with any marketplace provider (etsy, ebay, etc.).
2093
-
2094
- - `marketplacePublishListingRequest(data: MarketplacePublishListingRequestMessage): Promise<JobResponse>`
2095
- - Publishes a single metamodel listing to a marketplace for a specific material variant. Creates listing, uploads digital file, and returns external listing ID. This message is enqueued for EACH material variant when publishing a metamodel. The marketplace type (etsy, ebay, etc.) is determined by the marketplaceProvider field.
2096
-
2097
2381
  - `mediaBatchDownloadCompleted(data: MediaBatchDownloadCompletedMessage): Promise<JobResponse>`
2098
2382
  - Notifies that a batch media download has been completed.
2099
2383
 
@@ -2128,13 +2412,13 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
2128
2412
  - Handles model discovery scan requests events.
2129
2413
 
2130
2414
  - `modelFinderIndexRequest(data: ModelFinderIndexRequestMessage): Promise<JobResponse>`
2131
- - Request to index a 3D model for similarity search.
2415
+ - DEPRECATED (2026-02-18) FR-023 retired. Merge 3D rendering into worker-file-vectorize.
2132
2416
 
2133
2417
  - `modelFinderResponse(data: ModelFinderResponseMessage): Promise<JobResponse>`
2134
- - Response containing search results from the model finder.
2418
+ - DEPRECATED (2026-02-18) FR-023 retired. Merge 3D rendering into worker-file-vectorize.
2135
2419
 
2136
2420
  - `modelFinderSearchRequest(data: ModelFinderSearchRequestMessage): Promise<JobResponse>`
2137
- - Request to search for similar 3D models.
2421
+ - DEPRECATED (2026-02-18) FR-023 retired. Merge 3D rendering into worker-file-vectorize.
2138
2422
 
2139
2423
  - `modelMetadataGenerationCompleted(data: ModelMetadataGenerationCompletedMessage): Promise<JobResponse>`
2140
2424
  - Notifies backend that enriched marketplace metadata generation completed. Backend updates Model entity with generated description, tags, classification, etc.
@@ -2148,6 +2432,12 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
2148
2432
  - `modelMetamodelDetectionRequest(data: ModelMetamodelDetectionRequestMessage): Promise<JobResponse>`
2149
2433
  - Handles model metamodel detection requests.
2150
2434
 
2435
+ - `modelPrintAnalysisCompleted(data: ModelPrintAnalysisCompletedMessage): Promise<JobResponse>`
2436
+ - Reports completion of 3D print analysis — contains estimation, printability, and cost breakdown per FR-022
2437
+
2438
+ - `modelPrintAnalysisRequest(data: ModelPrintAnalysisRequestMessage): Promise<JobResponse>`
2439
+ - Triggers 3D print analysis for a model — estimates print time, material usage, support needs, and cost breakdown per FR-022
2440
+
2151
2441
  - `modelSellabilityAnalysisCompleted(data: ModelSellabilityAnalysisCompletedMessage): Promise<JobResponse>`
2152
2442
  - Contains sellability analysis results including Etsy-specific recommendations, material pricing, and marketplace compatibility scores
2153
2443
 
@@ -2166,6 +2456,24 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
2166
2456
  - `modelTechnicalMetadataRequest(data: ModelTechnicalMetadataRequestMessage): Promise<JobResponse>`
2167
2457
  - Triggers comprehensive technical analysis of a 3D model file to extract geometry, quality metrics, and print-readiness information
2168
2458
 
2459
+ - `slicingFdmRequest(data: SlicingFdmRequestMessage): Promise<JobResponse>`
2460
+ - Request FDM slicing simulation via OrcaSlicer (preferred) or heuristic fallback. Accepts OrcaSlicer-compatible printer/process/filament JSON profiles.
2461
+
2462
+ - `slicingFdmResult(data: SlicingFdmResultMessage): Promise<JobResponse>`
2463
+ - Result of FDM slicing simulation from OrcaSlicer (toolpath) or heuristic fallback. Contains exact physical metrics for cost calculation.
2464
+
2465
+ - `slicingSlaRequest(data: SlicingSlaRequestMessage): Promise<JobResponse>`
2466
+ - Request SLA/MSLA slicing simulation via PySLM cross-sectional analysis. Accepts resin printer profile with exposure, lift, and layer parameters.
2467
+
2468
+ - `slicingSlaResult(data: SlicingSlaResultMessage): Promise<JobResponse>`
2469
+ - Result of SLA/MSLA slicing simulation from PySLM cross-sectional analysis. Contains exact resin usage and print time metrics.
2470
+
2471
+ - `textureGenerationCompleted(data: TextureGenerationCompletedMessage): Promise<JobResponse>`
2472
+ - Emitted when AI texture generation completes (success or failure). Contains artifact S3 URLs on success, or error details on failure. The credit reservation should be confirmed (success) or released (failure) based on the status.
2473
+
2474
+ - `textureGenerationRequest(data: TextureGenerationRequestMessage): Promise<JobResponse>`
2475
+ - Request AI-powered texture generation for a 3D model. Requires a mesh file URL and a text prompt describing the desired texture. Credits are reserved before dispatch.
2476
+
2169
2477
  - `thumbnailGenerationCompleted(data: ThumbnailGenerationCompletedMessage): Promise<JobResponse>`
2170
2478
  - Handles thumbnail generation completed.
2171
2479