UNPKG

@das3mical/adonis-mercure

Version:

Mercure Hub integration for AdonisJS v6 — publish real-time updates via Server-Sent Events (SSE)

43 lines (42 loc) 1.4 kB
import { TokenGenerator } from './token_generator.js'; import { Publisher } from './publisher.js'; const DEFAULT_TIMEOUT = 5000; export class Mercure { #config; #tokenGenerator; #publisher; constructor(config) { this.#config = config; this.#tokenGenerator = new TokenGenerator(config); this.#publisher = new Publisher(config); } generate(payload) { return this.#tokenGenerator.generate(payload); } generateSubscribeToken(topics) { return this.#tokenGenerator.generateSubscribeToken(topics); } send(topics, data = {}, isPrivateOrOptions = false) { const options = typeof isPrivateOrOptions === 'boolean' ? { private: isPrivateOrOptions } : isPrivateOrOptions; return this.#publisher.publish(topics, data, options); } async ping() { const timeout = this.#config.http?.timeout ?? DEFAULT_TIMEOUT; const controller = timeout > 0 ? new AbortController() : null; const timer = controller ? setTimeout(() => controller.abort(), timeout) : null; try { await fetch(this.#config.endpoint, { method: 'HEAD', signal: controller?.signal, }); return true; } catch { return false; } finally { if (timer) clearTimeout(timer); } } }