DocumentationFundamentals
JavaScript app
Receive webhooks directly inside your application without public IP
Webhook Relay's Socket Server allows users to receive webhooks inside their application without having public IP, domain or even running a web server themselves. Here's a short example application written in JavaScript that subscribes to a stream of webhooks:
The code
// client.js
const WebSocket = require('ws');
const ws = new WebSocket('wss://my.webhookrelay.com/v1/socket');
var apiKey = process.env.RELAY_KEY;
var apiSecret = process.env.RELAY_SECRET;![](2023-08-27-22-40-21.png)
ws.on('open', function open() {
// on connection, send our authentication request
ws.send(JSON.stringify({action: 'auth', key: apiKey, secret: apiSecret}));
});
ws.on('close', function close() {
console.log('disconnected');
});
ws.on('message', function incoming(data) {
console.log(data)
var msg = JSON.parse(data);
if (msg.type === 'status' && msg.status === 'authenticated') {
// if we got authentication confirmation, send subscribe event to the server
ws.send(JSON.stringify({action: 'subscribe', buckets: ['123']}));
}
});
Install websocket library
We will use the ws
library for websocket connectivity. It's extremely popular (https://www.npmjs.com/package/ws) and should have a decent support:
npm i ws
Set token key and secret
Generate your access key and secret in the tokens page
export RELAY_KEY=your-token-key
export RELAY_SECRET=your-token-secret
Start the application
To start it, use node
directly:
node client.js
Now, if you send a webhook to your public input endpoint, you should see something similar:
$ node client.js
{"type":"status","status":"authenticated","message":"connected successfully, subscribe to buckets"}
{"type":"status","status":"subscribed","message":"subscribed to buckets: 123"}
{"type":"webhook","meta":{"bucked_id":"89e44c32-27ff-4832-8655-8a42d3851b6f","bucket_name":"123","input_id":"ee4ac550-12a4-41a7-837d-dd3356ed1771","input_name":"Default public endpoint"},"headers":{"Content-Length":["15"],"User-Agent":["insomnia/6.0.2"],"Cookie":["__cfduid=dc244a014f0b1e2965544ddb483c3fe1b1525866866"],"Content-Type":["application/json"],"Accept":["*/*"]},"query":"","body":"{\"hi\": \"there\"}","method":"PUT"}