mirror of https://github.com/BTCPrivate/copay.git
architecture refactor
This commit is contained in:
parent
6d90020205
commit
59c00da592
|
@ -46,3 +46,5 @@ public/css/main.css
|
|||
README.html
|
||||
|
||||
lib
|
||||
|
||||
js/copayBundle.js
|
||||
|
|
|
@ -24,7 +24,7 @@ module.exports = function(grunt) {
|
|||
tasks: ['markdown']
|
||||
},
|
||||
scripts: {
|
||||
files: ['**/*.js', '**/*.html', '!**/node_modules/**', '!browser/bundle.js', '!browser/testdata.js', '!lib/**js', '!browser/vendor-bundle.js'],
|
||||
files: ['**/*.js', '**/*.html', '!**/node_modules/**', '!browser/bundle.js', '!browser/testdata.js', '!lib/**js', '!browser/vendor-bundle.js', '!js/copayBundle.js'],
|
||||
tasks: ['shell'],
|
||||
},
|
||||
},
|
||||
|
|
16
copay.js
16
copay.js
|
@ -1,8 +1,12 @@
|
|||
|
||||
module.exports.Storage = require('./js/models/Storage');
|
||||
module.exports.PublicKeyRing = require('./js/models/PublicKeyRing');
|
||||
module.exports.Wallet = require('./js/models/Wallet');
|
||||
module.exports.TxProposals = require('./js/models/TxProposals');
|
||||
module.exports.CopayPeer = require('./js/models/CopayPeer');
|
||||
module.exports.PrivateKey = require('./js/models/PrivateKey');
|
||||
// core
|
||||
module.exports.PublicKeyRing = require('./js/models/core/PublicKeyRing');
|
||||
module.exports.TxProposals = require('./js/models/core/TxProposals');
|
||||
module.exports.PrivateKey = require('./js/models/core/PrivateKey');
|
||||
|
||||
// components
|
||||
module.exports.Network = require('./js/models/network/WebRTC');
|
||||
module.exports.Storage = require('./js/models/storage/Plain');
|
||||
|
||||
// test
|
||||
module.exports.FakeStorage = require('./test/FakeStorage');
|
||||
|
|
|
@ -11,7 +11,7 @@ var coinUtil = bitcore.util;
|
|||
var Transaction = bitcore.Transaction;
|
||||
var buffertools = bitcore.buffertools;
|
||||
|
||||
var Storage = imports.Storage || require('./Storage');
|
||||
var Storage = imports.Storage || require('../storage/Base.js');
|
||||
var storage = Storage.default();
|
||||
|
||||
|
|
@ -10,7 +10,7 @@ var Builder = bitcore.TransactionBuilder;
|
|||
var Script = bitcore.Script;
|
||||
var buffertools = bitcore.buffertools;
|
||||
|
||||
var Storage = imports.Storage || require('./Storage');
|
||||
var Storage = imports.Storage || require('../storage/Base');
|
||||
var storage = Storage.default();
|
||||
|
||||
function TxProposal(opts) {
|
|
@ -0,0 +1,41 @@
|
|||
var imports = require('soop').imports();
|
||||
var EventEmitter = imports.EventEmitter || require('events').EventEmitter;
|
||||
|
||||
/*
|
||||
* Emits
|
||||
* 'networkChange'
|
||||
* when network layout has change (new/lost peers, etc)
|
||||
*
|
||||
* 'data'
|
||||
* when an unknown data type arrives
|
||||
*
|
||||
* Provides
|
||||
* send(toPeerIds, {data}, cb?)
|
||||
*
|
||||
*/
|
||||
|
||||
function Network(opts) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
Network.parent = EventEmitter;
|
||||
// Allows subscribing to the following events:
|
||||
// Network#on('networkChange', listener);
|
||||
// Network#on('data', listener);
|
||||
Network.prototype.start = function(callback) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
Network.prototype.send = function(peerIds, data, cb) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
Network.prototype.connectTo = function(peerId, openCallback, closeCallback) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
Network.prototype.disconnect = function(peerId, cb) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
module.exports = require('soop')(Network);
|
|
@ -15,7 +15,7 @@ var EventEmitter= imports.EventEmitter || require('events').EventEmitter;
|
|||
*
|
||||
*/
|
||||
|
||||
function CopayPeer(opts) {
|
||||
function Network(opts) {
|
||||
opts = opts || {};
|
||||
this.peerId = opts.peerId;
|
||||
this.apiKey = opts.apiKey || 'lwjd5qra8257b9';
|
||||
|
@ -24,10 +24,10 @@ function CopayPeer(opts) {
|
|||
this.connectedPeers = [];
|
||||
}
|
||||
|
||||
CopayPeer.parent=EventEmitter;
|
||||
Network.parent=EventEmitter;
|
||||
|
||||
// Array helpers
|
||||
CopayPeer._arrayDiff = function(a, b) {
|
||||
Network._arrayDiff = function(a, b) {
|
||||
var seen = [];
|
||||
var diff = [];
|
||||
|
||||
|
@ -41,20 +41,20 @@ CopayPeer._arrayDiff = function(a, b) {
|
|||
return diff;
|
||||
};
|
||||
|
||||
CopayPeer._inArray = function(el, array) {
|
||||
Network._inArray = function(el, array) {
|
||||
return array.indexOf(el) > -1;
|
||||
};
|
||||
|
||||
CopayPeer._arrayPushOnce = function(el, array) {
|
||||
Network._arrayPushOnce = function(el, array) {
|
||||
var ret = false;
|
||||
if (!CopayPeer._inArray(el, array)) {
|
||||
if (!Network._inArray(el, array)) {
|
||||
array.push(el);
|
||||
ret = true;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
|
||||
CopayPeer._arrayRemove = function(el, array) {
|
||||
Network._arrayRemove = function(el, array) {
|
||||
var pos = array.indexOf(el);
|
||||
if (pos >= 0) array.splice(pos, 1);
|
||||
|
||||
|
@ -62,21 +62,21 @@ CopayPeer._arrayRemove = function(el, array) {
|
|||
};
|
||||
|
||||
// DEBUG
|
||||
CopayPeer.prototype._showConnectedPeers = function() {
|
||||
Network.prototype._showConnectedPeers = function() {
|
||||
console.log("### CONNECTED PEERS", this.connectedPeers);
|
||||
};
|
||||
|
||||
CopayPeer.prototype._onClose = function(peerId) {
|
||||
console.log('[CopayPeer.js.70] _onClose'); //TODO
|
||||
this.connectedPeers = CopayPeer._arrayRemove(peerId, this.connectedPeers);
|
||||
Network.prototype._onClose = function(peerId) {
|
||||
console.log('[Network.js.70] _onClose'); //TODO
|
||||
this.connectedPeers = Network._arrayRemove(peerId, this.connectedPeers);
|
||||
this._notify();
|
||||
};
|
||||
|
||||
CopayPeer.prototype._connectToPeers = function(peerIds) {
|
||||
Network.prototype._connectToPeers = function(peerIds) {
|
||||
var self = this;
|
||||
var ret = false;
|
||||
var arrayDiff1= CopayPeer._arrayDiff(peerIds, this.connectedPeers);
|
||||
var arrayDiff = CopayPeer._arrayDiff(arrayDiff1, [this.peerId]);
|
||||
var arrayDiff1= Network._arrayDiff(peerIds, this.connectedPeers);
|
||||
var arrayDiff = Network._arrayDiff(arrayDiff1, [this.peerId]);
|
||||
arrayDiff.forEach(function(peerId) {
|
||||
console.log('### CONNECTING TO:', peerId);
|
||||
self.connectTo(peerId);
|
||||
|
@ -85,7 +85,7 @@ CopayPeer.prototype._connectToPeers = function(peerIds) {
|
|||
return ret;
|
||||
};
|
||||
|
||||
CopayPeer.prototype._onData = function(data, isInbound) {
|
||||
Network.prototype._onData = function(data, isInbound) {
|
||||
var obj;
|
||||
try {
|
||||
obj = JSON.parse(data);
|
||||
|
@ -108,7 +108,7 @@ CopayPeer.prototype._onData = function(data, isInbound) {
|
|||
}
|
||||
};
|
||||
|
||||
CopayPeer.prototype._sendPeers = function(peerIds) {
|
||||
Network.prototype._sendPeers = function(peerIds) {
|
||||
console.log('#### SENDING PEER LIST: ', this.connectedPeers, ' TO ', peerIds?peerIds: 'ALL');
|
||||
this.send(peerIds, {
|
||||
type: 'peerList',
|
||||
|
@ -116,9 +116,9 @@ CopayPeer.prototype._sendPeers = function(peerIds) {
|
|||
});
|
||||
};
|
||||
|
||||
CopayPeer.prototype._addPeer = function(peerId, isInbound) {
|
||||
Network.prototype._addPeer = function(peerId, isInbound) {
|
||||
|
||||
var hasChanged = CopayPeer._arrayPushOnce(peerId, this.connectedPeers);
|
||||
var hasChanged = Network._arrayPushOnce(peerId, this.connectedPeers);
|
||||
|
||||
|
||||
if (isInbound && hasChanged) {
|
||||
|
@ -131,13 +131,13 @@ CopayPeer.prototype._addPeer = function(peerId, isInbound) {
|
|||
}
|
||||
};
|
||||
|
||||
CopayPeer.prototype._setupConnectionHandlers = function(
|
||||
Network.prototype._setupConnectionHandlers = function(
|
||||
dataConn, isInbound, openCallback, closeCallback) {
|
||||
|
||||
var self=this;
|
||||
|
||||
dataConn.on('open', function() {
|
||||
if (!CopayPeer._inArray(dataConn.peer, self.connectedPeers)) {
|
||||
if (!Network._inArray(dataConn.peer, self.connectedPeers)) {
|
||||
|
||||
console.log('### DATA CONNECTION READY TO: ADDING PEER: %s (inbound: %s)',
|
||||
dataConn.peer, isInbound);
|
||||
|
@ -165,13 +165,13 @@ CopayPeer.prototype._setupConnectionHandlers = function(
|
|||
});
|
||||
};
|
||||
|
||||
CopayPeer.prototype._notify = function(newPeer) {
|
||||
console.log('[CopayPeer.js.168:_notify:]'); //TODO
|
||||
Network.prototype._notify = function(newPeer) {
|
||||
console.log('[Network.js.168:_notify:]'); //TODO
|
||||
this._showConnectedPeers();
|
||||
this.emit('networkChange', newPeer);
|
||||
};
|
||||
|
||||
CopayPeer.prototype._setupPeerHandlers = function(openCallback) {
|
||||
Network.prototype._setupPeerHandlers = function(openCallback) {
|
||||
var self=this;
|
||||
var p = this.peer;
|
||||
|
||||
|
@ -208,7 +208,7 @@ CopayPeer.prototype._setupPeerHandlers = function(openCallback) {
|
|||
});
|
||||
};
|
||||
|
||||
CopayPeer.prototype.start = function(openCallback) {
|
||||
Network.prototype.start = function(openCallback) {
|
||||
// Start PeerJS Peer
|
||||
this.peer = new Peer(this.peerId, {
|
||||
key: this.apiKey, // TODO: we need our own PeerServer KEY (http://peerjs.com/peerserver)
|
||||
|
@ -218,7 +218,7 @@ CopayPeer.prototype.start = function(openCallback) {
|
|||
this._setupPeerHandlers(openCallback);
|
||||
};
|
||||
|
||||
CopayPeer.prototype._sendToOne = function(peerId, data, cb) {
|
||||
Network.prototype._sendToOne = function(peerId, data, cb) {
|
||||
if (peerId !== this.peerId) {
|
||||
var conns = this.peer.connections[peerId];
|
||||
|
||||
|
@ -237,7 +237,7 @@ CopayPeer.prototype._sendToOne = function(peerId, data, cb) {
|
|||
if (typeof cb === 'function') cb();
|
||||
};
|
||||
|
||||
CopayPeer.prototype.send = function(peerIds, data, cb) {
|
||||
Network.prototype.send = function(peerIds, data, cb) {
|
||||
var self=this;
|
||||
|
||||
if (!peerIds) {
|
||||
|
@ -258,7 +258,7 @@ CopayPeer.prototype.send = function(peerIds, data, cb) {
|
|||
self._sendToOne(peerIds, data, cb);
|
||||
};
|
||||
|
||||
CopayPeer.prototype.connectTo = function(peerId, openCallback, closeCallback ) {
|
||||
Network.prototype.connectTo = function(peerId, openCallback, closeCallback ) {
|
||||
var self = this;
|
||||
|
||||
console.log('### STARTING TO CONNECT TO:' + peerId );
|
||||
|
@ -273,14 +273,14 @@ CopayPeer.prototype.connectTo = function(peerId, openCallback, closeCallback ) {
|
|||
self._setupConnectionHandlers(dataConn, false, openCallback, closeCallback);
|
||||
};
|
||||
|
||||
CopayPeer.prototype.disconnect = function(peerId, cb) {
|
||||
console.log('[CopayPeer.js.268:disconnect:]'); //TODO
|
||||
Network.prototype.disconnect = function(peerId, cb) {
|
||||
console.log('[Network.js.268:disconnect:]'); //TODO
|
||||
var self = this;
|
||||
self.closing = 1;
|
||||
|
||||
this.send(null, { type: 'disconnect' }, function() {
|
||||
|
||||
console.log('[CopayPeer.js.273] disconnect CB'); //TODO
|
||||
console.log('[Network.js.273] disconnect CB'); //TODO
|
||||
self.connectedPeers = [];
|
||||
self.peerId = null;
|
||||
if (self.peer) {
|
||||
|
@ -293,4 +293,4 @@ console.log('[CopayPeer.js.273] disconnect CB'); //TODO
|
|||
});
|
||||
};
|
||||
|
||||
module.exports = require('soop')(CopayPeer);
|
||||
module.exports = require('soop')(Network);
|
|
@ -0,0 +1,24 @@
|
|||
'use strict';
|
||||
|
||||
var imports = require('soop').imports();
|
||||
|
||||
function Storage() {
|
||||
}
|
||||
|
||||
// get value by key
|
||||
Storage.prototype.get = function(k) {
|
||||
};
|
||||
|
||||
// set value for key
|
||||
Storage.prototype.set = function(k,v) {
|
||||
};
|
||||
|
||||
// remove value for key
|
||||
Storage.prototype.remove = function(k) {
|
||||
};
|
||||
|
||||
// remove all values
|
||||
Storage.prototype.clearAll = function() {
|
||||
};
|
||||
|
||||
module.exports = require('soop')(Storage);
|
|
@ -0,0 +1,29 @@
|
|||
'use strict';
|
||||
|
||||
var imports = require('soop').imports();
|
||||
|
||||
function Storage() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
// get value by key
|
||||
Storage.prototype.get = function(k) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
// set value for key
|
||||
Storage.prototype.set = function(k,v) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
// remove value for key
|
||||
Storage.prototype.remove = function(k) {
|
||||
// TODO
|
||||
};
|
||||
|
||||
// remove all values
|
||||
Storage.prototype.clearAll = function() {
|
||||
// TODO
|
||||
};
|
||||
|
||||
module.exports = require('soop')(Storage);
|
|
@ -6,19 +6,22 @@ function Storage() {
|
|||
this.data = {};
|
||||
}
|
||||
|
||||
// get value by key
|
||||
Storage.prototype.get = function(k) {
|
||||
return JSON.parse(localStorage.getItem(k));
|
||||
};
|
||||
|
||||
// set value for key
|
||||
Storage.prototype.set = function(k,v) {
|
||||
localStorage.setItem(k, JSON.stringify(v));
|
||||
};
|
||||
|
||||
|
||||
// remove value for key
|
||||
Storage.prototype.remove = function(k) {
|
||||
localStorage.removeItem(k);
|
||||
};
|
||||
|
||||
|
||||
// remove all values
|
||||
Storage.prototype.clearAll = function() {
|
||||
localStorage.clear();
|
||||
};
|
|
@ -244,7 +244,7 @@ console.log('[network.js.178:pkr:]',pkr); //TODO
|
|||
|
||||
// public methods
|
||||
var init = function(cb) {
|
||||
var cp = $rootScope.cp = new copay.CopayPeer({
|
||||
var cp = $rootScope.cp = new copay.Network({
|
||||
apiKey: config.p2pApiKey,
|
||||
debug: config.p2pDebug,
|
||||
maxPeers: config.maxPeers, // TODO: This should be on wallet configuration
|
||||
|
|
|
@ -13,7 +13,7 @@ var networks = bitcore.networks;
|
|||
var Address = bitcore.Address;
|
||||
var BitcorePrivateKey = bitcore.PrivateKey;
|
||||
var copay = copay || require('../copay');
|
||||
var PrivateKey = copay.PrivateKey || require('../js/models/PrivateKey');
|
||||
var PrivateKey = copay.PrivateKey || require('../js/models/core/PrivateKey');
|
||||
|
||||
var config = {
|
||||
networkName:'livenet',
|
||||
|
|
|
@ -16,8 +16,9 @@ var copay = copay || require('../copay');
|
|||
var fakeStorage = copay.FakeStorage;
|
||||
var PrivateKey = copay.PrivateKey || require('../js/models/PrivateKey');
|
||||
var TxProposals = copay.TxProposals || require('../js/models/TxProposal');
|
||||
var PublicKeyRing = (typeof process.versions === 'undefined') ? copay.PublicKeyRing :
|
||||
require('soop').load('../js/models/PublicKeyRing', {Storage: fakeStorage});
|
||||
var PublicKeyRing = is_browser ? copay.PublicKeyRing :
|
||||
require('soop').load('../js/models/core/PublicKeyRing', {Storage: fakeStorage});
|
||||
var is_browser = (typeof process.versions === 'undefined')
|
||||
|
||||
var config = {
|
||||
networkName:'livenet',
|
||||
|
|
|
@ -4,7 +4,7 @@ var chai = chai || require('chai');
|
|||
var should = chai.should();
|
||||
var bitcore = bitcore || require('bitcore');
|
||||
var copay = copay || require('../copay');
|
||||
var Wallet = copay.Wallet || require('soop').load('../js/models/Wallet');
|
||||
var Wallet = copay.Wallet || require('soop').load('../js/models/core/Wallet');
|
||||
|
||||
var ID = '933bf321393459b7';
|
||||
var copayers = [
|
||||
|
|
Loading…
Reference in New Issue