W3gram Server

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
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": "*"}}' \
https://w3gram-test.herokuapp.com/apps
Manual Interaction Example
Create a token for a device ID.
echo -n "device-id|my-tablet" | \
openssl dgst -sha256 -hmac "7cAXyVAYEhRbQ0UFCFI4qJAWOmXLZaPC1xX6niNIxCE" \
-binary | base64
Register the device.
curl -i -X POST -H 'Content-Type: application/json' \
-d '{"app": "uUJPS3zgIpQjDnxn", "device": "my-tablet", "token": "EVwwWmwiIfLbTDV8OWsHVc4r_p2WUpKXIJcXCdtoFxM"}' \
https://w3gram-test.herokuapp.com/register
Do the routing step.
curl -i -X POST -H 'Content-Type: application/json' -d '{}' \
https://w3gram-test.herokuapp.com/route/1.my-tablet.WMF5TISqRYYkUr5GJWunmP40FvXI1yU_Qb5kXc907TY
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" } }' \
https://w3gram-test.herokuapp.com/push
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" }}' \
http://localhost:3100/apps
License
This project is Copyright (c) 2014 Victor Costan, and distributed under the MIT
License.