* ISC License
* Copyright (C) 2024 Huawei Device Co., Ltd.
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
"use strict";
import stringify from "./src/main/lib/stringify";
import xml from "@ohos/xmpp_xml";
import clone from "./src/main/lib/clone";
const NS_SASL = "urn:ietf:params:xml:ns:xmpp-sasl";
const NS_COMPONENT = "jabber:component:accept";
const SENSITIVES = [
["handshake", NS_COMPONENT],
["auth", NS_SASL],
["challenge", NS_SASL],
["response", NS_SASL],
["success", NS_SASL],
];
function isSensitive(element) {
if (element.children.length === 0) return false;
return SENSITIVES.some((sensitive) => {
return element.is(...sensitive);
});
}
export function hideSensitive(element) {
if (isSensitive(element)) {
element.children = [];
element.append(xml("hidden", { xmlns: "xmpp.js" }));
}
return element;
}
function format(element) {
return stringify(hideSensitive(clone(element), 2));
}
export default function debug(entity, force) {
if (process.env.XMPP_DEBUG || force === true) {
entity.on("element", (data) => {
console.debug(`IN\n${format(data)}`);
});
entity.on("send", (data) => {
console.debug(`OUT\n${format(data)}`);
});
entity.on("error", console.error);
entity.on("status", (status, value) => {
console.debug("status", status, value ? value.toString() : "");
});
}
};