diff --git a/concat.sh b/concat.sh new file mode 100755 index 000000000..f747c6684 --- /dev/null +++ b/concat.sh @@ -0,0 +1,7 @@ +#! /bin/bash + +cd vendor/ +cat browser-adapter.js crypto-2.0.js crypto-3.1.js jsbn.js jsbn2.js prng4.js util.js rng.js ec.js sec.js ecdsa.js eckey.js > vendor-bundle.js +mv vendor-bundle.js ../ +cd ../ + diff --git a/copay.js b/copay.js new file mode 100644 index 000000000..84ac2137c --- /dev/null +++ b/copay.js @@ -0,0 +1,5 @@ + +module.exports.Storage = require('./js/models/Storage'); +module.exports.PublicKeyRing = require('./js/models/PublicKeyRing'); + +module.exports.FakeStorage = require('./test/FakeStorage'); diff --git a/index.html b/index.html index 849968164..c189e16e2 100644 --- a/index.html +++ b/index.html @@ -213,12 +213,14 @@ + + + - diff --git a/js/models/PublicKeyRing.js b/js/models/PublicKeyRing.js index e047ecb9e..c5b043a77 100644 --- a/js/models/PublicKeyRing.js +++ b/js/models/PublicKeyRing.js @@ -12,8 +12,6 @@ var Transaction = bitcore.Transaction; var buffertools = bitcore.buffertools; var Storage = imports.Storage || require('./Storage'); -var log = imports.log || console.log; - var storage = Storage.default(); /* @@ -52,12 +50,12 @@ PublicKeyRing.getRandomId = function () { }; PublicKeyRing.decrypt = function (passphrase, encPayload) { - log('[wallet.js.35] TODO READ: passphrase IGNORED'); + console.log('[wallet.js.35] TODO READ: passphrase IGNORED'); return encPayload; }; PublicKeyRing.encrypt = function (passphrase, payload) { - log('[wallet.js.92] TODO: passphrase IGNORED'); + console.log('[wallet.js.92] TODO: passphrase IGNORED'); return payload; }; @@ -188,7 +186,7 @@ PublicKeyRing.prototype.getCopayersPubKeys = function (index, isChange) { PublicKeyRing.prototype._checkIndexRange = function (index, isChange) { if ( (isChange && index > this.changeAddressIndex) || (!isChange && index > this.addressIndex)) { - log('Out of bounds at getAddress: Index %d isChange: %d', index, isChange); + console.log('Out of bounds at getAddress: Index %d isChange: %d', index, isChange); throw new Error('index out of bound'); } }; diff --git a/js/services/network.js b/js/services/network.js index 1551345d5..9e1031bf3 100644 --- a/js/services/network.js +++ b/js/services/network.js @@ -6,6 +6,7 @@ angular.module('copay.network') $rootScope.connectedPeers = []; $rootScope.connectedTo = []; $rootScope.peerId = null; + $rootScope.publicKeyRing = []; // Array helpers var _arrayDiff = function(a, b) { diff --git a/package.json b/package.json index 39ae9613b..8e593f154 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,19 @@ }, "homepage": "https://github.com/bitpay/copay", "devDependencies": { - "grunt-cli": "~0.1.13", + "grunt-contrib-watch": "~0.5.3", + "grunt-mocha-test": "~0.8.2", + "grunt-shell": "~0.6.4", + "grunt-browserify": "~2.0.0", + "grunt-markdown": "~0.5.0", "karma": "~0.12.1", "karma-chrome-launcher": "~0.1.2", "mocha": "~1.18.2", - "karma-mocha": "~0.1.3" + "karma-mocha": "~0.1.3", + "buffertools": "~2.0.1", + "browserify": "~3.32.1", + "browser-pack": "~2.0.1", + "commander": "~2.1.0", + "uglifyify": "~1.2.3" } } diff --git a/test/index.html b/test/index.html new file mode 100644 index 000000000..d84916368 --- /dev/null +++ b/test/index.html @@ -0,0 +1,28 @@ + + + + Mocha + + + + + +
+ + + + + + + + + + + + diff --git a/test/test.publickeyring.js b/test/test.publickeyring.js index 4b9025e51..8db683ccd 100644 --- a/test/test.publickeyring.js +++ b/test/test.publickeyring.js @@ -2,11 +2,11 @@ var chai = chai || require('chai'); var should = chai.should(); -var bitcore = bitcore || require('../node_modules/bitcore'); +var bitcore = bitcore || require('bitcore'); var Address = bitcore.Address; var buffertools = bitcore.buffertools; -var copay = copay || {}; -var fakeStorage = require('./FakeStorage'); +var copay = copay || require('../copay'); +var fakeStorage = copay.FakeStorage; var PublicKeyRing = copay.PublicKeyRing || require('soop').load('../js/models/PublicKeyRing', {Storage: fakeStorage}); var aMasterPubKey = 'tprv8ZgxMBicQKsPdSVTiWXEqCCzqRaRr9EAQdn5UVMpT9UHX67Dh1FmzEMbavPumpAicsUm2XvC6NTdcWB89yN5DUWx5HQ7z3KByUg7Ht74VRZ'; diff --git a/test/test.storage.js b/test/test.storage.js index 9c317e5e6..d108b6e5b 100644 --- a/test/test.storage.js +++ b/test/test.storage.js @@ -2,7 +2,7 @@ var chai = chai || require('chai'); var should = chai.should(); -var copay = copay || {}; +var copay = copay || require('../copay'); var Storage = copay.Storage || require('../js/models/Storage'); describe('Storage model', function() { diff --git a/util/build.js b/util/build.js new file mode 100755 index 000000000..d1d16a476 --- /dev/null +++ b/util/build.js @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +'use strict'; + +var fs = require('fs'); +var browserify = require('browserify'); +var browserPack = require('browser-pack'); +var exec = require('child_process').exec; +var sys = require('sys'); +var puts = function(error, stdout, stderr) { + if (error) console.log(error); + //sys.puts(stdout); + //sys.puts(stderr); +}; + +var pack = function (params) { + var file = require.resolve('soop'); + var dir = file.substr(0, file.length - String('soop.js').length); + var preludePath = dir + 'example/custom_prelude.js'; + params.raw = true; + params.sourceMapPrefix = '//#'; + params.prelude = fs.readFileSync(preludePath, 'utf8'); + params.preludePath = preludePath; + return browserPack(params); +}; + +var createBundle = function(opts) { + + + opts.dir = opts.dir || 'js/'; + + // concat browser vendor files + exec('cd ' + opts.dir + 'browser; sh concat.sh', puts); + + var bopts = { + pack: pack, + debug: true, + standalone: 'copay', + insertGlobals: true + }; + var b = browserify(bopts); + b.require('./copay', { + expose: 'copay' + }); + + if (!opts.dontminify) { + b.transform({ + global: true + }, 'uglifyify'); + } + var bundle = b.bundle(); + return bundle; +}; + +if (require.main === module) { + var list = function(val) { + return val.split(','); + }; + var program = require('commander'); + program + .version('0.0.1') + .option('-d, --dontminify', 'Don\'t minify the code.') + .option('-o, --stdout', 'Specify output as stdout') + .parse(process.argv); + var copayBundle = createBundle(program); + copayBundle.pipe(program.stdout ? process.stdout : fs.createWriteStream('lib/copayBundle.js')); +} + +module.exports.createBundle = createBundle;