Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kdcro101/xmpp-bosh-client
XMPP BOSH protocol client for JavaScript/Typescript. (Re)Written in typescript
https://github.com/kdcro101/xmpp-bosh-client
javascript node typescript web-worker xmpp
Last synced: 2 months ago
JSON representation
XMPP BOSH protocol client for JavaScript/Typescript. (Re)Written in typescript
- Host: GitHub
- URL: https://github.com/kdcro101/xmpp-bosh-client
- Owner: kdcro101
- License: other
- Created: 2018-06-18T09:28:32.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-04-05T08:03:10.000Z (over 5 years ago)
- Last Synced: 2024-10-12T12:33:10.559Z (2 months ago)
- Topics: javascript, node, typescript, web-worker, xmpp
- Language: TypeScript
- Homepage:
- Size: 595 KB
- Stars: 16
- Watchers: 3
- Forks: 5
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# xmpp-bosh-client
XMPP [BOSH](https://en.wikipedia.org/wiki/BOSH_(protocol)) client for Javascript/Typescript.
Jump to module [interface](#interface)
## Features
- works in browser
- works in Web worker
- strictly typed
- includes implementation of [XEP-0199: XMPP Ping](https://xmpp.org/extensions/xep-0199.html)## Installation
`npm install xmpp-bosh-client`
## Usage
1) Import BoshClient
When using with node.js
```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
```js
const connection = new BoshClient(USERNAME, PASSWORD, URL);
```3) setup event listeners
```js
connection.on("error", errorListener);
connection.on("stanza", stanzaListener);
connection.on("online", onlineListener);
connection.on("offline", offlineListener);
```4) start connecting procedure
```js
connection.connect()
```### Typescript
```ts
// 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();
```
### Javascript
```js
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();```
### Browser (classic)
Include script tag, for example:
```html
```
exports will be accessible via `BoshXMPP` wrapper:
```js
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.
### Browser (angular or other typescript based framwork)See typescript example above.
# Stanza building
```js
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:
```xml
some inner text
```
## Constructor(jid, password, boshUrl, route)
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
```
## on(event_name, listener)
Register event listener
```
event_name [string] : event name. One of: online,offline,stanza,error,ping
listener [function] : event listener functionData type for event callbacks:
online -> void
offline -> string
error -> string
stanza -> XmlElement
ping -> XmlElement```
## off(event_name, listener)
Unregister event listener
```
event_name [string] : event name. One of: online,offline,stanza,error,ping
listener [function] : event listener function
```## connect()
Start connecting procedure## send(stanza)
Sends XML stanza to server
```
stanza [XmlElement] : Stanza to send
```
## sendMessage(to, mbody, type)
Sends chat message
```
to [string] : destination XMPP username (user@domain)
mbody [string] : Message body
type [string] : optional. type attribute, defaults to "chat"
```
## disconnect()
Sends any pending stanzas and terminates connection.## unregisterListeners()
Unregister all registred listeners. Useful when you don't want to trigger any events after disconnect.## errors
- *auth_error* : invalid credentials. Error while authenticating
- *xml_parsing_error* : error parsing incoming stanza string
- *binding_error* : error while binding to resource
- *session_create_error* : error while creating session
- *start_sasl_error* : no sasl mechanism available
- *plain_sasl_unavailable_error*: on plain sasl mechanism available## ltxElement
Reference to ltx.Element constructor. See [this](https://github.com/xmppjs/ltx).
Use to construct XML element.returns `XmlElement`
```js
const e = new ltxElement("element",{
attr1: "some_value",
attr2: "some_other_value"
})
```## $build(name, attrs)
alias for `new ltxElement(name, attrs)`returns `XmlElement`
```js
const e = $build("element",{
attr1: "some_value",
attr2: "some_other_value"
})
```## $msg(attrs)
Helper to construct message stanza. Alias for `$build("message",attrs)`returns `XmlElement`
## $iq(attrs)
Helper to construct `iq` stanza. Alias for `$build("iq",attrs)`returns `XmlElement`
## $pres(attrs)
Helper to construct `presence` stanza. Alias for `$build("presence",attrs)`returns `XmlElement`
# Additional reading
Read [this](https://metajack.im/2008/07/02/xmpp-is-better-with-bosh/) article.
# Credits
Thanks to https://github.com/eelcocramer and his [work](https://github.com/eelcocramer/node-bosh-xmpp-client)