@mostajs/sms-lite
v0.1.0
Published
Transport SMS minimal ZÉRO-DÉPENDANCE (drivers façon dialectes : console + passerelle HTTP via fetch). Pendant SMS de @mostajs/smtp-lite. S'enregistre comme canal de @mostajs/broadcast (smsBroadcastChannel).
Maintainers
Readme
@mostajs/sms-lite
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later
Transport SMS minimal zéro-dépendance : envoie un texto au numéro de téléphone mobile du destinataire. Pendant SMS de @mostajs/smtp-lite (email).
Qu'est-ce qu'un SMS ici ? Un message texte vers un numéro de mobile (réseau cellulaire). Ce module n'émet pas depuis une carte SIM : il appelle une passerelle SMS (API HTTP) — opérateur algérien (Mobilis/Djezzy/Ooredoo via agrégateur), Twilio, Vonage… Le driver
consoleSmssimule (dev) ;httpSmsappelle la vraie passerelle. (Un driver modem GSM/AT ou WhatsApp peut être ajouté — façon dialectes.)
Drivers (façon dialectes)
| Driver | Usage |
|---|---|
| consoleSms() | dev / tests — journalise, n'envoie rien |
| httpSms({ url, headers?, build?, parseId? }) | passerelle HTTP réelle (zéro-dép : fetch) |
Usage
import { createSmsTransport, httpSms, consoleSms, smsBroadcastChannel } from '@mostajs/sms-lite';
// Dev :
const sms = createSmsTransport({ driver: consoleSms() });
// Prod (ex. passerelle générique) :
// const sms = createSmsTransport({ driver: httpSms({ url: process.env.SMS_GATEWAY_URL, headers: { authorization: 'Bearer '+process.env.SMS_API_KEY } }) });
await sms.send({ to: '+213550000000', text: 'Votre RDV est confirmé.' });
// Branchement à @mostajs/broadcast (canal 'sms') :
import { registerChannel } from '@mostajs/broadcast';
registerChannel(smsBroadcastChannel(sms)); // puis sendVia('sms', { to, text })Configuration des clés API SMS (.env)
Les identifiants de passerelle ne se codent jamais en dur — ils vivent dans le .env (lus par @mostajs/config ou process.env). smsFromEnv() choisit le driver selon les variables présentes :
# ── Option A — passerelle HTTP générique (ex. agrégateur DZ) ──
SMS_GATEWAY_URL=https://api.passerelle.example/send
SMS_API_KEY=VOTRE_CLE_API # → en-tête Authorization: Bearer …
SMS_FROM=Salsabil # expéditeur (si supporté)
# ── Option B — Twilio (international, vers l'Algérie) ──
SMS_PROVIDER=twilio
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_FROM=+1XXXXXXXXXX
# ── Aucune des deux → driver 'console' (dev, n'émet rien) ──import { smsFromEnv } from '@mostajs/sms-lite';
const sms = smsFromEnv(); // driver choisi d'après le .env
await sms.send({ to: '+213790373590', text: 'Convocation : RDV le 01/07.' });Convention (comme SMTP) : en production, renseigner la clé directement dans le
.envdu serveur (jamais commitée), puis redémarrer le process. Le format exact du corps/headers d'un agrégateur DZ s'ajuste viahttpSms({ build, headers, parseId }).
API
consoleSms()·httpSms({url,method?,headers?,build?,parseId?})→ driver{ name, send({to,text,from?}) → {ok,id?,error?} }createSmsTransport({ driver? })→{ driver, send(msg) }(défaut : console)smsBroadcastChannel(transport,{key?,label?})→ canal@mostajs/broadcast{ key:'sms', label, send }
Tests
npm test (@mostajs/mjs-unit, 4 tests). Envoi réseau réel non testé en unitaire (passerelle externe).
