Le canal, c'est votre framework de test
Sur ce marché, on n'intègre pas une API : on installe un paquet dans son framework. Quatre paquets sont écrits, pour Node, Playwright, Cypress et le premier test. Aucun n'est encore publié sur npm, et cette page montre ce qui marche dès aujourd'hui sans eux.
Une API HTTP, et rien à installer
L'attente se fait côté serveur et l'extraction à la réception : un test appelle la recherche de messages sans rien installer. Voici un parcours de vérification par e-mail complet, en Playwright, sans un seul paquet de Facteur.
import { expect, test } from '@playwright/test';
const INBOX = 'j3k9x2mq';
// Reste ouverte jusqu'à l'arrivée du message, trente secondes au plus.
async function waitForMail(sentTo: string) {
const search = new URLSearchParams({ inbox: INBOX, sentTo, wait: '30000' });
const response = await fetch('https://api.facteur.eu/v1/messages?' + search, {
headers: { authorization: 'Bearer ' + process.env.FACTEUR_API_KEY },
});
const { messages } = await response.json();
if (!messages[0]) throw new Error('Rien n\'est arrivé pour ' + sentTo);
return messages[0];
}
test('le lien de vérification active le compte', async ({ page }) => {
const tag = 'run-' + Date.now();
// Lancée avant le clic : elle répond dès que le message arrive.
const arriving = waitForMail('signup+' + tag);
await page.goto('/signup');
await page.getByLabel('Email').fill('signup+' + tag + '@' + INBOX + '.inbox.facteur.eu');
await page.getByRole('button', { name: 'Créer mon compte' }).click();
const message = await arriving;
// Le status avant tout champ tiré du corps du message.
expect(message.status).toBe('parsed');
await page.goto(message.links[0]);
await expect(page.getByText('Compte vérifié')).toBeVisible();
});
Quatre lignes qui comptent
La requête part avant le clic
Elle attend, et répond à l'instant où le message arrive, pas à l'échéance. Lancée après, elle courrait après un message peut-être déjà là.
Le sous-adressage sépare les tests
Tout ce qui suit le « + » est à vous. C'est ce qui permet à deux tests de partager une inbox sans se voler leurs messages.
On lit status avant tout champ dérivé
Un message accepté existe un instant avant d'être lu : il n'a alors ni sujet, ni code, ni liens. Par défaut, la recherche ne rend que les messages déjà lus, à l'état parsed.
La clé se lit dans l'environnement
Jamais écrite dans le test, jamais passée en argument : FACTEUR_API_KEY. Les paquets reprennent la même convention.
Quatre paquets écrits, aucun publié
Chaque paquet est dans le dépôt de Facteur, avec ses tests. Aucun n'est encore publié sur npm : la publication suivra la mise en service de l'API.
| Paquet | Nom sur npm | État |
|---|---|---|
| Une bibliothèque Node minimale Ouvrir une inbox, attendre un message, le lire avec ce qui en a été extrait, télécharger une pièce jointe. Aucune dépendance à l'exécution. | @facteur-eu/sdk | Écrit, pas encore publié |
| Un plugin Playwright, pas encore publié Une adresse dérivée du test lui-même : deux tests en parallèle ne lisent jamais le même courrier, et un test rejoué ne relit pas celui de sa première tentative. L'attente s'arrête dans le budget du test, et le message reçu est attaché au rapport. | playwright-facteur | Écrit, pas encore publié |
| Un plugin Cypress, pas encore publié Une adresse par test et une commande qui attend le message. La clé reste dans Node, hors du navigateur. | cypress-facteur | Écrit, pas encore publié |
| Un initialiseur npm create Deux questions, puis un premier test Playwright ou Cypress qui attend un e-mail et lit son code. | create-facteur | Écrit, pas encore publié |
-
La publication suivra la mise en service de l'API : un paquet installé avant viserait un service qui ne répond pas encore.
-
Les quatre noms existent déjà sur npm, avec des versions qui visent une ancienne API de Facteur. Ne les installez pas : elles ne marchent pas avec le service d'aujourd'hui.
-
En attendant, les guides du portail des développeurs appellent l'API en HTTP. Ils continueront de marcher le jour où les paquets seront publiés.
Rien à installer pour un premier test
Une clé en lecture seule, une inbox, et l'exemple ci-dessus. L'offre gratuite ne demande pas de carte bancaire.