New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

ws-api

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ws-api

Api on top of the websocket library

latest
Source
npmnpm
Version
1.1.3
Version published
Maintainers
1
Created
Source

WS-API

Server and client library for implementing api on top of the websocket

Install

npm install --save ws-api

Requirements

  • Promise (native or polyfill in global scope)
  • async/await support (only for node.js), use node 7.6+ or node 8.0+ (recommended)

Usage examples

client

<body>
    <pre></pre>
    <input type="file">
</body>
const api = require('ws-api')('//localhost:3000/');

 api.request('test/resolve').then(console.log.bind(console));
 api.request('test/reject').catch(console.log.bind(console));

document.addEventListener('DOMContentLoaded', () => {
    const pre = document.querySelector('pre');
    const input = document.querySelector('input');
    api.subscribe('session', payload => {
        pre.innerHTML = JSON.stringify(payload, null, 2);
    });
    input.addEventListener('change', () => {
        const file = input.files[0];
        if(!file) { return; }
        api.request('file', {name: file.name}, file);
    });
    void function e(test) {
        setTimeout(() => {
            api.request('set', {test}).then(e);
        }, 3000)
    }(true);
});

server

const fs = require('fs');
const {Server} = require('ws-api');

const api = new Server({port: 3000});

// In all your methods this is connection context
// The context is passed to the last arguments of the function
// (for use it in arrow functions)

api.use(ctx => {
    console.log('new session');
    ctx.once('close', () => {
        console.log('destroy session');
    });
});

api.channel('session', (publish, ctx) => {
    console.log('subscribe');
    const t = setInterval(() => {
        publish(ctx.session);
    }, 5000);
    return () => {
        console.log('unsubscribe');
        clearInterval(t);
    };
});

api.mount('file', async ({name}, stream) => {
    console.log('request file ' + name);
    const outStream = fs.createWriteStream(__dirname + '/tmp/' + name);
    const p = new Promise(resolve => stream.once('end', resolve));
    stream.pipe(outStream);
    await p;
    return true;
});

api.mount('set', function(payload) {
    console.log('request set');
    Object.assign(this.session, payload);
    return this.session;
});

api.mount('test/', {
    resolve() { return {test: 'resolve'}; },
    reject() { throw {test: 'reject'} }
});

Api docs

see docs

License

MIT

Keywords

ws

FAQs

Package last updated on 19 Jul 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts