UNPKG

@fnlb-project/stanza

Version:

Modern XMPP in the browser, with a JSON API

39 lines (38 loc) 1.59 kB
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://')) }; }; }