@pazznetwork/xmpp-adapter
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-beta • Public • Published

XMPP

General

Xmpp stands for "Extensible Messaging and Presence Protocol" and was called in the past Jabber, that is the reason why there are so many references to jabber instead of xmpp.

Xmpp connects over BOSH (Bidirectional-streams Over Synchronous HTTP) which means that 2 HTTP connection will be kept open which sends stanzas (XML payloads) to the server in the first and gets them in the second one. Xmpp can now be implemented with Websocket except secure reconnections, discovery and other specific technical expectations.

General Technical Design Guidelines

In general the xmpp design choices can be better understood if you imagine trying to make a chat out of email. Therefore, there a specifications for the case of multi-user clients on a device, multi device users, multi device users on multiple servers which all support or can support different sets of features while also the same client can offer the user multiple different sets of features to support.

The goal of the authentication as well the communication line encryption tries always to be as simple and secure as possible as-well as supporting all versions and iterations of the specifications dedicated to it.

As the clients struggled with a high amount of complexity for many users the complexity was pushed slowly back to the specifications also different specifications sets. Modern clients should orient themselves on the compliance for the XMPP IM (instant messaging) client and look for the extended protocols. See: https://xmpp.org/extensions/xep-0443.html#im and https://xmpp.org/extensions/xep-0369.html the MIX specification making it possible to skip the previous implementations.

TODO MORE:

Contact Management

Every user can write to any other user as long they know or have their jid, guessed of from a shared room. A user can be blocked or added to your contacts. An add to the contacts is a subscription to as users presence which will be broadcast by him when he logs in. When a user added you to your contacts you can also add them which creates a bidirectional subscriptions.

The add, remove and block are managed by the rooster spec and block spec which manage contact and block lists of a user.

There is always the case of the user writing without sending a contact request which leads to the need to also analyse the received messages by the user to visualize all contacts.

Messaging

In the core specification messages arrive to a user only when he is online and only to the specific client and specific device and are only kept in one session. For managing offline messages and the message history the Message Archive Management shorted to MAM was added.

When a server supports this feature

Other Message Features other Chat Clients offer and are in specification process:

  • Time

Connection Management

To establish a stable connection the implementation of the ping specification is necessary to avoid timeouts if there are no actions performed on the connections. To have proper timeouts on requests there is the need for the ack specifications which checks regular if a set amount of requests was answered and makes a reconnections possible on the last set of packages.

Specifications

XMPP Core RFC-6121

XMPP Extension for Websocket RFC-7395

Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence

Abstract Specification extending or amending existing ones

XMPP Forms, XHTML, X-Forms

XEP-0004 Used in publish-subscribe, message-archive or multi-user-chat.

Extended Stanza Addressing

XEP-0033 Used to send one message to several JIDs at the same time and to forward messages.

Plugins

service-discovery

XEP-0030

XEP Version Status Name Plugins Notes
XEP-0045 1.31.2 Partial Multi-user chat rooms multi-user-chat All basics stuff is supported. Also, some more advanced features like invitations, creation of rooms, etc.
XEP-0048 1.1 Partial Bookmarks bookmark
XEP-0049 1.2 Discuss Private XML Storage For bookmark storage and meta contacts.
XEP-0050 1.2 Discuss Ad-Hoc Commands
XEP-0054 1.2 Discuss VCard-temp
XEP-0055 1.3 Discuss Jabber Search
XEP-0059 1.0 Partial Result Set Management message-archive Used by XEP-0313.
XEP-0060 1.13 Partial Publish-Subscribe publish-subscribe
XEP-0065 1.8 Discuss SOCKS5 Bytestreams
XEP-0066 1.5 Planned Out of Band Data Support for URLs in messages.
XEP-0070 1.0 Discuss Verifying HTTP Requests via XMPP
XEP-0071 1.4 Discuss XHTML-IM
XEP-0077 2.4 Partial In-band registration registration
XEP-0083 1.0 Discuss Nested Roster Groups
XEP-0084 1.1.1 Discuss User Avatar
XEP-0085 2.1 Discuss Chat State Notifications
XEP-0095 1.1 Discuss Stream Initiation
XEP-0107 1.2 Discuss User Mood
XEP-0108 1.3 Discuss User Activity
XEP-0115 1.5 Partial Entity Capabilities roster
XEP-0118 1.2 Discuss User Tune
XEP-0144 1.1.1 Discuss Roster Item Exchange Makes sharing of roster contacts possible
XEP-0145 1.0 Discuss Annotations Notes for contacts
XEP-0146 1.0 Discuss Remote Controlling Clients
XEP-0153 1.0 Discuss vCard-Based Avatars
XEP-0157 1.1.0 Discuss Contact Addresses for XMPP Services
XEP-0158 1.0 Discuss CAPTCHA Forms Images only.
XEP-0163 1.2 Partial Personal Eventing Protocol publish-subscribe, message-archive
XEP-0166 1.1.2 Discuss Jingle
XEP-0172 1.0 Discuss User Nickname
XEP-0184 1.2 Discuss Message Receipt Message was read notification
XEP-0191 1.3 Partial Blocking Command block Implemented instead of XEP-0016
XEP-0198 1.6 Partial Stream Management foreign:xmpp/stream-management Automatically responds to acks but does not support requesting acks yet.
XEP-0199 2.0 Partial XMPP Ping ping
XEP-0200 0.2 Discuss Stanza Encryption
XEP-0202 2.0 Partial Entity Time entity-time
XEP-0203 2.0 Discuss Delayed Delivery
XEP-0209 0.1 Discuss Metacontacts
XEP-0221 1.0 Discuss Data Forms Media Element
XEP-0222 1.0 Discuss Persistent Storage of Public Data via PubSub
XEP-0223 1.1 Discuss Persistent Storage of Private Data via PubSub
XEP-0224 1.0 Discuss Attention
XEP-0231 1.0 Discuss Bits of Binary
XEP-0234 0.17.1 Discuss Jingle File Transfer
XEP-0237 1.2 Discuss Roster Versioning
XEP-0245 1.0 Discuss The /me Command
XEP-0249 1.2 Discuss Direct MUC Invitations
XEP-0258 1.1.1 Discuss Security Labels in XMPP
XEP-0260 1.0.3 Discuss Jingle SOCKS5 Bytestreams Transport Method
XEP-0261 1.0 Discuss Jingle In-Band Bytestreams Transport Method
XEP-0280 0.12.0 Partial Message Carbons message-carbons Without implementing §6.1
XEP-0284 0.1.3 Discuss Shared XML Editing
XEP-0292 0.11 Discuss vCard4 Over XMPP
XEP-0297 0.3 Partial Stanza Forwarding message-carbons Supported only for XEP-0313/xep-0280.
XEP-0300 1.0.0 Discuss Use of Cryptographic Hash Functions in XMPP
XEP-0306 0.2.1 Discuss Extensible Status Conditions for Multi-User Chat
XEP-0308 1.0 Discuss Last Message Correction
XEP-0313 0.6.3 Partial Message Archive Management message-archive Makes message history for users
XEP-0316 0.1 Discuss MUC Eventing protocol
XEP-0317 0.1 Discuss Hats
XEP-0319 1.0.2 Discuss Last User Interaction in Presence
XEP-0333 0.4 Discuss Chat Markers
XEP-0334 0.3.0 Discuss Message Processing Hints
XEP-0352 1.0.0 Discuss Client State Indication
XEP-0357 0.4.1 Partial Push Notifications push
XEP-0359 0.6.1 Partial Unique and Stable Stanza IDs message-uid
XEP-0363 1.0.0 Partial HTTP File Upload http-file-upload
XEP-0368 1.1.0 Partial SRV records for XMPP over TLS foreign:xmpp/resolve
XEP-0372 0.5.0 Discuss References
XEP-0373 0.4.0 Discuss OpenPGP plugin.
XEP-0377 0.3 Discuss Spam Reporting
XEP-0380 0.3.0 Discuss Explicit Message Encryption
XEP-0382 0.2.0 Discuss Spoiler messages
XEP-0384 0.7.0 Discuss OMEMO Encryption
XEP-0392 0.7.0 Discuss Consistent Color Generation
XEP-0393 1.1.1 Discuss Message Styling
XEP-0398 0.2.1 Discuss User Avatar to vCard-Based Avatars Conversion
XEP-0411 1.0.0 Discuss Bookmarks Conversion
XEP-0422 0.2.0 Discuss Message Fastening
XEP-0424 0.3.0 Discuss Message Retractions
XEP-0425 0.2.1 Discuss Message Moderation
XEP-0437 0.2.0 Discuss Room Activity Indicators
XEP-0441 0.2.0 Discuss Message Archive Management Preferences
XEP-0453 0.1.0 Discuss DOAP usage in XMPP
XEP-0453 0.1.0 Discuss OMEMO Media sharing

plugin overview

Plugins Core XEP Relevant XEPs Function Notes
block XEP-0191 Blocking contact
bookmark XEP-0048 Storing Stanzas for later actions
entity-time XEP-0202 Message Timestamps
http-file-upload XEP-0363 File upload
message RFC 6120 Messaging Core
message-archive XEP-0313 XEP-0004, XEP-0059, XEP-0163 Message History
message-carbons XEP-0280 XEP-0297 Message Multidevice Sync
message-state CUSTOM XEP-0184 Custom Message Read
message-uuid XEP-0359 Unique
muc-sub Ejabberd Chat Room Notifications
multi-user-chat XEP-0045 XEP-0004 Chat Rooms
ping XEP-0199 Checks connections
publish-subscribe XEP-0060 XEP-0004, XEP-0163 Publish und Subscribe between Nodes with IQ
push XEP-0357 Inform about message when offline
registration XEP-0077 Registration without Admin
roster XEP-0115 List of contacts
service-discovery XEP-0030 XEP-0163 Check for provided Services (XEP's) by server
unread-message-count CUSTOM Count unread messages

Readme

Keywords

none

Package Sidebar

Install

npm i @pazznetwork/xmpp-adapter

Weekly Downloads

1

Version

1.0.0-beta

License

none

Unpacked Size

549 kB

Total Files

170

Last publish

Collaborators

  • timonmasberg
  • frosty861
  • bendingbender
  • lordoliver
  • codebastard