@mesh-sync/worker-backend-client 4.0.19 → 4.0.24

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
@@ -100,6 +100,26 @@ await client.sendToQueue(MessageTypes.FILE_DOWNLOAD_REQUEST, {
100
100
  ## Available Message Types
101
101
 
102
102
 
103
+ ### analytics-collection-request
104
+
105
+ **Description:** Request to trigger a manual market data collection job.
106
+ Used for ad-hoc scraping of specific queries on marketplaces.
107
+
108
+
109
+ **Method:** `client.analyticsCollectionRequest(data)`
110
+
111
+ **Payload Type:** `AnalyticsCollectionRequestMessage`
112
+
113
+ **Fields:**
114
+
115
+ - `marketplace` (string) [✗]: The marketplace to scrape (etsy, ebay, etc.)
116
+
117
+ - `query` (string) [✓]: The search query to use
118
+
119
+ - `options` (object) [✗]: Collection options (pages, filters, etc.)
120
+
121
+
122
+
103
123
  ### backend-logging-event
104
124
 
105
125
  **Description:** Centralized logging event for capturing all warn/error/failure logs from meshsync-backend.
@@ -163,52 +183,6 @@ Used for:
163
183
 
164
184
 
165
185
 
166
- ### ekg-edge-batch-create-completed
167
-
168
- **Description:** Completion event for EKG edge batch creation with propagation results.
169
-
170
- **Method:** `client.ekgEdgeBatchCreateCompleted(data)`
171
-
172
- **Payload Type:** `EkgEdgeBatchCreateCompletedMessage`
173
-
174
- **Fields:**
175
-
176
- - `requestId` (string) [✓]: Original request ID from ekg-edge-batch-create-request
177
-
178
- - `success` (boolean) [✓]: Whether the batch operation succeeded
179
-
180
- - `statistics` (object) [✓]: Batch operation statistics
181
-
182
- - `conflicts` (array) [✗]: List of high-conflict edges requiring review
183
-
184
- - `errors` (array) [✗]: Errors encountered during processing
185
-
186
- - `graphMetrics` (object) [✗]: Overall graph state after this batch
187
-
188
-
189
-
190
- ### ekg-edge-batch-create-request
191
-
192
- **Description:** Create multiple EKG edges with Dempster-Shafer mass functions. Triggered by metamodel detection completion.
193
-
194
- **Method:** `client.ekgEdgeBatchCreateRequest(data)`
195
-
196
- **Payload Type:** `EkgEdgeBatchCreateRequestMessage`
197
-
198
- **Fields:**
199
-
200
- - `requestId` (string) [✓]: Unique request ID for tracking (e.g., metamodel detection job ID)
201
-
202
- - `source` (string) [✓]: Source of the edges: metamodel-heuristic, manual, taxonomy-import, etc.
203
-
204
- - `edges` (array) [✓]: Batch of edges to create/update in the EKG
205
-
206
- - `propagationOptions` (object) [✗]: Options for evidential edge propagation after edge creation
207
-
208
- - `webhookUrl` (string) [✗]: Optional webhook URL for async completion notification
209
-
210
-
211
-
212
186
  ### etsy-analytics-sync-completed
213
187
 
214
188
  **Description:** Contains synced analytics data for Etsy listings. Backend stores this in etsy_analytics_snapshots table and indexes to ELK.
@@ -444,6 +418,84 @@ Retry Configuration:
444
418
 
445
419
 
446
420
 
421
+ ### ip-check-completed
422
+
423
+ **Description:** Contains IP verification results including trademark risk, copyright risk, detected brands/franchises, and analysis confidence scores
424
+
425
+ **Method:** `client.ipCheckCompleted(data)`
426
+
427
+ **Payload Type:** `IpCheckCompletedMessage`
428
+
429
+ **Fields:**
430
+
431
+ - `modelId` (string) [✗]: Model UUID that was analyzed
432
+
433
+ - `ownerId` (string) [✗]: Owner user ID
434
+
435
+ - `entityType` (string) [✗]: Type of entity checked: 'model' or 'metamodel'
436
+
437
+ - `status` (string) [✗]: Overall IP check outcome: 'clear', 'flagged', or 'error'
438
+
439
+ - `trademarkRisk` (string) [✗]: Detected trademark infringement risk level: 'none', 'low', 'medium', 'high'
440
+
441
+ - `copyrightRisk` (string) [✗]: Detected copyright infringement risk level: 'none', 'low', 'medium', 'high'
442
+
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
458
+
459
+ - `heuristicResults` (object) [✗]: Detailed results from each heuristic check
460
+
461
+ - `error` (object) [✗]: Error details if status is 'error'
462
+
463
+ - `processingDurationMs` (integer) [✗]: Total processing time in milliseconds
464
+
465
+
466
+
467
+ ### ip-check-request
468
+
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.
470
+
471
+ **Method:** `client.ipCheckRequest(data)`
472
+
473
+ **Payload Type:** `IpCheckRequestMessage`
474
+
475
+ **Fields:**
476
+
477
+ - `modelId` (string) [✗]: Unique identifier for the model to analyze
478
+
479
+ - `ownerId` (string) [✗]: User ID who owns the model
480
+
481
+ - `entityType` (string) [✗]: Type of entity being checked: 'model' or 'metamodel'
482
+
483
+ - `modelName` (string) [✗]: Name of the model for trademark/franchise text detection
484
+
485
+ - `tags` (array) [✗]: Model tags for IP reference detection
486
+
487
+ - `description` (string) [✗]: Model description for text-based IP analysis
488
+
489
+ - `thumbnailUrl` (string) [✗]: URL to fetch the thumbnail image for visual analysis
490
+
491
+ - `minioPath` (string) [✗]: Path to thumbnail in MinIO if stored internally
492
+
493
+ - `additionalImageUrls` (array) [✗]: Optional additional images for more comprehensive analysis (e.g., 360° views)
494
+
495
+ - `analysisOptions` (object) [✗]: Optional analysis configuration
496
+
497
+
498
+
447
499
  ### marketplace-analytics-sync-completed
448
500
 
449
501
  **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.
@@ -647,6 +699,41 @@ This is typically triggered after initial connection or periodically to keep mar
647
699
 
648
700
 
649
701
 
702
+ ### marketplace-intelligence-completed
703
+
704
+ **Description:** Response from marketplace intelligence scraping.
705
+ Contains aggregated similarity data from marketplace searches.
706
+
707
+ Consumed by worker-backend to update pipeline context before
708
+ sellability analysis runs.
709
+
710
+
711
+ **Method:** `client.marketplaceIntelligenceCompleted(data)`
712
+
713
+ **Payload Type:** `MarketplaceIntelligenceCompletedMessage`
714
+
715
+ **Fields:**
716
+
717
+ - `modelId` (string) [✓]: UUID of the model that was researched
718
+
719
+ - `ownerId` (string) [✓]: UUID of the model owner
720
+
721
+ - `status` (string) [✓]: Result status
722
+
723
+ - `marketData` (object) [✗]: Aggregated market intelligence across all scraped marketplaces
724
+
725
+ - `marketplaceBreakdown` (array) [✗]: Results per marketplace
726
+
727
+ - `similarityScore` (number) [✗]: How saturated the market is for this model type (0=unique, 100=very common)
728
+
729
+ - `error` (object) [✗]: Error information if status is FAILED
730
+
731
+ - `analyzedAt` (string) [✗]: When the analysis completed
732
+
733
+ - `analysisVersion` (string) [✗]: Version of the intelligence collector
734
+
735
+
736
+
650
737
  ### marketplace-intelligence-event
651
738
 
652
739
  **Description:** Public marketplace intelligence data scraped from external marketplaces.
@@ -692,6 +779,43 @@ Used for market research, pricing optimization, and trend detection.
692
779
 
693
780
 
694
781
 
782
+ ### marketplace-intelligence-request
783
+
784
+ **Description:** Triggers automated marketplace scraping to find similar/competing listings
785
+ for a given model. This is a pipeline stage that runs after metadata generation
786
+ to inform sellability analysis with real market data.
787
+
788
+ The worker-analytic-collector (or marketplace-connectors worker) will:
789
+ 1. Use model metadata (title, tags, category) to build search queries
790
+ 2. Scrape connected marketplaces (Etsy, eBay, etc.) for similar listings
791
+ 3. Emit marketplace-intelligence-event results for Elasticsearch indexing
792
+ 4. Return aggregated similarity data to the pipeline context
793
+
794
+ Pipeline integration:
795
+ - Triggered after: metadata-generation (needs model title/tags/category)
796
+ - Results feed into: sellability-analysis (market positioning data)
797
+
798
+
799
+ **Method:** `client.marketplaceIntelligenceRequest(data)`
800
+
801
+ **Payload Type:** `MarketplaceIntelligenceRequestMessage`
802
+
803
+ **Fields:**
804
+
805
+ - `modelId` (string) [✓]: UUID of the model to research
806
+
807
+ - `ownerId` (string) [✓]: UUID of the model owner
808
+
809
+ - `searchContext` (object) [✗]: Model metadata used to build marketplace search queries
810
+
811
+ - `scrapingOptions` (object) [✗]: Configuration for the marketplace scraping
812
+
813
+ - `pipelineId` (string) [✗]: Pipeline execution ID for correlation
814
+
815
+ - `executionId` (string) [✗]: Pipeline execution UUID for correlation
816
+
817
+
818
+
695
819
  ### marketplace-listing-description-generation-completed
696
820
 
697
821
  **Description:** Notifies backend that marketplace description generation completed. Contains generated description with metadata tracking (AI model, confidence, generation timestamp) and suggested price.
@@ -1429,6 +1553,76 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1429
1553
 
1430
1554
 
1431
1555
 
1556
+ ### model-print-analysis-completed
1557
+
1558
+ **Description:** Reports completion of 3D print analysis — contains estimation, printability, and cost breakdown per FR-022
1559
+
1560
+ **Method:** `client.modelPrintAnalysisCompleted(data)`
1561
+
1562
+ **Payload Type:** `ModelPrintAnalysisCompletedMessage`
1563
+
1564
+ **Fields:**
1565
+
1566
+ - `originalJobId` (string) [✗]: ID of the original analysis request job
1567
+
1568
+ - `modelId` (string) [✗]: UUID of the analysed model
1569
+
1570
+ - `status` (string) [✗]: Analysis result status
1571
+
1572
+ - `errorMessage` (string) [✗]: Error description when status is FAILED
1573
+
1574
+ - `material` (string) [✗]: Material type used for estimation
1575
+
1576
+ - `quality` (string) [✗]: Quality preset used
1577
+
1578
+ - `printTimeMinutes` (number) [✗]: Estimated total print time in minutes
1579
+
1580
+ - `materialGrams` (number) [✗]: Estimated material consumption in grams (body only)
1581
+
1582
+ - `needsSupport` (boolean) [✗]: Whether the model requires support structures
1583
+
1584
+ - `supportMaterialGrams` (number) [✗]: Estimated support material in grams
1585
+
1586
+ - `overhangPercentage` (number) [✗]: Percentage of surface area with overhangs > 45°
1587
+
1588
+ - `minWallThicknessMm` (number) [✗]: Thinnest detected wall in millimeters
1589
+
1590
+ - `solidVolumeCm3` (number) [✗]: Solid volume of the mesh in cm³
1591
+
1592
+ - `surfaceAreaCm2` (number) [✗]: Total surface area in cm²
1593
+
1594
+ - `boundingBox` (object) [✗]: Bounding box in millimeters
1595
+
1596
+ - `estimatedCostEUR` (number) [✗]: Total estimated production cost in EUR
1597
+
1598
+ - `costBreakdown` (object) [✗]: Granular cost breakdown per WF-009 MaterialCostCalculatorService
1599
+
1600
+
1601
+
1602
+ ### model-print-analysis-request
1603
+
1604
+ **Description:** Triggers 3D print analysis for a model — estimates print time, material usage, support needs, and cost breakdown per FR-022
1605
+
1606
+ **Method:** `client.modelPrintAnalysisRequest(data)`
1607
+
1608
+ **Payload Type:** `ModelPrintAnalysisRequestMessage`
1609
+
1610
+ **Fields:**
1611
+
1612
+ - `modelId` (string) [✗]: UUID of the model to analyse
1613
+
1614
+ - `ownerId` (string) [✗]: UUID of the user who owns the model
1615
+
1616
+ - `material` (string) [✗]: Material type enum value (e.g. PLA, PETG, RESIN_STANDARD)
1617
+
1618
+ - `quality` (string) [✗]: Print quality preset
1619
+
1620
+ - `webhookUrl` (string) [✗]: URL called when analysis completes or fails
1621
+
1622
+ - `minioPath` (string) [✗]: Path to model in MinIO storage for geometry analysis (e.g. 'raw_models/{modelId}/original.glb')
1623
+
1624
+
1625
+
1432
1626
  ### model-sellability-analysis-completed
1433
1627
 
1434
1628
  **Description:** Contains sellability analysis results including Etsy-specific recommendations, material pricing, and marketplace compatibility scores
@@ -1609,6 +1803,8 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1609
1803
 
1610
1804
  - `recommendedOrientation` (object) [✗]: Recommended print orientation for minimal support material and best results
1611
1805
 
1806
+ - `slicerRecommendations` (object) [✗]: Slicer-derived recommended print settings based on model analysis (feeds into print job creation as defaults)
1807
+
1612
1808
  - `originalUnit` (string) [✗]: Original file format unit detected from metadata or inferred from scale
1613
1809
 
1614
1810
  - `formatVersion` (string) [✗]: File format version (e.g., 'STL Binary', 'OBJ v4', 'PLY 1.0')
@@ -1659,6 +1855,236 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1659
1855
 
1660
1856
 
1661
1857
 
1858
+ ### slicing-fdm-request
1859
+
1860
+ **Description:** Request FDM slicing simulation via OrcaSlicer (preferred) or heuristic fallback. Accepts OrcaSlicer-compatible printer/process/filament JSON profiles.
1861
+
1862
+ **Method:** `client.slicingFdmRequest(data)`
1863
+
1864
+ **Payload Type:** `SlicingFdmRequestMessage`
1865
+
1866
+ **Fields:**
1867
+
1868
+ - `modelId` (string) [✗]: UUID of the model
1869
+
1870
+ - `storageItemId` (string) [✗]: UUID or path of the storage item to download the STL/3MF
1871
+
1872
+ - `profileId` (string) [✗]: UUID of the user's slicer profile from the database
1873
+
1874
+ - `profileName` (string) [✗]: Human-readable profile name (e.g. 'My Bambu X1C - PLA Fine')
1875
+
1876
+ - `printerProfile` (object) [✗]: OrcaSlicer printer profile JSON: nozzle_diameter, bed_shape, max speeds, acceleration, retraction
1877
+
1878
+ - `processProfile` (object) [✗]: OrcaSlicer process profile JSON: layer_height, sparse_infill_density, wall_loops, speeds, support settings
1879
+
1880
+ - `filamentProfile` (object) [✗]: OrcaSlicer filament profile JSON: filament_type, filament_density, temperature, flow_ratio, retraction
1881
+
1882
+ - `layerHeight` (number) [✗]: Override: layer height in mm (takes precedence over processProfile)
1883
+
1884
+ - `infillPercentage` (number) [✗]: Override: infill percentage (0-100)
1885
+
1886
+ - `nozzleDiameter` (number) [✗]: Override: nozzle diameter in mm
1887
+
1888
+ - `printSpeed` (number) [✗]: Override: outer wall print speed in mm/s
1889
+
1890
+ - `wallCount` (integer) [✗]: Override: number of wall loops / perimeters
1891
+
1892
+ - `supportEnabled` (boolean) [✗]: Override: generate support structures
1893
+
1894
+ - `materialDensity` (number) [✗]: Override: filament density in g/cm³ (default: 1.24 PLA)
1895
+
1896
+ - `webhookUrl` (string) [✗]: URL to POST the slicing result back to
1897
+
1898
+
1899
+
1900
+ ### slicing-fdm-result
1901
+
1902
+ **Description:** Result of FDM slicing simulation from OrcaSlicer (toolpath) or heuristic fallback. Contains exact physical metrics for cost calculation.
1903
+
1904
+ **Method:** `client.slicingFdmResult(data)`
1905
+
1906
+ **Payload Type:** `SlicingFdmResultMessage`
1907
+
1908
+ **Fields:**
1909
+
1910
+ - `modelId` (string) [✗]: UUID of the model
1911
+
1912
+ - `status` (string) [✗]: Status of the simulation
1913
+
1914
+ - `printTimeHours` (number) [✗]: Exact print time in hours (from toolpath analysis)
1915
+
1916
+ - `materialWeightGrams` (number) [✗]: Total filament weight in grams (including supports)
1917
+
1918
+ - `materialVolumeCm3` (number) [✗]: Extruded material volume in cm³
1919
+
1920
+ - `maxZHeightMM` (number) [✗]: Maximum Z height in mm
1921
+
1922
+ - `supportMaterialWeightGrams` (number) [✗]: Support structure filament weight in grams
1923
+
1924
+ - `layerCount` (integer) [✗]: Total number of layers
1925
+
1926
+ - `totalExtrusionLengthMm` (number) [✗]: Total filament extrusion length in mm
1927
+
1928
+ - `slicingMethod` (string) [✗]: Engine that produced the result
1929
+
1930
+ - `slicerVersion` (string) [✗]: Version of the slicer engine used
1931
+
1932
+ - `profileUsed` (string) [✗]: Name or ID of the slicer profile used
1933
+
1934
+ - `errorCode` (string) [✗]: Error code if simulation failed
1935
+
1936
+ - `errorMessage` (string) [✗]: Error message if simulation failed
1937
+
1938
+
1939
+
1940
+ ### slicing-simulation-request
1941
+
1942
+ **Description:** DEPRECATED: Use slicing-fdm-request or slicing-sla-request instead. Unified contract kept for backward compatibility only.
1943
+
1944
+ **Method:** `client.slicingSimulationRequest(data)`
1945
+
1946
+ **Payload Type:** `SlicingSimulationRequestMessage`
1947
+
1948
+ **Fields:**
1949
+
1950
+ - `modelId` (string) [✗]: UUID of the model
1951
+
1952
+ - `storageItemId` (string) [✗]: UUID or path of the storage item to download the STL/3MF
1953
+
1954
+ - `technology` (string) [✗]: Printing technology: FDM, SLA, MSLA, SLS
1955
+
1956
+ - `slicerProfile` (object) [✗]: Complete slicer profile with user settings. For FDM: OrcaSlicer-compatible JSON profiles. For SLA: exposure/lift parameters.
1957
+
1958
+ - `slicerConfig` (object) [✗]: DEPRECATED: Legacy simple config format. Use slicerProfile instead.
1959
+
1960
+ - `slicerProfileId` (string) [✗]: DEPRECATED: UUID of the slicer profile. Use slicerProfile.profileId instead.
1961
+
1962
+ - `webhookUrl` (string) [✗]: URL to POST the slicing result back to
1963
+
1964
+
1965
+
1966
+ ### slicing-simulation-result
1967
+
1968
+ **Description:** DEPRECATED: Use slicing-fdm-result or slicing-sla-result instead. Unified contract kept for backward compatibility only.
1969
+
1970
+ **Method:** `client.slicingSimulationResult(data)`
1971
+
1972
+ **Payload Type:** `SlicingSimulationResultMessage`
1973
+
1974
+ **Fields:**
1975
+
1976
+ - `modelId` (string) [✗]: UUID of the model
1977
+
1978
+ - `status` (string) [✗]: Status of the simulation
1979
+
1980
+ - `printTimeHours` (number) [✗]: Exact print time in hours (from toolpath or cross-sectional analysis)
1981
+
1982
+ - `materialWeightGrams` (number) [✗]: Total material weight in grams (filament or resin, including supports)
1983
+
1984
+ - `materialVolumeCm3` (number) [✗]: Material volume in cm³
1985
+
1986
+ - `maxZHeightMM` (number) [✗]: Maximum Z height in mm
1987
+
1988
+ - `supportMaterialWeightGrams` (number) [✗]: Support structure material weight in grams
1989
+
1990
+ - `layerCount` (integer) [✗]: Total number of layers
1991
+
1992
+ - `totalExtrusionLengthMm` (number) [✗]: Total filament extrusion length in mm (FDM only)
1993
+
1994
+ - `slicingMethod` (string) [✗]: Engine that produced the result: orcaslicer_toolpath, pyslm_cross_section, heuristic_volumetric
1995
+
1996
+ - `slicerVersion` (string) [✗]: Version of the slicer engine used
1997
+
1998
+ - `profileUsed` (string) [✗]: Name or ID of the slicer profile used
1999
+
2000
+ - `errorCode` (string) [✗]: Error code if simulation failed
2001
+
2002
+ - `errorMessage` (string) [✗]: Error message if simulation failed
2003
+
2004
+
2005
+
2006
+ ### slicing-sla-request
2007
+
2008
+ **Description:** Request SLA/MSLA slicing simulation via PySLM cross-sectional analysis. Accepts resin printer profile with exposure, lift, and layer parameters.
2009
+
2010
+ **Method:** `client.slicingSlaRequest(data)`
2011
+
2012
+ **Payload Type:** `SlicingSlaRequestMessage`
2013
+
2014
+ **Fields:**
2015
+
2016
+ - `modelId` (string) [✗]: UUID of the model
2017
+
2018
+ - `storageItemId` (string) [✗]: UUID or path of the storage item to download the STL/3MF
2019
+
2020
+ - `technology` (string) [✗]: SLA or MSLA
2021
+
2022
+ - `profileId` (string) [✗]: UUID of the user's slicer profile from the database
2023
+
2024
+ - `profileName` (string) [✗]: Human-readable profile name (e.g. 'Elegoo Mars 3 - Standard Grey')
2025
+
2026
+ - `layerHeight` (number) [✗]: Layer height in mm (default: 0.05)
2027
+
2028
+ - `exposureTime` (number) [✗]: Normal layer UV exposure time in seconds (default: 2.5)
2029
+
2030
+ - `bottomExposureTime` (number) [✗]: Bottom/burn-in layer exposure time in seconds (default: 30)
2031
+
2032
+ - `bottomLayers` (integer) [✗]: Number of bottom/burn-in layers (default: 5)
2033
+
2034
+ - `liftHeight` (number) [✗]: Platform lift height in mm between layers (default: 5.0)
2035
+
2036
+ - `liftSpeed` (number) [✗]: Platform lift speed in mm/min (default: 60)
2037
+
2038
+ - `retractSpeed` (number) [✗]: Platform retract speed in mm/min (default: 150)
2039
+
2040
+ - `resinDensity` (number) [✗]: Resin density in g/cm³ (default: 1.1)
2041
+
2042
+ - `supportEnabled` (boolean) [✗]: Generate support structures (default: true for SLA)
2043
+
2044
+ - `webhookUrl` (string) [✗]: URL to POST the slicing result back to
2045
+
2046
+
2047
+
2048
+ ### slicing-sla-result
2049
+
2050
+ **Description:** Result of SLA/MSLA slicing simulation from PySLM cross-sectional analysis. Contains exact resin usage and print time metrics.
2051
+
2052
+ **Method:** `client.slicingSlaResult(data)`
2053
+
2054
+ **Payload Type:** `SlicingSlaResultMessage`
2055
+
2056
+ **Fields:**
2057
+
2058
+ - `modelId` (string) [✗]: UUID of the model
2059
+
2060
+ - `status` (string) [✗]: Status of the simulation
2061
+
2062
+ - `printTimeHours` (number) [✗]: Exact print time in hours (from cross-sectional analysis)
2063
+
2064
+ - `materialWeightGrams` (number) [✗]: Total resin weight in grams (including supports)
2065
+
2066
+ - `materialVolumeCm3` (number) [✗]: Cured resin volume in cm³ (from cross-sectional area integration)
2067
+
2068
+ - `maxZHeightMM` (number) [✗]: Maximum Z height in mm
2069
+
2070
+ - `supportMaterialWeightGrams` (number) [✗]: Support structure resin weight in grams
2071
+
2072
+ - `layerCount` (integer) [✗]: Total number of layers
2073
+
2074
+ - `maxCrossSectionAreaMm2` (number) [✗]: Maximum cross-sectional area in mm² (affects MSLA peel force)
2075
+
2076
+ - `slicingMethod` (string) [✗]: Engine that produced the result
2077
+
2078
+ - `slicerVersion` (string) [✗]: Version of PySLM / trimesh used
2079
+
2080
+ - `profileUsed` (string) [✗]: Name or ID of the slicer profile used
2081
+
2082
+ - `errorCode` (string) [✗]: Error code if simulation failed
2083
+
2084
+ - `errorMessage` (string) [✗]: Error message if simulation failed
2085
+
2086
+
2087
+
1662
2088
  ### thumbnail-generation-completed
1663
2089
 
1664
2090
  **Description:** Handles thumbnail generation completed.
@@ -1681,6 +2107,8 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
1681
2107
 
1682
2108
  - `gltfPreviewPath` (string) [✗]: The path to the generated GLTF/GLB 3D preview file.
1683
2109
 
2110
+ - `animatedPreviewPath` (string) [✗]: The path to the generated animated MP4 preview file.
2111
+
1684
2112
  - `errorMessage` (string) [✗]: An error message if the thumbnail generation failed.
1685
2113
 
1686
2114
  - `storageLocation` (object) [✗]: The storage location of the model.
@@ -1926,6 +2354,11 @@ new WorkerClient(config: WorkerClientConfig)
1926
2354
  - Get the current status of a job
1927
2355
 
1928
2356
 
2357
+ - `analyticsCollectionRequest(data: AnalyticsCollectionRequestMessage): Promise<JobResponse>`
2358
+ - Request to trigger a manual market data collection job.
2359
+ Used for ad-hoc scraping of specific queries on marketplaces.
2360
+
2361
+
1929
2362
  - `backendLoggingEvent(data: BackendLoggingEventMessage): Promise<JobResponse>`
1930
2363
  - Centralized logging event for capturing all warn/error/failure logs from meshsync-backend.
1931
2364
  This event is sent to ELK for centralized monitoring, alerting, and debugging.
@@ -1944,12 +2377,6 @@ Used for:
1944
2377
  - Compliance and audit trails
1945
2378
 
1946
2379
 
1947
- - `ekgEdgeBatchCreateCompleted(data: EkgEdgeBatchCreateCompletedMessage): Promise<JobResponse>`
1948
- - Completion event for EKG edge batch creation with propagation results.
1949
-
1950
- - `ekgEdgeBatchCreateRequest(data: EkgEdgeBatchCreateRequestMessage): Promise<JobResponse>`
1951
- - Create multiple EKG edges with Dempster-Shafer mass functions. Triggered by metamodel detection completion.
1952
-
1953
2380
  - `etsyAnalyticsSyncCompleted(data: EtsyAnalyticsSyncCompletedMessage): Promise<JobResponse>`
1954
2381
  - Contains synced analytics data for Etsy listings. Backend stores this in etsy_analytics_snapshots table and indexes to ELK.
1955
2382
 
@@ -1989,6 +2416,12 @@ Retry Configuration:
1989
2416
  - `fileVectorizeRequest(data: FileVectorizeRequestMessage): Promise<JobResponse>`
1990
2417
  - Request to generate a vector embedding for an image file using CLIP.
1991
2418
 
2419
+ - `ipCheckCompleted(data: IpCheckCompletedMessage): Promise<JobResponse>`
2420
+ - Contains IP verification results including trademark risk, copyright risk, detected brands/franchises, and analysis confidence scores
2421
+
2422
+ - `ipCheckRequest(data: IpCheckRequestMessage): Promise<JobResponse>`
2423
+ - 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.
2424
+
1992
2425
  - `marketplaceAnalyticsSyncCompleted(data: MarketplaceAnalyticsSyncCompletedMessage): Promise<JobResponse>`
1993
2426
  - Contains synced analytics data for marketplace listings. Backend stores this in marketplace_analytics_snapshots table and indexes to ELK. Works with any marketplace provider.
1994
2427
 
@@ -2012,6 +2445,14 @@ This is typically triggered after initial connection or periodically to keep mar
2012
2445
  - 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
2013
2446
 
2014
2447
 
2448
+ - `marketplaceIntelligenceCompleted(data: MarketplaceIntelligenceCompletedMessage): Promise<JobResponse>`
2449
+ - Response from marketplace intelligence scraping.
2450
+ Contains aggregated similarity data from marketplace searches.
2451
+
2452
+ Consumed by worker-backend to update pipeline context before
2453
+ sellability analysis runs.
2454
+
2455
+
2015
2456
  - `marketplaceIntelligenceEvent(data: MarketplaceIntelligenceEventMessage): Promise<JobResponse>`
2016
2457
  - Public marketplace intelligence data scraped from external marketplaces.
2017
2458
 
@@ -2030,6 +2471,22 @@ Consumed by worker-analytic-collector for Elasticsearch indexing.
2030
2471
  Used for market research, pricing optimization, and trend detection.
2031
2472
 
2032
2473
 
2474
+ - `marketplaceIntelligenceRequest(data: MarketplaceIntelligenceRequestMessage): Promise<JobResponse>`
2475
+ - Triggers automated marketplace scraping to find similar/competing listings
2476
+ for a given model. This is a pipeline stage that runs after metadata generation
2477
+ to inform sellability analysis with real market data.
2478
+
2479
+ The worker-analytic-collector (or marketplace-connectors worker) will:
2480
+ 1. Use model metadata (title, tags, category) to build search queries
2481
+ 2. Scrape connected marketplaces (Etsy, eBay, etc.) for similar listings
2482
+ 3. Emit marketplace-intelligence-event results for Elasticsearch indexing
2483
+ 4. Return aggregated similarity data to the pipeline context
2484
+
2485
+ Pipeline integration:
2486
+ - Triggered after: metadata-generation (needs model title/tags/category)
2487
+ - Results feed into: sellability-analysis (market positioning data)
2488
+
2489
+
2033
2490
  - `marketplaceListingDescriptionGenerationCompleted(data: MarketplaceListingDescriptionGenerationCompletedMessage): Promise<JobResponse>`
2034
2491
  - Notifies backend that marketplace description generation completed. Contains generated description with metadata tracking (AI model, confidence, generation timestamp) and suggested price.
2035
2492
 
@@ -2123,6 +2580,12 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
2123
2580
  - `modelMetamodelDetectionRequest(data: ModelMetamodelDetectionRequestMessage): Promise<JobResponse>`
2124
2581
  - Handles model metamodel detection requests.
2125
2582
 
2583
+ - `modelPrintAnalysisCompleted(data: ModelPrintAnalysisCompletedMessage): Promise<JobResponse>`
2584
+ - Reports completion of 3D print analysis — contains estimation, printability, and cost breakdown per FR-022
2585
+
2586
+ - `modelPrintAnalysisRequest(data: ModelPrintAnalysisRequestMessage): Promise<JobResponse>`
2587
+ - Triggers 3D print analysis for a model — estimates print time, material usage, support needs, and cost breakdown per FR-022
2588
+
2126
2589
  - `modelSellabilityAnalysisCompleted(data: ModelSellabilityAnalysisCompletedMessage): Promise<JobResponse>`
2127
2590
  - Contains sellability analysis results including Etsy-specific recommendations, material pricing, and marketplace compatibility scores
2128
2591
 
@@ -2141,6 +2604,24 @@ and stores aggregated statistics in Elasticsearch for trend analysis.
2141
2604
  - `modelTechnicalMetadataRequest(data: ModelTechnicalMetadataRequestMessage): Promise<JobResponse>`
2142
2605
  - Triggers comprehensive technical analysis of a 3D model file to extract geometry, quality metrics, and print-readiness information
2143
2606
 
2607
+ - `slicingFdmRequest(data: SlicingFdmRequestMessage): Promise<JobResponse>`
2608
+ - Request FDM slicing simulation via OrcaSlicer (preferred) or heuristic fallback. Accepts OrcaSlicer-compatible printer/process/filament JSON profiles.
2609
+
2610
+ - `slicingFdmResult(data: SlicingFdmResultMessage): Promise<JobResponse>`
2611
+ - Result of FDM slicing simulation from OrcaSlicer (toolpath) or heuristic fallback. Contains exact physical metrics for cost calculation.
2612
+
2613
+ - `slicingSimulationRequest(data: SlicingSimulationRequestMessage): Promise<JobResponse>`
2614
+ - DEPRECATED: Use slicing-fdm-request or slicing-sla-request instead. Unified contract kept for backward compatibility only.
2615
+
2616
+ - `slicingSimulationResult(data: SlicingSimulationResultMessage): Promise<JobResponse>`
2617
+ - DEPRECATED: Use slicing-fdm-result or slicing-sla-result instead. Unified contract kept for backward compatibility only.
2618
+
2619
+ - `slicingSlaRequest(data: SlicingSlaRequestMessage): Promise<JobResponse>`
2620
+ - Request SLA/MSLA slicing simulation via PySLM cross-sectional analysis. Accepts resin printer profile with exposure, lift, and layer parameters.
2621
+
2622
+ - `slicingSlaResult(data: SlicingSlaResultMessage): Promise<JobResponse>`
2623
+ - Result of SLA/MSLA slicing simulation from PySLM cross-sectional analysis. Contains exact resin usage and print time metrics.
2624
+
2144
2625
  - `thumbnailGenerationCompleted(data: ThumbnailGenerationCompletedMessage): Promise<JobResponse>`
2145
2626
  - Handles thumbnail generation completed.
2146
2627