Refactor logging out into its own module

So that we don't need to `_converse` obj in order to log messages
This commit is contained in:
JC Brand 2019-11-06 11:01:34 +01:00
parent 4a70d97b4e
commit caadb24310
29 changed files with 320 additions and 332 deletions

View File

@ -230,9 +230,9 @@
'from': contact_jid,
'type':'chat'
}).c('body').t("Meet me at the dance");
spyOn(_converse, 'log');
spyOn(converse.env.log, 'warn');
_converse.connection._dataRecv(test_utils.createRequest(msg));
expect(_converse.log).toHaveBeenCalledWith(`Ignoring alleged MAM message from ${msg.nodeTree.getAttribute('from')}`, Strophe.LogLevel.WARN);
expect(converse.env.log.warn).toHaveBeenCalledWith(`Ignoring alleged MAM message from ${msg.nodeTree.getAttribute('from')}`);
msg = $msg({'id': _converse.connection.getUniqueId(), 'to': _converse.bare_jid})
.c('result', {'xmlns': 'urn:xmpp:mam:2', 'queryid':queryid, 'id': _converse.connection.getUniqueId()})

View File

@ -518,7 +518,7 @@
// Ideally we wouldn't have to filter out headline
// messages, but Prosody gives them the wrong 'type' :(
sinon.spy(_converse, 'log');
sinon.spy(converse.env.log, 'info');
sinon.spy(_converse.api.chatboxes, 'get');
sinon.spy(u, 'isHeadlineMessage');
const msg = $msg({
@ -528,15 +528,14 @@
id: (new Date()).getTime()
}).c('body').t("This headline message will not be shown").tree();
await _converse.handleMessageStanza(msg);
expect(_converse.log.calledWith(
"onMessage: Ignoring incoming headline message from JID: montague.lit",
Strophe.LogLevel.INFO
expect(converse.env.log.info.calledWith(
"onMessage: Ignoring incoming headline message from JID: montague.lit"
)).toBeTruthy();
expect(u.isHeadlineMessage.called).toBeTruthy();
expect(u.isHeadlineMessage.returned(true)).toBeTruthy();
expect(_converse.api.chatboxes.get.called).toBeFalsy();
// Remove sinon spies
_converse.log.restore();
converse.env.log.info.restore();
_converse.api.chatboxes.get.restore();
u.isHeadlineMessage.restore();
done();
@ -1853,7 +1852,7 @@
await test_utils.waitForRoster(_converse, 'current');
await u.waitUntil(() => _converse.rosterview.el.querySelectorAll('.roster-group').length)
// Send a message from a different resource
spyOn(_converse, 'log');
spyOn(converse.env.log, 'info');
spyOn(_converse.api.chatboxes, 'create').and.callThrough();
_converse.filter_by_resource = true;
const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
@ -1866,9 +1865,9 @@
.c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
await _converse.handleMessageStanza(msg);
expect(_converse.log).toHaveBeenCalledWith(
"onMessage: Ignoring incoming message intended for a different resource: romeo@montague.lit/some-other-resource",
Strophe.LogLevel.INFO);
expect(converse.env.log.info).toHaveBeenCalledWith(
"onMessage: Ignoring incoming message intended for a different resource: romeo@montague.lit/some-other-resource",
);
expect(_converse.api.chatboxes.create).not.toHaveBeenCalled();
_converse.filter_by_resource = false;

View File

@ -35,11 +35,10 @@
`);
const view = _converse.api.chatviews.get(muc_jid);
await view.model.onMessage(received_stanza);
spyOn(_converse, 'log');
spyOn(converse.env.log, 'warn');
_converse.connection._dataRecv(test_utils.createRequest(received_stanza));
expect(_converse.log).toHaveBeenCalledWith(
'onMessage: Ignoring unencapsulated forwarded groupchat message',
Strophe.LogLevel.WARN
expect(converse.env.log.warn).toHaveBeenCalledWith(
'onMessage: Ignoring unencapsulated forwarded groupchat message'
);
expect(view.el.querySelectorAll('.chat-msg').length).toBe(0);
expect(view.model.messages.length).toBe(0);
@ -193,12 +192,11 @@
'type': 'groupchat'
}).c('body').t('I am groot').tree();
const view = _converse.api.chatviews.get(muc_jid);
spyOn(_converse, 'log');
spyOn(converse.env.log, 'warn');
await view.model.onMessage(msg);
expect(_converse.log).toHaveBeenCalledWith(
expect(converse.env.log.warn).toHaveBeenCalledWith(
'onMessage: Ignoring XEP-0280 "groupchat" message carbon, '+
'according to the XEP groupchat messages SHOULD NOT be carbon copied',
Strophe.LogLevel.WARN
'according to the XEP groupchat messages SHOULD NOT be carbon copied'
);
expect(view.el.querySelectorAll('.chat-msg').length).toBe(0);
expect(view.model.messages.length).toBe(0);

View File

@ -39,7 +39,7 @@
expect(_converse.roster.models.length).toBe(1);
expect(_converse.roster.at(0).get('jid')).toBe(contact_jid);
spyOn(_converse, 'log');
spyOn(converse.env.log, 'warn');
let roster_push = u.toStanza(`
<iq type="set" to="${_converse.jid}" from="eve@siacs.eu">
<query xmlns='jabber:iq:roster'>
@ -47,10 +47,9 @@
</query>
</iq>`);
_converse.connection._dataRecv(test_utils.createRequest(roster_push));
expect(_converse.log.calls.count()).toBe(2);
expect(_converse.log).toHaveBeenCalledWith(
`Ignoring roster illegitimate roster push message from ${roster_push.getAttribute('from')}`,
Strophe.LogLevel.WARN
expect(converse.env.log.warn.calls.count()).toBe(1);
expect(converse.env.log.warn).toHaveBeenCalledWith(
`Ignoring roster illegitimate roster push message from ${roster_push.getAttribute('from')}`
);
roster_push = u.toStanza(`
<iq type="set" to="${_converse.jid}" from="eve@siacs.eu">
@ -59,10 +58,9 @@
</query>
</iq>`);
_converse.connection._dataRecv(test_utils.createRequest(roster_push));
expect(_converse.log.calls.count()).toBe(4);
expect(_converse.log).toHaveBeenCalledWith(
`Ignoring roster illegitimate roster push message from ${roster_push.getAttribute('from')}`,
Strophe.LogLevel.WARN
expect(converse.env.log.warn.calls.count()).toBe(2);
expect(converse.env.log.warn).toHaveBeenCalledWith(
`Ignoring roster illegitimate roster push message from ${roster_push.getAttribute('from')}`
);
expect(_converse.roster.models.length).toBe(1);
expect(_converse.roster.at(0).get('jid')).toBe(contact_jid);

View File

@ -14,6 +14,7 @@ import "converse-modal";
import { debounce, get, isString } from "lodash";
import { Overview } from "backbone.overview";
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_chatbox from "templates/chatbox.html";
import tpl_chatbox_head from "templates/chatbox_head.html";
import tpl_chatbox_message_form from "templates/chatbox_message_form.html";
@ -184,7 +185,7 @@ converse.plugins.add('converse-chatview', {
try {
await _converse.api.vcard.update(this.model.contact.vcard, true);
} catch (e) {
_converse.log(e, Strophe.LogLevel.FATAL);
log.fatal(e);
this.alert(__('Sorry, something went wrong while trying to refresh'), 'danger');
}
u.removeClass('fa-spin', refresh_icon);
@ -199,7 +200,7 @@ converse.plugins.add('converse-chatview', {
this.model.contact.removeFromRoster(
() => this.model.contact.destroy(),
(err) => {
_converse.log(err, Strophe.LogLevel.ERROR);
log.error(err);
_converse.api.alert('error', __('Error'), [
__('Sorry, there was an error while trying to remove %1$s as a contact.',
this.model.contact.getDisplayName())

View File

@ -12,6 +12,7 @@ import "formdata-polyfill";
import bootstrap from "bootstrap.native";
import converse from "@converse/headless/converse-core";
import { get } from "lodash";
import log from "@converse/headless/log";
import tpl_brand_heading from "templates/converse_brand_heading.html";
import tpl_controlbox from "templates/controlbox.html";
import tpl_controlbox_toggle from "templates/controlbox_toggle.html";
@ -514,7 +515,7 @@ converse.plugins.add('converse-controlbox', {
_converse.chatboxviews.insertRowColumn(this.render().el);
_converse.api.waitUntil('initialized')
.then(this.render.bind(this))
.catch(e => _converse.log(e, Strophe.LogLevel.FATAL));
.catch(e => log.fatal(e));
},
render () {
@ -597,7 +598,7 @@ converse.plugins.add('converse-controlbox', {
_converse.api.waitUntil('chatBoxViewsInitialized')
.then(addControlBox)
.catch(e => _converse.log(e, Strophe.LogLevel.FATAL));
.catch(e => log.fatal(e));
_converse.api.listen.on('chatBoxesFetched', () => {
const controlbox = _converse.chatboxes.get('controlbox') || addControlBox();

View File

@ -12,6 +12,7 @@ import URI from "urijs";
import converse from "@converse/headless/converse-core";
import { debounce } from 'lodash'
import filesize from "filesize";
import log from "@converse/headless/log";
import tpl_csn from "templates/csn.html";
import tpl_file_progress from "templates/file_progress.html";
import tpl_info from "templates/info.html";
@ -128,7 +129,7 @@ converse.plugins.add('converse-message-view', {
this.renderChatStateNotification()
} else if (this.model.get('file') && !this.model.get('oob_url')) {
if (!this.model.file) {
_converse.log("Attempted to render a file upload message with no file data");
log.error("Attempted to render a file upload message with no file data");
return this.el;
}
this.renderFileUploadProgresBar();

View File

@ -9,15 +9,16 @@
import "converse-chatview";
import { Overview } from "backbone.overview";
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_chatbox_minimize from "templates/chatbox_minimize.html";
import tpl_chats_panel from "templates/chats_panel.html";
import tpl_toggle_chats from "templates/toggle_chats.html";
import tpl_trimmed_chat from "templates/trimmed_chat.html";
const { _ , Backbone, Strophe, dayjs } = converse.env;
const { _ , Backbone, dayjs } = converse.env;
const u = converse.env.utils;
converse.plugins.add('converse-minimize', {
/* Optional dependencies are other plugins which might be
* overridden or relied upon, and therefore need to be loaded before
@ -572,8 +573,7 @@ converse.plugins.add('converse-minimize', {
* @example _converse.api.listen.on('minimizedChatsInitialized', () => { ... });
*/
_converse.api.trigger('minimizedChatsInitialized');
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
}).catch(e => log.fatal(e));
const debouncedTrimChats = _.debounce(() => _converse.chatboxviews.trimChats(), 250);
_converse.api.listen.on('chatBoxInsertedIntoDOM', view => _converse.chatboxviews.trimChats(view));

View File

@ -15,6 +15,7 @@ import "formdata-polyfill";
import "@converse/headless/utils/muc";
import { OrderedListView } from "backbone.overview";
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_add_chatroom_modal from "templates/add_chatroom_modal.html";
import tpl_chatarea from "templates/chatarea.html";
import tpl_chatroom from "templates/chatroom.html";
@ -219,7 +220,7 @@ converse.plugins.add('converse-muc-views', {
parent_el.insertAdjacentHTML('beforeend', tpl_spinner());
_converse.api.disco.info(ev.target.getAttribute('data-room-jid'), null)
.then(stanza => insertRoomInfo(parent_el, stanza))
.catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
.catch(e => log.error(e));
}
}
@ -353,7 +354,7 @@ converse.plugins.add('converse-muc-views', {
})
.catch(err => {
this.alert(__('Sorry, something went wrong while trying to set the affiliation'), 'danger');
_converse.log(err, Strophe.LogLevel.ERROR);
log.error(err);
});
},
@ -377,7 +378,7 @@ converse.plugins.add('converse-muc-views', {
} else {
this.alert(__('Sorry, something went wrong while trying to set the role'), 'danger');
if (u.isErrorObject(e)) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
}
}
}
@ -1149,7 +1150,7 @@ converse.plugins.add('converse-muc-views', {
},
onCommandError (err) {
_converse.log(err, Strophe.LogLevel.FATAL);
log.fatal(err);
this.showErrorMessage(__("Sorry, an error happened while running the command. Check your browser's developer console for details."));
},
@ -1366,7 +1367,7 @@ converse.plugins.add('converse-muc-views', {
this.showSpinner();
this.model.fetchRoomConfiguration()
.then(iq => this.renderConfigurationForm(iq))
.catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
.catch(e => log.error(e));
} else {
this.closeForm();
}
@ -2125,7 +2126,7 @@ converse.plugins.add('converse-muc-views', {
// Features could have been added before the controlbox was
// initialized. We're only interested in MUC
_converse.disco_entities.each(entity => featureAdded(entity.features.findWhere({'var': Strophe.NS.MUC })));
}).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
}).catch(e => log.error(e));
}
function fetchAndSetMUCDomain (controlboxview) {

View File

@ -9,6 +9,7 @@
*/
import converse from "@converse/headless/converse-core";
import { get } from "lodash";
import log from "@converse/headless/log";
const { Strophe, sizzle } = converse.env;
const u = converse.env.utils;
@ -150,9 +151,7 @@ converse.plugins.add('converse-notification', {
title = __("%1$s says", Strophe.getResourceFromJid(full_from_jid));
} else {
if (_converse.roster === undefined) {
_converse.log(
"Could not send notification, because roster is undefined",
Strophe.LogLevel.ERROR);
log.error("Could not send notification, because roster is undefined");
return;
}
roster_item = _converse.roster.get(from_jid);

View File

@ -10,6 +10,7 @@
*/
import "converse-profile";
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_toolbar_omemo from "templates/toolbar_omemo.html";
const { Backbone, Strophe, sizzle, $build, $iq, $msg, _ } = converse.env;
@ -122,7 +123,7 @@ converse.plugins.add('converse-omemo', {
.catch(err => {
const { _converse } = this.__super__,
{ __ } = _converse;
_converse.log(err, Strophe.LogLevel.ERROR);
log.error(err);
_converse.api.alert(
Strophe.LogLevel.ERROR,
__('Error'), [__('Sorry, an error occurred while trying to remove the devices.')]
@ -312,7 +313,7 @@ converse.plugins.add('converse-omemo', {
'type': 'error',
});
}
_converse.log(`${e.name} ${e.message}`, Strophe.LogLevel.ERROR);
log.error(`${e.name} ${e.message}`);
},
async handleDecryptedWhisperMessage (attrs, key_and_tag) {
@ -414,10 +415,10 @@ converse.plugins.add('converse-omemo', {
err_msgs.push(e.iq.outerHTML);
}
_converse.api.alert('error', __('Error'), err_msgs);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
} else if (e.user_facing) {
_converse.api.alert('error', __('Error'), [e.message]);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
} else {
throw e;
}
@ -557,11 +558,8 @@ converse.plugins.add('converse-omemo', {
const session = await buildSession(device);
return session;
} catch (e) {
_converse.log(
`Could not build an OMEMO session for device ${device.get('id')}`,
Strophe.LogLevel.ERROR
);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(`Could not build an OMEMO session for device ${device.get('id')}`);
log.error(e);
return null;
}
}
@ -845,7 +843,7 @@ converse.plugins.add('converse-omemo', {
Object.keys(this.getPreKeys())
);
if (missing_keys.length < 1) {
_converse.log("No missing prekeys to generate for our own device", Strophe.LogLevel.WARN);
log.warn("No missing prekeys to generate for our own device");
return Promise.resolve();
}
const keys = await Promise.all(missing_keys.map(id => libsignal.KeyHelper.generatePreKey(parseInt(id, 10))));
@ -908,11 +906,8 @@ converse.plugins.add('converse-omemo', {
}
},
'error': (model, resp) => {
_converse.log(
"Could not fetch OMEMO session from cache, we'll generate a new one.",
Strophe.LogLevel.WARN
);
_converse.log(resp, Strophe.LogLevel.WARN);
log.warn("Could not fetch OMEMO session from cache, we'll generate a new one.");
log.warn(resp);
this.generateBundle().then(resolve).catch(reject);
}
});
@ -996,10 +991,10 @@ converse.plugins.add('converse-omemo', {
ids = await this.fetchDevicesFromServer()
} catch (e) {
if (e === null) {
_converse.log(`Timeout error while fetching devices for ${this.get('jid')}`, Strophe.LogLevel.ERROR);
log.error(`Timeout error while fetching devices for ${this.get('jid')}`);
} else {
_converse.log(`Could not fetch devices for ${this.get('jid')}`, Strophe.LogLevel.ERROR);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(`Could not fetch devices for ${this.get('jid')}`);
log.error(e);
}
this.destroy();
}
@ -1014,7 +1009,7 @@ converse.plugins.add('converse-omemo', {
this._devices_promise = new Promise(resolve => {
this.devices.fetch({
'success': c => resolve(this.onDevicesFound(c)),
'error': (m, e) => { _converse.log(e, Strophe.LogLevel.ERROR); resolve(); }
'error': (m, e) => { log.error(e); resolve(); }
});
});
}
@ -1049,7 +1044,7 @@ converse.plugins.add('converse-omemo', {
try {
iq = await _converse.api.sendIQ(stanza);
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
return [];
}
const device_ids = sizzle(`list[xmlns="${Strophe.NS.OMEMO}"] device`, iq).map(dev => dev.getAttribute('id'));
@ -1161,7 +1156,7 @@ converse.plugins.add('converse-omemo', {
updateBundleFromStanza(message);
}
} catch (e) {
_converse.log(e.message, Strophe.LogLevel.ERROR);
log.error(e.message);
}
return true;
}, null, 'message', 'headline');
@ -1189,8 +1184,8 @@ converse.plugins.add('converse-omemo', {
await restoreOMEMOSession();
await _converse.omemo_store.publishBundle();
} catch (e) {
_converse.log("Could not initialize OMEMO support", Strophe.LogLevel.ERROR);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error("Could not initialize OMEMO support");
log.error(e);
return;
}
/**
@ -1252,11 +1247,11 @@ converse.plugins.add('converse-omemo', {
_converse.api.listen.on('userDetailsModalInitialized', (contact) => {
const jid = contact.get('jid');
_converse.generateFingerprints(jid).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
_converse.generateFingerprints(jid).catch(e => log.error(e));
});
_converse.api.listen.on('profileModalInitialized', () => {
_converse.generateFingerprints(_converse.bare_jid).catch(e => _converse.log(e, Strophe.LogLevel.ERROR));
_converse.generateFingerprints(_converse.bare_jid).catch(e => log.error(e));
});
_converse.api.listen.on('afterTearDown', () => (delete _converse.omemo_store));

View File

@ -13,12 +13,13 @@ import "converse-modal";
import "formdata-polyfill";
import bootstrap from "bootstrap.native";
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_chat_status_modal from "templates/chat_status_modal.html";
import tpl_client_info_modal from "templates/client_info_modal.html";
import tpl_profile_modal from "templates/profile_modal.html";
import tpl_profile_view from "templates/profile_view.html";
const { Strophe, sizzle } = converse.env;
const { sizzle } = converse.env;
const u = converse.env.utils;
@ -102,7 +103,7 @@ converse.plugins.add('converse-profile', {
_converse.api.vcard.set(_converse.bare_jid, data)
.then(() => _converse.api.vcard.update(this.model.vcard, true))
.catch((err) => {
_converse.log(err, Strophe.LogLevel.FATAL);
log.fatal(err);
_converse.api.show('error', __('Error'), [
__("Sorry, an error happened while trying to save your profile data."),
__("You can check your browser's developer console for any error output.")

View File

@ -10,6 +10,7 @@
* an "App Server" as defined in XEP-0357
*/
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
const { Strophe, $iq, _ } = converse.env;
@ -34,10 +35,8 @@ converse.plugins.add('converse-push', {
return;
}
if (!(await _converse.api.disco.supports(Strophe.NS.PUSH, domain || _converse.bare_jid))) {
return _converse.log(
`Not disabling push app server "${push_app_server.jid}", no disco support from your server.`,
Strophe.LogLevel.WARN
);
log.warn(`Not disabling push app server "${push_app_server.jid}", no disco support from your server.`);
return;
}
const stanza = $iq({'type': 'set'});
if (domain !== _converse.bare_jid) {
@ -52,8 +51,8 @@ converse.plugins.add('converse-push', {
}
_converse.api.sendIQ(stanza)
.catch(e => {
_converse.log(`Could not disable push app server for ${push_app_server.jid}`, Strophe.LogLevel.ERROR);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(`Could not disable push app server for ${push_app_server.jid}`);
log.error(e);
});
}
@ -63,9 +62,8 @@ converse.plugins.add('converse-push', {
}
const identity = await _converse.api.disco.getIdentity('pubsub', 'push', push_app_server.jid);
if (!identity) {
return _converse.log(
`Not enabling push the service "${push_app_server.jid}", it doesn't have the right disco identtiy.`,
Strophe.LogLevel.WARN
return log.warn(
`Not enabling push the service "${push_app_server.jid}", it doesn't have the right disco identtiy.`
);
}
const result = await Promise.all([
@ -73,10 +71,8 @@ converse.plugins.add('converse-push', {
_converse.api.disco.supports(Strophe.NS.PUSH, domain)
]);
if (!result[0] && !result[1]) {
return _converse.log(
`Not enabling push app server "${push_app_server.jid}", no disco support from your server.`,
Strophe.LogLevel.WARN
);
log.warn(`Not enabling push app server "${push_app_server.jid}", no disco support from your server.`);
return;
}
const stanza = $iq({'type': 'set'});
if (domain !== _converse.bare_jid) {
@ -110,8 +106,8 @@ converse.plugins.add('converse-push', {
try {
await Promise.all(enabled.concat(disabled));
} catch (e) {
_converse.log('Could not enable or disable push App Server', Strophe.LogLevel.ERROR);
if (e) _converse.log(e, Strophe.LogLevel.ERROR);
log.error('Could not enable or disable push App Server');
if (e) log.error(e);
} finally {
push_enabled.push(domain);
}

View File

@ -12,6 +12,7 @@
*/
import "converse-controlbox";
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_form_input from "templates/form_input.html";
import tpl_form_username from "templates/form_username.html";
import tpl_register_link from "templates/register_link.html";
@ -142,7 +143,7 @@ converse.plugins.add('converse-register', {
_converse.api.waitUntil('controlBoxInitialized').then(() => {
const controlbox = _converse.chatboxes.get('controlbox')
controlbox.set({'active-form': value});
}).catch(e => _converse.log(e, Strophe.LogLevel.FATAL));
}).catch(e => log.fatal(e));
}
_converse.router.route('converse/login', () => setActiveForm('login'));
_converse.router.route('converse/register', () => setActiveForm('register'));
@ -402,7 +403,7 @@ converse.plugins.add('converse-register', {
* @param { integer } status_code - The Strophe.Status status code
*/
onConnectStatusChanged(status_code) {
_converse.log('converse-register: onConnectStatusChanged');
log.debug('converse-register: onConnectStatusChanged');
if (_.includes([
Strophe.Status.DISCONNECTED,
Strophe.Status.CONNFAIL,
@ -411,13 +412,12 @@ converse.plugins.add('converse-register', {
Strophe.Status.CONFLICT
], status_code)) {
_converse.log(
`Problem during registration: Strophe.Status is ${_converse.CONNECTION_STATUS[status_code]}`,
Strophe.LogLevel.ERROR
log.error(
`Problem during registration: Strophe.Status is ${_converse.CONNECTION_STATUS[status_code]}`
);
this.abortRegistration();
} else if (status_code === Strophe.Status.REGISTERED) {
_converse.log("Registered successfully.");
log.debug("Registered successfully.");
_converse.connection.reset();
this.showSpinner();
@ -645,7 +645,7 @@ converse.plugins.add('converse-register', {
this.fields[_var.toLowerCase()] = _.get(field.querySelector('value'), 'textContent', '');
} else {
// TODO: other option seems to be type="fixed"
_converse.log("Found field we couldn't parse", Strophe.LogLevel.WARN);
log.warn("Found field we couldn't parse");
}
});
this.form_type = 'xform';
@ -661,7 +661,7 @@ converse.plugins.add('converse-register', {
*/
_onRegisterIQ (stanza) {
if (stanza.getAttribute("type") === "error") {
_converse.log("Registration failed.", Strophe.LogLevel.ERROR);
log.error("Registration failed.");
this.reportErrors(stanza);
let error = stanza.getElementsByTagName("error");

View File

@ -13,6 +13,7 @@ import "formdata-polyfill";
import { OrderedListView } from "backbone.overview";
import SHA1 from 'strophe.js/src/sha1';
import converse from "@converse/headless/converse-core";
import log from "@converse/headless/log";
import tpl_add_contact_modal from "templates/add_contact_modal.html";
import tpl_group_header from "templates/group_header.html";
import tpl_pending_contact from "templates/pending_contact.html";
@ -504,7 +505,7 @@ converse.plugins.add('converse-rosterview', {
this.model.destroy();
}
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
_converse.api.alert('error', __('Error'),
[__('Sorry, there was an error while trying to remove %1$s as a contact.', this.model.getDisplayName())]
);
@ -933,10 +934,9 @@ converse.plugins.add('converse-rosterview', {
this.addExistingContact(contact, options);
} else {
if (!_converse.allow_contact_requests) {
_converse.log(
log.debug(
`Not adding requesting or pending contact ${contact.get('jid')} `+
`because allow_contact_requests is false`,
Strophe.LogLevel.DEBUG
`because allow_contact_requests is false`
);
return;
}
@ -971,7 +971,7 @@ converse.plugins.add('converse-rosterview', {
/* Place the rosterview inside the "Contacts" panel. */
_converse.api.waitUntil('rosterViewInitialized')
.then(() => view.controlbox_pane.el.insertAdjacentElement('beforeEnd', _converse.rosterview.el))
.catch(e => _converse.log(e, Strophe.LogLevel.FATAL));
.catch(e => log.fatal(e));
}
insertRoster();
view.model.on('change:connected', insertRoster);

View File

@ -12,6 +12,7 @@
import "@converse/headless/converse-muc";
import converse from "@converse/headless/converse-core";
import { get } from "lodash";
import log from "./log";
const { Backbone, Strophe, $iq, sizzle } = converse.env;
const u = converse.env.utils;
@ -105,7 +106,7 @@ converse.plugins.add('converse-bookmarks', {
initialize () {
this.on('add', bm => this.openBookmarkedRoom(bm)
.then(bm => this.markRoomAsBookmarked(bm))
.catch(e => _converse.log(e, Strophe.LogLevel.FATAL))
.catch(e => log.fatal(e))
);
this.on('remove', this.markRoomAsUnbookmarked, this);
@ -172,8 +173,8 @@ converse.plugins.add('converse-bookmarks', {
},
onBookmarkError (iq, options) {
_converse.log("Error while trying to add bookmark", Strophe.LogLevel.ERROR);
_converse.log(iq);
log.error("Error while trying to add bookmark");
log.error(iq);
_converse.api.alert(
'error', __('Error'), [__("Sorry, something went wrong while trying to save your bookmark.")]
);
@ -232,14 +233,14 @@ converse.plugins.add('converse-bookmarks', {
onBookmarksReceivedError (deferred, iq) {
if (iq === null) {
_converse.log('Error: timeout while fetching bookmarks', Strophe.LogLevel.ERROR);
log.error('Error: timeout while fetching bookmarks');
_converse.api.alert('error', __('Timeout Error'),
[__("The server did not return your bookmarks within the allowed time. "+
"You can reload the page to request them again.")]
);
} else {
_converse.log('Error while fetching bookmarks', Strophe.LogLevel.ERROR);
_converse.log(iq, Strophe.LogLevel.DEBUG);
log.error('Error while fetching bookmarks');
log.error(iq);
}
if (deferred) {
if (iq.querySelector('error[type="cancel"] item-not-found')) {
@ -305,7 +306,7 @@ converse.plugins.add('converse-bookmarks', {
if (sizzle('event[xmlns="'+Strophe.NS.PUBSUB+'#event"] items[node="storage:bookmarks"]', message).length) {
_converse.api.waitUntil('bookmarksInitialized')
.then(() => _converse.bookmarks.createBookmarksFromStanza(message))
.catch(e => _converse.log(e, Strophe.LogLevel.FATAL));
.catch(e => log.fatal(e));
}
}, null, 'message', 'headline', null, _converse.bare_jid);

View File

@ -10,6 +10,7 @@
*/
import 'strophe.js/src/bosh';
import converse from "./converse-core";
import log from "./log";
const { Backbone, Strophe } = converse.env;
@ -94,9 +95,7 @@ converse.plugins.add('converse-bosh', {
_converse.connection.restore(jid, _converse.onConnectStatusChanged);
return true;
} catch (e) {
_converse.log(
"Could not restore session for jid: "+
jid+" Error message: "+e.message, Strophe.LogLevel.WARN);
log.warn("Could not restore session for jid: "+jid+" Error message: "+e.message);
return false;
}
}

View File

@ -1,6 +1,7 @@
import { get, isObject, isString, propertyOf } from "lodash";
import converse from "./converse-core";
import filesize from "filesize";
import log from "./log";
const { $msg, Backbone, Strophe, dayjs, sizzle, utils } = converse.env;
const u = converse.env.utils;
@ -98,7 +99,7 @@ converse.plugins.add('converse-chat', {
try {
this.destroy()
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
}
},
@ -164,7 +165,7 @@ converse.plugins.add('converse-chat', {
try {
stanza = await this.sendSlotRequestStanza();
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
return this.save({
'type': 'error',
'message': __("Sorry, could not determine upload URL."),
@ -190,7 +191,7 @@ converse.plugins.add('converse-chat', {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
_converse.log("Status: " + xhr.status, Strophe.LogLevel.INFO);
log.info("Status: " + xhr.status);
if (xhr.status === 200 || xhr.status === 201) {
this.save({
'upload': _converse.SUCCESS,
@ -318,7 +319,7 @@ converse.plugins.add('converse-chat', {
fetchMessages () {
if (this.messages.fetched) {
_converse.log(`Not re-fetching messages for ${this.get('jid')}`, Strophe.LogLevel.INFO);
log.info(`Not re-fetching messages for ${this.get('jid')}`);
return;
}
this.messages.fetched = u.getResolveablePromise();
@ -356,7 +357,7 @@ converse.plugins.add('converse-chat', {
this.messages.reset();
} catch (e) {
this.messages.trigger('reset');
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
} finally {
delete this.messages.fetched;
}
@ -368,7 +369,7 @@ converse.plugins.add('converse-chat', {
return this.destroy({success, 'error': (m, e) => reject(e)})
});
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
} finally {
if (_converse.clear_messages_on_reconnection) {
await this.clearMessages();
@ -401,7 +402,7 @@ converse.plugins.add('converse-chat', {
const auto_join = _converse.auto_join_private_chats.concat(room_jids);
if (_converse.singleton && !auto_join.includes(attrs.jid) && !_converse.auto_join_on_invite) {
const msg = `${attrs.jid} is not allowed because singleton is true and it's not being auto_joined`;
_converse.log(msg, Strophe.LogLevel.WARN);
log.warn(msg);
return msg;
}
},
@ -625,11 +626,8 @@ converse.plugins.add('converse-chat', {
if (markers.length === 0) {
return false;
} else if (markers.length > 1) {
_converse.log(
'handleChatMarker: Ignoring incoming stanza with multiple message markers',
Strophe.LogLevel.ERROR
);
_converse.log(stanza, Strophe.LogLevel.ERROR);
log.error('handleChatMarker: Ignoring incoming stanza with multiple message markers');
log.error(stanza);
return false;
} else {
const marker = markers.pop();
@ -1088,8 +1086,8 @@ converse.plugins.add('converse-chat', {
.c('not-allowed', {xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up()
.c('text', {xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).t(text)
);
_converse.log(`Rejecting message stanza with the following reason: ${text}`, Strophe.LogLevel.WARN);
_converse.log(stanza, Strophe.LogLevel.WARN);
log.warn(`Rejecting message stanza with the following reason: ${text}`);
log.warn(stanza);
}
@ -1123,17 +1121,11 @@ converse.plugins.add('converse-chat', {
const to_resource = Strophe.getResourceFromJid(to_jid);
if (_converse.filter_by_resource && (to_resource && to_resource !== _converse.resource)) {
return _converse.log(
`onMessage: Ignoring incoming message intended for a different resource: ${to_jid}`,
Strophe.LogLevel.INFO
);
return log.info(`onMessage: Ignoring incoming message intended for a different resource: ${to_jid}`);
} else if (utils.isHeadlineMessage(_converse, stanza)) {
// XXX: Prosody sends headline messages with the
// wrong type ('chat'), so we need to filter them out here.
return _converse.log(
`onMessage: Ignoring incoming headline message from JID: ${stanza.getAttribute('from')}`,
Strophe.LogLevel.INFO
);
return log.info(`onMessage: Ignoring incoming headline message from JID: ${stanza.getAttribute('from')}`);
}
const bare_forward = sizzle(`message > forwarded[xmlns="${Strophe.NS.FORWARD}"]`, stanza).length;
@ -1163,29 +1155,20 @@ converse.plugins.add('converse-chat', {
to_jid = stanza.getAttribute('to');
from_jid = stanza.getAttribute('from');
} else {
return _converse.log(
`onMessage: Ignoring alleged MAM message from ${stanza.getAttribute('from')}`,
Strophe.LogLevel.WARN
);
return log.warn(`onMessage: Ignoring alleged MAM message from ${stanza.getAttribute('from')}`);
}
}
const from_bare_jid = Strophe.getBareJidFromJid(from_jid);
const is_me = from_bare_jid === _converse.bare_jid;
if (is_me && to_jid === null) {
return _converse.log(
`Don't know how to handle message stanza without 'to' attribute. ${stanza.outerHTML}`,
Strophe.LogLevel.ERROR
);
return log.error(`Don't know how to handle message stanza without 'to' attribute. ${stanza.outerHTML}`);
}
const contact_jid = is_me ? Strophe.getBareJidFromJid(to_jid) : from_bare_jid;
const contact = await _converse.api.contacts.get(contact_jid);
if (contact === undefined && !_converse.allow_non_roster_messaging) {
_converse.log(
`Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.`,
Strophe.LogLevel.ERROR
);
return _converse.log(stanza, Strophe.LogLevel.ERROR);
log.error(`Blocking messaging with a JID not in our roster because allow_non_roster_messaging is false.`);
return log.error(stanza);
}
// Get chat box, but only create when the message has something to show to the user
const has_body = sizzle(`body, encrypted[xmlns="${Strophe.NS.OMEMO}"]`, stanza).length > 0;
@ -1210,7 +1193,7 @@ converse.plugins.add('converse-chat', {
// MAM messages are handled in converse-mam.
// We shouldn't get MAM messages here because
// they shouldn't have a `type` attribute.
_converse.log(`Received a MAM message with type "chat".`, Strophe.LogLevel.WARN);
log.warn(`Received a MAM message with type "chat".`);
return true;
}
_converse.handleMessageStanza(stanza);
@ -1247,9 +1230,7 @@ converse.plugins.add('converse-chat', {
if (isString(jid)) {
_converse.api.chats.open(jid);
} else {
_converse.log(
'Invalid jid criteria specified for "auto_join_private_chats"',
Strophe.LogLevel.ERROR);
log.error('Invalid jid criteria specified for "auto_join_private_chats"');
}
});
/**
@ -1267,10 +1248,7 @@ converse.plugins.add('converse-chat', {
/************************ BEGIN Route Handlers ************************/
function openChat (jid) {
if (!utils.isValidJID(jid)) {
return _converse.log(
`Invalid JID "${jid}" provided in URL fragment`,
Strophe.LogLevel.WARN
);
return log.warn(`Invalid JID "${jid}" provided in URL fragment`);
}
_converse.api.chats.open(jid);
}
@ -1312,7 +1290,7 @@ converse.plugins.add('converse-chat', {
}
const chatbox = _converse.api.chats.get(jids, attrs, true);
if (!chatbox) {
_converse.log("Could not open chatbox for JID: "+jids, Strophe.LogLevel.ERROR);
log.error("Could not open chatbox for JID: "+jids);
return;
}
return chatbox;
@ -1324,10 +1302,7 @@ converse.plugins.add('converse-chat', {
return _converse.api.chats.get(jid, attrs, true).maybeShow();
}));
}
_converse.log(
"chats.create: You need to provide at least one JID",
Strophe.LogLevel.ERROR
);
log.error("chats.create: You need to provide at least one JID");
return null;
},
@ -1385,7 +1360,7 @@ converse.plugins.add('converse-chat', {
);
}
const err_msg = "chats.open: You need to provide at least one JID";
_converse.log(err_msg, Strophe.LogLevel.ERROR);
log.error(err_msg);
throw new Error(err_msg);
},

View File

@ -9,6 +9,7 @@
import "./converse-emoji";
import converse from "./converse-core";
import { isString } from "lodash";
import log from "./log";
const { Strophe } = converse.env;
@ -104,7 +105,7 @@ converse.plugins.add('converse-chatboxes', {
try {
chatbox = new model(attrs, {'collection': _converse.chatboxes});
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
return null;
}
await chatbox.initialized;

View File

@ -15,6 +15,7 @@ import _ from './lodash.noconflict';
import advancedFormat from 'dayjs/plugin/advancedFormat';
import dayjs from 'dayjs';
import i18n from './i18n';
import log from '@converse/headless/log';
import pluggable from 'pluggable.js/src/pluggable';
import sizzle from 'sizzle';
import u from '@converse/headless/utils/core';
@ -119,7 +120,7 @@ _converse.Collection = Backbone.Collection.extend({
Object.assign(options, {
success,
'error': (m, e) => {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
success()
}
})
@ -271,46 +272,12 @@ _converse.default_settings = {
whitelisted_plugins: []
};
const loglevel = _converse.debug ? Strophe.LogLevel.DEBUG : Strophe.LogLevel.INFO;
log.initialize(loglevel);
_converse.log = log.log;
/**
* Logs messages to the browser's developer console.
* Available loglevels are 0 for 'debug', 1 for 'info', 2 for 'warn',
* 3 for 'error' and 4 for 'fatal'.
* When using the 'error' or 'warn' loglevels, a full stacktrace will be
* logged as well.
* @method log
* @private
* @memberOf _converse
* @param { string } message - The message to be logged
* @param { integer } level - The loglevel which allows for filtering of log messages
*/
_converse.log = function (message, level, style='') {
if (level === Strophe.LogLevel.ERROR || level === Strophe.LogLevel.FATAL) {
style = style || 'color: maroon';
}
if (message instanceof Error) {
message = message.stack;
} else if (_.isElement(message)) {
message = message.outerHTML;
}
const prefix = style ? '%c' : '';
if (level === Strophe.LogLevel.ERROR) {
u.logger.error(`${prefix} ERROR: ${message}`, style);
} else if (level === Strophe.LogLevel.WARN) {
u.logger.warn(`${prefix} ${(new Date()).toISOString()} WARNING: ${message}`, style);
} else if (level === Strophe.LogLevel.FATAL) {
u.logger.error(`${prefix} FATAL: ${message}`, style);
} else if (_converse.debug) {
if (level === Strophe.LogLevel.DEBUG) {
u.logger.debug(`${prefix} ${(new Date()).toISOString()} DEBUG: ${message}`, style);
} else {
u.logger.info(`${prefix} ${(new Date()).toISOString()} INFO: ${message}`, style);
}
}
};
Strophe.log = function (level, msg) { _converse.log(level+' '+msg, level); };
Strophe.error = function (msg) { _converse.log(msg, Strophe.LogLevel.ERROR); };
Strophe.log = function (level, msg) { log.log(level+' '+msg, level); };
Strophe.error = function (msg) { log.log(msg, Strophe.LogLevel.ERROR); };
/**
@ -532,7 +499,7 @@ async function attemptNonPreboundSession (credentials, automatic) {
} else if (!_converse.isTestEnv() && window.PasswordCredential) {
connect(await getLoginCredentialsFromBrowser());
} else {
_converse.log("attemptNonPreboundSession: Could not find any credentials to log in with", Strophe.LogLevel.WARN);
log.warn("attemptNonPreboundSession: Could not find any credentials to log in with");
}
} else if ([_converse.ANONYMOUS, _converse.EXTERNAL].includes(_converse.authentication) && (!automatic || _converse.auto_login)) {
connect();
@ -577,7 +544,7 @@ function connect (credentials) {
async function reconnect () {
_converse.log('RECONNECTING: the connection has dropped, attempting to reconnect.');
log.debug('RECONNECTING: the connection has dropped, attempting to reconnect.');
_converse.setConnectionStatus(
Strophe.Status.RECONNECTING,
__('The connection has dropped, attempting to reconnect.')
@ -619,7 +586,7 @@ async function onDomainDiscovered (response) {
const text = await response.text();
const xrd = (new window.DOMParser()).parseFromString(text, "text/xml").firstElementChild;
if (xrd.nodeName != "XRD" || xrd.namespaceURI != "http://docs.oasis-open.org/ns/xri/xrd-1.0") {
return _converse.log("Could not discover XEP-0156 connection methods", Strophe.LogLevel.WARN);
return log.warn("Could not discover XEP-0156 connection methods");
}
const bosh_links = sizzle(`Link[rel="urn:xmpp:alt-connections:xbosh"]`, xrd);
const ws_links = sizzle(`Link[rel="urn:xmpp:alt-connections:websocket"]`, xrd);
@ -629,9 +596,8 @@ async function onDomainDiscovered (response) {
_converse.websocket_url = ws_methods.pop();
_converse.bosh_service_url = bosh_methods.pop();
if (bosh_methods.length === 0 && ws_methods.length === 0) {
_converse.log(
"onDomainDiscovered: neither BOSH nor WebSocket connection methods have been specified with XEP-0156.",
Strophe.LogLevel.WARN
log.warn(
"onDomainDiscovered: neither BOSH nor WebSocket connection methods have been specified with XEP-0156."
);
}
}
@ -651,13 +617,14 @@ async function discoverConnectionMethods (domain) {
try {
response = await fetch(url, options);
} catch (e) {
_converse.log(`Failed to discover alternative connection methods at ${url}`, Strophe.LogLevel.ERROR);
return _converse.log(e, Strophe.LogLevel.ERROR);
log.error(`Failed to discover alternative connection methods at ${url}`);
log.error(e);
return;
}
if (response.status >= 200 && response.status < 400) {
await onDomainDiscovered(response);
} else {
_converse.log("Could not discover XEP-0156 connection methods", Strophe.LogLevel.WARN);
log.warn("Could not discover XEP-0156 connection methods");
}
}
@ -794,12 +761,10 @@ function enableCarbons () {
.c('enable', {xmlns: Strophe.NS.CARBONS});
_converse.connection.addHandler((iq) => {
if (iq.querySelectorAll('error').length > 0) {
_converse.log(
'An error occurred while trying to enable message carbons.',
Strophe.LogLevel.WARN);
log.warn('An error occurred while trying to enable message carbons.');
} else {
_converse.session.save({'carbons_enabled': true});
_converse.log('Message carbons have been enabled.');
log.debug('Message carbons have been enabled.');
}
}, null, "iq", null, "enablecarbons");
_converse.connection.send(carbons_iq);
@ -850,16 +815,16 @@ async function onConnected (reconnecting) {
function setUpXMLLogging () {
Strophe.log = function (level, msg) {
_converse.log(msg, level);
log.log(msg, level);
};
_converse.connection.xmlInput = function (body) {
if (_converse.debug) {
_converse.log(body.outerHTML, Strophe.LogLevel.DEBUG, 'color: darkgoldenrod');
log.log(body.outerHTML, Strophe.LogLevel.DEBUG, 'color: darkgoldenrod');
}
};
_converse.connection.xmlOutput = function (body) {
if (_converse.debug) {
_converse.log(body.outerHTML, Strophe.LogLevel.DEBUG, 'color: darkcyan');
log.log(body.outerHTML, Strophe.LogLevel.DEBUG, 'color: darkcyan');
}
};
}
@ -893,7 +858,7 @@ async function finishInitialization () {
* @private
*/
function finishDisconnection () {
_converse.log('DISCONNECTED');
log.debug('DISCONNECTED');
delete _converse.connection.reconnecting;
_converse.connection.reset();
tearDown();
@ -941,8 +906,8 @@ async function getLoginCredentials () {
try {
credentials = await fetchLoginCredentials(wait); // eslint-disable-line no-await-in-loop
} catch (e) {
_converse.log('Could not fetch login credentials', Strophe.LogLevel.ERROR);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error('Could not fetch login credentials');
log.error(e);
}
// If unsuccessful, we wait 2 seconds between subsequent attempts to
// fetch the credentials.
@ -1036,7 +1001,7 @@ _converse.initialize = async function (settings, callback) {
_converse.locale = i18n.getLocale(settings.i18n, _converse.locales);
await i18n.fetchTranslations(_converse);
} catch (e) {
_converse.log(e.message, Strophe.LogLevel.FATAL);
log.fatal(e.message);
}
}
@ -1122,17 +1087,17 @@ _converse.initialize = async function (settings, callback) {
* @memberOf _converse
*/
this.onConnectStatusChanged = function (status, message) {
_converse.log(`Status changed to: ${_converse.CONNECTION_STATUS[status]}`);
log.debug(`Status changed to: ${_converse.CONNECTION_STATUS[status]}`);
if (status === Strophe.Status.CONNECTED || status === Strophe.Status.ATTACHED) {
_converse.setConnectionStatus(status);
// By default we always want to send out an initial presence stanza.
_converse.send_initial_presence = true;
_converse.setDisconnectionCause();
if (_converse.connection.reconnecting) {
_converse.log(status === Strophe.Status.CONNECTED ? 'Reconnected' : 'Reattached');
log.debug(status === Strophe.Status.CONNECTED ? 'Reconnected' : 'Reattached');
onConnected(true);
} else {
_converse.log(status === Strophe.Status.CONNECTED ? 'Connected' : 'Attached');
log.debug(status === Strophe.Status.CONNECTED ? 'Connected' : 'Attached');
if (_converse.connection.restored) {
// No need to send an initial presence stanza when
// we're restoring an existing session.
@ -1701,8 +1666,8 @@ _converse.api = {
*/
send (stanza) {
if (!_converse.api.connection.connected()) {
_converse.log("Not sending stanza because we're not connected!", Strophe.LogLevel.WARN);
_converse.log(Strophe.serialize(stanza), Strophe.LogLevel.WARN);
log.warn("Not sending stanza because we're not connected!");
log.warn(Strophe.serialize(stanza));
return;
}
if (_.isString(stanza)) {
@ -1844,6 +1809,7 @@ Object.assign(window.converse, {
'Promise': Promise,
'Strophe': Strophe,
'_': _,
'log': log,
'dayjs': dayjs,
'sizzle': sizzle,
'utils': u

View File

@ -9,6 +9,7 @@
* Converse plugin which add support for XEP-0030: Service Discovery
*/
import converse from "./converse-core";
import log from "./log";
import sizzle from "sizzle";
const { Backbone, Strophe, $iq, utils, _ } = converse.env;
@ -146,7 +147,7 @@ converse.plugins.add('converse-disco', {
try {
stanza = await _converse.api.disco.info(this.get('jid'), null);
} catch (iq) {
_converse.log(iq, Strophe.LogLevel.ERROR);
log.error(iq);
this.waitUntilFeaturesDiscovered.resolve(this);
return;
}
@ -289,7 +290,7 @@ converse.plugins.add('converse-disco', {
_converse.api.trigger('streamFeaturesAdded');
},
error (m, e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
}
});
}
@ -413,7 +414,7 @@ converse.plugins.add('converse-disco', {
if (_converse.stream_features === undefined && !_converse.api.connection.connected()) {
// Happens during tests when disco lookups happen asynchronously after teardown.
const msg = `Tried to get feature ${name} ${xmlns} but _converse.stream_features has been torn down`;
_converse.log(msg, Strophe.LogLevel.WARN);
log.warn(msg);
return;
}
return _converse.stream_features.findWhere({'name': name, 'xmlns': xmlns});
@ -573,7 +574,7 @@ converse.plugins.add('converse-disco', {
if (_converse.disco_entities === undefined && !_converse.api.connection.connected()) {
// Happens during tests when disco lookups happen asynchronously after teardown.
const msg = `Tried to look up entity ${jid} but _converse.disco_entities has been torn down`;
_converse.log(msg, Strophe.LogLevel.WARN);
log.warn(msg);
return;
}
const entity = _converse.disco_entities.get(jid);
@ -635,7 +636,7 @@ converse.plugins.add('converse-disco', {
if (_converse.disco_entities === undefined && !_converse.api.connection.connected()) {
// Happens during tests when disco lookups happen asynchronously after teardown.
const msg = `Tried to get feature ${feature} for ${jid} but _converse.disco_entities has been torn down`;
_converse.log(msg, Strophe.LogLevel.WARN);
log.warn(msg);
return;
}
entity = await entity.waitUntilFeaturesDiscovered;
@ -771,14 +772,14 @@ converse.plugins.add('converse-disco', {
* // The entity DOES NOT have this identity
* }
* }
* ).catch(e => _converse.log(e, Strophe.LogLevel.FATAL));
* ).catch(e => log.error(e));
*/
async getIdentity (category, type, jid) {
const e = await _converse.api.disco.entities.get(jid, true);
if (e === undefined && !_converse.api.connection.connected()) {
// Happens during tests when disco lookups happen asynchronously after teardown.
const msg = `Tried to look up category ${category} for ${jid} but _converse.disco_entities has been torn down`;
_converse.log(msg, Strophe.LogLevel.WARN);
log.warn(msg);
return;
}
return e.getIdentity(category, type);

View File

@ -13,6 +13,7 @@ import "./converse-disco";
import "./converse-rsm";
import { intersection, pick } from 'lodash'
import converse from "./converse-core";
import log from "./log";
import sizzle from "sizzle";
const { Strophe, $iq, dayjs } = converse.env;
@ -131,7 +132,7 @@ converse.plugins.add('converse-mam', {
try {
await message_handler(message);
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
}
}
@ -188,14 +189,10 @@ converse.plugins.add('converse-mam', {
_converse.onMAMError = function (iq) {
if (iq.querySelectorAll('feature-not-implemented').length) {
_converse.log(
"Message Archive Management (XEP-0313) not supported by this server",
Strophe.LogLevel.WARN);
log.warn("Message Archive Management (XEP-0313) not supported by this server");
} else {
_converse.log(
"An error occured while trying to set archiving preferences.",
Strophe.LogLevel.ERROR);
_converse.log(iq);
log.error("An error occured while trying to set archiving preferences.");
log.error(iq);
}
};
@ -471,7 +468,7 @@ converse.plugins.add('converse-mam', {
const jid = attrs.to || _converse.bare_jid;
const supported = await _converse.api.disco.supports(Strophe.NS.MAM, jid);
if (!supported) {
_converse.log(`Did not fetch MAM archive for ${jid} because it doesn't support ${Strophe.NS.MAM}`);
log.warn(`Did not fetch MAM archive for ${jid} because it doesn't support ${Strophe.NS.MAM}`);
return {'messages': []};
}
@ -513,11 +510,11 @@ converse.plugins.add('converse-mam', {
const from = stanza.getAttribute('from') || _converse.bare_jid;
if (options.groupchat) {
if (from !== options['with']) {
_converse.log(`Ignoring alleged groupchat MAM message from ${stanza.getAttribute('from')}`, Strophe.LogLevel.WARN);
log.warn(`Ignoring alleged groupchat MAM message from ${stanza.getAttribute('from')}`);
return true;
}
} else if (from !== _converse.bare_jid) {
_converse.log(`Ignoring alleged MAM message from ${stanza.getAttribute('from')}`, Strophe.LogLevel.WARN);
log.warn(`Ignoring alleged MAM message from ${stanza.getAttribute('from')}`);
return true;
}
messages.push(stanza);
@ -528,13 +525,13 @@ converse.plugins.add('converse-mam', {
const iq_result = await _converse.api.sendIQ(stanza, _converse.message_archiving_timeout, false)
if (iq_result === null) {
const err_msg = "Timeout while trying to fetch archived messages.";
_converse.log(err_msg, Strophe.LogLevel.ERROR);
log.error(err_msg);
error = new _converse.TimeoutError(err_msg);
return { messages, error };
} else if (u.isErrorStanza(iq_result)) {
_converse.log("Error stanza received while trying to fetch archived messages", Strophe.LogLevel.ERROR);
_converse.log(iq_result, Strophe.LogLevel.ERROR);
log.error("Error stanza received while trying to fetch archived messages");
log.error(iq_result);
return { messages };
}
_converse.connection.deleteHandler(message_handler);

View File

@ -14,6 +14,7 @@ import "./converse-emoji";
import "./utils/muc";
import { clone, get, intersection, invoke, isElement, isObject, isString, uniq, zipObject } from "lodash";
import converse from "./converse-core";
import log from "./log";
import u from "./utils/form";
const MUC_ROLE_WEIGHTS = {
@ -199,10 +200,7 @@ converse.plugins.add('converse-muc', {
async function openRoom (jid) {
if (!u.isValidMUCJID(jid)) {
return _converse.log(
`Invalid JID "${jid}" provided in URL fragment`,
Strophe.LogLevel.WARN
);
return log.warn(`invalid jid "${jid}" provided in url fragment`);
}
await _converse.api.waitUntil('roomsAutoJoined');
if (_converse.allow_bookmarks) {
@ -266,10 +264,7 @@ converse.plugins.add('converse-muc', {
delete this.occupant;
const chatbox = get(this, 'collection.chatbox');
if (!chatbox) {
return _converse.log(
`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`,
Strophe.LogLevel.ERROR
);
return log.error(`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`);
}
this.listenTo(chatbox.occupants, 'add', this.onOccupantAdded);
},
@ -280,10 +275,7 @@ converse.plugins.add('converse-muc', {
this.listenTo(this.occupant, 'destroy', this.onOccupantRemoved);
const chatbox = get(this, 'collection.chatbox');
if (!chatbox) {
return _converse.log(
`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`,
Strophe.LogLevel.ERROR
);
return log.error(`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`);
}
this.stopListening(chatbox.occupants, 'add', this.onOccupantAdded);
}
@ -293,10 +285,7 @@ converse.plugins.add('converse-muc', {
if (this.get('type') !== 'groupchat') { return; }
const chatbox = get(this, 'collection.chatbox');
if (!chatbox) {
return _converse.log(
`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`,
Strophe.LogLevel.ERROR
);
return log.error(`Could not get collection.chatbox for message: ${JSON.stringify(this.toJSON())}`);
}
const nick = Strophe.getResourceFromJid(this.get('from'));
this.occupant = chatbox.occupants.findWhere({'nick': nick});
@ -330,10 +319,7 @@ converse.plugins.add('converse-muc', {
if (jid) {
vcard = _converse.vcards.findWhere({'jid': jid}) || _converse.vcards.create({'jid': jid});
} else {
_converse.log(
`Could not assign VCard for message because no JID found! msgid: ${this.get('msgid')}`,
Strophe.LogLevel.ERROR
);
log.error(`Could not assign VCard for message because no JID found! msgid: ${this.get('msgid')}`);
return;
}
}
@ -429,10 +415,7 @@ converse.plugins.add('converse-muc', {
async enterRoom () {
const conn_status = this.get('connection_status');
_converse.log(
`${this.get('jid')} initialized with connection_status ${conn_status}`,
Strophe.LogLevel.DEBUG
);
log.debug(`${this.get('jid')} initialized with connection_status ${conn_status}`);
if (conn_status !== converse.ROOMSTATUS.ENTERED) {
// We're not restoring a room from cache, so let's clear the potentially stale cache.
this.removeNonMembers();
@ -526,7 +509,7 @@ converse.plugins.add('converse-muc', {
// MAM messages are handled in converse-mam.
// We shouldn't get MAM messages here because
// they shouldn't have a `type` attribute.
_converse.log(`Received a MAM message with type "chat".`, Strophe.LogLevel.WARN);
log.warn(`received a mam message with type "chat".`);
return true;
}
this.onMessage(stanza);
@ -651,7 +634,7 @@ converse.plugins.add('converse-muc', {
return this.features.destroy({success, 'error': (m, e) => reject(e)})
});
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
}
return _converse.ChatBox.prototype.close.call(this);
},
@ -851,7 +834,7 @@ converse.plugins.add('converse-muc', {
identity = await _converse.api.disco.getIdentity('conference', 'text', this.get('jid'));
} catch (e) {
// Getting the identity probably failed because this room doesn't exist yet.
return _converse.log(e, Strophe.LogLevel.ERROR);
return log.error(e);
}
const fields = await _converse.api.disco.getFields(this.get('jid'));
this.save({
@ -1126,15 +1109,15 @@ converse.plugins.add('converse-muc', {
if (result === null) {
const err_msg = `Error: timeout while fetching ${affiliation} list for MUC ${this.get('jid')}`;
const err = new Error(err_msg);
_converse.log(err_msg, Strophe.LogLevel.WARN);
_converse.log(result, Strophe.LogLevel.WARN);
log.warn(err_msg);
log.warn(result);
return err;
}
if (u.isErrorStanza(result)) {
const err_msg = `Error: not allowed to fetch ${affiliation} list for MUC ${this.get('jid')}`;
const err = new Error(err_msg);
_converse.log(err_msg, Strophe.LogLevel.WARN);
_converse.log(result, Strophe.LogLevel.WARN);
log.warn(err_msg);
log.warn(result);
return err;
}
return u.parseMemberListIQ(result).filter(p => p);
@ -1227,12 +1210,12 @@ converse.plugins.add('converse-muc', {
} else if (sizzle(`registration-required[xmlns="${Strophe.NS.STANZAS}"]`, e).length) {
err_msg = __("You're not allowed to register in this groupchat because it's members-only.");
}
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
return err_msg;
}
const required_fields = sizzle('field required', iq).map(f => f.parentElement);
if (required_fields.length > 1 && required_fields[0].getAttribute('var') !== 'muc#register_roomnick') {
return _converse.log(`Can't register the user register in the groupchat ${jid} due to the required fields`);
return log.error(`Can't register the user register in the groupchat ${jid} due to the required fields`);
}
try {
await _converse.api.sendIQ($iq({
@ -1250,8 +1233,8 @@ converse.plugins.add('converse-muc', {
} else if (sizzle(`bad-request[xmlns="${Strophe.NS.STANZAS}"]`, e).length) {
err_msg = __("Can't register your nickname in this groupchat, invalid data form supplied.");
}
_converse.log(err_msg);
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(err_msg);
log.error(e);
return err_msg;
}
},
@ -1517,18 +1500,14 @@ converse.plugins.add('converse-muc', {
const original_stanza = stanza;
const bare_forward = sizzle(`message > forwarded[xmlns="${Strophe.NS.FORWARD}"]`, stanza).length;
if (bare_forward) {
return _converse.log(
'onMessage: Ignoring unencapsulated forwarded groupchat message',
Strophe.LogLevel.WARN
);
return log.warn('onMessage: Ignoring unencapsulated forwarded groupchat message');
}
const is_carbon = u.isCarbonMessage(stanza);
if (is_carbon) {
// XEP-280: groupchat messages SHOULD NOT be carbon copied, so we're discarding it.
return _converse.log(
return log.warn(
'onMessage: Ignoring XEP-0280 "groupchat" message carbon, '+
'according to the XEP groupchat messages SHOULD NOT be carbon copied',
Strophe.LogLevel.WARN
'according to the XEP groupchat messages SHOULD NOT be carbon copied'
);
}
const is_mam = u.isMAMMessage(stanza);
@ -1537,10 +1516,7 @@ converse.plugins.add('converse-muc', {
const selector = `[xmlns="${Strophe.NS.MAM}"] > forwarded[xmlns="${Strophe.NS.FORWARD}"] > message`;
stanza = sizzle(selector, stanza).pop();
} else {
return _converse.log(
`onMessage: Ignoring alleged MAM groupchat message from ${stanza.getAttribute('from')}`,
Strophe.LogLevel.WARN
);
return log.warn(`onMessage: Ignoring alleged MAM groupchat message from ${stanza.getAttribute('from')}`);
}
}
@ -2097,9 +2073,7 @@ converse.plugins.add('converse-muc', {
} else if (isObject(groupchat)) {
_converse.api.rooms.open(groupchat.jid, clone(groupchat));
} else {
_converse.log(
'Invalid groupchat criteria specified for "auto_join_rooms"',
Strophe.LogLevel.ERROR);
log.error('Invalid groupchat criteria specified for "auto_join_rooms"');
}
});
/**
@ -2256,7 +2230,7 @@ converse.plugins.add('converse-muc', {
await _converse.api.waitUntil('chatBoxesFetched');
if (jids === undefined) {
const err_msg = 'rooms.open: You need to provide at least one JID';
_converse.log(err_msg, Strophe.LogLevel.ERROR);
log.error(err_msg);
throw(new TypeError(err_msg));
} else if (isString(jids)) {
const room = await _converse.api.rooms.create(jids, attrs);

View File

@ -10,6 +10,8 @@
* as specified in XEP-0199 XMPP Ping.
*/
import converse from "./converse-core";
import log from "./log";
const { Strophe, $iq } = converse.env;
const u = converse.env.utils;
@ -104,13 +106,13 @@ converse.plugins.add('converse-ping', {
const result = await _converse.api.sendIQ(iq, 10000, false);
if (result === null) {
_converse.log(`Timeout while pinging ${jid}`, Strophe.LogLevel.WARN);
log.warn(`Timeout while pinging ${jid}`);
if (jid === Strophe.getDomainFromJid(_converse.bare_jid)) {
_converse.api.connection.reconnect();
}
} else if (u.isErrorStanza(result)) {
_converse.log(`Error while pinging ${jid}`, Strophe.LogLevel.ERROR);
_converse.log(result, Strophe.LogLevel.ERROR);
log.error(`Error while pinging ${jid}`);
log.error(result);
}
return true;
}

View File

@ -8,6 +8,7 @@
*/
import "./converse-disco";
import converse from "./converse-core";
import log from "./log";
const { Strophe, $iq } = converse.env;
@ -68,8 +69,8 @@ converse.plugins.add('converse-pubsub', {
Object.keys(options).forEach(k => stanza.c('field', {'var': k}).c('value').t(options[k]).up().up());
} else {
_converse.log(`_converse.api.publish: ${jid} does not support #publish-options, `+
`so we didn't set them even though they were provided.`)
log.warn(`_converse.api.publish: ${jid} does not support #publish-options, `+
`so we didn't set them even though they were provided.`)
}
}
try {
@ -83,10 +84,7 @@ converse.plugins.add('converse-pubsub', {
// met. We re-publish but without publish-options.
const el = stanza.nodeTree;
el.querySelector('publish-options').outerHTML = '';
_converse.log(
`PubSub: Republishing without publish options. ${el.outerHTML}`,
Strophe.LogLevel.WARN
);
log.warn(`PubSub: Republishing without publish options. ${el.outerHTML}`);
_converse.api.sendIQ(el);
} else {
throw iq;

View File

@ -8,6 +8,7 @@
*/
import "@converse/headless/converse-status";
import converse from "@converse/headless/converse-core";
import log from "./log";
const { Backbone, Strophe, $iq, $pres, dayjs, sizzle, _ } = converse.env;
const u = converse.env.utils;
@ -108,7 +109,7 @@ converse.plugins.add('converse-roster', {
await _converse.roster.fetchRosterContacts();
_converse.api.trigger('rosterContactsFetched');
} catch (reason) {
_converse.log(reason, Strophe.LogLevel.ERROR);
log.error(reason);
} finally {
_converse.sendInitialPresence();
}
@ -424,7 +425,7 @@ converse.plugins.add('converse-roster', {
});
});
if (u.isErrorObject(result)) {
_converse.log(result, Strophe.LogLevel.ERROR);
log.error(result);
// Force a full roster refresh
_converse.session.set('roster_cached', false)
this.data.save('version', undefined);
@ -516,7 +517,7 @@ converse.plugins.add('converse-roster', {
try {
await this.sendContactAddIQ(jid, name, groups);
} catch (e) {
_converse.log(e, Strophe.LogLevel.ERROR);
log.error(e);
alert(__('Sorry, there was an error while trying to add %1$s as a contact.', name || jid));
return e;
}
@ -568,9 +569,8 @@ converse.plugins.add('converse-roster', {
// attribute (i.e., implicitly from the bare JID of the user's
// account) or it has a 'from' attribute whose value matches the
// user's bare JID <user@domainpart>.
_converse.log(
`Ignoring roster illegitimate roster push message from ${iq.getAttribute('from')}`,
Strophe.LogLevel.WARN
log.warn(
`Ignoring roster illegitimate roster push message from ${iq.getAttribute('from')}`
);
return;
}
@ -581,12 +581,12 @@ converse.plugins.add('converse-roster', {
const items = sizzle(`item`, query);
if (items.length > 1) {
_converse.log(iq, Strophe.LogLevel.ERROR);
log.error(iq);
throw new Error('Roster push query may not contain more than one "item" element.');
}
if (items.length === 0) {
_converse.log(iq, Strophe.LogLevel.WARN);
_converse.log('Received a roster push stanza without an "item" element.', Strophe.LogLevel.WARN);
log.warn(iq);
log.warn('Received a roster push stanza without an "item" element.');
return;
}
this.updateContact(items.pop());
@ -628,8 +628,9 @@ converse.plugins.add('converse-roster', {
}
} else if (!u.isServiceUnavailableError(iq)) {
// Some unknown error happened, so we will try to fetch again if the page reloads.
_converse.log(iq, Strophe.LogLevel.ERROR);
return _converse.log("Error while trying to fetch roster from the server", Strophe.LogLevel.ERROR);
log.error(iq);
log.error("Error while trying to fetch roster from the server");
return;
}
_converse.session.save('roster_cached', true);
/**

View File

@ -10,8 +10,9 @@
* Converse.js plugin which adds support for XEP-0198: Stream Management
*/
import converse from "./converse-core";
import log from "./log";
const { Strophe, } = converse.env;
const { Strophe } = converse.env;
const u = converse.env.utils;
@ -50,7 +51,7 @@ converse.plugins.add('converse-smacks', {
if (delta < 0) {
const err_msg = `New reported stanza count lower than previous. `+
`New: ${handled} - Previous: ${last_known_handled}`
_converse.log(err_msg, Strophe.LogLevel.ERROR);
log.error(err_msg);
}
const unacked_stanzas = _converse.session.get('unacked_stanzas');
if (delta > unacked_stanzas.length) {
@ -59,7 +60,7 @@ converse.plugins.add('converse-smacks', {
`Reported Acknowledged Count: ${delta} -`+
`Unacknowledged Stanza Count: ${unacked_stanzas.length} -`+
`New: ${handled} - Previous: ${last_known_handled}`
_converse.log(err_msg, Strophe.LogLevel.ERROR);
log.error(err_msg);
}
_converse.session.save({
'num_stanzas_handled_by_server': handled,
@ -125,11 +126,11 @@ converse.plugins.add('converse-smacks', {
//
// After resource binding, sendEnableStanza will be called
// based on the afterResourceBinding event.
_converse.log('Could not resume previous SMACKS session, session id not found. '+
'A new session will be established.', Strophe.LogLevel.WARN);
log.warn('Could not resume previous SMACKS session, session id not found. '+
'A new session will be established.');
} else {
_converse.log('Failed to enable stream management', Strophe.LogLevel.ERROR);
_converse.log(el.outerHTML, Strophe.LogLevel.ERROR);
log.error('Failed to enable stream management');
log.error(el.outerHTML);
}
resetSessionData();
/**
@ -224,7 +225,7 @@ converse.plugins.add('converse-smacks', {
function onStanzaSent (stanza) {
if (!_converse.session) {
_converse.log('No _converse.session!', Strophe.LogLevel.WARN);
log.warn('No _converse.session!');
return;
}
if (!_converse.session.get('smacks_enabled')) {

87
src/headless/log.js Normal file
View File

@ -0,0 +1,87 @@
import * as strophe from 'strophe.js/src/core';
import { get, isElement } from 'lodash';
const Strophe = strophe.default.Strophe;
const logger = Object.assign({
'debug': get(console, 'log') ? console.log.bind(console) : function noop () {},
'error': get(console, 'log') ? console.log.bind(console) : function noop () {},
'info': get(console, 'log') ? console.log.bind(console) : function noop () {},
'warn': get(console, 'log') ? console.log.bind(console) : function noop () {}
}, console);
/**
* The log namespace
* @namespace log
*/
const log = {
/**
* Initialize the logger by setting the loglevel
* @method log#initialize
* @param { string } message - The message to be logged
* @param { integer } level - The loglevel which allows for filtering of log messages
*/
initialize (loglevel) {
this.loglevel = loglevel;
},
/**
* Logs messages to the browser's developer console.
* Available loglevels are 0 for 'debug', 1 for 'info', 2 for 'warn',
* 3 for 'error' and 4 for 'fatal'.
* When using the 'error' or 'warn' loglevels, a full stacktrace will be
* logged as well.
* @method log#log
* @param { string } message - The message to be logged
* @param { integer } level - The loglevel which allows for filtering of log messages
*/
log (message, level, style='') {
if (level === Strophe.LogLevel.ERROR || level === Strophe.LogLevel.FATAL) {
style = style || 'color: maroon';
} else if (level === Strophe.LogLevel.DEBUG) {
style = style || 'color: green';
}
if (message instanceof Error) {
message = message.stack;
} else if (isElement(message)) {
message = message.outerHTML;
}
const prefix = style ? '%c' : '';
if (level === Strophe.LogLevel.ERROR) {
logger.error(`${prefix} ERROR: ${message}`, style);
} else if (level === Strophe.LogLevel.WARN) {
logger.warn(`${prefix} ${(new Date()).toISOString()} WARNING: ${message}`, style);
} else if (level === Strophe.LogLevel.FATAL) {
logger.error(`${prefix} FATAL: ${message}`, style);
} else if (this.loglevel === Strophe.LogLevel.DEBUG && level === Strophe.LogLevel.DEBUG) {
logger.debug(`${prefix} ${(new Date()).toISOString()} DEBUG: ${message}`, style);
} else if (this.loglevel === Strophe.LogLevel.INFO) {
logger.info(`${prefix} ${(new Date()).toISOString()} INFO: ${message}`, style);
}
},
debug (message) {
this.log(message, Strophe.LogLevel.DEBUG);
},
error (message) {
this.log(message, Strophe.LogLevel.ERROR);
},
info (message) {
this.log(message, Strophe.LogLevel.INFO);
},
warn (message) {
this.log(message, Strophe.LogLevel.WARN);
},
fatal (message) {
this.log(message, Strophe.LogLevel.FATAL);
}
}
export default log;

View File

@ -9,6 +9,7 @@
import * as strophe from 'strophe.js/src/core';
import Backbone from "backbone";
import _ from "../lodash.noconflict";
import log from "@converse/headless/log";
import sizzle from "sizzle";
const Strophe = strophe.default.Strophe;
@ -19,12 +20,6 @@ const Strophe = strophe.default.Strophe;
*/
const u = {};
u.logger = Object.assign({
'debug': _.get(console, 'log') ? console.log.bind(console) : function noop () {},
'error': _.get(console, 'log') ? console.log.bind(console) : function noop () {},
'info': _.get(console, 'log') ? console.log.bind(console) : function noop () {},
'warn': _.get(console, 'log') ? console.log.bind(console) : function noop () {}
}, console);
u.isTagEqual = function (stanza, name) {
if (stanza.nodeTree) {
@ -643,7 +638,7 @@ u.waitUntil = function (func, max_wait=300, check_delay=3) {
const max_wait_timeout = setTimeout(() => {
clearTimers(max_wait_timeout, interval);
const err_msg = 'Wait until promise timed out';
u.logger.error(err_msg);
log.error(err_msg);
promise.reject(new Error(err_msg));
}, max_wait);