@fnlb-project/stanza
Version:
Modern XMPP in the browser, with a JSON API
39 lines (38 loc) • 1.59 kB
JavaScript
import { NS_ALT_CONNECTIONS_WEBSOCKET } from '../Namespaces';
export default function (client) {
client.discoverBindings = async (server) => {
const websocket = new Set();
const discoverHostMeta = client.resolver
.getHostMeta(server)
.then(xrd => {
var _a;
for (const link of (_a = xrd.links) !== null && _a !== void 0 ? _a : []) {
if (link.href && link.rel === NS_ALT_CONNECTIONS_WEBSOCKET) {
websocket.add(link.href);
}
}
})
.catch(err => console.error(err));
const discoverDNS = !client.config.allowAlternateDNSDiscovery
? Promise.resolve()
: client.resolver
.resolveTXT(`_xmppconnect.${server}`)
.then(txtRecords => {
for (const group of txtRecords) {
for (const value of group) {
if (value.startsWith('_xmpp-client-websocket=')) {
const url = value.substring(value.indexOf('=') + 1);
if (url) {
websocket.add(url);
}
}
}
}
})
.catch(err => console.error(err));
await Promise.all([discoverHostMeta, discoverDNS]).catch(err => console.error(err));
return {
websocket: [...websocket].filter(url => url.startsWith('wss://'))
};
};
}