API courte de broker.js et engine.js
Tout ce qu'un composant ou un point de composition appelle. Les sources complètes sont dans broker.js et engine.js.
Broker
new Broker(catalog, { verbose = false })- Construit le broker sur un catalogue d'union. Linte le catalogue (
validateCatalog) : chaque défaut est une erreur en console, non fatale.verbosetrace réceptions et livraisons. Deux fichiers :public/fw/broker.js(client, ignoreid/session) etfw/broker.js(serveur, les route). register(object, emits = [], receives = []) → boolean- Inscription atomique.
emits:[{ name, version[, revision] }], révision omise = courante.receives:[{ name, version }], jamais de révision. Renvoiefalseet n'inscrit rien si une déclaration est inconnue, si l'objet n'a pas d'instanceNameou si un homonyme est déjà inscrit sur le même message. publish(emitter, message)- Pour chaque clé de l'enveloppe (sauf
idetsession) : vérifie l'inscription de l'émetteur (identité, pas seulement le nom), valide le payload contre la révision déclarée, met en forme canonique, met en file. Puis vide la file si aucun drain n'est en cours. Payload invalide : jeté, violations listées. unregister(object, emits = [], receives = [])- Désinscription immédiate. Refusée pour un homonyme : l'inscription doit appartenir à cet objet.
audit(transits = []) → anomalies[]- Lecture seule.
transits: lesCHANNELdes canaux montés. Rend{ severity, code, name, message, …contexte }. Les codes. Broker.DELIVERY_BUDGET = 1000- Plafond de livraisons par drain : au-delà, cycle probable, file jetée avec erreur.
broker.catalog,broker.verbose,broker.emitters,broker.subscribers- Lisibles. Les deux registres sont indexés par nom de message puis par
instanceName.
engine.js
validate(versionSchema, emittedRevision, payload) → string[]- Valide un payload contre la révision déclarée. Tableau vide = valide. Un défaut de catalogue est rapporté comme une erreur plutôt que levé.
validateCatalog(catalog) → string[]- Lint structurel : versions/révisions/fields bien formés, types connus,
fieldssur les objets etitemssur les listes,patternseulement sur string et compilable,enumdu bon type,defaultvalide,oneOfréférençant des champs optionnels sans default, pas de.dans un nom de champ,upcastFrombien formé, et garantie de forme canonique (un champ requis en révision courante mais omissible plus tôt doit porter undefault). latestRevision(versionSchema) → number- La révision courante : la plus haute. Elle n'est pas stockée, elle est dérivée.
upcastToLatestRevision(versionSchema, emittedRevision, payload) → payload- Complète un payload validé en forme canonique de sa version, par les
default. Nouveau payload, l'entrée n'est pas mutée. Utilisé par le broker à l'émission et par les canaux sur l'entrant. completeToLatestRevision(versionSchema, payload) → payload- Même complétion pour un payload dont la révision est inconnue : typiquement la sortie d'un upcaster de version.
upcast(upcastRule, payload) → payload- Interprète un
upcastFrom:rename, puisdefaults(seulement si absent), puisremove. Chemins séparés par.. canonicalStringify(value) → string- JSON avec clés triées récursivement : deux structures identiques donnent la même chaîne quel que soit l'ordre de déclaration. À utiliser pour comparer deux schémas, jamais
JSON.stringify. fingerprintOf(shared, clientEmits, clientReceives) → string- Empreinte de contenu d'un contrat de canal (FNV-1a 64 bits sur la forme canonique des versions et des listes de transit). Les exemples n'y entrent pas. Outillage ; le millésime du catalogue reste manuel.
Canal WebSocket
- client :
new WebSocketChannel(broker, instanceName, { socket, channel, reconnect?, storage?, handshakeTimeoutMs? }) ready() → Promiserésolue après le premier handshake accepté.close()arrête la reconnexion et ferme le lien.- serveur :
new WebSocketChannel(broker, instanceName, { wss, channel, sessionTtlMs?, handshakeTimeoutMs?, maxFrameBytes? }) - S'inscrit au constructeur ; accepte les connexions de
wss. Pas dedestroy().