HTTP API plugin for üWave, the collaborative listening platform.
Getting Started - API - Building - License
Note: üWave is still under development. Particularly the
u-wave-coreandu-wave-http-apimodules will change a lot before the "official" 1.0.0 release. Make sure to always upgrade both of them at the same time.
npm install u-wave-http-api
The module exports a middleware that can be used with express-style HTTP request handlers.
import { createHttpApi, createSocketServer } from 'u-wave-http-api'
const { createHttpApi, createSocketServer } = require('u-wave-http-api')Creates a middleware for use with Express or another such library. The first
parameter is a u-wave-core instance. Available options are:
secret- A string or Buffer containing a secret used to encrypt authentication tokens. It's important that this is the same as thesecretoption passed to the core library.recaptcha- If you want to force ReCaptcha validation on new registrations, pass an object with ReCaptcha options. The only available option issecret, which is the ReCaptcha secret obtained from the "Server-side integration" panel on your ReCaptcha site admin page.mailTransport- nodemailer SMTP options or a transport object, used to send password reset emails.onError- Error handler function, use for recording errors. First parameter is the request object that caused the error, second is the error itself.
Example
import express from 'express';
import stubTransport from 'nodemailer-stub-transport';
import uwave from 'u-wave-core';
import { createHttpApi } from 'u-wave-http-api';
const app = express();
const secret = fs.readFileSync('./secret.dat');
const uw = uwave({
secret: secret,
});
const api = createHttpApi(uw, {
secret: secret, // Encryption secret
recaptcha: { secret: 'AABBCC...' }, // Optional
mailTransport: stubTransport(), // Optional
onError: (req, error) => {}, // Optional
});
app.use('/v1', api);Returns a middleware that attaches the üWave core object and the üWave http-api
object to the request. The u-wave-core instance will be available as
req.uwave, and the u-wave-http-api instance will be available as
req.uwaveHttp. This is useful if you want to access these objects in custom
routes, that are not in the u-wave-http-api namespace. E.g.:
Example
app.use('/api', api);
// A custom profile page.
app.get('/profile/:user', api.attachUwaveToRequest(), (req, res) => {
const uwave = req.uwave;
uwave.getUser(req.params.user).then((user) => {
res.send(`<h1>Profile of user ${user.username}!</h1>`);
});
});Create the WebSocket server used for realtime communication, like advance notifications and chat messages.
server- An HTTP server instance.u-wave-http-apiuses WebSockets, and it needs an HTTP server to listen to for incoming WebSocket connections. An example for how to obtain this server from an Express app is shown below.port- The WebSocket server can also listen on its own port instead of attaching to the HTTP server. In that case, specify the port number here.secret- A string or Buffer containing a secret used to encrypt authentication tokens. It's important that this is the same as thesecretoption passed to the core library and thecreateHttpApifunction.onError- Error handler function, use for recording errors. First parameter is the WebSocket instance that caused the error, second is the error itself. The WebSocket instance may benullif the error occurred in the server itself, unrelated to a connection.
Example
import express from 'express';
import { createSocketServer } from 'u-wave-http-api';
const app = express();
const server = app.listen(8080);
const secret = fs.readFileSync('./secret.dat');
const sockets = createSocketServer(uw, {
server, // The HTTP server
secret: secret, // Encryption secret
onError: (socket, err) => {}, // Optional
});
// ALTERNATIVELY:
const sockets = createSocketServer(uw, {
port: 6042, // Port to listen on—make sure to configure web clients for this
secret: secret, // Encryption secret
});There is a development server included in this repository. To use it, first you have to clone and install u-wave-core.
git clone https://github.com/u-wave/core u-wave-core
cd u-wave-core
npm install
npm linkThen you can clone and install the HTTP API:
git clone https://github.com/u-wave/http-api u-wave-http-api
cd u-wave-http-api
npm install
# Add our local u-wave-core
npm link u-wave-core
# & run the server!
npm start -- --port 6042The build step compiles the futuristic JavaScript that's used in this repository to code that can be used in engines today, using Babel. To compile the code, run:
npm run build
When developing, it might be useful to recompile automatically on changes instead, using:
npm run watch