deliver($eventType, $payload); // Only queue a real, retryable delivery failure — not a missing-config or // encode error (those won't succeed on retry either). if (!$result->sent && $result->retryable) { WebhookQueue::enqueue($eventType, $payload); } return $result->sent; } /** * Un envoi, sans jamais remettre en file. * * C'est le chemin de la file elle-même : elle décide seule de la relivraison * (tentatives comptées, puis abandon). Passer par {@see send()} ajoutait une * NOUVELLE copie à chaque échec, dont le compteur repartait de zéro — le plafond * de tentatives ne terminait donc jamais rien. Mesuré le 6 octobre 2026 : une * seule mise à jour d'extension relivrée six fois toutes les cinq minutes depuis * le 1er septembre. */ public function deliver(string $eventType, array $payload): DispatchResult { $dispatcher = new WebhookDispatcher( new WpHttpClient(), new WpConfigStore(), new WpClock(), new WpLogger(), SENTINELO_DEFAULT_SAAS_URL ); return $dispatcher->send($eventType, $payload); } }