0.3.3 • Public • Published

    W3gram Server

    Deploy Build Status API Documentation NPM Version

    This is a node.js server for the W3gram push notification protocol.

    The server was designed to be deployed to Heroku using free resources, so it fits in a single dyno. The code has great test coverage using mocha.

    Easy Setup

    Click the ''Deploy to Heroku'' button at the top of this page to create your own W3gram server running on Heroku. Don't worry, the project only uses free add-ons!

    Get your server's MAK and store it somewhere safely.

    curl -i https://w3gram-test.herokuapp.com/mak
    # Response example: 
    # { "mak": "G-TPkmtKOczXx203po1NblklXsK5OXUylUOGkQUxRQk" } 

    Create an application and note its API key and secret.

    curl -i -X POST -H 'Content-Type: application/json' \
      -d '{"mak": "G-TPkmtKOczXx203po1NblklXsK5OXUylUOGkQUxRQk", "app": { "name": "Testing", "origin": "*"}}' \
    # Response example: 
    # { 
    #    "key":"uUJPS3zgIpQjDnxn", 
    #    "secret":"7cAXyVAYEhRbQ0UFCFI4qJAWOmXLZaPC1xX6niNIxCE", 
    #    "origin":"*", 
    #    "name":"Testing" 
    # } 

    Manual Interaction Example

    Create a token for a device ID.

    echo -n "device-id|my-tablet" | \
        openssl dgst -sha256 -hmac "7cAXyVAYEhRbQ0UFCFI4qJAWOmXLZaPC1xX6niNIxCE" \
        -binary | base64
    # Output example: 
    # EVwwWmwiIfLbTDV8OWsHVc4r/p2WUpKXIJcXCdtoFxM 

    Register the device.

    curl -i -X POST -H 'Content-Type: application/json' \
        -d '{"app": "uUJPS3zgIpQjDnxn", "device": "my-tablet", "token": "EVwwWmwiIfLbTDV8OWsHVc4r_p2WUpKXIJcXCdtoFxM"}' \
    # Response example: 
    # { 
    #    "push":"https://w3gram-test.herokuapp.com/push/1.my-tablet.WMF5TISqRYYkUr5GJWunmP40FvXI1yU_Qb5kXc907TY", 
    #    "route":"https://w3gram-test.herokuapp.com/route/1.my-tablet.HwVTM_07vSbHzrQHCBeHeLygUuvm5esJa2yzOjwmJwQ" 
    # } 

    Do the routing step.

    curl -i -X POST -H 'Content-Type: application/json' -d '{}' \
    # Response example: 
    # { 
    #   "listen":"wss://w3gram-test.herokuapp.com/ws/1.my-tablet.HwVTM_07vSbHzrQHCBeHeLygUuvm5esJa2yzOjwmJwQ" 
    # } 

    Start a WebSocket connection:

    wscat -c "wss://w3gram-test.herokuapp.com/ws/1.my-tablet.HwVTM_07vSbHzrQHCBeHeLygUuvm5esJa2yzOjwmJwQ"

    Send a notification:

    curl -i -X POST -H 'Content-Type: application/json' \
        -d '{"receiver": "1.my-tablet.WMF5TISqRYYkUr5GJWunmP40FvXI1yU_Qb5kXc907TY", "message": { "data": "Hello push world" } }' \

    Development Setup

    Install all dependencies and create PostgreSQL database for development and testing.

    npm install
    createdb w3gram_test
    createdb w3gram_dev

    Run the server in development mode.

    PORT=3100 npm start

    For development, it can be handy to create an application whose key and secret matches pre-defined values.

    curl -i -X POST -H 'Content-Type: application/json' \
      -d '{"mak": "dev-mak", "app": { "name": "Testing", "origin": "*", "key": "fixed-key", "secret": "fixed-secret" }}' \
    # Response example: 
    # { 
    #    "key":"fixed-key", 
    #    "secret":"fixed-secret", 
    #    "origin":"*", 
    #    "name":"Testing" 
    # } 


    This project is Copyright (c) 2014 Victor Costan, and distributed under the MIT License.


    npm i w3gram-server

    DownloadsWeekly Downloads






    Unpacked Size

    188 kB

    Total Files


    Last publish


    • avatar