Technical Components
Technical Components
This page describes all technical components of the CM Marketplace platform — the microservices, shared libraries, adapter pattern, and how they connect.
1. Microservices Architecture
The platform follows a microservices architecture where each domain is an independently deployable service running on Google Cloud Run. All services are built with .NET 10 and communicate via Google Cloud Pub/Sub (async) and HTTP REST (sync).
Service Inventory
| Service | Code Path | Purpose | Runtime |
|---|---|---|---|
| configuration | src/app-configuration/ | Central tenant/adapter configuration, database migrations | Cloud Run |
| crm | src/app-crm/ | CRM adapter hub — routes to 22 CRM backends | Cloud Run |
| livechat | src/app-livechat/ | Livechat/contact center adapter hub — 8 backends | Cloud Run |
| cdp | src/app-cdp/ | Customer Data Platform — audience sync to ad platforms | Cloud Run |
| cms | src/app-cms/ | Content Management — knowledge base connectors | Cloud Run |
| comms | src/app-comms/ | Internal communications — Slack, Teams, Dynamics 365 | Cloud Run |
| product-feed | src/app-product-feed/ | Product catalog sync — Shopify, Channable, ChannelEngine | Cloud Run |
| integrations | src/app-integrations/ | Third-party integration orchestration (Node.js) | Cloud Run |
| jsltservice | src/app-jslt/ | JSON transformation engine (JSLT templates) | Cloud Run |
| app-bgservice | src/app-bgservice/ | Long-running background workers (SSE, WebSocket) | GKE / Cloud Run |
| app-payment | src/app-payment/ | Payment processing hub — Adyen, PayPal, Mollie, Amazon Pay | Cloud Run |
| marketplace-frontend | src/app-frontend/ | Angular SPA frontend | Cloud Run |
| marketplace-app-ui | src/app-ui/ | Shared UI component library | Cloud Run |
2. Adapter Pattern
The platform uses a pluggable adapter pattern to integrate with external platforms. Each domain service acts as a hub that routes requests to the correct adapter based on tenant configuration.
How It Works
Incoming Request -> Domain Service (e.g. CRM) -> Adapter Factory -> Specific Adapter (e.g. Salesforce)
|
Configuration Service
(tenant + adapter config)
CRM Adapters (22 integrations)
| Adapter | Code Path |
|---|---|
| Salesforce | src/app-crm/CM.Marketplace.Adapters.CRM.Salesforce/ |
| Microsoft Dynamics CRM | src/app-crm/CM.Marketplace.Adapters.CRM.MsDynamics/ |
| Dynamics Finance and Operations | src/app-crm/CM.Marketplace.Adapters.CRM.MSDynamicsFnO/ |
| Microsoft Navision | src/app-crm/CM.Marketplace.Adapters.CRM.MSNavision/ |
| Microsoft Business Central | src/app-crm/CM.Marketplace.Adapters.CRM.MsBusinessCentral/ |
| SAP | src/app-crm/CM.Marketplace.Adapters.CRM.SAP/ |
| Shopify | src/app-crm/CM.Marketplace.Adapters.CRM.Shopify/ |
| Shopware | src/app-crm/CM.Marketplace.Adapters.CRM.Shopware/ |
| HubSpot | src/app-crm/CM.Marketplace.Adapters.CRM.Hubspot/ |
| WooCommerce | src/app-crm/CM.Marketplace.Adapters.CRM.WooCommerce/ |
| Magento | src/app-crm/CM.Marketplace.Adapters.CRM.Magento/ |
| Zendesk Sales | src/app-crm/CM.Marketplace.Adapters.CRM.ZendeskSales/ |
| Zendesk Ticketing | src/app-crm/CM.Marketplace.Adapters.CRM.ZendeskTicketing/ |
| Freshdesk | src/app-crm/CM.Marketplace.Adapters.CRM.Freshdesk/ |
| BloomReach | src/app-crm/CM.Marketplace.Adapters.CRM.BloomReach/ |
| Ticketmaster | src/app-crm/CM.Marketplace.Adapters.CRM.Ticketmaster/ |
| Spotify | src/app-crm/CM.Marketplace.Adapters.CRM.Spotify/ |
| ComfortPartners | src/app-crm/CM.Marketplace.Adapters.CRM.ComfortPartners/ |
| Paylogic | src/app-crm/CM.Marketplace.Adapters.CRM.Paylogic/ |
| Returnless | src/app-crm/CM.Marketplace.Adapters.CRM.Returnless/ |
| CDC | src/app-crm/CM.Marketplace.Adapters.CRM.CDC/ |
| CDP | src/app-crm/CM.Marketplace.Adapters.CRM.CDP/ |
Livechat Adapters (8 integrations)
| Adapter | Code Path |
|---|---|
| Salesforce Chat | src/app-livechat/CM.Marketplace.Adapters.Livechat.Salesforce.Chat/ |
| Salesforce Partner Messaging | src/app-livechat/CM.Marketplace.Adapters.Livechat.Salesforce.PartnerMessaging/ |
| Genesys | src/app-livechat/CM.Marketplace.Adapters.Livechat.Genesys/ |
| CXOne | src/app-livechat/CM.Marketplace.Adapters.Livechat.CXOne/ |
| QContact | src/app-livechat/CM.Marketplace.Adapters.Livechat.QContact/ |
| Quandago | src/app-livechat/CM.Marketplace.Adapters.Livechat.Quandago/ |
| Zendesk | src/app-livechat/CM.Marketplace.Adapters.Livechat.Zendesk/ |
| MsDynamics | src/app-livechat/CM.Marketplace.Adapters.Livechat.MsDynamics/ |
CDP Adapters (3 integrations)
| Adapter | Code Path |
|---|---|
| Google Ads | src/app-cdp/CM.Marketplace.Adapters.CDP.GoogleAds/ |
| Facebook Ads | src/app-cdp/CM.Marketplace.Adapters.CDP.FacebookAds/ |
| SFTP | src/app-cdp/CM.Marketplace.Adapters.CDP.SFTP/ |
CMS Adapters (5 integrations)
| Adapter | Code Path |
|---|---|
| Confluence | src/app-cms/CM.Marketplace.Adapters.CMS.Confluence/ |
| CXOne | src/app-cms/CM.Marketplace.Adapters.CMS.CxOne/ |
| Google Drive | src/app-cms/CM.Marketplace.Adapters.CMS.GDrive/ |
| SharePoint | src/app-cms/CM.Marketplace.Adapters.CMS.Sharepoint/ |
| OneDrive | src/app-cms/CM.Marketplace.Adapters.CMS.OneDrive/ |
Comms Adapters (3 integrations)
| Adapter | Code Path |
|---|---|
| Slack | src/app-comms/CM.Marketplace.Adapters.Comms.Slack/ |
| Microsoft Teams | src/app-comms/CM.Marketplace.Adapters.Comms.Teams/ |
| Dynamics 365 | src/app-comms/CM.Marketplace.Adapters.Comms.Dynamics365/ |
Payment Adapters (7 integrations)
| Adapter | Code Path |
|---|---|
| Adyen | src/app-payment/Adapter.Adyen/ |
| PayPal | src/app-payment/Adapter.Paypal/ |
| Mollie | src/app-payment/Adapter.Mollie/ |
| Amazon Pay | src/app-payment/Adapter.Amazon/ |
| CM.com | src/app-payment/Adapter.CM/ |
| GPI | src/app-payment/Adapter.Gpi/ |
| Mock | src/app-payment/Adapter.Mock/ |
Product Feed Adapters (3 integrations)
| Adapter | Code Path |
|---|---|
| Shopify | src/app-product-feed/CM.Marketplace.Adapters.ProductFeed.Shopify/ |
| Channable | src/app-product-feed/CM.Marketplace.Adapters.ProductFeed.Channable/ |
| ChannelEngine | src/app-product-feed/CM.Marketplace.Adapters.ProductFeed.ChannelEngine/ |
3. Shared Libraries
All services depend on shared NuGet packages from src/lib-shared/:
| Library | Purpose |
|---|---|
| CM.Marketplace.Shared.Cache | Redis distributed caching (StackExchange.Redis) |
| CM.Marketplace.Shared.Queue | Redis-backed message queue (Sorted Sets) |
| CM.Marketplace.Shared.HttpClientWrapper | Centralized HTTP client with auth and logging |
| CM.Marketplace.Shared.Gcp | Google Cloud Platform helpers (Pub/Sub, Tasks, Storage) |
| CM.Marketplace.Shared.Serialization | JSON serialization/deserialization |
| CM.Marketplace.Shared.Error | Error handling and exception abstractions |
| CM.Marketplace.Shared.Logging | Structured logging with Google Cloud integration |
| CM.Marketplace.Shared.ContextLogging | Request context propagation for logging |
| CM.Marketplace.Shared.Authentication | Authentication primitives |
| CM.Marketplace.Shared.Permissions | Permission and authorization checks |
| CM.Marketplace.Shared.RouterClient | Client for CM.com Router/Gateway API |
| CM.Marketplace.Common.Configuration.Client | Client for the Configuration Service |
| CM.Marketplace.Common.Configuration.Contracts | Domain contracts for configuration |
| CM.Marketplace.Common.Jslt.Client | Client for the JSLT transformation service |
4. Background Services
Long-running workers that maintain persistent connections:
| Service | Code Path | Purpose |
|---|---|---|
| Salesforce Enhanced Chat (SSE) | src/app-bgservice/.../SalesforceEnhancedChat/ | Persistent SSE connections to Salesforce |
| QContact (WebSocket) | src/app-bgservice/.../QContact/ | WebSocket connections to QContact |
These run as BackgroundService (hosted services) with infinite retry. See Redundancy and High Availability for resilience details.
5. Scheduled Workflows
Batch data sync via Google Cloud Workflows and Cloud Scheduler:
| Workflow | Template | Purpose |
|---|---|---|
| Product Feed Sync | infra/modules/workflow/templates/productfeed.yaml | Batch product catalog sync |
| CDP Sync | infra/modules/workflow/templates/cdp.yaml | Audience data sync to ad platforms |
| SFTP Transfer | infra/modules/workflow/templates/sftp.yaml | SFTP-based data export |
| Facebook Ads | infra/modules/workflow/templates/facebookads.yaml | Facebook Custom Audience sync |
Workflow Pattern (Product Feed)
main:
steps:
- initiate_sync: # POST /v1/tenants/{id}/adapters/{id}/init-sync
- create_batches_request: # POST /v1/.../create-batches
- sync_batches: # Loop: POST /v1/.../sync-batch per file
for:
value: v
in: files
retry:
max_retries: 2
backoff: { initial_delay: 2, max_delay: 10, multiplier: 2 }
- finish_sync: # POST /v1/.../finish-sync (reports failures)
Last updated: May 2026