Comparing version 0.0.2 to 0.0.3
52
index.js
@@ -1,49 +0,3 @@ | ||
var Client = require('./lib/client') | ||
, Server = require('./lib/server') | ||
, Session = require('./lib/session'); | ||
/** | ||
* This is lowercase to mirror how connect.session works | ||
* | ||
* var RedisStore = require('connect-redis')(Uhura); | ||
* var server = Uhura.createServer({ | ||
* store: new RedisStore(options) | ||
* }, function (socket) { | ||
* // Session-aware socket/emitter | ||
* }); | ||
*/ | ||
exports.session = Session; | ||
/** | ||
* Create uhura client | ||
* | ||
* @param {mixed} [port] [Port, as number or string, to use in net.connect] | ||
* @param {string} [host] [Optional host name to use in net.connect] | ||
* @return {net.Socket} [Client emitter] | ||
*/ | ||
exports.Client = Client; | ||
exports.createClient = function (port, host) { | ||
var client = new Client; | ||
client.connect(port, host); | ||
return client; | ||
}; | ||
/** | ||
* Create uhura server | ||
* | ||
* @param {object} [options] [Optional session store options] | ||
* @param {function} [cb] [Function to handle each connection] | ||
* @return {net.Socket} [TCP server to use, not yet listening] | ||
*/ | ||
exports.Server = Server; | ||
exports.createServer = function (options, cb) { | ||
if (typeof options === 'function') { | ||
cb = options; | ||
options = {}; | ||
} | ||
var server = new Server(options); | ||
return server.start(cb); | ||
}; | ||
module.exports = process.env.UHURA_COV | ||
? require('./lib-cov/uhura') | ||
: require('./lib/uhura'); |
@@ -69,3 +69,3 @@ var SendEmitter = require('./send_emitter') | ||
this._reconnect = false; | ||
this.socket.end(); | ||
this.socket.destroy(); | ||
}; | ||
@@ -72,0 +72,0 @@ |
@@ -25,2 +25,10 @@ var SendEmitter = require('./send_emitter') | ||
socket.once('close', this.disconnect.bind(this)); | ||
// Save session whenever it changes | ||
this.on('_set', function () { | ||
ev.session.resetMaxAge(); | ||
ev.session.save(function (err) { | ||
if (err) console.error(err.stack); | ||
}); | ||
}); | ||
} | ||
@@ -54,3 +62,6 @@ util.inherits(Connection, SendEmitter); | ||
this.sessionStore.get(id, function (err, session) { | ||
if (err || ! session) { return ev.start(); } | ||
if (err || ! session) { | ||
delete ev.session.sessionID; | ||
return ev.start(); | ||
} | ||
ev.sessionStore.createSession(ev, session); | ||
@@ -69,12 +80,4 @@ ev.syncSession(); | ||
Connection.prototype.disconnect = function () { | ||
var ev = this; | ||
this.emit('disconnect'); | ||
if (this.ready) { | ||
this.ready = false; | ||
this.session.resetMaxAge(); | ||
this.session.save(function (err) { | ||
if (err) console.error(err.stack); | ||
ev.socket.end(); | ||
}); | ||
} | ||
this.ready && (this.ready = false); | ||
}; |
{ | ||
"name": "uhura", | ||
"version": "0.0.2", | ||
"version": "0.0.3", | ||
"description": "server-to-server event emitter wire protocol", | ||
@@ -18,4 +18,5 @@ "main": "index.js", | ||
"scripts": { | ||
"test": "mocha -r should -G -R spec" | ||
"test": "mocha -r should -G -R spec", | ||
"coverage": "rm -rf lib-cov && jscoverage lib lib-cov && UHURA_COV=1 mocha -r should -G -R html-cov > lib-cov/index.html && open lib-cov/index.html" | ||
} | ||
} |
@@ -6,42 +6,45 @@ var Uhura = require('../'); | ||
t-- && t == 0 && fn(); | ||
} | ||
}; | ||
} | ||
var socket = './test/socket'; | ||
describe('reconnection', function () { | ||
this.timeout(5000); | ||
// Kill server and client after each test | ||
var c, server; | ||
afterEach(function (next) { | ||
c.disconnect(); | ||
server.close(next); | ||
}); | ||
it('should reconnect when autoReconnect is enabled', function (next) { | ||
var server = Uhura.createServer(function (s) { | ||
setTimeout(function () { | ||
s.disconnect(); | ||
}, 100) | ||
}) | ||
server.listen(3333); | ||
server = Uhura.createServer(function (s) { | ||
setTimeout(function () { | ||
s.socket.destroy(); | ||
}, 100); | ||
}); | ||
server.listen(socket); | ||
var c = Uhura.createClient(3333); | ||
c = Uhura.createClient(socket); | ||
c.autoReconnect(); | ||
c.on('connect', after(2, function () { | ||
server.close(next); | ||
c.disconnect(); | ||
})); | ||
c.on('connect', after(2, next)); | ||
}); | ||
it('should continue receiving events after reconnection', function (next) { | ||
var done = after(2, function () { | ||
server.close(next); | ||
c.disconnect(); | ||
}); | ||
var done = after(2, next); | ||
var server = Uhura.createServer(function (s) { | ||
server = Uhura.createServer(function (s) { | ||
s.on('ping', function () { | ||
s.disconnect(); | ||
done(); | ||
s.socket.destroy(); | ||
}); | ||
}); | ||
server.listen(4444); | ||
server.listen(socket); | ||
var c = Uhura.createClient(4444); | ||
c.autoReconnect(); | ||
c.on('connect', function () { | ||
c = Uhura.createClient(socket); | ||
c.autoReconnect(); | ||
c.on('connect', function () { | ||
c.send('ping'); | ||
@@ -55,13 +58,12 @@ }); | ||
var done = after(3, function () { | ||
for (var i = 0; i < sent.length; i++) { | ||
sent[i].should.equal(received[i]); | ||
} | ||
server.close(next); | ||
c.disconnect(); | ||
}) | ||
for (var i = 0; i < sent.length; i++) { | ||
sent[i].should.equal(received[i]); | ||
} | ||
next(); | ||
}); | ||
var server = Uhura.createServer(function (s) { | ||
server = Uhura.createServer(function (s) { | ||
// Disconnect after 250ms | ||
setTimeout(function () { | ||
s.disconnect(); | ||
s.socket.destroy(); | ||
done(); | ||
@@ -74,6 +76,6 @@ }, 250); | ||
}); | ||
}) | ||
server.listen(5555); | ||
}); | ||
server.listen(socket); | ||
var c = Uhura.createClient(5555); | ||
c = Uhura.createClient(socket); | ||
@@ -87,7 +89,7 @@ // Send messages repeatedly | ||
c.on('connect', after(3, function () { | ||
clearInterval(timer); | ||
c.on('connect', after(3, function () { | ||
clearInterval(timer); | ||
})); | ||
c.autoReconnect(); | ||
c.autoReconnect(); | ||
}); | ||
}); |
@@ -9,3 +9,3 @@ var Uhura = require('../'); | ||
var port = 12345; | ||
var socket = './test/socket'; | ||
@@ -15,11 +15,18 @@ describe('session', function () { | ||
// Kill server and client after each test | ||
var c, server; | ||
afterEach(function (next) { | ||
c.disconnect(); | ||
server.close(next); | ||
}); | ||
it('should keep session', function (next) { | ||
var server = Uhura.createServer(function (s) { | ||
server = Uhura.createServer(function (s) { | ||
setTimeout(function () { | ||
s.disconnect(); | ||
s.socket.destroy(); | ||
}, 100); | ||
}); | ||
server.listen(port); | ||
server.listen(socket); | ||
var c = Uhura.createClient(port); | ||
c = Uhura.createClient(socket); | ||
c.autoReconnect(); | ||
@@ -36,4 +43,3 @@ | ||
} | ||
c.disconnect(); | ||
server.close(next); | ||
next(); | ||
})); | ||
@@ -43,37 +49,33 @@ }); | ||
it('should send changes to client', function (next) { | ||
var server = Uhura.createServer(function (s) { | ||
server.close(function () { | ||
c.get('foo').should.equal('bar'); | ||
next(); | ||
}); | ||
server = Uhura.createServer(function (s) { | ||
c.once('_set', function () { | ||
s.disconnect(); | ||
s.socket.destroy(); | ||
setTimeout(function () { | ||
c.get('foo').should.equal('bar'); | ||
next() | ||
}, 100); | ||
}); | ||
s.set('foo', 'bar'); | ||
}); | ||
server.listen(port); | ||
server.listen(socket); | ||
var c = Uhura.createClient(port); | ||
c = Uhura.createClient(socket); | ||
}); | ||
it('should send changes to server', function (next) { | ||
var server = Uhura.createServer(function (s) { | ||
server = Uhura.createServer(function (s) { | ||
s.on('_set', function () { | ||
process.nextTick(function () { | ||
s.get('foo').should.equal('bar'); | ||
s.disconnect(); | ||
}); | ||
s.get('foo').should.equal('bar'); | ||
s.socket.destroy(); | ||
}); | ||
}); | ||
server.listen(port); | ||
server.listen(socket); | ||
var c = Uhura.createClient(port); | ||
c = Uhura.createClient(socket); | ||
c.on('connect', function () { | ||
c.set('foo', 'bar'); | ||
}); | ||
c.on('disconnect', function () { | ||
server.close(next); | ||
}); | ||
c.on('disconnect', next); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
18425
14
551
2
3