GithubHelp home page GithubHelp logo

rk4github / xmpp-bosh-client Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kdcro101/xmpp-bosh-client

0.0 2.0 0.0 605 KB

XMPP BOSH protocol client for JavaScript/Typescript. (Re)Written in typescript

License: Other

JavaScript 4.95% TypeScript 93.30% Shell 1.75%

xmpp-bosh-client's Introduction

xmpp-bosh-client

XMPP BOSH client for Javascript/Typescript.

Jump to module interface

Features

  • works in browser
  • works in Web worker
  • strictly typed
  • includes implementation of XEP-0199: XMPP Ping

Installation

npm install xmpp-bosh-client

Usage

  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";
  1. construct BoshClient object
const connection = new BoshClient(USERNAME, PASSWORD, URL);
  1. setup event listeners
 connection.on("error", errorListener);
 connection.on("stanza", stanzaListener);
 connection.on("online", onlineListener);
 connection.on("offline", offlineListener);
  1. start connecting procedure
connection.connect()

Typescript

// 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

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:

<script src="./node_modules/xmpp-bosh-client/browser-bundle/index.js"></script>

exports will be accessible via BoshXMPP wrapper:

    var client =  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

    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>

Interface

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 function

Data 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. Use to construct XML element.

returns XmlElement

 const e = new ltxElement("element",{
    attr1: "some_value",
    attr2: "some_other_value"
}) 

$build(name, attrs)

alias for new ltxElement(name, attrs)

returns XmlElement

 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 article.

Credits

Thanks to https://github.com/eelcocramer and his work

xmpp-bosh-client's People

Contributors

kdcro101 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.