0.0.3 • Published 9 years ago

apipub v0.0.3

Weekly downloads
3
License
MIT
Repository
github
Last release
9 years ago

apipub

Publish API from server to client and vice versa.

Server example

var apipub = require('apipub/server');
var express = require('express');
var promisify = require('bluebird').promisifyAll;
// promise API is preferred, but callback-style works too
var fs = promisify(require('fs'));

var app = express();

// create websocket RPC endpoint at /
apipub(app, '/', function (client) {
    // mount whole `fs` library
    client.mount('fs', fs);
    
    // per client state and access control example
    var authed = false;
    client.mount('auth', function (pass) {
        authed = pass == 'ossifrage';
    });
    client.mount('get', function (path) {
        if (!authed) {
            return Promise.reject('foo!');
        }
        return fs.readFileAsync(path).then(function (buf) {
            return Promise.resolve(buf.toString());
        });
    });
    
    // mount some object
    client.mount('test', {a: 1, b: 2});
    
    // when client connects, get its api
    client.on('join', function (api) {
        // call client-side mounted function
		api.console.log('Hello, client!');
	});
    
    // something happened
	client.on('error', function (err) {
		console.log(err);
	});
});

app.get('/', function (req, res) {
	res.sendFile(__dirname + "/index.htm");
});
app.use(express.static(__dirname));

app.listen('80', 'localhost');

Client example (browserify)

var apipub = require('apipub/client');
var Q = require('q');

var someFilePath = '.../file.txt';

// connect to current server to the / endpoint
apipub('/', function (server) {
    // mount `console` object
    server.mount('console', console);
    
    // when we've connected to the server
	server.on('join', function (api) {
        // nice syntax for promise-based computations
        // to use generators in older browsers you would need
        // to add `babelify` transform to `browserify`
        Q.spawn(function* () {
            // call something from fs
            api.fs.readFile(someFilePath, function (err, data) {
                console.log(err, data);
            });
            
            // promise-style call
            // mention that previously string-returning toString() returns a Promise now
            console.log(yield (yield api.fs.readFileAsync(someFilePath)).toString());
            
            // call with correct auth token
            yield api.auth('ossifrage');
            console.log(yield api.get(someFilePath));
            
            // call with wrong auth token
            yield api.auth('squeamish');
            console.log(yield api.get(someFilePath));
            
            // test object
            console.log(api.test.a, api.test.b);
        });
	});
});
0.0.3

9 years ago

0.0.2

9 years ago

0.0.1

9 years ago

0.0.0

9 years ago