Skip to main content

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​

ServiceCode PathPurposeRuntime
configurationsrc/app-configuration/Central tenant/adapter configuration, database migrationsCloud Run
crmsrc/app-crm/CRM adapter hub — routes to 22 CRM backendsCloud Run
livechatsrc/app-livechat/Livechat/contact center adapter hub — 8 backendsCloud Run
cdpsrc/app-cdp/Customer Data Platform — audience sync to ad platformsCloud Run
cmssrc/app-cms/Content Management — knowledge base connectorsCloud Run
commssrc/app-comms/Internal communications — Slack, Teams, Dynamics 365Cloud Run
product-feedsrc/app-product-feed/Product catalog sync — Shopify, Channable, ChannelEngineCloud Run
integrationssrc/app-integrations/Third-party integration orchestration (Node.js)Cloud Run
jsltservicesrc/app-jslt/JSON transformation engine (JSLT templates)Cloud Run
app-bgservicesrc/app-bgservice/Long-running background workers (SSE, WebSocket)GKE / Cloud Run
app-paymentsrc/app-payment/Payment processing hub — Adyen, PayPal, Mollie, Amazon PayCloud Run
marketplace-frontendsrc/app-frontend/Angular SPA frontendCloud Run
marketplace-app-uisrc/app-ui/Shared UI component libraryCloud 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)​

AdapterCode Path
Salesforcesrc/app-crm/CM.Marketplace.Adapters.CRM.Salesforce/
Microsoft Dynamics CRMsrc/app-crm/CM.Marketplace.Adapters.CRM.MsDynamics/
Dynamics Finance and Operationssrc/app-crm/CM.Marketplace.Adapters.CRM.MSDynamicsFnO/
Microsoft Navisionsrc/app-crm/CM.Marketplace.Adapters.CRM.MSNavision/
Microsoft Business Centralsrc/app-crm/CM.Marketplace.Adapters.CRM.MsBusinessCentral/
SAPsrc/app-crm/CM.Marketplace.Adapters.CRM.SAP/
Shopifysrc/app-crm/CM.Marketplace.Adapters.CRM.Shopify/
Shopwaresrc/app-crm/CM.Marketplace.Adapters.CRM.Shopware/
HubSpotsrc/app-crm/CM.Marketplace.Adapters.CRM.Hubspot/
WooCommercesrc/app-crm/CM.Marketplace.Adapters.CRM.WooCommerce/
Magentosrc/app-crm/CM.Marketplace.Adapters.CRM.Magento/
Zendesk Salessrc/app-crm/CM.Marketplace.Adapters.CRM.ZendeskSales/
Zendesk Ticketingsrc/app-crm/CM.Marketplace.Adapters.CRM.ZendeskTicketing/
Freshdesksrc/app-crm/CM.Marketplace.Adapters.CRM.Freshdesk/
BloomReachsrc/app-crm/CM.Marketplace.Adapters.CRM.BloomReach/
Ticketmastersrc/app-crm/CM.Marketplace.Adapters.CRM.Ticketmaster/
Spotifysrc/app-crm/CM.Marketplace.Adapters.CRM.Spotify/
ComfortPartnerssrc/app-crm/CM.Marketplace.Adapters.CRM.ComfortPartners/
Paylogicsrc/app-crm/CM.Marketplace.Adapters.CRM.Paylogic/
Returnlesssrc/app-crm/CM.Marketplace.Adapters.CRM.Returnless/
CDCsrc/app-crm/CM.Marketplace.Adapters.CRM.CDC/
CDPsrc/app-crm/CM.Marketplace.Adapters.CRM.CDP/

Livechat Adapters (8 integrations)​

AdapterCode Path
Salesforce Chatsrc/app-livechat/CM.Marketplace.Adapters.Livechat.Salesforce.Chat/
Salesforce Partner Messagingsrc/app-livechat/CM.Marketplace.Adapters.Livechat.Salesforce.PartnerMessaging/
Genesyssrc/app-livechat/CM.Marketplace.Adapters.Livechat.Genesys/
CXOnesrc/app-livechat/CM.Marketplace.Adapters.Livechat.CXOne/
QContactsrc/app-livechat/CM.Marketplace.Adapters.Livechat.QContact/
Quandagosrc/app-livechat/CM.Marketplace.Adapters.Livechat.Quandago/
Zendesksrc/app-livechat/CM.Marketplace.Adapters.Livechat.Zendesk/
MsDynamicssrc/app-livechat/CM.Marketplace.Adapters.Livechat.MsDynamics/

CDP Adapters (3 integrations)​

AdapterCode Path
Google Adssrc/app-cdp/CM.Marketplace.Adapters.CDP.GoogleAds/
Facebook Adssrc/app-cdp/CM.Marketplace.Adapters.CDP.FacebookAds/
SFTPsrc/app-cdp/CM.Marketplace.Adapters.CDP.SFTP/

CMS Adapters (5 integrations)​

AdapterCode Path
Confluencesrc/app-cms/CM.Marketplace.Adapters.CMS.Confluence/
CXOnesrc/app-cms/CM.Marketplace.Adapters.CMS.CxOne/
Google Drivesrc/app-cms/CM.Marketplace.Adapters.CMS.GDrive/
SharePointsrc/app-cms/CM.Marketplace.Adapters.CMS.Sharepoint/
OneDrivesrc/app-cms/CM.Marketplace.Adapters.CMS.OneDrive/

Comms Adapters (3 integrations)​

AdapterCode Path
Slacksrc/app-comms/CM.Marketplace.Adapters.Comms.Slack/
Microsoft Teamssrc/app-comms/CM.Marketplace.Adapters.Comms.Teams/
Dynamics 365src/app-comms/CM.Marketplace.Adapters.Comms.Dynamics365/

Payment Adapters (7 integrations)​

AdapterCode Path
Adyensrc/app-payment/Adapter.Adyen/
PayPalsrc/app-payment/Adapter.Paypal/
Molliesrc/app-payment/Adapter.Mollie/
Amazon Paysrc/app-payment/Adapter.Amazon/
CM.comsrc/app-payment/Adapter.CM/
GPIsrc/app-payment/Adapter.Gpi/
Mocksrc/app-payment/Adapter.Mock/

Product Feed Adapters (3 integrations)​

AdapterCode Path
Shopifysrc/app-product-feed/CM.Marketplace.Adapters.ProductFeed.Shopify/
Channablesrc/app-product-feed/CM.Marketplace.Adapters.ProductFeed.Channable/
ChannelEnginesrc/app-product-feed/CM.Marketplace.Adapters.ProductFeed.ChannelEngine/

3. Shared Libraries​

All services depend on shared NuGet packages from src/lib-shared/:

LibraryPurpose
CM.Marketplace.Shared.CacheRedis distributed caching (StackExchange.Redis)
CM.Marketplace.Shared.QueueRedis-backed message queue (Sorted Sets)
CM.Marketplace.Shared.HttpClientWrapperCentralized HTTP client with auth and logging
CM.Marketplace.Shared.GcpGoogle Cloud Platform helpers (Pub/Sub, Tasks, Storage)
CM.Marketplace.Shared.SerializationJSON serialization/deserialization
CM.Marketplace.Shared.ErrorError handling and exception abstractions
CM.Marketplace.Shared.LoggingStructured logging with Google Cloud integration
CM.Marketplace.Shared.ContextLoggingRequest context propagation for logging
CM.Marketplace.Shared.AuthenticationAuthentication primitives
CM.Marketplace.Shared.PermissionsPermission and authorization checks
CM.Marketplace.Shared.RouterClientClient for CM.com Router/Gateway API
CM.Marketplace.Common.Configuration.ClientClient for the Configuration Service
CM.Marketplace.Common.Configuration.ContractsDomain contracts for configuration
CM.Marketplace.Common.Jslt.ClientClient for the JSLT transformation service

4. Background Services​

Long-running workers that maintain persistent connections:

ServiceCode PathPurpose
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:

WorkflowTemplatePurpose
Product Feed Syncinfra/modules/workflow/templates/productfeed.yamlBatch product catalog sync
CDP Syncinfra/modules/workflow/templates/cdp.yamlAudience data sync to ad platforms
SFTP Transferinfra/modules/workflow/templates/sftp.yamlSFTP-based data export
Facebook Adsinfra/modules/workflow/templates/facebookads.yamlFacebook 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