sharedb
Advanced tools
Comparing version 3.0.0 to 3.1.0
var hat = require('hat'); | ||
var ShareDBError = require('./error'); | ||
var logger = require('./logger'); | ||
var ACTIONS = require('./message-actions').ACTIONS; | ||
var types = require('./types'); | ||
var util = require('./util'); | ||
var logger = require('./logger'); | ||
var ShareDBError = require('./error'); | ||
@@ -61,3 +62,3 @@ var ERROR_CODE = ShareDBError.CODES; | ||
// Send the legacy message to initialize old clients with the random agent Id | ||
this.send(this._initMessage('init')); | ||
this.send(this._initMessage(ACTIONS.initLegacy)); | ||
} | ||
@@ -178,3 +179,3 @@ module.exports = Agent; | ||
emitter.onExtra = function(extra) { | ||
agent.send({a: 'q', id: queryId, extra: extra}); | ||
agent.send({a: ACTIONS.queryUpdate, id: queryId, extra: extra}); | ||
}; | ||
@@ -191,3 +192,3 @@ | ||
// if it matches the query's collection. | ||
agent.send({a: 'q', id: queryId, diff: diff}); | ||
agent.send({a: ACTIONS.queryUpdate, id: queryId, diff: diff}); | ||
}; | ||
@@ -256,3 +257,3 @@ | ||
var message = { | ||
a: 'op', | ||
a: ACTIONS.op, | ||
c: collection, | ||
@@ -361,6 +362,14 @@ d: id, | ||
Agent.prototype._checkRequest = function(request) { | ||
if (request.a === 'qf' || request.a === 'qs' || request.a === 'qu') { | ||
if ( | ||
request.a === ACTIONS.queryFetch || | ||
request.a === ACTIONS.querySubscribe || | ||
request.a === ACTIONS.queryUnsubscribe | ||
) { | ||
// Query messages need an ID property. | ||
if (typeof request.id !== 'number') return 'Missing query ID'; | ||
} else if (request.a === 'op' || request.a === 'f' || request.a === 's' || request.a === 'u' || request.a === 'p') { | ||
} else if (request.a === ACTIONS.op || | ||
request.a === ACTIONS.fetch || | ||
request.a === ACTIONS.subscribe || | ||
request.a === ACTIONS.unsubscribe || | ||
request.a === ACTIONS.presence) { | ||
// Doc-based request. | ||
@@ -370,10 +379,14 @@ if (request.c != null && typeof request.c !== 'string') return 'Invalid collection'; | ||
if (request.a === 'op' || request.a === 'p') { | ||
if (request.a === ACTIONS.op || request.a === ACTIONS.presence) { | ||
if (request.v != null && (typeof request.v !== 'number' || request.v < 0)) return 'Invalid version'; | ||
} | ||
if (request.a === 'p') { | ||
if (request.a === ACTIONS.presence) { | ||
if (typeof request.id !== 'string') return 'Missing presence ID'; | ||
} | ||
} else if (request.a === 'bf' || request.a === 'bs' || request.a === 'bu') { | ||
} else if ( | ||
request.a === ACTIONS.bulkFetch || | ||
request.a === ACTIONS.bulkSubscribe || | ||
request.a === ACTIONS.bulkUnsubscribe | ||
) { | ||
// Bulk request | ||
@@ -392,24 +405,24 @@ if (request.c != null && typeof request.c !== 'string') return 'Invalid collection'; | ||
switch (request.a) { | ||
case 'hs': | ||
case ACTIONS.handshake: | ||
if (request.id) this.src = request.id; | ||
return callback(null, this._initMessage('hs')); | ||
case 'qf': | ||
return callback(null, this._initMessage(ACTIONS.handshake)); | ||
case ACTIONS.queryFetch: | ||
return this._queryFetch(request.id, request.c, request.q, getQueryOptions(request), callback); | ||
case 'qs': | ||
case ACTIONS.querySubscribe: | ||
return this._querySubscribe(request.id, request.c, request.q, getQueryOptions(request), callback); | ||
case 'qu': | ||
case ACTIONS.queryUnsubscribe: | ||
return this._queryUnsubscribe(request.id, callback); | ||
case 'bf': | ||
case ACTIONS.bulkFetch: | ||
return this._fetchBulk(request.c, request.b, callback); | ||
case 'bs': | ||
case ACTIONS.bulkSubscribe: | ||
return this._subscribeBulk(request.c, request.b, callback); | ||
case 'bu': | ||
case ACTIONS.bulkUnsubscribe: | ||
return this._unsubscribeBulk(request.c, request.b, callback); | ||
case 'f': | ||
case ACTIONS.fetch: | ||
return this._fetch(request.c, request.d, request.v, callback); | ||
case 's': | ||
case ACTIONS.subscribe: | ||
return this._subscribe(request.c, request.d, request.v, callback); | ||
case 'u': | ||
case ACTIONS.unsubscribe: | ||
return this._unsubscribe(request.c, request.d, callback); | ||
case 'op': | ||
case ACTIONS.op: | ||
// Normalize the properties submitted | ||
@@ -425,7 +438,7 @@ var op = createClientOp(request, this._src()); | ||
return this._submit(request.c, request.d, op, callback); | ||
case 'nf': | ||
case ACTIONS.snapshotFetch: | ||
return this._fetchSnapshot(request.c, request.d, request.v, callback); | ||
case 'nt': | ||
case ACTIONS.snapshotFetchByTimestamp: | ||
return this._fetchSnapshotByTimestamp(request.c, request.d, request.ts, callback); | ||
case 'p': | ||
case ACTIONS.presence: | ||
if (!this.backend.presenceEnabled) return; | ||
@@ -440,6 +453,6 @@ var presence = this._createPresence(request); | ||
return this._broadcastPresence(presence, callback); | ||
case 'ps': | ||
case ACTIONS.presenceSubscribe: | ||
if (!this.backend.presenceEnabled) return; | ||
return this._subscribePresence(request.ch, request.seq, callback); | ||
case 'pu': | ||
case ACTIONS.presenceUnsubscribe: | ||
return this._unsubscribePresence(request.ch, request.seq, callback); | ||
@@ -773,3 +786,3 @@ default: | ||
return { | ||
a: 'p', | ||
a: ACTIONS.presence, | ||
ch: request.ch, | ||
@@ -826,3 +839,3 @@ src: this._src(), | ||
if (presence.r) return this.send({a: 'pr', ch: presence.ch}); | ||
if (presence.r) return this.send({a: ACTIONS.presenceRequest, ch: presence.ch}); | ||
@@ -838,3 +851,3 @@ var backend = this.backend; | ||
if (backend.doNotForwardSendPresenceErrorsToClient) backend.errorHandler(error, {agent: agent}); | ||
else agent.send({a: 'p', ch: presence.ch, id: presence.id, error: getReplyErrorObject(error)}); | ||
else agent.send({a: ACTIONS.presence, ch: presence.ch, id: presence.id, error: getReplyErrorObject(error)}); | ||
return; | ||
@@ -841,0 +854,0 @@ } |
@@ -9,2 +9,3 @@ var Doc = require('./doc'); | ||
var ShareDBError = require('../error'); | ||
var ACTIONS = require('../message-actions').ACTIONS; | ||
var types = require('../types'); | ||
@@ -198,16 +199,16 @@ var util = require('../util'); | ||
switch (message.a) { | ||
case 'init': | ||
case ACTIONS.initLegacy: | ||
// Client initialization packet | ||
return this._handleLegacyInit(message); | ||
case 'hs': | ||
case ACTIONS.handshake: | ||
return this._handleHandshake(err, message); | ||
case 'qf': | ||
case ACTIONS.queryFetch: | ||
var query = this.queries[message.id]; | ||
if (query) query._handleFetch(err, message.data, message.extra); | ||
return; | ||
case 'qs': | ||
case ACTIONS.querySubscribe: | ||
var query = this.queries[message.id]; | ||
if (query) query._handleSubscribe(err, message.data, message.extra); | ||
return; | ||
case 'qu': | ||
case ACTIONS.queryUnsubscribe: | ||
// Queries are removed immediately on calls to destroy, so we ignore | ||
@@ -217,3 +218,3 @@ // replies to query unsubscribes. Perhaps there should be a callback for | ||
return; | ||
case 'q': | ||
case ACTIONS.queryUpdate: | ||
// Query message. Pass this to the appropriate query object. | ||
@@ -227,32 +228,32 @@ var query = this.queries[message.id]; | ||
case 'bf': | ||
case ACTIONS.bulkFetch: | ||
return this._handleBulkMessage(err, message, '_handleFetch'); | ||
case 'bs': | ||
case 'bu': | ||
case ACTIONS.bulkSubscribe: | ||
case ACTIONS.bulkUnsubscribe: | ||
return this._handleBulkMessage(err, message, '_handleSubscribe'); | ||
case 'nf': | ||
case 'nt': | ||
case ACTIONS.snapshotFetch: | ||
case ACTIONS.snapshotFetchByTimestamp: | ||
return this._handleSnapshotFetch(err, message); | ||
case 'f': | ||
case ACTIONS.fetch: | ||
var doc = this.getExisting(message.c, message.d); | ||
if (doc) doc._handleFetch(err, message.data); | ||
return; | ||
case 's': | ||
case 'u': | ||
case ACTIONS.subscribe: | ||
case ACTIONS.unsubscribe: | ||
var doc = this.getExisting(message.c, message.d); | ||
if (doc) doc._handleSubscribe(err, message.data); | ||
return; | ||
case 'op': | ||
case ACTIONS.op: | ||
var doc = this.getExisting(message.c, message.d); | ||
if (doc) doc._handleOp(err, message); | ||
return; | ||
case 'p': | ||
case ACTIONS.presence: | ||
return this._handlePresence(err, message); | ||
case 'ps': | ||
case ACTIONS.presenceSubscribe: | ||
return this._handlePresenceSubscribe(err, message); | ||
case 'pu': | ||
case ACTIONS.presenceUnsubscribe: | ||
return this._handlePresenceUnsubscribe(err, message); | ||
case 'pr': | ||
case ACTIONS.presenceRequest: | ||
return this._handlePresenceRequest(err, message); | ||
@@ -423,3 +424,3 @@ | ||
Connection.prototype._sendAction = function(action, doc, version) { | ||
Connection.prototype._sendActions = function(action, doc, version) { | ||
// Ensure the doc is registered so that it receives the reply message | ||
@@ -442,11 +443,11 @@ this._addDoc(doc); | ||
Connection.prototype.sendFetch = function(doc) { | ||
return this._sendAction('f', doc, doc.version); | ||
return this._sendActions(ACTIONS.fetch, doc, doc.version); | ||
}; | ||
Connection.prototype.sendSubscribe = function(doc) { | ||
return this._sendAction('s', doc, doc.version); | ||
return this._sendActions(ACTIONS.subscribe, doc, doc.version); | ||
}; | ||
Connection.prototype.sendUnsubscribe = function(doc) { | ||
return this._sendAction('u', doc); | ||
return this._sendActions(ACTIONS.unsubscribe, doc); | ||
}; | ||
@@ -458,3 +459,3 @@ | ||
var message = { | ||
a: 'op', | ||
a: ACTIONS.op, | ||
c: doc.collection, | ||
@@ -563,3 +564,3 @@ d: doc.id, | ||
Connection.prototype.createFetchQuery = function(collection, q, options, callback) { | ||
return this._createQuery('qf', collection, q, options, callback); | ||
return this._createQuery(ACTIONS.queryFetch, collection, q, options, callback); | ||
}; | ||
@@ -574,3 +575,3 @@ | ||
Connection.prototype.createSubscribeQuery = function(collection, q, options, callback) { | ||
return this._createQuery('qs', collection, q, options, callback); | ||
return this._createQuery(ACTIONS.querySubscribe, collection, q, options, callback); | ||
}; | ||
@@ -728,3 +729,3 @@ | ||
Connection.prototype._initializeHandshake = function() { | ||
this.send({a: 'hs', id: this.id}); | ||
this.send({a: ACTIONS.handshake, id: this.id}); | ||
}; | ||
@@ -731,0 +732,0 @@ |
var emitter = require('../../emitter'); | ||
var ACTIONS = require('../../message-actions').ACTIONS; | ||
var util = require('../../util'); | ||
@@ -62,3 +63,3 @@ | ||
return { | ||
a: 'p', | ||
a: ACTIONS.presence, | ||
ch: this.presence.channel, | ||
@@ -65,0 +66,0 @@ id: this.presenceId, |
@@ -7,2 +7,3 @@ var emitter = require('../../emitter'); | ||
var hat = require('hat'); | ||
var ACTIONS = require('../../message-actions').ACTIONS; | ||
@@ -74,3 +75,3 @@ module.exports = Presence; | ||
this.wantSubscribe = !!wantSubscribe; | ||
var action = this.wantSubscribe ? 'ps' : 'pu'; | ||
var action = this.wantSubscribe ? ACTIONS.presenceSubscribe : ACTIONS.presenceUnsubscribe; | ||
var seq = this.connection._presenceSeq++; | ||
@@ -77,0 +78,0 @@ this._subscriptionCallbacksBySeq[seq] = callback; |
var emitter = require('../emitter'); | ||
var ACTIONS = require('../message-actions').ACTIONS; | ||
var util = require('../util'); | ||
@@ -78,4 +79,4 @@ | ||
Query.prototype.destroy = function(callback) { | ||
if (this.connection.canSend && this.action === 'qs') { | ||
this.connection.send({a: 'qu', id: this.id}); | ||
if (this.connection.canSend && this.action === ACTIONS.querySubscribe) { | ||
this.connection.send({a: ACTIONS.queryUnsubscribe, id: this.id}); | ||
} | ||
@@ -82,0 +83,0 @@ this.connection._destroyQuery(this); |
var SnapshotRequest = require('./snapshot-request'); | ||
var util = require('../../util'); | ||
var ACTIONS = require('../../message-actions').ACTIONS; | ||
@@ -20,3 +21,3 @@ module.exports = SnapshotTimestampRequest; | ||
return { | ||
a: 'nt', | ||
a: ACTIONS.snapshotFetchByTimestamp, | ||
id: this.requestId, | ||
@@ -23,0 +24,0 @@ c: this.collection, |
var SnapshotRequest = require('./snapshot-request'); | ||
var util = require('../../util'); | ||
var ACTIONS = require('../../message-actions').ACTIONS; | ||
@@ -20,3 +21,3 @@ module.exports = SnapshotVersionRequest; | ||
return { | ||
a: 'nf', | ||
a: ACTIONS.snapshotFetch, | ||
id: this.requestId, | ||
@@ -23,0 +24,0 @@ c: this.collection, |
@@ -12,2 +12,3 @@ var Backend = require('./backend'); | ||
Backend.MemoryPubSub = require('./pubsub/memory'); | ||
Backend.MESSAGE_ACTIONS = require('./message-actions').ACTIONS; | ||
Backend.MilestoneDB = require('./milestone-db'); | ||
@@ -14,0 +15,0 @@ Backend.ot = require('./ot'); |
{ | ||
"name": "sharedb", | ||
"version": "3.0.0", | ||
"version": "3.1.0", | ||
"description": "JSON OT database backend", | ||
@@ -21,3 +21,3 @@ "main": "lib/index.js", | ||
"nyc": "^14.1.1", | ||
"ot-json0-v2": "ottypes/json0", | ||
"ot-json0-v2": "https://github.com/ottypes/json0#90a3ae26364c4fa3b19b6df34dad46707a704421", | ||
"ot-json1": "^0.3.0", | ||
@@ -24,0 +24,0 @@ "rich-text": "^4.1.0", |
602567
76
15966