Aller au contenu principal

SDK Node.js pour MONCRENEAU

Le SDK Node.js officiel pour intégrer MONCRENEAU dans vos applications Express, NestJS ou Node.js standard.

Installation

npm install @moncreneau/api
# ou
yarn add @moncreneau/api
# ou
pnpm add @moncreneau/api

Configuration

Import ES6

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

Require CommonJS

const { MoncreneauClient } = require('moncreneau');

const client = new MoncreneauClient('YOUR_API_KEY');

Avec variables d'environnement

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient(process.env.MONCRENEAU_API_KEY);

Fichier .env :

MONCRENEAU_API_KEY=YOUR_API_KEY
MONCRENEAU_BASE_URL=https://mc-prd.duckdns.org/api/v1

Exemples d'utilisation

Lister les départements

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function listDepartments() {
try {
const departments = await client.departments.list();

departments.forEach(dept => {
console.log(`ID: ${dept.id} - ${dept.name} (${dept.address})`);
});
} catch (error) {
console.error('Erreur:', error.message);
}
}

listDepartments();

Créer un rendez-vous

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function createAppointment() {
try {
const appointment = await client.appointments.create({
departmentId: 5,
dateTime: '2026-02-15T10:00:00',
name: 'Amadou Diallo'
});

console.log('✅ Rendez-vous créé!');
console.log('ID:', appointment.id);
console.log('QR Code:', appointment.qrCode);
console.log('Statut:', appointment.status);

} catch (error) {
if (error.code === 'INSUFFICIENT_CREDITS') {
console.error('❌ Crédits insuffisants:', error.message);
} else {
console.error('❌ Erreur:', error.message);
}
}
}

createAppointment();

Vérifier la disponibilité

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function checkAvailability() {
try {
const availability = await client.departments.checkAvailability(
5,
'2026-02-15T10:00:00'
);

if (availability.available) {
console.log('✅ Créneau disponible!');
console.log('Places restantes:', availability.remainingSlots);
} else {
console.log('❌ Créneau indisponible');
console.log('Raison:', availability.unavailabilityReason);
}
} catch (error) {
console.error('Erreur:', error.message);
}
}

checkAvailability();

Annuler un rendez-vous

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function cancelAppointment(appointmentId) {
try {
const cancelled = await client.appointments.cancel(appointmentId);

console.log('✅ Rendez-vous annulé');
console.log('Statut:', cancelled.status);
console.log('1 crédit remboursé');

} catch (error) {
console.error('❌ Erreur:', error.message);
}
}

cancelAppointment(123);

Intégration Express

import express from 'express';
import { MoncreneauClient } from 'moncreneau';

const app = express();
app.use(express.json());

const client = new MoncreneauClient(process.env.MONCRENEAU_API_KEY);

// Endpoint pour créer un RDV
app.post('/appointments', async (req, res) => {
try {
const { departmentId, dateTime, name } = req.body;

const appointment = await client.appointments.create({
departmentId,
dateTime,
name
});

res.status(201).json(appointment);
} catch (error) {
if (error.code === 'INSUFFICIENT_CREDITS') {
return res.status(402).json({ error: error.message });
}
res.status(500).json({ error: error.message });
}
});

// Endpoint pour vérifier disponibilité
app.get('/departments/:id/availability', async (req, res) => {
try {
const { id } = req.params;
const { dateTime } = req.query;

const availability = await client.departments.checkAvailability(
parseInt(id),
dateTime
);

res.json(availability);
} catch (error) {
res.status(500).json({ error: error.message });
}
});

app.listen(3000, () => {
console.log('Server running on port 3000');
});

Gestion des erreurs

Le SDK utilise des erreurs typées :

import { 
MoncreneauClient,
InsufficientCreditsError,
ValidationError,
NotFoundError,
UnauthorizedError
} from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

try {
const appointment = await client.appointments.create(data);
} catch (error) {
if (error instanceof InsufficientCreditsError) {
// Pas assez de crédits
console.error('Crédits insuffisants:', error.message);
} else if (error instanceof ValidationError) {
// Validation échouée
console.error('Validation:', error.errors);
} else if (error instanceof NotFoundError) {
// Ressource introuvable
console.error('Non trouvé:', error.message);
} else if (error instanceof UnauthorizedError) {
// API Key invalide
console.error('API Key invalide');
} else {
// Erreur générique
console.error('Erreur:', error.message);
}
}

Configuration avancée

Timeout et retry

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient({
apiKey: 'YOUR_API_KEY',
baseUrl: 'https://mc-prd.duckdns.org/api/v1',
timeout: 30000, // 30 secondes
maxRetries: 3,
retryDelay: 1000 // 1 seconde
});

Webhooks

Vérifiez la signature des webhooks :

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

app.post('/webhooks/moncreneau', (req, res) => {
const signature = req.headers['x-moncreneau-signature'];
const payload = JSON.stringify(req.body);

const isValid = client.webhooks.verifySignature(
payload,
signature,
process.env.WEBHOOK_SECRET
);

if (!isValid) {
return res.status(401).send('Invalid signature');
}

// Traiter l'événement
const event = req.body;
console.log('Event:', event.type, event.data);

res.json({ received: true });
});

TypeScript Support

Le SDK est entièrement typé :

import { 
MoncreneauClient,
Department,
Appointment,
CreateAppointmentRequest,
SlotAvailability
} from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function example(): Promise<void> {
const departments: Department[] = await client.departments.list();

const request: CreateAppointmentRequest = {
departmentId: 5,
dateTime: '2026-02-15T10:00:00',
name: 'Amadou Diallo'
};

const appointment: Appointment = await client.appointments.create(request);
}

Ressources

Le SDK Node.js MONCRENEAU est disponible sur npm. Pour des exemples d'intégration, consultez la section Examples.