XMPP BOSH protocol client for JavaScript/Typescript. (Re)Written in typescript
OTHER License
XMPP BOSH client for Javascript/Typescript.
Jump to module interface
npm install xmpp-bosh-client
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";
const connection = new BoshClient(USERNAME, PASSWORD, URL);
connection.on("error", errorListener);
connection.on("stanza", stanzaListener);
connection.on("online", onlineListener);
connection.on("offline", offlineListener);
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 = "[email protected]";
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 = "[email protected]";
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="./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: "[email protected]" });
const child1 = root.cnode($build("header", {
id: "123",
jid: "[email protected]"
}));
child1.cnode($build("some-element", {
a: "1",
b: 2
}));
Would generate:
<message to="[email protected]">
<header id="123" jid="[email protected]">
<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