forked from xmppjs/xmpp.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
38 lines (30 loc) · 886 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"use strict";
const xml = require("@xmpp/xml");
/*
* References
* https://xmpp.org/rfcs/rfc6120.html#bind
*/
const NS = "urn:ietf:params:xml:ns:xmpp-bind";
function makeBindElement(resource) {
return xml("bind", { xmlns: NS }, resource && xml("resource", {}, resource));
}
async function bind(entity, iqCaller, resource) {
const result = await iqCaller.set(makeBindElement(resource));
const jid = result.getChildText("jid");
entity._jid(jid);
return jid;
}
function route({ iqCaller }, resource) {
return async ({ entity }, next) => {
await (typeof resource === "function"
? resource((resource) => bind(entity, iqCaller, resource))
: bind(entity, iqCaller, resource));
next();
};
}
module.exports = function resourceBinding(
{ streamFeatures, iqCaller },
resource,
) {
streamFeatures.use("bind", NS, route({ iqCaller }, resource));
};