24 lines
705 B
JavaScript
24 lines
705 B
JavaScript
/**
|
|
* 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,
|
|
};
|
|
}
|