-
Notifications
You must be signed in to change notification settings - Fork 378
/
Copy pathindex.js
35 lines (29 loc) · 857 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
import xml from "@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);
entity._ready(false);
return jid;
}
function route({ iqCaller }, resource) {
return async ({ entity }, next) => {
resource = typeof resource === "function" ? await resource() : resource;
await bind(entity, iqCaller, resource);
next();
};
}
export default function resourceBinding(
{ streamFeatures, iqCaller },
resource,
) {
streamFeatures.use("bind", NS, route({ iqCaller }, resource));
}