Socket
Socket
Sign inDemoInstall

sharedb

Package Overview
Dependencies
6
Maintainers
6
Versions
136
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.0.0 to 3.1.0

lib/message-actions.js

75

lib/agent.js
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",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc