Skip to content

serjrd/node-xmpp

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

546 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

node-xmpp

idiomatic XMPP library for node.js

Now usable in browsers too thanks to Browserify.

build status

Roadmap for 0.4.0

  • Events harmonization
  • Common pause/resume/... for any Client/Component/Server session
  • Smoothen reconnect
  • Websockets server (at least for testing the client)
  • Lookup BOSH URLs in DNS TXT records
  • Move connecting to connection, use WS/BOSH as TCP fallback
  • Use split-out srv library
  • Ensure tls end/close/drain events
  • Properly disconnect on stream errors, not on connection errors
  • Tests for S2S connections
  • Tests for Component connections (w/ Component server?)
  • Find a browser-based demo app that can be switched from Strophe.js

Installation

With package manager npm:

npm install node-xmpp

How to use

Please see the various examples.

Objectives of node-xmpp:

  • Use node.js conventions, especially EventEmitter, ie. for write buffer control
  • Fast parsing, node-expat was written for this library
  • Client support for both XMPP clients and components
  • Optional server infrastructure with Router
  • After authentication, leave trivial protocol bits to the user, that is XML handling according to any XEP

Features

  • Client authentication with SASL DIGEST-MD5, PLAIN, ANONYMOUS, X-FACEBOOK-PLATFORM
  • _xmpp-client._tcp SRV record support
  • Simple JID parsing with Stringprep normalization
    • Optional now, you won't need ICU for just node-xmpp
    • Please be aware if you identify users by JIDs
    • npm install node-stringprep
  • Uses ltx
    • Much easier to handle than a standard DOM
    • xmlns-aware
    • Easy XML builder like Strophe.js (see down)
    • Non-buffering serialization
    • Was split out of node-xmpp for modularization and resuability
  • Component connections
  • Run your own server/talk to other servers with xmpp.Router
  • Even runs in the Browser.

Dependencies

Optional

Related Libraries

Design

Inheritance tree and associations:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”1     1β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ net.Stream β”œβ”€β”€β”€β”€β”€β”€β”€β”€ Connection β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           ↑
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚            β”‚           β”‚            β”‚
┏━━━━━┷━━━━┓ ┏━━━━━┷━━━━━┓ β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
┃  Client  ┃ ┃ Component ┃ β”‚ Server β”‚ β”‚ C2SStream β”‚
┗━━━━━━━━━━┛ ┗━━━━━━━━━━━┛ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               ↑            ↑0..*
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€            β”‚accepts
         β”‚                     β”‚            β”‚1
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β” ┏━━━━━┷━━━━━┓
β”‚ OutgoingServer β”‚ β”‚ IncomingServer β”‚ ┃ C2SServer ┃
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”˜ β””β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ┗━━━━━┯━━━━━┛
         0..* β”‚        β”‚ 0..*               β”‚
      creates β”‚        β”‚ accepts            β”‚
             ┏┷━━━━━━━━┷┓                   β”‚
             ┃  Router  β”ƒβ†β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             ┗━━━━━━━━━━┛ 1

This foundation is complemented by two basic data structures:

  • JID: a Jabber-Id, represented as a triple of user, domain, resource
  • Element: any XML Element

Building XML Elements

Strophe.js' XML Builder is very convenient for producing XMPP stanzas. ltx includes it in a much more primitive way: the c(), cnode() and t() methods can be called on any Element object, returning the new child element.

This can be confusing: in the end, you will hold the last-added child until you use up(), a getter for the parent. Connection.send() first invokes tree() to retrieve the uppermost parent, the XMPP stanza, before sending it out the wire.

Browser Support

node-xmpp now comes with a prebuilt browser bundle:

<script src="/node_modules/node-xmpp/node-xmpp-browser.js"></script>
<script type="text/javascript">
    var client = new XMPP.Client(opts);
</script>

About

XMPP library for node.js

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • JavaScript 100.0%