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. verbose trace réceptions et livraisons. Deux fichiers : public/fw/broker.js (client, ignore id/session) et fw/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. Renvoie false et n'inscrit rien si une déclaration est inconnue, si l'objet n'a pas d'instanceName ou si un homonyme est déjà inscrit sur le même message.
publish(emitter, message)
Pour chaque clé de l'enveloppe (sauf id et session) : 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 : les CHANNEL des 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, fields sur les objets et items sur les listes, pattern seulement sur string et compilable, enum du bon type, default valide, oneOf référençant des champs optionnels sans default, pas de . dans un nom de champ, upcastFrom bien formé, et garantie de forme canonique (un champ requis en révision courante mais omissible plus tôt doit porter un default).
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, puis defaults (seulement si absent), puis remove. 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() → Promise ré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 de destroy().