XMPP BOSH client for Javascript/Typescript.
Jump to module interface
npm install xmpp-bosh-client
1) Import BoshClient
When using with node.js
import { BoshClient, $build } from "xmpp-bosh-client/node";
When using with typescript framework running in browser (angular/react/etc)
import { BoshClient, $build } from "xmpp-bosh-client/browser";
2) construct BoshClient object
const connection = new BoshClient(USERNAME, PASSWORD, URL);
3) setup event listeners
connection.on("error", errorListener);
connection.on("stanza", stanzaListener);
connection.on("online", onlineListener);
connection.on("offline", offlineListener);
4) start connecting procedure
connection.connect()
// when using with Node.js
import { BoshClient } from "xmpp-bosh-client/node";
// when using with angular/react (execution in browser)
import { BoshClient } from "xmpp-bosh-client/browser";
const USERNAME = "username@example.com";
const PASSWORD = "somePassword";
const URL = "https://www.example.com:5280/http-bind/";
const client = new BoshClient(USERNAME, PASSWORD, URL);
client.on("error", (e) => {
console.log("Error event");
console.log(e);
});
client.on("online", () => {
console.log("Connected successfully");
});
client.on("ping", () => {
console.log(`Ping received at ${new Date()}`);
});
client.on("stanza", (stanza) => {
console.log(`Stanza received at ${new Date()}`);
console.log(stanza);
});
client.on("offline", () => {
console.log("Disconnected/Offline");
});
connection.connect();
var lib = require("xmpp-bosh-client/node");
// when using with Node.js
var lib = require("xmpp-bosh-client/browser");
// when using with angular/react (execution in browser)
var USERNAME = "username@example.com";
var PASSWORD = "somePassword";
var URL = "https://www.example.com:5280/http-bind/";
var client = new lib.BoshClient(USERNAME, PASSWORD, URL);
client.on("error", function (e) {
console.log("Error event");
console.log(e);
});
client.on("online", function () {
console.log("Connected successfully");
});
client.on("ping", function () {
console.log("Ping received at " + new Date());
});
client.on("stanza", function (stanza) {
console.log("Stanza received at %s",new Date());
console.log(stanza);
});
client.on("offline", function () {
console.log("Disconnected/Offline");
});
client.connect();
Include script tag, for example:
<script src="https://github.com/kdcro101/xmpp-bosh-client/raw/master/node_modules/xmpp-bosh-client/browser-bundle/index.js"></script>
exports will be accessible via BoshXMPP
wrapper:
var client = new BoshXMPP.BoshClient(USERNAME, PASSWORD, URL);
client.on("error", (e) => {
console.log("Error event");
console.log(e);
});
client.on("online", () => {
console.log("Connected successfully");
});
client.on("ping", () => {
console.log(`Ping received at ${new Date()}`);
});
client.on("stanza", (stanza) => {
console.log(`Stanza received at ${new Date()}`);
console.log(stanza);
});
client.on("offline", () => {
console.log("Disconnected/Offline");
});
connection.connect();
Copy index.js
file in location of your convenience and update src attribute.
See typescript example above.
const root: XmlElement = $build('message', { to: "username@example.com" });
const child1 = root.cnode($build("header", {
id: "123",
jid: "user@example.com"
}));
child1.cnode($build("some-element", {
a: "1",
b: 2
}));
Would generate:
<message to="username@example.com">
<header id="123" jid="user@example.com">
<some-element a="1" b="2"/>
</header>
<body>
some inner text
</body>
</message>
Constructs BoshClient instance
jid [string] : XMPP username to connect with
password [string] : password to connect with
boshUrl [string] : URL to connect to (example: https://www.example.com:5280/http-bind/)
route [string] : optional. routing server for connection. see https://xmpp.org/extensions/xep-0124.html#session-request
Register event listener
event_name [string] : event name. One of: online,offline,stanza,error,ping
listener [function] : event listener function
Data type for event callbacks:
online -> void
offline -> string
error -> string
stanza -> XmlElement
ping -> XmlElement
Unregister event listener
event_name [string] : event name. One of: online,offline,stanza,error,ping
listener [function] : event listener function
Start connecting procedure
Sends XML stanza to server
stanza [XmlElement] : Stanza to send
Sends chat message
to [string] : destination XMPP username (user@domain)
mbody [string] : Message body
type [string] : optional. type attribute, defaults to "chat"
Sends any pending stanzas and terminates connection.
Unregister all registred listeners. Useful when you don't want to trigger any events after disconnect.
Reference to ltx.Element constructor. See this. Use to construct XML element.
returns XmlElement
const e = new ltxElement("element",{
attr1: "some_value",
attr2: "some_other_value"
})
alias for new ltxElement(name, attrs)
returns XmlElement
const e = $build("element",{
attr1: "some_value",
attr2: "some_other_value"
})
Helper to construct message stanza. Alias for $build("message",attrs)
returns XmlElement
Helper to construct iq
stanza. Alias for $build("iq",attrs)
returns XmlElement
Helper to construct presence
stanza. Alias for $build("presence",attrs)
returns XmlElement
Read this article.
Thanks to https://github.com/eelcocramer and his work