{"_id":"@creezio/brand-config","_rev":"6-cdbaad548ceac2dcccb3df2e1f9cb9ba","name":"@creezio/brand-config","dist-tags":{"latest":"0.26.0"},"versions":{"0.22.0":{"name":"@creezio/brand-config","version":"0.22.0","license":"UNLICENSED","_id":"@creezio/brand-config@0.22.0","maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"homepage":"https://github.com/creezio/creezio#readme","bugs":{"url":"https://github.com/creezio/creezio/issues"},"dist":{"shasum":"c45f3084bdd22b6dd9d2fc37ee0e11b282ec9538","tarball":"https://registry.npmjs.org/@creezio/brand-config/-/brand-config-0.22.0.tgz","fileCount":69,"integrity":"sha512-nUeYxzV+00G40ygmSu3rwAyf1jkEa316qcUq8pCNp3B8TbY4Cwkfv0IaFYSbfVYdq07SsuxKzuxZlw5hylFT9A==","signatures":[{"sig":"MEQCID18g6SRjPy/wxwj9smfdyWpYmBHq7K0PRt64Tx6331qAiB9RGNS0MfMghpxdRoxGlcTvTHnR8aWvqufO8OBS+EetA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265284},"main":"./dist-cjs/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.5"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist-cjs/index.js"},"./manifests/*":{"types":"./dist/manifests/*.d.ts","import":"./dist/manifests/*.js"}},"gitHead":"544bc16fbe31e3a3721b24d2d17a377f1dc11e1c","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"cedfiducia","email":"hello@creez.io"},"repository":{"url":"git+https://github.com/creezio/creezio.git","type":"git","directory":"packages/brand-config"},"_npmVersion":"10.9.8","description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/brand-config_0.22.0_1788206224883_0.5593973070186513","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@creezio/brand-config","version":"0.23.0","license":"UNLICENSED","_id":"@creezio/brand-config@0.23.0","maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"homepage":"https://github.com/creezio/creezio#readme","bugs":{"url":"https://github.com/creezio/creezio/issues"},"dist":{"shasum":"00004fd0a3219592357ca9976be735572198e22f","tarball":"https://registry.npmjs.org/@creezio/brand-config/-/brand-config-0.23.0.tgz","fileCount":45,"integrity":"sha512-OZjBhIzMBp6WJx/Xb1yE/Rdi18Nn4s3OweuroXjSSzjTTQsGKFz9xb/VqStZhwXK6pKLthcyVC/YY1H9YON5Kw==","signatures":[{"sig":"MEUCIH5WeGzo0LbHLGIxo5T0XTYgblcalVEUs+AFZSMM+DNIAiEAzS9zXSqZzORaSm9985b3hhgSLdVAamqrVBRTWXXv46o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225936},"main":"./dist-cjs/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.5"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist-cjs/index.js"},"./manifests/*":{"types":"./dist/manifests/*.d.ts","import":"./dist/manifests/*.js"}},"gitHead":"55f391b610619648ca8b633a0509ac2ce9d2d784","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"cedfiducia","email":"hello@creez.io"},"repository":{"url":"git+https://github.com/creezio/creezio.git","type":"git","directory":"packages/brand-config"},"_npmVersion":"10.9.8","description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/brand-config_0.23.0_1788353984153_0.4226797329912815","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@creezio/brand-config","version":"0.24.0","license":"UNLICENSED","_id":"@creezio/brand-config@0.24.0","maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"homepage":"https://github.com/creezio/creezio#readme","bugs":{"url":"https://github.com/creezio/creezio/issues"},"dist":{"shasum":"58c8f5bf9918678eb1745dc3037407268eb9f9d9","tarball":"https://registry.npmjs.org/@creezio/brand-config/-/brand-config-0.24.0.tgz","fileCount":45,"integrity":"sha512-ana2G0D8xSjVKmIcdjmc+j/pUZeUkvDiHgqhhI/FbkcUTQghtsTYPEs/LpYTCN9YdYisISQfAGk8sh+6o9Ds5g==","signatures":[{"sig":"MEQCIB5JFURsB04LOH5G7u7D3rJ3DszWQetduZCGDmJSAzwDAiAXQX8VVRVvVY4T0p9orUBLbAqsTxLYCaIyqibRqBg7Fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225936},"main":"./dist-cjs/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.5"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist-cjs/index.js"},"./manifests/*":{"types":"./dist/manifests/*.d.ts","import":"./dist/manifests/*.js"}},"gitHead":"55da99cacf142cd8af97487d70cc8dc54586db26","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"cedfiducia","email":"hello@creez.io"},"repository":{"url":"git+https://github.com/creezio/creezio.git","type":"git","directory":"packages/brand-config"},"_npmVersion":"10.9.8","description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/brand-config_0.24.0_1788360182328_0.8941246378239034","host":"s3://npm-registry-packages-npm-production"}},"0.24.1":{"name":"@creezio/brand-config","version":"0.24.1","license":"UNLICENSED","_id":"@creezio/brand-config@0.24.1","maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"homepage":"https://github.com/creezio/creezio#readme","bugs":{"url":"https://github.com/creezio/creezio/issues"},"dist":{"shasum":"760192465b9433beee339c5ae34e00da106226e5","tarball":"https://registry.npmjs.org/@creezio/brand-config/-/brand-config-0.24.1.tgz","fileCount":45,"integrity":"sha512-bVZy8Xo2SIVCRZ1QiAof4WatDWrxXbgNpJOXo0nSrCqUbQEHll+p4N+rrk2pdQM0/ZDu0by6af2JYTxOs291sA==","signatures":[{"sig":"MEUCIQDDRvb5PT8dWcuGA/SnYkZ9T8xBLzhNQUuWAilRV9ErxwIgGC5zJbPYtD1MEL6ZA/WhEYbD4dbYe8L1j7VsGCgSdl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225936},"main":"./dist-cjs/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.5"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist-cjs/index.js"},"./manifests/*":{"types":"./dist/manifests/*.d.ts","import":"./dist/manifests/*.js"}},"gitHead":"0b0add380e7244b9f1502eea4609dfda3fdca05d","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"cedfiducia","email":"hello@creez.io"},"repository":{"url":"git+https://github.com/creezio/creezio.git","type":"git","directory":"packages/brand-config"},"_npmVersion":"10.9.8","description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/brand-config_0.24.1_1788365355370_0.9149115270171524","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@creezio/brand-config","version":"0.25.0","license":"UNLICENSED","_id":"@creezio/brand-config@0.25.0","maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"homepage":"https://github.com/creezio/creezio#readme","bugs":{"url":"https://github.com/creezio/creezio/issues"},"dist":{"shasum":"97253fa6fe3c1922b107e8e13b1f91c917162571","tarball":"https://registry.npmjs.org/@creezio/brand-config/-/brand-config-0.25.0.tgz","fileCount":45,"integrity":"sha512-gH+VBsr2xu9MFcWEKpQ1OOlnc3F0V0WU7pkzy/m/2LXgZDceMNgsZhuBaEwHkPw0d/rfMIGgDVp0umwdM+mTWA==","signatures":[{"sig":"MEUCIQCDa09TpONOlMPzBlSFW5HyDZ7Fxyxq7qCnxELXm7tzMgIgWoeGpJK/S2fyI6cg0zsU633IahYmuSMJlo0PAGZnKTA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225328},"main":"./dist-cjs/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.5"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist-cjs/index.js"},"./manifests/*":{"types":"./dist/manifests/*.d.ts","import":"./dist/manifests/*.js"}},"gitHead":"72ee394172d7a01bc0a51e0f8e4db3bbc5be8f31","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"cedfiducia","email":"hello@creez.io"},"repository":{"url":"git+https://github.com/creezio/creezio.git","type":"git","directory":"packages/brand-config"},"_npmVersion":"10.9.8","description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3"},"_npmOperationalInternal":{"tmp":"tmp/brand-config_0.25.0_1788373637935_0.9173314062339188","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@creezio/brand-config","version":"0.26.0","description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","type":"module","main":"./dist-cjs/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist-cjs/index.js","default":"./dist/index.js"},"./manifests/*":{"types":"./dist/manifests/*.d.ts","import":"./dist/manifests/*.js"}},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"devDependencies":{"typescript":"^5.8.3"},"license":"UNLICENSED","module":"./dist/index.js","publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"repository":{"type":"git","url":"git+https://github.com/creezio/creezio.git","directory":"packages/brand-config"},"engines":{"node":">=22.5"},"_id":"@creezio/brand-config@0.26.0","gitHead":"fef880ebe9665ef996cfbabbe551dbd2a823a875","bugs":{"url":"https://github.com/creezio/creezio/issues"},"homepage":"https://github.com/creezio/creezio#readme","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-dNECWy/cfu1YEIinTpeVUNJqgKBLwmOyuI3n+9Imdf0tKtYtQumpqLZRBVPes2vYiQ4xhsowSK3G8SWVg4ajgg==","shasum":"2944f9db0ff05b9dea11e4aa9f227a07d116d82d","tarball":"https://registry.npmjs.org/@creezio/brand-config/-/brand-config-0.26.0.tgz","fileCount":45,"unpackedSize":225328,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH6FVNMazta+AO47MHfWJGNiDs0oWfCm3yT2uGk27JxGAiAv3syPbjlga9fwwu5SGi8O64Uy1zuYgyPK5953anbZug=="}]},"_npmUser":{"name":"cedfiducia","email":"hello@creez.io"},"directories":{},"maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/brand-config_0.26.0_1788381470723_0.5787910389494582"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-31T19:57:04.702Z","modified":"2026-09-02T20:37:51.074Z","0.22.0":"2026-08-31T19:57:05.008Z","0.23.0":"2026-09-02T12:59:44.286Z","0.24.0":"2026-09-02T14:43:02.482Z","0.24.1":"2026-09-02T16:09:15.499Z","0.25.0":"2026-09-02T18:27:18.060Z","0.26.0":"2026-09-02T20:37:50.866Z"},"bugs":{"url":"https://github.com/creezio/creezio/issues"},"license":"UNLICENSED","homepage":"https://github.com/creezio/creezio#readme","repository":{"type":"git","url":"git+https://github.com/creezio/creezio.git","directory":"packages/brand-config"},"description":"AppManifest, createAppManifest, manifests marque (TempoFlow, Certivan, Fidu, DemoBrand) — client + serveur","maintainers":[{"name":"cedfiducia","email":"hello@creez.io"}],"readme":"# @creezio/brand-config\n\n## Rôle\n\n`@creezio/brand-config` est la source de vérité des identités de marque desktop Creezio. Le package expose le schéma `AppManifest`, les manifests de production (`TempoFlow`, `Certivan`, `Fidu`), le manifest sandbox `DemoBrand`, ainsi que les helpers qui dérivent les chemins, variables d'environnement, feeds d'auto-update, identifiants Windows et configurations `electron-builder`.\n\nLe modèle standard porté par ce package est toujours un modèle **multi-exe Client + Serveur** :\n\n- un `client` avec son `appId`, son feed, son nom de binaire, son `userDataSegment` et son GUID NSIS ;\n- un `server` distinct avec son propre `appId`, feed `.../server/`, binaire, `userDataSegment` et GUID NSIS ;\n- un bloc `publish` qui paramètre l'infrastructure de publication Windows et de remote-build.\n\nLe package est utilisé par les runtimes Electron, les scripts desktop, la factory et les packages qui doivent rester brand-agnostic. Il évite de recopier des constantes `TF2_*`, `CERTIVAN_*` ou `FIDU_*` dans le kit.\n\n## Périmètre (kit vs marque)\n\n### Ce qui appartient au kit\n\n- Le type `AppManifest` et ses sous-types (`AppKind`, `ExeIdentity`, `BrandFeatures`, `BrandPublishInfra`).\n- Les helpers purs :\n  - `exeForKind`, `envKey`, `appSessionPartition`, `profileArgPrefix`, `profileDirArgPrefix` ;\n  - `resolveArtifactFileName`, `resolveLatestAlias`, `feedBaseUrl`, `latestYmlUrl` ;\n  - `appKindEnvKey`, `serverPlatformEnvKey`, `distDirForKind` ;\n  - `isFeatureEnabled`.\n- Le registre de manifests connu : `manifests`, `BrandId`, `getManifest`, `listBrandIds`, `listProductionBrandIds`, `isSandboxBrand`.\n- Les manifests versionnés pour `tempoflow`, `certivan`, `fidu` et `demobrand`.\n- La génération factory sandbox via `createAppManifest`, `defaultFeedToken`, `validateAppManifest`.\n- Les helpers desktop-build :\n  - `buildElectronBuilderConfig` ;\n  - `CREEZIO_ASAR_RUNTIME_PACKAGES` ;\n  - `DEFAULT_HOST_ONLY_ELECTRON_MODULES`.\n- Les GUID NSIS déterministes via `uuidV5`, `nsisGuidFromAppId`, `ELECTRON_BUILDER_NS_OID`.\n\n### Ce qui reste côté marque\n\n- Les secrets de publication, tokens CI/CD, clés SSH et credentials de remote-build.\n- Les fichiers `electron-builder.yml` de base, icônes, scripts d'app et overrides opérationnels propres à une marque.\n- Les migrations métier, routes métier, wording UI et fonctionnalités verticales.\n- La décision de consommer un manifest de production déjà présent ou un manifest sandbox généré par la factory.\n\nNe pas modifier les manifests de production pour adapter un cas local : utiliser les overrides d'environnement côté app ou une marque sandbox. Les GUID, `appId`, feeds et segments `userData` sont des contrats d'upgrade.\n\n## Installation / build\n\nDans le monorepo Creezio :\n\n```bash\nnpm run build -w @creezio/brand-config\nnpm run typecheck -w @creezio/brand-config\n```\n\nLe package est un module TypeScript ESM avec sortie `dist/` et entrée CJS déclarée en `dist-cjs/` :\n\n- `main`: `./dist-cjs/index.js`\n- `module`: `./dist/index.js`\n- `types`: `./dist/index.d.ts`\n- exports :\n  - `@creezio/brand-config`\n  - `@creezio/brand-config/manifests/*`\n\nIl n'a pas de dépendance runtime externe. Sa seule dépendance de développement est `typescript`.\n\n## Configuration (env, configure*, bindings)\n\n`brand-config` ne lit pas directement `process.env` pour configurer une app. Il fournit des conventions déterministes à utiliser par les packages consommateurs.\n\n### Variables d'environnement dérivées\n\n`envKey(manifest, suffix)` concatène le préfixe de marque et un suffixe :\n\n```ts\nimport { envKey, demobrandManifest } from \"@creezio/brand-config\";\n\nconst key = envKey(demobrandManifest, \"USER_DATA_OVERRIDE\");\n// \"DEMOBRAND_USER_DATA_OVERRIDE\"\n```\n\nHelpers spécialisés :\n\n```ts\nimport {\n  appKindEnvKey,\n  serverPlatformEnvKey,\n  demobrandManifest,\n} from \"@creezio/brand-config\";\n\nappKindEnvKey(demobrandManifest);        // \"DEMOBRAND_APP_KIND\"\nserverPlatformEnvKey(demobrandManifest); // \"DEMOBRAND_SERVER_PLATFORM\"\n```\n\nLes packages comme `@creezio/platform-core` utilisent ces clés pour résoudre les overrides hors build packagé (`USER_DATA_OVERRIDE`, `DB_PATH_OVERRIDE`, `CORE_DB_PATH_OVERRIDE`, etc.).\n\n### Bindings desktop\n\nLe nom du bridge preload vient du manifest :\n\n```ts\nimport { getManifest } from \"@creezio/brand-config\";\n\nconst manifest = getManifest(\"demobrand\");\nmanifest.bridgeName; // \"demobrandDesktop\"\n```\n\nCe nom est consommé par `@creezio/shell` et par les preloads de marque pour exposer l'API sous `window[manifest.bridgeName]`.\n\n### Config electron-builder\n\n`buildElectronBuilderConfig(manifest, kind, base, opts?)` reçoit une config de base déjà parsée et renvoie une config avec les champs identité, publish, NSIS et packaging Creezio ajustés :\n\n```ts\nimport {\n  buildElectronBuilderConfig,\n  demobrandManifest,\n} from \"@creezio/brand-config\";\n\nconst serverConfig = buildElectronBuilderConfig(\n  demobrandManifest,\n  \"server\",\n  baseElectronBuilderYaml,\n  {\n    clientSlim: true,\n    nsisInclude: \"installer.nsh\",\n    iconDir: \"resources/icons\",\n  },\n);\n```\n\nOptions principales :\n\n- `hostOnlyModules` : liste des modules Electron main exclus du paquet Client.\n- `clientSlim` : `true` par défaut ; `false` pour les apps qui gardent encore la stack locale dans le Client.\n- `nsisInclude` : force le fichier include NSIS (`installer.nsh` par défaut) ou `false`.\n- `iconDir` : dossier relatif des icônes `client.png` / `server.png`.\n- `packCreezioVendor` : embarque les packages runtime `@creezio/*` (résolus depuis `node_modules`, walk-up workspaces) dans l'asar.\n- `winBinStage` : stage bins Windows serveur (défaut `.creezio/win-bin-stage` ou `CREEZIO_WIN_BIN_STAGE`).\n\nPackaging bins (parité TF2) :\n\n- **Client slim** : pas de `resources/bin` (ni asar, ni extraResources).\n- **Serveur** : `win.extraResources` filtré (`WIN_SERVER_BIN_FILTER`) depuis le stage ;\n  jamais le dossier kit `electron-shell/resources/bin` en bloc.\n- Exclusion asar systématique : `ASAR_EXCLUDE_KIT_BINS`.\n\n`CREEZIO_ASAR_RUNTIME_PACKAGES` inclut notamment `brand-config`, `platform-core`, `product-hub`, `shell`, `electron-shell`, `api-kernel`, `mcp-facade`, `shell-ui` et `auth`.\n\n## API publique (exports principaux avec exemples TS)\n\n### Registre des manifests\n\n```ts\nimport {\n  getManifest,\n  isSandboxBrand,\n  listBrandIds,\n  listProductionBrandIds,\n  manifests,\n  type BrandId,\n} from \"@creezio/brand-config\";\n\nconst all: BrandId[] = listBrandIds();\n// [\"demobrand\"] — sandbox kit seule (H11 : manifests prod hors kit)\n\nconst prod = listProductionBrandIds();\n// [] — demobrand est exclu car sandbox: true\n\nconst demo = getManifest(\"demobrand\");\nconst sandbox = isSandboxBrand(\"demobrand\"); // true\n\nmanifests.demobrand.client.productName; // \"DemoBrand\"\n```\n\n### Manifests nommés\n\n```ts\nimport { demobrandManifest } from \"@creezio/brand-config\";\n\ndemobrandManifest.envPrefix; // \"DEMOBRAND\"\ndemobrandManifest.sandbox; // true\n```\n\nLes manifests prod (`tempoflow` / `certivan` / `fidu`) ne sont plus\npubliés par le kit (H11). Une marque les porte dans\n`src/electron/app-manifest.json`, résolu via `resolveManifest`.\n\n### Helpers d'identité et de feed\n\n```ts\nimport {\n  appSessionPartition,\n  distDirForKind,\n  exeForKind,\n  feedBaseUrl,\n  latestYmlUrl,\n  profileArgPrefix,\n  resolveArtifactFileName,\n  resolveLatestAlias,\n  demobrandManifest,\n} from \"@creezio/brand-config\";\n\nconst serverExe = exeForKind(demobrandManifest, \"server\");\n\nresolveArtifactFileName(serverExe, \"0.10.26\");\n// \"DemoBrand-Server-Setup-0.10.26.exe\"\n\nresolveLatestAlias(demobrandManifest.client);\n// \"DemoBrand-Setup-latest.exe\"\n\nfeedBaseUrl(demobrandManifest.client);\n// \"https://demobrand.creez.io/dl-sandbox…\"\n\nlatestYmlUrl(demobrandManifest, \"server\");\n// \".../server/latest.yml\"\n\nappSessionPartition(demobrandManifest);\n// \"persist:demobrand-app\"\n\nprofileArgPrefix(demobrandManifest);\n// \"--demobrand-profile=\"\n\ndistDirForKind(\"server\");\n// \"dist-electron-server\"\n```\n\n### Features optionnelles\n\n```ts\nimport { createAppManifest, isFeatureEnabled } from \"@creezio/brand-config\";\n\nconst off = createAppManifest({\n  brandId: \"offbrand\",\n  productName: \"Off\",\n  domain: \"off.example.test\",\n  sandbox: true,\n  features: { plugins: false, fleet: false },\n});\nisFeatureEnabled(off, \"plugins\"); // false\nisFeatureEnabled(off, \"fleet\");   // false\n```\n\nUn champ absent ou `true` signifie activé. Seul `false` désactive explicitement la capacité.\n\n### Factory sandbox\n\n```ts\nimport {\n  createAppManifest,\n  defaultFeedToken,\n  validateAppManifest,\n} from \"@creezio/brand-config\";\n\nconst manifest = createAppManifest({\n  brandId: \"atelier-demo\",\n  productName: \"Atelier Demo\",\n  domain: \"atelier-demo.creez.io\",\n  sandbox: true,\n});\n\nconst errors = validateAppManifest(manifest);\nif (errors.length) throw new Error(errors.join(\"\\n\"));\n\ndefaultFeedToken(\"atelier-demo\"); // token sandbox déterministe\n```\n\n`createAppManifest` refuse les `brandId` réservés `tempoflow`, `certivan` et `fidu`. Il ne doit donc pas servir à régénérer les manifests de production.\n\n### GUID NSIS\n\n```ts\nimport { nsisGuidFromAppId } from \"@creezio/brand-config\";\n\nconst guid = nsisGuidFromAppId(\"fr.fidu.desktop.server\");\n// UUID.v5(appId, namespace OID electron-builder)\n```\n\n## Flux / fonctionnement\n\n1. Une app ou un script choisit un manifest (`getManifest(\"demobrand\")` pour la sandbox kit, `resolveManifest(brandId, { appRoot })` pour une marque).\n2. Les packages consommateurs dérivent leurs clés et chemins :\n   - `@creezio/platform-core` résout `userData`, `db`, `local-config`, feeds et ressources ;\n   - `@creezio/shell` utilise `bridgeName` pour exposer `window.*Desktop` ;\n   - `@creezio/desktop-tooling` et les scripts Electron consomment `publish` et les identités Client/Serveur ;\n   - `@creezio/electron-shell` peut utiliser `appKindEnvKey`, `distDirForKind`, `appSessionPartition`.\n3. Pour le build desktop, `buildElectronBuilderConfig` applique l'identité de l'exe (`client` ou `server`) à la config de base.\n4. Pour les marques générées, `createAppManifest` produit un manifest sandbox complet et `validateAppManifest` vérifie les invariants.\n\nLes invariants critiques sont :\n\n- feeds client et serveur distincts, avec feed serveur contenant `/server/` ;\n- GUID client et serveur distincts ;\n- `buildServerArtifact: true` pour les nouvelles apps ;\n- pas de réutilisation de feed token production dans un manifest sandbox ;\n- `userDataSegment` stable pour préserver les données et upgrades existants.\n\n## Intégration — DemoBrand (sandbox kit)\n\nH11 : les manifests prod (`tempoflow` / `certivan` / `fidu`) ne sont plus\npubliés par `@creezio/brand-config`. Chaque marque porte son\n`src/electron/app-manifest.json`. Feature-off (`plugins` / `fleet` =\n`false`) se déclare dans ce JSON via `createAppManifest({ features })`.\n\n### DemoBrand\n\n- `brandId`: `demobrand`\n- généré par `createAppManifest`\n- `domain`: `demobrand.creez.io`\n- `sandbox: true`\n- `defaultAppRoot`: `/opt/docker/creezio/apps/demobrand`\n- feeds, GUIDs et dossiers DL distincts des marques de production\n\n`DemoBrand` sert aux flux factory et aux tests sandbox. Il est exclu par `listProductionBrandIds()`.\n\n## Dépendances @creezio/*\n\nAucune dépendance `@creezio/*` runtime. `@creezio/brand-config` est plutôt une dépendance de base consommée par :\n\n- `@creezio/platform-core` pour les chemins, env et feeds ;\n- `@creezio/shell` en peer dependency pour aligner `bridgeName` et contrats desktop ;\n- `@creezio/api-kernel` indirectement via `platform-core` et directement dans son `package.json` ;\n- les packages Electron/tooling qui packagent les apps desktop.\n\n## Voir aussi\n\n- [AGENTS.md](./AGENTS.md)\n- [docs/FILES.md](./docs/FILES.md)\n","readmeFilename":"README.md"}