|
@@ -4,7 +4,7 @@ import _converse from '../../shared/_converse.js';
|
|
|
import api from '../../shared/api/index.js';
|
|
|
import converse from '../../shared/api/public.js';
|
|
|
import { parseErrorStanza } from '../../shared/parsers.js';
|
|
|
-import log from "@converse/log";
|
|
|
+import log from '@converse/log';
|
|
|
import sizzle from 'sizzle';
|
|
|
import { createStore } from '../../utils/storage.js';
|
|
|
|
|
@@ -20,11 +20,11 @@ const { Strophe, u } = converse.env;
|
|
|
* See XEP-0030: https://xmpp.org/extensions/xep-0030.html
|
|
|
*/
|
|
|
class DiscoEntity extends Model {
|
|
|
- get idAttribute () {
|
|
|
+ get idAttribute() {
|
|
|
return 'jid';
|
|
|
}
|
|
|
|
|
|
- initialize (_, options) {
|
|
|
+ initialize(_, options) {
|
|
|
super.initialize();
|
|
|
this.waitUntilFeaturesDiscovered = getOpenPromise();
|
|
|
this.waitUntilItemsFetched = getOpenPromise();
|
|
@@ -56,7 +56,7 @@ class DiscoEntity extends Model {
|
|
|
* @param {String} category - The identity category
|
|
|
* @param {String} type - The identity type
|
|
|
*/
|
|
|
- async getIdentity (category, type) {
|
|
|
+ async getIdentity(category, type) {
|
|
|
await this.waitUntilFeaturesDiscovered;
|
|
|
return this.identities.findWhere({
|
|
|
'category': category,
|
|
@@ -70,14 +70,14 @@ class DiscoEntity extends Model {
|
|
|
* @method _converse.DiscoEntity#getFeature
|
|
|
* @param {String} feature - The feature that might be supported.
|
|
|
*/
|
|
|
- async getFeature (feature) {
|
|
|
+ async getFeature(feature) {
|
|
|
await this.waitUntilFeaturesDiscovered;
|
|
|
if (this.features.findWhere({ var: feature })) {
|
|
|
return this;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- onFeatureAdded (feature) {
|
|
|
+ onFeatureAdded(feature) {
|
|
|
feature.entity = this;
|
|
|
/**
|
|
|
* Triggered when Converse has learned of a service provided by the XMPP server.
|
|
@@ -89,7 +89,7 @@ class DiscoEntity extends Model {
|
|
|
api.trigger('serviceDiscovered', feature);
|
|
|
}
|
|
|
|
|
|
- onFieldAdded (field) {
|
|
|
+ onFieldAdded(field) {
|
|
|
field.entity = this;
|
|
|
/**
|
|
|
* Triggered when Converse has learned of a disco extension field.
|
|
@@ -100,7 +100,7 @@ class DiscoEntity extends Model {
|
|
|
api.trigger('discoExtensionFieldDiscovered', field);
|
|
|
}
|
|
|
|
|
|
- async fetchFeatures (options) {
|
|
|
+ async fetchFeatures(options) {
|
|
|
if (options.ignore_cache) {
|
|
|
this.queryInfo();
|
|
|
} else {
|
|
@@ -121,7 +121,7 @@ class DiscoEntity extends Model {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- async queryInfo () {
|
|
|
+ async queryInfo() {
|
|
|
let stanza;
|
|
|
try {
|
|
|
stanza = await api.disco.info(this.get('jid'), null);
|
|
@@ -136,8 +136,8 @@ class DiscoEntity extends Model {
|
|
|
/**
|
|
|
* @param {Element} stanza
|
|
|
*/
|
|
|
- onDiscoItems (stanza) {
|
|
|
- sizzle(`query[xmlns="${Strophe.NS.DISCO_ITEMS}"] item`, stanza).forEach(item => {
|
|
|
+ onDiscoItems(stanza) {
|
|
|
+ sizzle(`query[xmlns="${Strophe.NS.DISCO_ITEMS}"] item`, stanza).forEach((item) => {
|
|
|
if (item.getAttribute('node')) {
|
|
|
// XXX: Ignore nodes for now.
|
|
|
// See: https://xmpp.org/extensions/xep-0030.html#items-nodes
|
|
@@ -151,14 +151,14 @@ class DiscoEntity extends Model {
|
|
|
} else {
|
|
|
api.disco.entities.create({
|
|
|
jid,
|
|
|
- 'parent_jids': [this.get('jid')],
|
|
|
- 'name': item.getAttribute('name'),
|
|
|
+ parent_jids: [this.get('jid')],
|
|
|
+ name: item.getAttribute('name'),
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- async queryForItems () {
|
|
|
+ async queryForItems() {
|
|
|
if (this.identities.where({ category: 'server' }).length === 0) {
|
|
|
// Don't fetch features and items if this is not a
|
|
|
// server or a conference component.
|
|
@@ -171,8 +171,8 @@ class DiscoEntity extends Model {
|
|
|
/**
|
|
|
* @param {Element} stanza
|
|
|
*/
|
|
|
- async onInfo (stanza) {
|
|
|
- Array.from(stanza.querySelectorAll('identity')).forEach(identity => {
|
|
|
+ async onInfo(stanza) {
|
|
|
+ Array.from(stanza.querySelectorAll('identity')).forEach((identity) => {
|
|
|
this.identities.create({
|
|
|
'category': identity.getAttribute('category'),
|
|
|
'type': identity.getAttribute('type'),
|
|
@@ -180,9 +180,9 @@ class DiscoEntity extends Model {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- sizzle(`x[type="result"][xmlns="${Strophe.NS.XFORM}"]`, stanza).forEach(form => {
|
|
|
+ sizzle(`x[type="result"][xmlns="${Strophe.NS.XFORM}"]`, stanza).forEach((form) => {
|
|
|
const data = {};
|
|
|
- sizzle('field', form).forEach(field => {
|
|
|
+ sizzle('field', form).forEach((field) => {
|
|
|
data[field.getAttribute('var')] = {
|
|
|
'value': field.querySelector('value')?.textContent,
|
|
|
'type': field.getAttribute('type'),
|
|
@@ -196,7 +196,7 @@ class DiscoEntity extends Model {
|
|
|
}
|
|
|
this.waitUntilItemsFetched.resolve();
|
|
|
|
|
|
- Array.from(stanza.querySelectorAll('feature')).forEach(feature => {
|
|
|
+ Array.from(stanza.querySelectorAll('feature')).forEach((feature) => {
|
|
|
this.features.create({
|
|
|
'var': feature.getAttribute('var'),
|
|
|
'from': stanza.getAttribute('from'),
|
|
@@ -204,7 +204,7 @@ class DiscoEntity extends Model {
|
|
|
});
|
|
|
|
|
|
// XEP-0128 Service Discovery Extensions
|
|
|
- sizzle('x[type="result"][xmlns="jabber:x:data"] field', stanza).forEach(field => {
|
|
|
+ sizzle('x[type="result"][xmlns="jabber:x:data"] field', stanza).forEach((field) => {
|
|
|
this.fields.create({
|
|
|
'var': field.getAttribute('var'),
|
|
|
'value': field.querySelector('value')?.textContent,
|