The @laioutr-app/ccm19 package integrates CCM19 into a Laioutr-powered Nuxt app for cookie consent management. It does not register any orchestr handlers; instead it adds a client plugin that registers a CCM19Adapter with the Laioutr consent store (from @laioutr-core/frontend-core). The adapter loads the CCM19 script, listens to CCM19's widget events, maps CCM19's purpose-based consent model to Laioutr's ConsentManagementState, and exposes methods to show/renew the consent overlay and to check or react to consent changes.
Unlike Cookiebot, CCM19 uses user-defined purposes (configured in the CCM19 dashboard) rather than fixed consent categories. The adapter provides a configurable purposeMapping to translate CCM19 purpose names to Laioutr's five consent categories. Sensible defaults for common German and English purpose names are included.
The module expects configuration under the key @laioutr-app/ccm19 in nuxt.config.ts (or via runtimeConfig). Three options are required; two have defaults.
| Option | Type | Description |
|---|---|---|
serverUrl | string | The CCM19 server URL. For cloud-hosted instances this is typically https://cloud.ccm19.de; for self-hosted installations use your own server URL. |
apiKey | string | The API key from the CCM19 dashboard. Find it in the integration/embed code section of your CCM19 domain configuration. |
domainId | string | The domain-specific ID number from CCM19. Also found in the integration/embed code section. |
lang | string | undefined | Optional locale override (e.g. de_DE, en_US). If omitted, CCM19 auto-detects the language. Default: undefined. |
purposeMapping | Record<string, ConsentCategory> | Mapping from CCM19 purpose names to Laioutr consent categories. Keys are purpose strings (case-insensitive matching). Values are one of necessary, functional, statistics, marketing, unclassified. See default mapping below. |
The module ships with defaults that cover common German and English CCM19 purpose names:
| CCM19 Purpose | Laioutr Category |
|---|---|
| Technisch notwendig / Essential / Essentiell | necessary |
| Funktional / Functional | functional |
| Statistik / Statistics | statistics |
| Marketing | marketing |
Purposes not found in the mapping are treated as unclassified. Override purposeMapping if your CCM19 dashboard uses custom purpose names.
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@laioutr-app/ccm19'],
'@laioutr-app/ccm19': {
serverUrl: process.env.CCM19_SERVER_URL!,
apiKey: process.env.CCM19_API_KEY!,
domainId: process.env.CCM19_DOMAIN_ID!,
lang: 'de_DE',
// Override purpose mapping if your CCM19 dashboard uses custom names:
// purposeMapping: {
// 'Notwendig': 'necessary',
// 'Analyse': 'statistics',
// 'Werbung': 'marketing',
// },
},
});
Use environment variables for serverUrl, apiKey, and domainId in production; the values are public so they can be exposed to the client.
@laioutr-app/ccm19, creates a CCM19Adapter with that config, registers it with useConsentStore(), and activates it. The consent store is from @laioutr-core/frontend-core; other adapters or UI can use the same store.referrerpolicy="origin". The script URL follows the pattern {serverUrl}/app.js?apiKey={apiKey}&domain={domainId}&lang={lang}. (2) On the client, listens for ccm19WidgetLoaded (initial consent state), ccm19WidgetClosed (consent saved), ccm19CookieAccepted, and ccm19EmbeddingAccepted events. (3) Handles late initialization if window.CCM is already available when the plugin runs.true, all categories are granted. Unmatched purposes set unclassified to true.necessary: true, all others false). The consent state is updated on the client after CCM19 loads.This package does not provide orchestr queries, actions, links, or resolvers. It only adds CCM19 as a consent adapter for the Laioutr consent store.
Unlike Cookiebot, Google Consent Mode v2 for CCM19 is configured directly in the CCM19 dashboard, not via module options. Enable the relevant consent types (ad_storage, analytics_storage, ad_user_data, ad_personalization) in the CCM19 embedding settings for your Google integrations. The Laioutr module does not need additional configuration for this.
@laioutr-app/ccm19 (e.g. from env).All changelogs are managed in CHANGELOG.md in the package’s GitHub repository. This app does not currently have a public repository under the Laioutr organization; when it is published there, use that repo’s CHANGELOG.md for release notes.
Battery Included
Developer documentation for the Laioutr Battery Included app package. Add search, suggested search, and product recommendations to your Laioutr frontend via the BatteryIncluded API.
Cookiebot
Developer documentation for the Laioutr Cookiebot app package. Add Cookiebot cookie consent management to your Nuxt app via the Laioutr consent store.