/** * References * https://xmpp.org/rfcs/rfc6120.html#streams-negotiation Stream Negotiation * https://xmpp.org/extensions/xep-0170.html XEP-0170: Recommended Order of Stream Feature Negotiation * https://xmpp.org/registrar/stream-features.html XML Stream Features */ export default function streamFeatures({ middleware }) { function use(name, xmlns, handler) { return middleware.use((ctx, next) => { const { stanza } = ctx; if (!stanza.is("features", "http://etherx.jabber.org/streams")) return next(); const feature = stanza.getChild(name, xmlns); if (!feature) return next(); return handler(ctx, next, feature); }); } return { use, }; }