Il n'existait pas de SDK TypeScript pour Moneroo. Alors je l'ai construit.

3 min read29 avril 2026#moneroo#sdk#typescript#npm#afrique#paiement#open-source

GitHub →npm →


Il n'existait pas de SDK TypeScript pour Moneroo. Alors je l'ai construit.

Moneroo est une API de paiement africaine — Mobile Money, cartes, plusieurs pays, devises locales (XOF, XAF...).

Si tu construis un produit pour le marché africain francophone, c'est l'une des rares options sérieuses. Le problème : aucun SDK TypeScript n'existait.

Pour intégrer Moneroo dans un projet Node.js, la seule option c'était l'API REST à la main. Gérer les headers d'autorisation. Parser les erreurs. Implémenter la vérification HMAC des webhooks toi-même. Sans types, sans autocomplétion, sans filet de sécurité.

Alors j'ai construit le SDK.


Ce que c'est

moneroo — v0.1.1 — disponible sur npm.

Code source : github.com/aboudou-cto-bloko/moneroo-tools

npm install moneroo

Zéro dépendance externe. Node.js 18+ a fetch nativement et node:crypto pour les webhooks. Pas besoin d'axios, pas de node-fetch, pas de bibliotèques crypto tierces.


Comment ça s'utilise

import { Moneroo } from 'moneroo';
 
const moneroo = new Moneroo({
  secretKey: process.env.MONEROO_SECRET_KEY!,
  webhookSecret: process.env.MONEROO_WEBHOOK_SECRET,
});

Initialiser un paiement :

const { data } = await moneroo.payments.initialize({
  amount: 5000,     // XOF — pas de centimes (voir note ci-dessous)
  currency: 'XOF',
  description: 'Commande #123',
  return_url: 'https://monapp.com/confirmation',
  customer: {
    email: 'client@example.com',
    first_name: 'Koffi',
  },
});
 
// Rediriger vers data.checkout_url

Note XOF : les devises d'Afrique de l'Ouest (XOF, XAF, GNF, CDF) n'ont pas de sous-unité. 5 000 FCFA = 5000. Pas 500000. C'est une erreur que font tous ceux qui viennent de Stripe ou PayPal. L'insight complet sur ce bug →

Vérifier un paiement avant de créditer :

const { data } = await moneroo.payments.verify('pay_xxx');
if (data.status === 'success') {
  // créditer — jamais sur le seul webhook
}

Webhooks — vérification de signature :

const event = moneroo.webhooks.constructEvent(rawBody, signature);
// Lance une erreur si la signature est invalide
// event.type === 'payment.success'

Les décisions d'architecture

Zéro dépendance. Node 18 a tout ce qu'il faut. Une dépendance de moins c'est un vecteur de failles potentielles en moins, un fichier node_modules plus léger, et une surface de maintenance réduite.

Dual export ESM + CJS. Que tu sois sur un projet ESM moderne ou un setup CommonJS legacy — ça marche sans configuration.

"exports": {
  ".": {
    "import": "./dist/esm/index.js",
    "require": "./dist/cjs/index.cjs",
    "types": "./dist/types/index.d.ts"
  }
}

TypeScript strict partout. Les méthodes de paiement acceptées (mtn_bj, wave_sn, orange_ci...), les statuts de transaction, les structures de payout — tout est typé. Pas de any dans les données critiques.


Ce que ça change en pratique

Avec le SDK, le code Moneroo dans un projet Next.js + Convex se réduit à la logique métier. Les headers, le parsing d'erreurs, la vérification HMAC — tout ça disparaît.

Si tu veux voir comment intégrer ce SDK dans un flux de paiement complet Next.js + Convex (mutation → action → webhook → confirmation), le tutoriel complet est ici : Intégrer Moneroo dans Next.js + Convex →


Monorepo

Le SDK vit dans moneroo-tools — un monorepo pnpm avec deux packages :

moneroo-tools/
├── packages/sdk/   → moneroo v0.1.1
└── packages/mcp/   → moneroo-mcp v0.4.2

Le deuxième package, c'est un serveur MCP — une interface complètement différente pour piloter Moneroo depuis un assistant IA en langage naturel. Ce que ça permet →


C'est v0.1.1. Paiements, payouts, webhooks sont couverts. Si tu tombes sur un cas edge non géré — ouvre une issue.