stratumn-agent
Advanced tools
Comparing version 0.12.3 to 0.12.4-dev
@@ -27,5 +27,5 @@ 'use strict'; | ||
var _nodeUuid = require('node-uuid'); | ||
var _uuid = require('uuid'); | ||
var _nodeUuid2 = _interopRequireDefault(_nodeUuid); | ||
var _uuid2 = _interopRequireDefault(_uuid); | ||
@@ -60,3 +60,3 @@ var _stratumnMockAgent = require('stratumn-mock-agent'); | ||
* @param {StoreClient} storeClient - the store client | ||
* @param {fossilizerClient} [fossilizerClient] - the fossilizer client | ||
* @param {FossilizerClient} [fossilizerClient] - the fossilizer client | ||
* @param {object} [opts] - options | ||
@@ -66,2 +66,3 @@ * @param {object} [opts.agentUrl] - agent root url | ||
* @param {string} [opts.salt] - a unique salt | ||
* @param {number} [opts.reconnectTimeout=5000] - web socket reconnect timeout in milliseconds | ||
* @returns {Client} a store HTTP client | ||
@@ -90,12 +91,25 @@ */ | ||
function saveSegment(segment1) { | ||
return storeClient.saveSegment(segment1).then(fossilizeSegment).then(function (segment2) { | ||
// Call didAppend event if present. | ||
if (_typeof(actions.events) === 'object' && typeof actions.events.didAppend === 'function') { | ||
(0, _stratumnMockAgent.mockAgent)(actions, segment2.link).events.didAppend(segment2); | ||
} | ||
return segment2; | ||
}); | ||
return storeClient.saveSegment(segment1).then(fossilizeSegment); | ||
} | ||
// Set up events. | ||
storeClient.on('open', function () { | ||
return console.log('store: web socket open'); | ||
}); | ||
storeClient.on('close', function () { | ||
return console.log('store: web socket closed'); | ||
}); | ||
storeClient.on('error', function (err) { | ||
return console.error('store: ' + err.stack); | ||
}); | ||
storeClient.on('message', function (msg) { | ||
var name = msg.type; | ||
if (_typeof(actions.events) === 'object' && typeof actions.events[name] === 'function') { | ||
actions.events[name](msg.data); | ||
} | ||
}); | ||
// Connect to store web socket. | ||
storeClient.connect(opts.reconnectTimeout || 5000); | ||
return { | ||
@@ -131,3 +145,3 @@ /** | ||
var initialLink = { meta: { mapId: _nodeUuid2.default.v4() } }; | ||
var initialLink = { meta: { mapId: _uuid2.default.v4() } }; | ||
@@ -134,0 +148,0 @@ return (_mockAgent = (0, _stratumnMockAgent.mockAgent)(actions, initialLink)).init.apply(_mockAgent, args).catch(function (err) { |
@@ -7,19 +7,8 @@ 'use strict'; | ||
exports.default = memoryStore; | ||
/* | ||
Stratumn Agent Javascript Library | ||
Copyright (C) 2016 Stratumn SAS | ||
This program is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation, either version 3 of the License, or | ||
(at your option) any later version. | ||
var _events = require('events'); | ||
This program is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
var _events2 = _interopRequireDefault(_events); | ||
You should have received a copy of the GNU General Public License | ||
along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -33,4 +22,10 @@ /** | ||
return { | ||
var emitter = Object.assign(new _events2.default(), { | ||
/** | ||
* Does nothing since memory store doesn't use a web socket. | ||
*/ | ||
connect: function connect() {}, | ||
/** | ||
* Gets information about the store. | ||
@@ -57,2 +52,7 @@ * @returns {Promise} a promise that resolve with the information | ||
segments[segment.meta.linkHash] = JSON.parse(JSON.stringify(segment)); | ||
emitter.emit('message', { | ||
type: 'didSave', | ||
data: JSON.parse(JSON.stringify(segment)) | ||
}); | ||
emitter.emit.bind(emitter, 'didSave', JSON.parse(JSON.stringify(segment))); | ||
return Promise.resolve(segment); | ||
@@ -199,3 +199,21 @@ }, | ||
} | ||
}; | ||
} | ||
}); | ||
return emitter; | ||
} /* | ||
Stratumn Agent Javascript Library | ||
Copyright (C) 2016 Stratumn SAS | ||
This program is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation, either version 3 of the License, or | ||
(at your option) any later version. | ||
This program is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
You should have received a copy of the GNU General Public License | ||
along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ |
@@ -8,2 +8,6 @@ 'use strict'; | ||
var _events = require('events'); | ||
var _events2 = _interopRequireDefault(_events); | ||
var _superagent = require('superagent'); | ||
@@ -13,2 +17,6 @@ | ||
var _ws = require('ws'); | ||
var _ws2 = _interopRequireDefault(_ws); | ||
var _makeQueryString = require('./makeQueryString'); | ||
@@ -26,2 +34,10 @@ | ||
* Creates a store HTTP client. | ||
* | ||
* The client is an EventEmitter and emits the following events: | ||
* - 'open': the web socket connection was open | ||
* - 'close': the web socket connection was closed | ||
* - 'error': a web socket error occured | ||
* - 'message': any message from web socket | ||
* - 'didSave': a segment was saved | ||
* | ||
* @param {string} url - the base URL of the store | ||
@@ -31,3 +47,32 @@ * @returns {Client} a store HTTP client | ||
function storeHttpClient(url) { | ||
return { | ||
// Web socket URL. | ||
var wsUrl = url.replace(/^http/, 'ws') + '/websocket'; | ||
// Web socket instance. | ||
var ws = null; | ||
// Use event emitter instance as base object. | ||
var emitter = new _events2.default(); | ||
function _connect(reconnectTimeout) { | ||
ws = new _ws2.default(wsUrl); | ||
ws.on('open', emitter.emit.bind(emitter, 'open')); | ||
ws.on('close', function () { | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
ws.removeAllListeners(); | ||
emitter.emit.apply(emitter, ['close'].concat(args)); | ||
setTimeout(_connect.bind(null, reconnectTimeout), reconnectTimeout); | ||
}); | ||
ws.on('error', emitter.emit.bind(emitter, 'error')); | ||
ws.on('message', function (msg) { | ||
// Emit both event for message and event for message type. | ||
emitter.emit('message', msg); | ||
emitter.emit(msg.type, msg.data); | ||
}); | ||
} | ||
return Object.assign(emitter, { | ||
/** | ||
@@ -47,2 +92,14 @@ * Gets information about the store. | ||
/** | ||
* Connects to the web socket and starts emitting events. | ||
* @param {number} reconnectTimeout - time to wait to reconnect in milliseconds | ||
*/ | ||
connect: function connect(reconnectTimeout) { | ||
if (ws) { | ||
return; | ||
} | ||
_connect(reconnectTimeout); | ||
}, | ||
/** | ||
* Creates or updates a segment. | ||
@@ -122,3 +179,3 @@ * @param {object} segment - the segment | ||
} | ||
}; | ||
}); | ||
} /* | ||
@@ -125,0 +182,0 @@ Stratumn Agent Javascript Library |
{ | ||
"name": "stratumn-agent", | ||
"version": "0.12.3", | ||
"version": "0.12.4-dev", | ||
"description": "", | ||
@@ -38,6 +38,7 @@ "main": "lib/index.js", | ||
"express": "^4.14.0", | ||
"node-uuid": "^1.4.7", | ||
"request": "^2.73.0", | ||
"stratumn-mock-agent": "^1.1.0", | ||
"superagent": "^2.1.0" | ||
"superagent": "^2.1.0", | ||
"uuid": "^3.0.0", | ||
"ws": "^2.0.0" | ||
}, | ||
@@ -44,0 +45,0 @@ "devDependencies": { |
@@ -19,3 +19,3 @@ /* | ||
import uuid from 'node-uuid'; | ||
import uuid from 'uuid'; | ||
import { mockAgent } from 'stratumn-mock-agent'; | ||
@@ -35,3 +35,3 @@ import getActionsInfo from './getActionsInfo'; | ||
* @param {StoreClient} storeClient - the store client | ||
* @param {fossilizerClient} [fossilizerClient] - the fossilizer client | ||
* @param {FossilizerClient} [fossilizerClient] - the fossilizer client | ||
* @param {object} [opts] - options | ||
@@ -41,2 +41,3 @@ * @param {object} [opts.agentUrl] - agent root url | ||
* @param {string} [opts.salt] - a unique salt | ||
* @param {number} [opts.reconnectTimeout=5000] - web socket reconnect timeout in milliseconds | ||
* @returns {Client} a store HTTP client | ||
@@ -65,14 +66,19 @@ */ | ||
.saveSegment(segment1) | ||
.then(fossilizeSegment) | ||
.then(segment2 => { | ||
// Call didAppend event if present. | ||
if (typeof actions.events === 'object' && | ||
typeof actions.events.didAppend === 'function') { | ||
mockAgent(actions, segment2.link).events.didAppend(segment2); | ||
} | ||
return segment2; | ||
}); | ||
.then(fossilizeSegment); | ||
} | ||
// Set up events. | ||
storeClient.on('open', () => console.log('store: web socket open')); | ||
storeClient.on('close', () => console.log('store: web socket closed')); | ||
storeClient.on('error', err => console.error(`store: ${err.stack}`)); | ||
storeClient.on('message', msg => { | ||
const name = msg.type; | ||
if (typeof actions.events === 'object' && typeof actions.events[name] === 'function') { | ||
actions.events[name](msg.data); | ||
} | ||
}); | ||
// Connect to store web socket. | ||
storeClient.connect(opts.reconnectTimeout || 5000); | ||
return { | ||
@@ -79,0 +85,0 @@ /** |
@@ -19,2 +19,4 @@ /* | ||
import EventEmitter from 'events'; | ||
/** | ||
@@ -27,4 +29,10 @@ * Creates a memory store, for testing only. | ||
return { | ||
const emitter = Object.assign(new EventEmitter(), { | ||
/** | ||
* Does nothing since memory store doesn't use a web socket. | ||
*/ | ||
connect() { | ||
}, | ||
/** | ||
* Gets information about the store. | ||
@@ -50,2 +58,7 @@ * @returns {Promise} a promise that resolve with the information | ||
segments[segment.meta.linkHash] = JSON.parse(JSON.stringify(segment)); | ||
emitter.emit('message', { | ||
type: 'didSave', | ||
data: JSON.parse(JSON.stringify(segment)) | ||
}); | ||
emitter.emit.bind(emitter, 'didSave', JSON.parse(JSON.stringify(segment))); | ||
return Promise.resolve(segment); | ||
@@ -184,3 +197,5 @@ }, | ||
} | ||
}; | ||
}); | ||
return emitter; | ||
} |
@@ -19,3 +19,5 @@ /* | ||
import EventEmitter from 'events'; | ||
import request from 'superagent'; | ||
import WebSocket from 'ws'; | ||
import makeQueryString from './makeQueryString'; | ||
@@ -26,2 +28,10 @@ import handleResponse from './handleResponse'; | ||
* Creates a store HTTP client. | ||
* | ||
* The client is an EventEmitter and emits the following events: | ||
* - 'open': the web socket connection was open | ||
* - 'close': the web socket connection was closed | ||
* - 'error': a web socket error occured | ||
* - 'message': any message from web socket | ||
* - 'didSave': a segment was saved | ||
* | ||
* @param {string} url - the base URL of the store | ||
@@ -31,3 +41,28 @@ * @returns {Client} a store HTTP client | ||
export default function storeHttpClient(url) { | ||
return { | ||
// Web socket URL. | ||
const wsUrl = `${url.replace(/^http/, 'ws')}/websocket`; | ||
// Web socket instance. | ||
let ws = null; | ||
// Use event emitter instance as base object. | ||
const emitter = new EventEmitter(); | ||
function connect(reconnectTimeout) { | ||
ws = new WebSocket(wsUrl); | ||
ws.on('open', emitter.emit.bind(emitter, 'open')); | ||
ws.on('close', (...args) => { | ||
ws.removeAllListeners(); | ||
emitter.emit('close', ...args); | ||
setTimeout(connect.bind(null, reconnectTimeout), reconnectTimeout); | ||
}); | ||
ws.on('error', emitter.emit.bind(emitter, 'error')); | ||
ws.on('message', msg => { | ||
// Emit both event for message and event for message type. | ||
emitter.emit('message', msg); | ||
emitter.emit(msg.type, msg.data); | ||
}); | ||
} | ||
return Object.assign(emitter, { | ||
/** | ||
@@ -46,2 +81,13 @@ * Gets information about the store. | ||
/** | ||
* Connects to the web socket and starts emitting events. | ||
* @param {number} reconnectTimeout - time to wait to reconnect in milliseconds | ||
*/ | ||
connect(reconnectTimeout) { | ||
if (ws) { | ||
return; | ||
} | ||
connect(reconnectTimeout); | ||
}, | ||
/** | ||
* Creates or updates a segment. | ||
@@ -118,3 +164,3 @@ * @param {object} segment - the segment | ||
} | ||
}; | ||
}); | ||
} |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
136970
39
2080
9
+ Addeduuid@^3.0.0
+ Addedws@^2.0.0
+ Addedsafe-buffer@5.0.1(transitive)
+ Addedultron@1.1.1(transitive)
+ Addedws@2.3.1(transitive)
- Removednode-uuid@^1.4.7
- Removednode-uuid@1.4.8(transitive)