Module SDK — Guide complet
Créez, compilez, signez et publiez votre premier module BizzOptima avec le CLI officiel.
Le Module SDK BizzOptima vous permet de créer des extensions métier complètes intégrées nativement dans l'application desktop. Chaque module est un bundle IIFE autonome signé et distribué via le marketplace.
Prérequis
- Node.js 20+
- Un compte développeur BizzOptima
- Connaissance de React et TypeScript
1 — Créer un compte développeur
bizzoptima loginSi vous n'avez pas encore de compte, inscrivez-vous depuis l'espace développeurs ou via le CLI :
# Installer le CLI globalement
npm install -g bizzoptima-cli
# Se connecter (ou créer un compte sur developers.bizzoptima.com)
bizzoptima login2 — Initialiser un module
bizzoptima init mon-module
cd mon-module
npm installLe CLI génère la structure complète avec le manifest v2, un composant React fonctionnel et la configuration TypeScript :
mon-module/
├── src/
│ └── index.tsx ← composant + déclaration BizzOptimaModules
├── manifest.json ← métadonnées, permissions, sécurité
├── package.json
├── tsconfig.json
└── .bizzmodignore3 — Le manifest.json
Le manifest v2 déclare les capabilities requises, les restrictions d'accès inter-modules et les métadonnées marketplace :
{
"id": "mon-module",
"name": "Mon Module",
"version": "1.0.0",
"author": "Votre Nom",
"license": "MIT",
"minAppVersion": "1.0.0",
"entryPoint": "dist/index.js",
"permissions": [
"db:read",
"db:write",
"events:subscribe",
"events:emit"
],
"sensitiveData": false,
"trustedCallers": []
}4 — Coder le module
Chaque module reçoit une instance de BizzOptimaModuleAPI scopée à son moduleId. Utilisez les hooks React du SDK :
import { ModuleRoot, useDB, useToast, usePermission } from '@bizzoptima/module-sdk';
function MyScreen() {
const { data: items, loading } = useDB('SELECT * FROM my_items');
const toast = useToast();
const canWrite = usePermission('db:write');
return (
<div>
{loading ? 'Chargement…' : items.map(i => <div key={i.id}>{i.name}</div>)}
{canWrite && (
<button onClick={() => toast('Succès', { type: 'success' })}>
Action
</button>
)}
</div>
);
}
// Déclaration globale (chargée par le desktop)
window.BizzOptimaModules['mon-module'] = {
manifest: { id: 'mon-module', name: 'Mon Module', version: '1.0.0' },
init(api) {
// setup: DB migrations, event subscriptions, inter-module bridges
},
Screen() {
return <ModuleRoot api={window.__BIZZOPTIMA_API__}><MyScreen /></ModuleRoot>;
},
};5 — Sécurité inter-modules
Pour les modules manipulant des données sensibles (paiements, santé), restreignez les appels entrants avec trustedCallers dans le manifest et createSecureHandler dans le code :
import { createSecureHandler, createPaymentGuard } from '@bizzoptima/module-sdk';
// Dans init() :
const guardPayment = createPaymentGuard(api, {
allowedCallers: ['quick_cashier', 'sales'],
});
api.interModule.expose(
'processPayment',
createSecureHandler(
async (params, caller) => {
guardPayment(caller); // throws si caller non autorisé
// ... logique de paiement
},
{ moduleId: 'mon-module', allowedCallers: ['quick_cashier', 'sales'] },
),
);6 — Build
bizzoptima build
# → Compile TypeScript avec tsc
# → Crée mon-module-1.0.0.bizzmod (zip)7 — Signature cloud
La signature est effectuée par le serveur BizzOptima avec la clé Ed25519 privée. Votre compte développeur doit être actif :
bizzoptima sign
# → Envoie le .bizzmod au serveur
# → Reçoit le bundle signé (signature.json injectée)
# → Écrase le fichier local8 — Publication
bizzoptima publish
# → Upload vers Firebase Storage
# → Crée le document Firestore dans developer_modules
# → Soumet pour review par l'équipe BizzOptimaUne fois approuvé, votre module apparaît dans le marketplace pour les utilisateurs ayant le plan compatible.
Référence complète du SDK
Consultez la SDK Reference complète pour la liste exhaustive de toutes les APIs disponibles, leurs signatures TypeScript et leurs prérequis de capability.