Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

95 lines (64 sloc) 3.024 kB

node-xmpp

idiomatic XMPP library for node.js

Installation with npm

npm install node-xmpp

Motivation

You like Strophe.js? You bought a copy of Professional XMPP Programming with JavaScript and jQuery? You even want to use the same XMPP code for the web and node.js? Then you're wrong here: go to xmppjs.

Objectives of node-xmpp:

  • Use node.js conventions, especially EventEmitter, ie. for write buffer control
  • Fast parsing, node-expat was written with this library in mind
  • Support for both XMPP clients and components
  • After authentication, leave trivial protocol bits to the user (later we could offer helpers for entity capabilities hashing, etc)

Features

  • Client authentication with SASL DIGEST-MD5, PLAIN, ANONYMOUS
  • _xmpp-client._tcp SRV record support
  • Simple JID parsing with Stringprep normalization
  • XML builder & serialization, xmlns-aware
  • Component connections

Dependencies

Design

      ┌────────────┐
      │ net.Stream │
      └─────┬──────┘
            │
      ┌─────┴──────┐
      │ Connection │
      └─────┬──────┘
            │
      ┌─────┴──────┐
      │            │
┏━━━━━┷━━━━┓ ┏━━━━━┷━━━━━┓
┃  Client  ┃ ┃ Component ┃
┗━━━━━━━━━━┛ ┗━━━━━━━━━━━┛

That means you can use the TCP events of net.Stream with Client and Component objects. Other than that, hook callbacks to these events:

  • online, when authentication is done and you can send XMPP stanzas (ie. <presence/>)
  • stanza for each incoming XMPP stanza, with the XML Element as parameter
  • error with the <stream:error/> as parameter

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

Desires about the API? Propose them ASAP!

Building XML Elements

strophejs' XML Builder is very convenient for producing XMPP stanzas. node-xmpp 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.

TODO

  • More documentation
  • More tests (Using Vows)
Jump to Line
Something went wrong with that request. Please try again.