DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/feathersjs__socket-commons package

    3.1.5 • Public • Published


    Greenkeeper badge

    Build Status Test Coverage Dependency Status Download Status

    Shared functionality for websocket providers like @feathers/socketio and @feathersjs/primus. Only intended to be used internally by other Feathers real-time providers.


    @feathersjs/socket-commons contains internal shared functionality for Feathers real-time providers (currently Socket.io and Primus).

    lib/client.js is a base socket service client lib/index.js returns a configurable function and requires the following options:

    • done - A Promise that resolves once the real-time protocol server has been set up
    • emit - The name of the method to emit data to a socket ('emit' for Socket.io and 'send' for Primus)
    • socketKey - A string or ES6 Symbol which stores the actual socket connection
    • getParams - A function that returns the Feathers connection options for a socket


    Channels provide channel functionality for bi-directional Feathers service providers. It is e.g. used by the Socket.io and Primus provider to quickly determine what messages to send to connected clients.

    const channels = require('@feathersjs/socket-commons/lib/channels');


    app.channel(... names)

    Returns a named or combined channel object.

    const channel = app.channel('test'); // return a `test` channel
    channel.join(connection); // join a channel
    channel.leave(connection); // leave a channel
    channel.filter(connection => {}) // return a new channel with filtered connections
    channel.length // return the number of connections
    channel.connections // all connections in this channel
    const combined = app.channel('test', 'other'); // return a combined channel
    combined.join(connection); // join the `test` and `other` channel
    combined.leave(connection); // leave the `test` and `other` channel
    channel.filter(connection => {}) // return a new channel with filtered connections (connections will only be iterated once)
    combined.length // return the number of connections
    combined.connections // all connections in the combined channel (if a connection is in multiple channels it will only show once)

    app.service('servicename').publish(event, callback), app.service('servicename').publish(callback)

    Register a publishing callback for a service and event (or all events) that returns a (named or combined) channel.

    app.use('/test', {
      create(data) {
        return Promise.resolve(data);
    // `created` event for the `test` service
    app.service('test').publish('created', (data, hook) =>
    // `created` event for the `test` service, sending different data to two different channels
    app.service('test').publish('created', (data, hook) => {
      return [
        app.channel('users').send(_.omit(data, 'groups', 'email'))
    // All events for all services
    app.publish((data, hook) =>
    // All `created` events for all services
    app.publish('created', (data, hook) =>
    // All events for `test` service
    app.service('test').publish((data, hook) =>

    app.on('publish', function(event, channel, hook) {})

    An event that will be sent every time a service event that has connections to publish to happens. channel is a combined channel with all connections to publish the event to.

    Note: If there are no channels or connections the publish event will not be sent.

    app.on('publish', (event, channel, hook) => {
      channel.connections.forEach(connection => {
        // Do something with `connection`


    Copyright (c) 2015

    Licensed under the MIT license.


    npm i @feathersjs/socket-commons

    DownloadsWeekly Downloads






    Last publish


    • alexisabril
    • ekryski
    • daffl
    • marshallswain