diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..2d511eb --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,41 @@ +{ + "parser": "babel-eslint", + "plugins": [ + "eslint-plugin-flowtype" + ], + "env": { + "es6": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:flowtype/recommended" + ], + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ], + "flowtype/space-before-type-colon": 0, + "no-undef": 0, + "no-unused-vars": 0, + "no-console": 0 + }, + "settings": { + "flowtype": { + "onlyFilesWithFlowAnnotation": true + } + } +} diff --git a/.gitignore b/.gitignore index a6ec74b..b4e253f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ +lib/ *.swp diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9af64ac --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "7" + +install: + - npm install +script: + - npm run check diff --git a/flow-typed/npm/bcoin_vx.x.x.js b/flow-typed/npm/bcoin_vx.x.x.js index cd32081..3bad75a 100644 --- a/flow-typed/npm/bcoin_vx.x.x.js +++ b/flow-typed/npm/bcoin_vx.x.x.js @@ -1,1670 +1,122 @@ -// flow-typed signature: 52ec7d952e23091ff45f80adada48ac0 -// flow-typed version: <>/bcoin_v^1.0.0-beta.12/flow_v0.45.0 +// This is a work-in-progress attempt to type the bcoin library. -/** - * This is an autogenerated libdef stub for: - * - * 'bcoin' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ +type Hash = (string | Buffer); +type Network = any; -declare module 'bcoin' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'bcoin/browser/empty' { - declare module.exports: any; -} - -declare module 'bcoin/browser/index' { - declare module.exports: any; -} - -declare module 'bcoin/browser/server' { - declare module.exports: any; -} - -declare module 'bcoin/browser/transform' { - declare module.exports: any; -} - -declare module 'bcoin/browser/wsproxy' { - declare module.exports: any; -} - -declare module 'bcoin/examples/chain' { - declare module.exports: any; -} - -declare module 'bcoin/examples/client' { - declare module.exports: any; -} - -declare module 'bcoin/examples/miner' { - declare module.exports: any; -} - -declare module 'bcoin/examples/node' { - declare module.exports: any; -} - -declare module 'bcoin/examples/peer' { - declare module.exports: any; -} - -declare module 'bcoin/examples/plugin' { - declare module.exports: any; -} - -declare module 'bcoin/examples/tx' { - declare module.exports: any; -} - -declare module 'bcoin/examples/wallet' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bcoin' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/certs' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/payment' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/paymentack' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/paymentdetails' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/paymentrequest' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/pk' { - declare module.exports: any; -} - -declare module 'bcoin/lib/bip70/x509' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/chain' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/chaindb' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/chainentry' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/common' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/layout-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/blockchain/layout' { - declare module.exports: any; -} - -declare module 'bcoin/lib/btc/amount' { - declare module.exports: any; -} - -declare module 'bcoin/lib/btc/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/btc/uri' { - declare module.exports: any; -} - -declare module 'bcoin/lib/coins/coins' { - declare module.exports: any; -} - -declare module 'bcoin/lib/coins/coinview' { - declare module.exports: any; -} - -declare module 'bcoin/lib/coins/compress' { - declare module.exports: any; -} - -declare module 'bcoin/lib/coins/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/coins/undocoins' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/aes' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/backend-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/backend' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/chachapoly' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/crypto' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/ec-elliptic' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/ec-secp256k1' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/ec' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/pk-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/pk' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/schnorr' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/scrypt' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/sha256' { - declare module.exports: any; -} - -declare module 'bcoin/lib/crypto/siphash' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/backends-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/backends' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/ldb' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/level' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/lowlevelup' { - declare module.exports: any; -} - -declare module 'bcoin/lib/db/memdb' { - declare module.exports: any; -} - -declare module 'bcoin/lib/env' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/common' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/hd' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/mnemonic' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/private' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/public' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/wordlist-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/wordlist' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/chinese-simplified' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/chinese-traditional' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/english' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/french' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/italian' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/japanese' { - declare module.exports: any; -} - -declare module 'bcoin/lib/hd/words/spanish' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/base' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/client' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/request' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/rpc' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/rpcbase' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/rpcclient' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/server' { - declare module.exports: any; -} - -declare module 'bcoin/lib/http/wallet' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mempool/fees' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mempool/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mempool/layout-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mempool/layout' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mempool/mempool' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mempool/mempoolentry' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mining/common' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mining/cpuminer' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mining/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mining/mine' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mining/miner' { - declare module.exports: any; -} - -declare module 'bcoin/lib/mining/template' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/bip150' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/bip151' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/bip152' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/common' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/dns-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/dns' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/framer' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/hostlist' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/packets' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/parser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/peer' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/pool' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/proxysocket' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/seeds/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/seeds/main' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/seeds/testnet' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/socks' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/tcp-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/tcp' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/upnp-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/net/upnp' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/config' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/fullnode' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/logger' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/node' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/nodeclient' { - declare module.exports: any; -} - -declare module 'bcoin/lib/node/spvnode' { - declare module.exports: any; -} - -declare module 'bcoin/lib/pkg' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/abstractblock' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/address' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/block' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/coin' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/headers' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/input' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/invitem' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/keyring' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/memblock' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/merkleblock' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/mtx' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/netaddress' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/outpoint' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/output' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/tx' { - declare module.exports: any; -} - -declare module 'bcoin/lib/primitives/txmeta' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/consensus' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/errors' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/network' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/networks' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/policy' { - declare module.exports: any; -} - -declare module 'bcoin/lib/protocol/timedata' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/common' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/opcode' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/program' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/script' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/scriptnum' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/sigcache' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/stack' { - declare module.exports: any; -} - -declare module 'bcoin/lib/script/witness' { - declare module.exports: any; -} - -declare module 'bcoin/lib/types' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/asn1' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/asyncemitter' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/asyncobject' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/base32' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/base58' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/bloom' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/co' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/encoding' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/fs' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/heap' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/ip' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/lazy-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/lazy' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/list' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/lock' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/lru' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/map' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/murmur3' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/native' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/nexttick-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/nexttick' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/nfkd-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/nfkd' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/pem' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/protobuf' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/rbt' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/reader' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/staticwriter' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/util' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/validator' { - declare module.exports: any; -} - -declare module 'bcoin/lib/utils/writer' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/account' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/client' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/common' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/http' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/layout-browser' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/layout' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/masterkey' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/path' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/plugin' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/records' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/rpc' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/server' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/txdb' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/wallet' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/walletdb' { - declare module.exports: any; -} - -declare module 'bcoin/lib/wallet/walletkey' { - declare module.exports: any; -} - -declare module 'bcoin/lib/workers/framer' { - declare module.exports: any; -} - -declare module 'bcoin/lib/workers/index' { - declare module.exports: any; -} - -declare module 'bcoin/lib/workers/jobs' { - declare module.exports: any; -} - -declare module 'bcoin/lib/workers/master' { - declare module.exports: any; +declare class bcoin$FullNode { + on(eventName : string, eventHandler : Function) : void; + getTX(hash : Hash) : Promise; + getCoin(hash : Hash, index : number) : bcoin$Coin; } -declare module 'bcoin/lib/workers/packets' { - declare module.exports: any; +declare class bcoin$SPVNode { + on(eventName : string, eventHandler : Function) : void; + getTX(hash : Hash) : Promise; + getCoin(hash : Hash, index : number) : bcoin$Coin; + pool : bcoin$Pool; + //TODO Check if changes/additions are needed } -declare module 'bcoin/lib/workers/parser-client' { - declare module.exports: any; +declare class bcoin$Pool { + watchAddress(address : Buffer) : void; } -declare module 'bcoin/lib/workers/parser' { - declare module.exports: any; +declare class bcoin$Address { + toBase58() : string; + hash : Buffer; + static fromHash(Hash) : bcoin$Address; + static fromBase58(string) : bcoin$Address; } -declare module 'bcoin/lib/workers/worker-browser' { - declare module.exports: any; -} +declare class bcoin$TX { + inputs : bcoin$Input[]; + outputs : bcoin$Output[]; -declare module 'bcoin/lib/workers/worker' { - declare module.exports: any; + hash(enc : ?'hex') : Buffer; } -declare module 'bcoin/lib/workers/workerpool' { - declare module.exports: any; -} -declare module 'bcoin/migrate/chaindb0to1' { - declare module.exports: any; -} +declare class bcoin$MTX { + inputs : bcoin$Input[]; + outputs : bcoin$Output[]; -declare module 'bcoin/migrate/chaindb1to2' { - declare module.exports: any; + toTX : bcoin$TX; + template(ring : bcoin$KeyRing) : number; + scriptVector(outputScript : bcoin$Script, inputScript : bcoin$Script, ring : bcoin$KeyRing) : boolean; + addOutput(output : bcoin$Output) : void; + addCoin(coin : bcoin$Coin) : void; + sign(ring : bcoin$KeyRing) : number; + signInput(index : number, coin : bcoin$Coin, keyRing : bcoin$KeyRing) : boolean; } -declare module 'bcoin/migrate/coins-old' { - declare module.exports: any; -} +declare class bcoin$Output { + script : bcoin$Script; + value : number; -declare module 'bcoin/migrate/coinview-old' { - declare module.exports: any; + getType() : ('pubkeyhash' | 'multisig'); + getAddress() : bcoin$Address; } -declare module 'bcoin/migrate/compress-old' { - declare module.exports: any; -} +declare class bcoin$Input { + static fromOutpoint(outpoint : bcoin$Outpoint) : bcoin$Input; -declare module 'bcoin/migrate/ensure-tip-index' { - declare module.exports: any; -} + script : bcoin$Script; + prevout : bcoin$Outpoint; -declare module 'bcoin/migrate/walletdb2to3' { - declare module.exports: any; + getType() : ('pubkeyhash' | 'multisig'); + getAddress() : bcoin$Address; } -declare module 'bcoin/migrate/walletdb3to4' { - declare module.exports: any; -} +declare class bcoin$Script { + static fromMultisig(m : number, n : number, keys : Buffer[]) : bcoin$Script; + static fromPubkeyhash(hash : Hash) : bcoin$Script; -declare module 'bcoin/migrate/walletdb4to5' { - declare module.exports: any; + get(n : number) : (Buffer); } -declare module 'bcoin/migrate/walletdb5to6' { - declare module.exports: any; +declare class bcoin$Outpoint { + hash : Buffer; + index : number; } -declare module 'bcoin/scripts/dump' { - declare module.exports: any; -} +declare class bcoin$KeyRing { + static fromPrivate(key : Buffer, compressed : ?boolean, network : ?Network) : bcoin$KeyRing; + static fromPublic(key : Buffer, network : ?Network) : bcoin$KeyRing; -declare module 'bcoin/scripts/fuzz' { - declare module.exports: any; + getPublicKey() : Buffer; + getPrivateKey() : Buffer; + getAddress() : Buffer; } -declare module 'bcoin/scripts/gen' { - declare module.exports: any; +declare class bcoin$Coin extends bcoin$Output { + script : bcoin$Script; + value : number; } -declare module 'bcoin/vendor/setimmediate' { - declare module.exports: any; +declare module 'bcoin' { + declare module.exports: { + fullnode : Class, + spvnode : Class, + script : Class, + pool : Class, + primitives : { + Address : Class, + TX : Class, + MTX : Class, + Output : Class, + Input : Class, + Outpoint : Class, + KeyRing : Class, + Coin : Class + }, + crypto : { + hash160(str : (string | Buffer)) : Hash, + hash256(str : (string | Buffer)) : Hash + }, + base58 : { + encode(str : (string | Buffer)) : Buffer + }, + } } -declare module 'bcoin/vendor/unorm' { - declare module.exports: any; -} -// Filename aliases -declare module 'bcoin/browser/empty.js' { - declare module.exports: $Exports<'bcoin/browser/empty'>; -} -declare module 'bcoin/browser/index.js' { - declare module.exports: $Exports<'bcoin/browser/index'>; -} -declare module 'bcoin/browser/server.js' { - declare module.exports: $Exports<'bcoin/browser/server'>; -} -declare module 'bcoin/browser/transform.js' { - declare module.exports: $Exports<'bcoin/browser/transform'>; -} -declare module 'bcoin/browser/wsproxy.js' { - declare module.exports: $Exports<'bcoin/browser/wsproxy'>; -} -declare module 'bcoin/examples/chain.js' { - declare module.exports: $Exports<'bcoin/examples/chain'>; -} -declare module 'bcoin/examples/client.js' { - declare module.exports: $Exports<'bcoin/examples/client'>; -} -declare module 'bcoin/examples/miner.js' { - declare module.exports: $Exports<'bcoin/examples/miner'>; -} -declare module 'bcoin/examples/node.js' { - declare module.exports: $Exports<'bcoin/examples/node'>; -} -declare module 'bcoin/examples/peer.js' { - declare module.exports: $Exports<'bcoin/examples/peer'>; -} -declare module 'bcoin/examples/plugin.js' { - declare module.exports: $Exports<'bcoin/examples/plugin'>; -} -declare module 'bcoin/examples/tx.js' { - declare module.exports: $Exports<'bcoin/examples/tx'>; -} -declare module 'bcoin/examples/wallet.js' { - declare module.exports: $Exports<'bcoin/examples/wallet'>; -} -declare module 'bcoin/lib/bcoin.js' { - declare module.exports: $Exports<'bcoin/lib/bcoin'>; -} -declare module 'bcoin/lib/bip70/certs.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/certs'>; -} -declare module 'bcoin/lib/bip70/index.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/index'>; -} -declare module 'bcoin/lib/bip70/payment.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/payment'>; -} -declare module 'bcoin/lib/bip70/paymentack.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/paymentack'>; -} -declare module 'bcoin/lib/bip70/paymentdetails.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/paymentdetails'>; -} -declare module 'bcoin/lib/bip70/paymentrequest.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/paymentrequest'>; -} -declare module 'bcoin/lib/bip70/pk.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/pk'>; -} -declare module 'bcoin/lib/bip70/x509.js' { - declare module.exports: $Exports<'bcoin/lib/bip70/x509'>; -} -declare module 'bcoin/lib/blockchain/chain.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/chain'>; -} -declare module 'bcoin/lib/blockchain/chaindb.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/chaindb'>; -} -declare module 'bcoin/lib/blockchain/chainentry.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/chainentry'>; -} -declare module 'bcoin/lib/blockchain/common.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/common'>; -} -declare module 'bcoin/lib/blockchain/index.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/index'>; -} -declare module 'bcoin/lib/blockchain/layout-browser.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/layout-browser'>; -} -declare module 'bcoin/lib/blockchain/layout.js' { - declare module.exports: $Exports<'bcoin/lib/blockchain/layout'>; -} -declare module 'bcoin/lib/btc/amount.js' { - declare module.exports: $Exports<'bcoin/lib/btc/amount'>; -} -declare module 'bcoin/lib/btc/index.js' { - declare module.exports: $Exports<'bcoin/lib/btc/index'>; -} -declare module 'bcoin/lib/btc/uri.js' { - declare module.exports: $Exports<'bcoin/lib/btc/uri'>; -} -declare module 'bcoin/lib/coins/coins.js' { - declare module.exports: $Exports<'bcoin/lib/coins/coins'>; -} -declare module 'bcoin/lib/coins/coinview.js' { - declare module.exports: $Exports<'bcoin/lib/coins/coinview'>; -} -declare module 'bcoin/lib/coins/compress.js' { - declare module.exports: $Exports<'bcoin/lib/coins/compress'>; -} -declare module 'bcoin/lib/coins/index.js' { - declare module.exports: $Exports<'bcoin/lib/coins/index'>; -} -declare module 'bcoin/lib/coins/undocoins.js' { - declare module.exports: $Exports<'bcoin/lib/coins/undocoins'>; -} -declare module 'bcoin/lib/crypto/aes.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/aes'>; -} -declare module 'bcoin/lib/crypto/backend-browser.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/backend-browser'>; -} -declare module 'bcoin/lib/crypto/backend.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/backend'>; -} -declare module 'bcoin/lib/crypto/chachapoly.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/chachapoly'>; -} -declare module 'bcoin/lib/crypto/crypto.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/crypto'>; -} -declare module 'bcoin/lib/crypto/ec-elliptic.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/ec-elliptic'>; -} -declare module 'bcoin/lib/crypto/ec-secp256k1.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/ec-secp256k1'>; -} -declare module 'bcoin/lib/crypto/ec.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/ec'>; -} -declare module 'bcoin/lib/crypto/index.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/index'>; -} -declare module 'bcoin/lib/crypto/pk-browser.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/pk-browser'>; -} -declare module 'bcoin/lib/crypto/pk.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/pk'>; -} -declare module 'bcoin/lib/crypto/schnorr.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/schnorr'>; -} -declare module 'bcoin/lib/crypto/scrypt.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/scrypt'>; -} -declare module 'bcoin/lib/crypto/sha256.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/sha256'>; -} -declare module 'bcoin/lib/crypto/siphash.js' { - declare module.exports: $Exports<'bcoin/lib/crypto/siphash'>; -} -declare module 'bcoin/lib/db/backends-browser.js' { - declare module.exports: $Exports<'bcoin/lib/db/backends-browser'>; -} -declare module 'bcoin/lib/db/backends.js' { - declare module.exports: $Exports<'bcoin/lib/db/backends'>; -} -declare module 'bcoin/lib/db/index.js' { - declare module.exports: $Exports<'bcoin/lib/db/index'>; -} -declare module 'bcoin/lib/db/ldb.js' { - declare module.exports: $Exports<'bcoin/lib/db/ldb'>; -} -declare module 'bcoin/lib/db/level.js' { - declare module.exports: $Exports<'bcoin/lib/db/level'>; -} -declare module 'bcoin/lib/db/lowlevelup.js' { - declare module.exports: $Exports<'bcoin/lib/db/lowlevelup'>; -} -declare module 'bcoin/lib/db/memdb.js' { - declare module.exports: $Exports<'bcoin/lib/db/memdb'>; -} -declare module 'bcoin/lib/env.js' { - declare module.exports: $Exports<'bcoin/lib/env'>; -} -declare module 'bcoin/lib/hd/common.js' { - declare module.exports: $Exports<'bcoin/lib/hd/common'>; -} -declare module 'bcoin/lib/hd/hd.js' { - declare module.exports: $Exports<'bcoin/lib/hd/hd'>; -} -declare module 'bcoin/lib/hd/index.js' { - declare module.exports: $Exports<'bcoin/lib/hd/index'>; -} -declare module 'bcoin/lib/hd/mnemonic.js' { - declare module.exports: $Exports<'bcoin/lib/hd/mnemonic'>; -} -declare module 'bcoin/lib/hd/private.js' { - declare module.exports: $Exports<'bcoin/lib/hd/private'>; -} -declare module 'bcoin/lib/hd/public.js' { - declare module.exports: $Exports<'bcoin/lib/hd/public'>; -} -declare module 'bcoin/lib/hd/wordlist-browser.js' { - declare module.exports: $Exports<'bcoin/lib/hd/wordlist-browser'>; -} -declare module 'bcoin/lib/hd/wordlist.js' { - declare module.exports: $Exports<'bcoin/lib/hd/wordlist'>; -} -declare module 'bcoin/lib/hd/words/chinese-simplified.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/chinese-simplified'>; -} -declare module 'bcoin/lib/hd/words/chinese-traditional.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/chinese-traditional'>; -} -declare module 'bcoin/lib/hd/words/english.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/english'>; -} -declare module 'bcoin/lib/hd/words/french.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/french'>; -} -declare module 'bcoin/lib/hd/words/index.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/index'>; -} -declare module 'bcoin/lib/hd/words/italian.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/italian'>; -} -declare module 'bcoin/lib/hd/words/japanese.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/japanese'>; -} -declare module 'bcoin/lib/hd/words/spanish.js' { - declare module.exports: $Exports<'bcoin/lib/hd/words/spanish'>; -} -declare module 'bcoin/lib/http/base.js' { - declare module.exports: $Exports<'bcoin/lib/http/base'>; -} -declare module 'bcoin/lib/http/client.js' { - declare module.exports: $Exports<'bcoin/lib/http/client'>; -} -declare module 'bcoin/lib/http/index.js' { - declare module.exports: $Exports<'bcoin/lib/http/index'>; -} -declare module 'bcoin/lib/http/request.js' { - declare module.exports: $Exports<'bcoin/lib/http/request'>; -} -declare module 'bcoin/lib/http/rpc.js' { - declare module.exports: $Exports<'bcoin/lib/http/rpc'>; -} -declare module 'bcoin/lib/http/rpcbase.js' { - declare module.exports: $Exports<'bcoin/lib/http/rpcbase'>; -} -declare module 'bcoin/lib/http/rpcclient.js' { - declare module.exports: $Exports<'bcoin/lib/http/rpcclient'>; -} -declare module 'bcoin/lib/http/server.js' { - declare module.exports: $Exports<'bcoin/lib/http/server'>; -} -declare module 'bcoin/lib/http/wallet.js' { - declare module.exports: $Exports<'bcoin/lib/http/wallet'>; -} -declare module 'bcoin/lib/mempool/fees.js' { - declare module.exports: $Exports<'bcoin/lib/mempool/fees'>; -} -declare module 'bcoin/lib/mempool/index.js' { - declare module.exports: $Exports<'bcoin/lib/mempool/index'>; -} -declare module 'bcoin/lib/mempool/layout-browser.js' { - declare module.exports: $Exports<'bcoin/lib/mempool/layout-browser'>; -} -declare module 'bcoin/lib/mempool/layout.js' { - declare module.exports: $Exports<'bcoin/lib/mempool/layout'>; -} -declare module 'bcoin/lib/mempool/mempool.js' { - declare module.exports: $Exports<'bcoin/lib/mempool/mempool'>; -} -declare module 'bcoin/lib/mempool/mempoolentry.js' { - declare module.exports: $Exports<'bcoin/lib/mempool/mempoolentry'>; -} -declare module 'bcoin/lib/mining/common.js' { - declare module.exports: $Exports<'bcoin/lib/mining/common'>; -} -declare module 'bcoin/lib/mining/cpuminer.js' { - declare module.exports: $Exports<'bcoin/lib/mining/cpuminer'>; -} -declare module 'bcoin/lib/mining/index.js' { - declare module.exports: $Exports<'bcoin/lib/mining/index'>; -} -declare module 'bcoin/lib/mining/mine.js' { - declare module.exports: $Exports<'bcoin/lib/mining/mine'>; -} -declare module 'bcoin/lib/mining/miner.js' { - declare module.exports: $Exports<'bcoin/lib/mining/miner'>; -} -declare module 'bcoin/lib/mining/template.js' { - declare module.exports: $Exports<'bcoin/lib/mining/template'>; -} -declare module 'bcoin/lib/net/bip150.js' { - declare module.exports: $Exports<'bcoin/lib/net/bip150'>; -} -declare module 'bcoin/lib/net/bip151.js' { - declare module.exports: $Exports<'bcoin/lib/net/bip151'>; -} -declare module 'bcoin/lib/net/bip152.js' { - declare module.exports: $Exports<'bcoin/lib/net/bip152'>; -} -declare module 'bcoin/lib/net/common.js' { - declare module.exports: $Exports<'bcoin/lib/net/common'>; -} -declare module 'bcoin/lib/net/dns-browser.js' { - declare module.exports: $Exports<'bcoin/lib/net/dns-browser'>; -} -declare module 'bcoin/lib/net/dns.js' { - declare module.exports: $Exports<'bcoin/lib/net/dns'>; -} -declare module 'bcoin/lib/net/framer.js' { - declare module.exports: $Exports<'bcoin/lib/net/framer'>; -} -declare module 'bcoin/lib/net/hostlist.js' { - declare module.exports: $Exports<'bcoin/lib/net/hostlist'>; -} -declare module 'bcoin/lib/net/index.js' { - declare module.exports: $Exports<'bcoin/lib/net/index'>; -} -declare module 'bcoin/lib/net/packets.js' { - declare module.exports: $Exports<'bcoin/lib/net/packets'>; -} -declare module 'bcoin/lib/net/parser.js' { - declare module.exports: $Exports<'bcoin/lib/net/parser'>; -} -declare module 'bcoin/lib/net/peer.js' { - declare module.exports: $Exports<'bcoin/lib/net/peer'>; -} -declare module 'bcoin/lib/net/pool.js' { - declare module.exports: $Exports<'bcoin/lib/net/pool'>; -} -declare module 'bcoin/lib/net/proxysocket.js' { - declare module.exports: $Exports<'bcoin/lib/net/proxysocket'>; -} -declare module 'bcoin/lib/net/seeds/index.js' { - declare module.exports: $Exports<'bcoin/lib/net/seeds/index'>; -} -declare module 'bcoin/lib/net/seeds/main.js' { - declare module.exports: $Exports<'bcoin/lib/net/seeds/main'>; -} -declare module 'bcoin/lib/net/seeds/testnet.js' { - declare module.exports: $Exports<'bcoin/lib/net/seeds/testnet'>; -} -declare module 'bcoin/lib/net/socks.js' { - declare module.exports: $Exports<'bcoin/lib/net/socks'>; -} -declare module 'bcoin/lib/net/tcp-browser.js' { - declare module.exports: $Exports<'bcoin/lib/net/tcp-browser'>; -} -declare module 'bcoin/lib/net/tcp.js' { - declare module.exports: $Exports<'bcoin/lib/net/tcp'>; -} -declare module 'bcoin/lib/net/upnp-browser.js' { - declare module.exports: $Exports<'bcoin/lib/net/upnp-browser'>; -} -declare module 'bcoin/lib/net/upnp.js' { - declare module.exports: $Exports<'bcoin/lib/net/upnp'>; -} -declare module 'bcoin/lib/node/config.js' { - declare module.exports: $Exports<'bcoin/lib/node/config'>; -} -declare module 'bcoin/lib/node/fullnode.js' { - declare module.exports: $Exports<'bcoin/lib/node/fullnode'>; -} -declare module 'bcoin/lib/node/index.js' { - declare module.exports: $Exports<'bcoin/lib/node/index'>; -} -declare module 'bcoin/lib/node/logger.js' { - declare module.exports: $Exports<'bcoin/lib/node/logger'>; -} -declare module 'bcoin/lib/node/node.js' { - declare module.exports: $Exports<'bcoin/lib/node/node'>; -} -declare module 'bcoin/lib/node/nodeclient.js' { - declare module.exports: $Exports<'bcoin/lib/node/nodeclient'>; -} -declare module 'bcoin/lib/node/spvnode.js' { - declare module.exports: $Exports<'bcoin/lib/node/spvnode'>; -} -declare module 'bcoin/lib/pkg.js' { - declare module.exports: $Exports<'bcoin/lib/pkg'>; -} -declare module 'bcoin/lib/primitives/abstractblock.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/abstractblock'>; -} -declare module 'bcoin/lib/primitives/address.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/address'>; -} -declare module 'bcoin/lib/primitives/block.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/block'>; -} -declare module 'bcoin/lib/primitives/coin.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/coin'>; -} -declare module 'bcoin/lib/primitives/headers.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/headers'>; -} -declare module 'bcoin/lib/primitives/index.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/index'>; -} -declare module 'bcoin/lib/primitives/input.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/input'>; -} -declare module 'bcoin/lib/primitives/invitem.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/invitem'>; -} -declare module 'bcoin/lib/primitives/keyring.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/keyring'>; -} -declare module 'bcoin/lib/primitives/memblock.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/memblock'>; -} -declare module 'bcoin/lib/primitives/merkleblock.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/merkleblock'>; -} -declare module 'bcoin/lib/primitives/mtx.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/mtx'>; -} -declare module 'bcoin/lib/primitives/netaddress.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/netaddress'>; -} -declare module 'bcoin/lib/primitives/outpoint.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/outpoint'>; -} -declare module 'bcoin/lib/primitives/output.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/output'>; -} -declare module 'bcoin/lib/primitives/tx.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/tx'>; -} -declare module 'bcoin/lib/primitives/txmeta.js' { - declare module.exports: $Exports<'bcoin/lib/primitives/txmeta'>; -} -declare module 'bcoin/lib/protocol/consensus.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/consensus'>; -} -declare module 'bcoin/lib/protocol/errors.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/errors'>; -} -declare module 'bcoin/lib/protocol/index.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/index'>; -} -declare module 'bcoin/lib/protocol/network.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/network'>; -} -declare module 'bcoin/lib/protocol/networks.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/networks'>; -} -declare module 'bcoin/lib/protocol/policy.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/policy'>; -} -declare module 'bcoin/lib/protocol/timedata.js' { - declare module.exports: $Exports<'bcoin/lib/protocol/timedata'>; -} -declare module 'bcoin/lib/script/common.js' { - declare module.exports: $Exports<'bcoin/lib/script/common'>; -} -declare module 'bcoin/lib/script/index.js' { - declare module.exports: $Exports<'bcoin/lib/script/index'>; -} -declare module 'bcoin/lib/script/opcode.js' { - declare module.exports: $Exports<'bcoin/lib/script/opcode'>; -} -declare module 'bcoin/lib/script/program.js' { - declare module.exports: $Exports<'bcoin/lib/script/program'>; -} -declare module 'bcoin/lib/script/script.js' { - declare module.exports: $Exports<'bcoin/lib/script/script'>; -} -declare module 'bcoin/lib/script/scriptnum.js' { - declare module.exports: $Exports<'bcoin/lib/script/scriptnum'>; -} -declare module 'bcoin/lib/script/sigcache.js' { - declare module.exports: $Exports<'bcoin/lib/script/sigcache'>; -} -declare module 'bcoin/lib/script/stack.js' { - declare module.exports: $Exports<'bcoin/lib/script/stack'>; -} -declare module 'bcoin/lib/script/witness.js' { - declare module.exports: $Exports<'bcoin/lib/script/witness'>; -} -declare module 'bcoin/lib/types.js' { - declare module.exports: $Exports<'bcoin/lib/types'>; -} -declare module 'bcoin/lib/utils/asn1.js' { - declare module.exports: $Exports<'bcoin/lib/utils/asn1'>; -} -declare module 'bcoin/lib/utils/asyncemitter.js' { - declare module.exports: $Exports<'bcoin/lib/utils/asyncemitter'>; -} -declare module 'bcoin/lib/utils/asyncobject.js' { - declare module.exports: $Exports<'bcoin/lib/utils/asyncobject'>; -} -declare module 'bcoin/lib/utils/base32.js' { - declare module.exports: $Exports<'bcoin/lib/utils/base32'>; -} -declare module 'bcoin/lib/utils/base58.js' { - declare module.exports: $Exports<'bcoin/lib/utils/base58'>; -} -declare module 'bcoin/lib/utils/bloom.js' { - declare module.exports: $Exports<'bcoin/lib/utils/bloom'>; -} -declare module 'bcoin/lib/utils/co.js' { - declare module.exports: $Exports<'bcoin/lib/utils/co'>; -} -declare module 'bcoin/lib/utils/encoding.js' { - declare module.exports: $Exports<'bcoin/lib/utils/encoding'>; -} -declare module 'bcoin/lib/utils/fs.js' { - declare module.exports: $Exports<'bcoin/lib/utils/fs'>; -} -declare module 'bcoin/lib/utils/heap.js' { - declare module.exports: $Exports<'bcoin/lib/utils/heap'>; -} -declare module 'bcoin/lib/utils/index.js' { - declare module.exports: $Exports<'bcoin/lib/utils/index'>; -} -declare module 'bcoin/lib/utils/ip.js' { - declare module.exports: $Exports<'bcoin/lib/utils/ip'>; -} -declare module 'bcoin/lib/utils/lazy-browser.js' { - declare module.exports: $Exports<'bcoin/lib/utils/lazy-browser'>; -} -declare module 'bcoin/lib/utils/lazy.js' { - declare module.exports: $Exports<'bcoin/lib/utils/lazy'>; -} -declare module 'bcoin/lib/utils/list.js' { - declare module.exports: $Exports<'bcoin/lib/utils/list'>; -} -declare module 'bcoin/lib/utils/lock.js' { - declare module.exports: $Exports<'bcoin/lib/utils/lock'>; -} -declare module 'bcoin/lib/utils/lru.js' { - declare module.exports: $Exports<'bcoin/lib/utils/lru'>; -} -declare module 'bcoin/lib/utils/map.js' { - declare module.exports: $Exports<'bcoin/lib/utils/map'>; -} -declare module 'bcoin/lib/utils/murmur3.js' { - declare module.exports: $Exports<'bcoin/lib/utils/murmur3'>; -} -declare module 'bcoin/lib/utils/native.js' { - declare module.exports: $Exports<'bcoin/lib/utils/native'>; -} -declare module 'bcoin/lib/utils/nexttick-browser.js' { - declare module.exports: $Exports<'bcoin/lib/utils/nexttick-browser'>; -} -declare module 'bcoin/lib/utils/nexttick.js' { - declare module.exports: $Exports<'bcoin/lib/utils/nexttick'>; -} -declare module 'bcoin/lib/utils/nfkd-browser.js' { - declare module.exports: $Exports<'bcoin/lib/utils/nfkd-browser'>; -} -declare module 'bcoin/lib/utils/nfkd.js' { - declare module.exports: $Exports<'bcoin/lib/utils/nfkd'>; -} -declare module 'bcoin/lib/utils/pem.js' { - declare module.exports: $Exports<'bcoin/lib/utils/pem'>; -} -declare module 'bcoin/lib/utils/protobuf.js' { - declare module.exports: $Exports<'bcoin/lib/utils/protobuf'>; -} -declare module 'bcoin/lib/utils/rbt.js' { - declare module.exports: $Exports<'bcoin/lib/utils/rbt'>; -} -declare module 'bcoin/lib/utils/reader.js' { - declare module.exports: $Exports<'bcoin/lib/utils/reader'>; -} -declare module 'bcoin/lib/utils/staticwriter.js' { - declare module.exports: $Exports<'bcoin/lib/utils/staticwriter'>; -} -declare module 'bcoin/lib/utils/util.js' { - declare module.exports: $Exports<'bcoin/lib/utils/util'>; -} -declare module 'bcoin/lib/utils/validator.js' { - declare module.exports: $Exports<'bcoin/lib/utils/validator'>; -} -declare module 'bcoin/lib/utils/writer.js' { - declare module.exports: $Exports<'bcoin/lib/utils/writer'>; -} -declare module 'bcoin/lib/wallet/account.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/account'>; -} -declare module 'bcoin/lib/wallet/client.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/client'>; -} -declare module 'bcoin/lib/wallet/common.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/common'>; -} -declare module 'bcoin/lib/wallet/http.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/http'>; -} -declare module 'bcoin/lib/wallet/index.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/index'>; -} -declare module 'bcoin/lib/wallet/layout-browser.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/layout-browser'>; -} -declare module 'bcoin/lib/wallet/layout.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/layout'>; -} -declare module 'bcoin/lib/wallet/masterkey.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/masterkey'>; -} -declare module 'bcoin/lib/wallet/path.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/path'>; -} -declare module 'bcoin/lib/wallet/plugin.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/plugin'>; -} -declare module 'bcoin/lib/wallet/records.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/records'>; -} -declare module 'bcoin/lib/wallet/rpc.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/rpc'>; -} -declare module 'bcoin/lib/wallet/server.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/server'>; -} -declare module 'bcoin/lib/wallet/txdb.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/txdb'>; -} -declare module 'bcoin/lib/wallet/wallet.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/wallet'>; -} -declare module 'bcoin/lib/wallet/walletdb.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/walletdb'>; -} -declare module 'bcoin/lib/wallet/walletkey.js' { - declare module.exports: $Exports<'bcoin/lib/wallet/walletkey'>; -} -declare module 'bcoin/lib/workers/framer.js' { - declare module.exports: $Exports<'bcoin/lib/workers/framer'>; -} -declare module 'bcoin/lib/workers/index.js' { - declare module.exports: $Exports<'bcoin/lib/workers/index'>; -} -declare module 'bcoin/lib/workers/jobs.js' { - declare module.exports: $Exports<'bcoin/lib/workers/jobs'>; -} -declare module 'bcoin/lib/workers/master.js' { - declare module.exports: $Exports<'bcoin/lib/workers/master'>; -} -declare module 'bcoin/lib/workers/packets.js' { - declare module.exports: $Exports<'bcoin/lib/workers/packets'>; -} -declare module 'bcoin/lib/workers/parser-client.js' { - declare module.exports: $Exports<'bcoin/lib/workers/parser-client'>; -} -declare module 'bcoin/lib/workers/parser.js' { - declare module.exports: $Exports<'bcoin/lib/workers/parser'>; -} -declare module 'bcoin/lib/workers/worker-browser.js' { - declare module.exports: $Exports<'bcoin/lib/workers/worker-browser'>; -} -declare module 'bcoin/lib/workers/worker.js' { - declare module.exports: $Exports<'bcoin/lib/workers/worker'>; -} -declare module 'bcoin/lib/workers/workerpool.js' { - declare module.exports: $Exports<'bcoin/lib/workers/workerpool'>; -} -declare module 'bcoin/migrate/chaindb0to1.js' { - declare module.exports: $Exports<'bcoin/migrate/chaindb0to1'>; -} -declare module 'bcoin/migrate/chaindb1to2.js' { - declare module.exports: $Exports<'bcoin/migrate/chaindb1to2'>; -} -declare module 'bcoin/migrate/coins-old.js' { - declare module.exports: $Exports<'bcoin/migrate/coins-old'>; -} -declare module 'bcoin/migrate/coinview-old.js' { - declare module.exports: $Exports<'bcoin/migrate/coinview-old'>; -} -declare module 'bcoin/migrate/compress-old.js' { - declare module.exports: $Exports<'bcoin/migrate/compress-old'>; -} -declare module 'bcoin/migrate/ensure-tip-index.js' { - declare module.exports: $Exports<'bcoin/migrate/ensure-tip-index'>; -} -declare module 'bcoin/migrate/walletdb2to3.js' { - declare module.exports: $Exports<'bcoin/migrate/walletdb2to3'>; -} -declare module 'bcoin/migrate/walletdb3to4.js' { - declare module.exports: $Exports<'bcoin/migrate/walletdb3to4'>; -} -declare module 'bcoin/migrate/walletdb4to5.js' { - declare module.exports: $Exports<'bcoin/migrate/walletdb4to5'>; -} -declare module 'bcoin/migrate/walletdb5to6.js' { - declare module.exports: $Exports<'bcoin/migrate/walletdb5to6'>; -} -declare module 'bcoin/scripts/dump.js' { - declare module.exports: $Exports<'bcoin/scripts/dump'>; -} -declare module 'bcoin/scripts/fuzz.js' { - declare module.exports: $Exports<'bcoin/scripts/fuzz'>; -} -declare module 'bcoin/scripts/gen.js' { - declare module.exports: $Exports<'bcoin/scripts/gen'>; -} -declare module 'bcoin/vendor/setimmediate.js' { - declare module.exports: $Exports<'bcoin/vendor/setimmediate'>; -} -declare module 'bcoin/vendor/unorm.js' { - declare module.exports: $Exports<'bcoin/vendor/unorm'>; -} diff --git a/flow-typed/npm/graph-theory-ford-fulkerson_vx.x.x.js b/flow-typed/npm/graph-theory-ford-fulkerson_vx.x.x.js new file mode 100644 index 0000000..983c36c --- /dev/null +++ b/flow-typed/npm/graph-theory-ford-fulkerson_vx.x.x.js @@ -0,0 +1,45 @@ +// flow-typed signature: 2849579ad8dda7785593fce35e7021fd +// flow-typed version: <>/graph-theory-ford-fulkerson_v^1.0.0/flow_v0.45.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'graph-theory-ford-fulkerson' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'graph-theory-ford-fulkerson' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'graph-theory-ford-fulkerson/example/example' { + declare module.exports: any; +} + +declare module 'graph-theory-ford-fulkerson/test/index' { + declare module.exports: any; +} + +// Filename aliases +declare module 'graph-theory-ford-fulkerson/example/example.js' { + declare module.exports: $Exports<'graph-theory-ford-fulkerson/example/example'>; +} +declare module 'graph-theory-ford-fulkerson/index' { + declare module.exports: $Exports<'graph-theory-ford-fulkerson'>; +} +declare module 'graph-theory-ford-fulkerson/index.js' { + declare module.exports: $Exports<'graph-theory-ford-fulkerson'>; +} +declare module 'graph-theory-ford-fulkerson/test/index.js' { + declare module.exports: $Exports<'graph-theory-ford-fulkerson/test/index'>; +} diff --git a/flow-typed/npm/should-sinon_vx.x.x.js b/flow-typed/npm/should-sinon_vx.x.x.js new file mode 100644 index 0000000..6de6924 --- /dev/null +++ b/flow-typed/npm/should-sinon_vx.x.x.js @@ -0,0 +1,39 @@ +// flow-typed signature: 45843e3ce6bf3afc28721ddbe8e0ce2f +// flow-typed version: <>/should-sinon_v0.0.5/flow_v0.45.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'should-sinon' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'should-sinon' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'should-sinon/should-sinon' { + declare module.exports: any; +} + +declare module 'should-sinon/test' { + declare module.exports: any; +} + +// Filename aliases +declare module 'should-sinon/should-sinon.js' { + declare module.exports: $Exports<'should-sinon/should-sinon'>; +} +declare module 'should-sinon/test.js' { + declare module.exports: $Exports<'should-sinon/test'>; +} diff --git a/flow-typed/npm/sinon_vx.x.x.js b/flow-typed/npm/sinon_vx.x.x.js new file mode 100644 index 0000000..c75f639 --- /dev/null +++ b/flow-typed/npm/sinon_vx.x.x.js @@ -0,0 +1,375 @@ +// flow-typed signature: 49be0b929be2f6361f541fdb8e279527 +// flow-typed version: <>/sinon_v^2.2.0/flow_v0.45.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'sinon' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'sinon' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'sinon/lib/sinon' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/assert' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/behavior' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/blob' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/call' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/collect-own-methods' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/collection' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/color' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/default-behaviors' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/match' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/mock-expectation' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/mock' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/sandbox' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/spy-formatters' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/spy' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/stub-descriptor' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/stub-entire-object' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/stub-non-function-property' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/stub' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/throw-on-falsy-object' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/called-in-order' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/deep-equal' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/default-config' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/deprecated' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/every' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/extend' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/format' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/function-name' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/function-to-string' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/get-config' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/get-property-descriptor' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/index' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/iterable-to-string' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/log_error' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/order-by-first-call' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/restore' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/times-in-words' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/typeOf' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/value-to-string' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/walk' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/core/wrap-method' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/event' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/fake_server_with_clock' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/fake_server' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/fake_timers' { + declare module.exports: any; +} + +declare module 'sinon/lib/sinon/util/fake_xml_http_request' { + declare module.exports: any; +} + +declare module 'sinon/pkg/sinon-2.2.0' { + declare module.exports: any; +} + +declare module 'sinon/pkg/sinon-no-sourcemaps-2.2.0' { + declare module.exports: any; +} + +declare module 'sinon/pkg/sinon-no-sourcemaps' { + declare module.exports: any; +} + +declare module 'sinon/pkg/sinon' { + declare module.exports: any; +} + +// Filename aliases +declare module 'sinon/lib/sinon.js' { + declare module.exports: $Exports<'sinon/lib/sinon'>; +} +declare module 'sinon/lib/sinon/assert.js' { + declare module.exports: $Exports<'sinon/lib/sinon/assert'>; +} +declare module 'sinon/lib/sinon/behavior.js' { + declare module.exports: $Exports<'sinon/lib/sinon/behavior'>; +} +declare module 'sinon/lib/sinon/blob.js' { + declare module.exports: $Exports<'sinon/lib/sinon/blob'>; +} +declare module 'sinon/lib/sinon/call.js' { + declare module.exports: $Exports<'sinon/lib/sinon/call'>; +} +declare module 'sinon/lib/sinon/collect-own-methods.js' { + declare module.exports: $Exports<'sinon/lib/sinon/collect-own-methods'>; +} +declare module 'sinon/lib/sinon/collection.js' { + declare module.exports: $Exports<'sinon/lib/sinon/collection'>; +} +declare module 'sinon/lib/sinon/color.js' { + declare module.exports: $Exports<'sinon/lib/sinon/color'>; +} +declare module 'sinon/lib/sinon/default-behaviors.js' { + declare module.exports: $Exports<'sinon/lib/sinon/default-behaviors'>; +} +declare module 'sinon/lib/sinon/match.js' { + declare module.exports: $Exports<'sinon/lib/sinon/match'>; +} +declare module 'sinon/lib/sinon/mock-expectation.js' { + declare module.exports: $Exports<'sinon/lib/sinon/mock-expectation'>; +} +declare module 'sinon/lib/sinon/mock.js' { + declare module.exports: $Exports<'sinon/lib/sinon/mock'>; +} +declare module 'sinon/lib/sinon/sandbox.js' { + declare module.exports: $Exports<'sinon/lib/sinon/sandbox'>; +} +declare module 'sinon/lib/sinon/spy-formatters.js' { + declare module.exports: $Exports<'sinon/lib/sinon/spy-formatters'>; +} +declare module 'sinon/lib/sinon/spy.js' { + declare module.exports: $Exports<'sinon/lib/sinon/spy'>; +} +declare module 'sinon/lib/sinon/stub-descriptor.js' { + declare module.exports: $Exports<'sinon/lib/sinon/stub-descriptor'>; +} +declare module 'sinon/lib/sinon/stub-entire-object.js' { + declare module.exports: $Exports<'sinon/lib/sinon/stub-entire-object'>; +} +declare module 'sinon/lib/sinon/stub-non-function-property.js' { + declare module.exports: $Exports<'sinon/lib/sinon/stub-non-function-property'>; +} +declare module 'sinon/lib/sinon/stub.js' { + declare module.exports: $Exports<'sinon/lib/sinon/stub'>; +} +declare module 'sinon/lib/sinon/throw-on-falsy-object.js' { + declare module.exports: $Exports<'sinon/lib/sinon/throw-on-falsy-object'>; +} +declare module 'sinon/lib/sinon/util/core/called-in-order.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/called-in-order'>; +} +declare module 'sinon/lib/sinon/util/core/deep-equal.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/deep-equal'>; +} +declare module 'sinon/lib/sinon/util/core/default-config.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/default-config'>; +} +declare module 'sinon/lib/sinon/util/core/deprecated.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/deprecated'>; +} +declare module 'sinon/lib/sinon/util/core/every.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/every'>; +} +declare module 'sinon/lib/sinon/util/core/extend.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/extend'>; +} +declare module 'sinon/lib/sinon/util/core/format.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/format'>; +} +declare module 'sinon/lib/sinon/util/core/function-name.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/function-name'>; +} +declare module 'sinon/lib/sinon/util/core/function-to-string.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/function-to-string'>; +} +declare module 'sinon/lib/sinon/util/core/get-config.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/get-config'>; +} +declare module 'sinon/lib/sinon/util/core/get-property-descriptor.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/get-property-descriptor'>; +} +declare module 'sinon/lib/sinon/util/core/index.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/index'>; +} +declare module 'sinon/lib/sinon/util/core/iterable-to-string.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/iterable-to-string'>; +} +declare module 'sinon/lib/sinon/util/core/log_error.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/log_error'>; +} +declare module 'sinon/lib/sinon/util/core/order-by-first-call.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/order-by-first-call'>; +} +declare module 'sinon/lib/sinon/util/core/restore.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/restore'>; +} +declare module 'sinon/lib/sinon/util/core/times-in-words.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/times-in-words'>; +} +declare module 'sinon/lib/sinon/util/core/typeOf.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/typeOf'>; +} +declare module 'sinon/lib/sinon/util/core/value-to-string.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/value-to-string'>; +} +declare module 'sinon/lib/sinon/util/core/walk.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/walk'>; +} +declare module 'sinon/lib/sinon/util/core/wrap-method.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/core/wrap-method'>; +} +declare module 'sinon/lib/sinon/util/event.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/event'>; +} +declare module 'sinon/lib/sinon/util/fake_server_with_clock.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/fake_server_with_clock'>; +} +declare module 'sinon/lib/sinon/util/fake_server.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/fake_server'>; +} +declare module 'sinon/lib/sinon/util/fake_timers.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/fake_timers'>; +} +declare module 'sinon/lib/sinon/util/fake_xml_http_request.js' { + declare module.exports: $Exports<'sinon/lib/sinon/util/fake_xml_http_request'>; +} +declare module 'sinon/pkg/sinon-2.2.0.js' { + declare module.exports: $Exports<'sinon/pkg/sinon-2.2.0'>; +} +declare module 'sinon/pkg/sinon-no-sourcemaps-2.2.0.js' { + declare module.exports: $Exports<'sinon/pkg/sinon-no-sourcemaps-2.2.0'>; +} +declare module 'sinon/pkg/sinon-no-sourcemaps.js' { + declare module.exports: $Exports<'sinon/pkg/sinon-no-sourcemaps'>; +} +declare module 'sinon/pkg/sinon.js' { + declare module.exports: $Exports<'sinon/pkg/sinon'>; +} diff --git a/flow-typed/npm/sorted-set_vx.x.x.js b/flow-typed/npm/sorted-set_vx.x.x.js new file mode 100644 index 0000000..be9ce1e --- /dev/null +++ b/flow-typed/npm/sorted-set_vx.x.x.js @@ -0,0 +1,87 @@ +// flow-typed signature: 49b561be32534814522dc2da04fa8dea +// flow-typed version: <>/sorted-set_v1.x.x/flow_v0.45.0 + +/** + * This is an autogenerated libdef stub for: + * + * 'sorted-set' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'sorted-set' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'sorted-set/examples/distance' { + declare module.exports: any; +} + +declare module 'sorted-set/examples/kademlia' { + declare module.exports: any; +} + +declare module 'sorted-set/examples/ttl' { + declare module.exports: any; +} + +declare module 'sorted-set/lib/intersect-sorted' { + declare module.exports: any; +} + +declare module 'sorted-set/lib/intersect-unique' { + declare module.exports: any; +} + +declare module 'sorted-set/lib/set' { + declare module.exports: any; +} + +declare module 'sorted-set/test/index' { + declare module.exports: any; +} + +declare module 'sorted-set/test/set' { + declare module.exports: any; +} + +// Filename aliases +declare module 'sorted-set/examples/distance.js' { + declare module.exports: $Exports<'sorted-set/examples/distance'>; +} +declare module 'sorted-set/examples/kademlia.js' { + declare module.exports: $Exports<'sorted-set/examples/kademlia'>; +} +declare module 'sorted-set/examples/ttl.js' { + declare module.exports: $Exports<'sorted-set/examples/ttl'>; +} +declare module 'sorted-set/index' { + declare module.exports: $Exports<'sorted-set'>; +} +declare module 'sorted-set/index.js' { + declare module.exports: $Exports<'sorted-set'>; +} +declare module 'sorted-set/lib/intersect-sorted.js' { + declare module.exports: $Exports<'sorted-set/lib/intersect-sorted'>; +} +declare module 'sorted-set/lib/intersect-unique.js' { + declare module.exports: $Exports<'sorted-set/lib/intersect-unique'>; +} +declare module 'sorted-set/lib/set.js' { + declare module.exports: $Exports<'sorted-set/lib/set'>; +} +declare module 'sorted-set/test/index.js' { + declare module.exports: $Exports<'sorted-set/test/index'>; +} +declare module 'sorted-set/test/set.js' { + declare module.exports: $Exports<'sorted-set/test/set'>; +} diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 2b229a1..0000000 --- a/lib/index.js +++ /dev/null @@ -1,12 +0,0 @@ -// -var bcoin = require('bcoin'); - -class fullnode extends bcoin.fullnode { - constructor(options ) { - super(options); - } -} - -module.exports = { - fullnode -} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2086d94 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3062 @@ +{ + "name": "trust-is-risk", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" + }, + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha1-HF6Mal75Za6MNd+zqHcMR2uCxLg=", + "optional": true, + "requires": { + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "accepts": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz", + "integrity": "sha1-1xyW99QdD+2iw4zRToonwEFY30o=", + "optional": true, + "requires": { + "mime-types": "2.0.14", + "negotiator": "0.4.9" + }, + "dependencies": { + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "optional": true + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "optional": true, + "requires": { + "mime-db": "1.12.0" + } + } + } + }, + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", + "integrity": "sha1-kRy1PgNoB88Pp3jcXTcPvYZCRtc=", + "dev": true + }, + "acorn-jsx": { + "version": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz" + }, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "optional": true + }, + "ajv": { + "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } + }, + "ajv-keywords": { + "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "ansi-escapes": { + "version": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha1-RcZikJTeTpb2k+9+q3SuB5wkD8E=", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" + } + }, + "argparse": { + "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + } + }, + "array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=", + "optional": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "array-union": { + "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + } + }, + "array-uniq": { + "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "arrify": { + "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "babel-code-frame": { + "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + } + }, + "babel-eslint": { + "version": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz" + } + }, + "babel-messages": { + "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" + } + }, + "babel-runtime": { + "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz" + } + }, + "babel-traverse": { + "version": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "globals": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "babel-types": { + "version": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } + }, + "babylon": { + "version": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "optional": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-arraybuffer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", + "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=" + }, + "base64id": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", + "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=", + "optional": true + }, + "bcoin": { + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/bcoin/-/bcoin-1.0.0-beta.12.tgz", + "integrity": "sha1-hb+4F/VjDlnKsLeHv51DaPwSRsQ=", + "requires": { + "bcoin-native": "0.0.14", + "bn.js": "4.11.6", + "elliptic": "6.3.2", + "leveldown": "1.5.0", + "secp256k1": "3.2.5", + "socket.io": "1.4.8", + "socket.io-client": "1.4.8" + } + }, + "bcoin-native": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/bcoin-native/-/bcoin-native-0.0.14.tgz", + "integrity": "sha1-gRvFFbIJRlvnGESsPzo7kO+J9BE=", + "optional": true, + "requires": { + "bindings": "1.2.1", + "nan": "2.5.1" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "benchmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", + "integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "bindings": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", + "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", + "optional": true + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "optional": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", + "requires": { + "readable-stream": "2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "0.10.31", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-stdout": { + "version": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify-aes": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", + "integrity": "sha1-yPo7G3WFu3unfFVgtgmW3extUwk=", + "optional": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "optional": true + }, + "caller-path": { + "version": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "optional": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "circular-json": { + "version": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", + "dev": true + }, + "cli-cursor": { + "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" + } + }, + "cli-width": { + "version": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "co": { + "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "optional": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "optional": true + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "core-js": { + "version": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.4", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "optional": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "2.0.1", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "sha.js": "2.4.8" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "d": { + "version": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "optional": true + }, + "deep-is": { + "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "del": { + "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "is-path-cwd": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "is-path-in-cwd": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "diff": { + "version": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "doctrine": { + "version": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "dev": true, + "requires": { + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "optional": true, + "requires": { + "browserify-aes": "1.0.8", + "create-hash": "1.1.3", + "create-hmac": "1.1.6" + } + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "requires": { + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "elliptic": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz", + "integrity": "sha1-5MgeCCnPCmWrcOmYuCMnI7XBvEg=", + "requires": { + "bn.js": "4.11.6", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "engine.io": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.6.11.tgz", + "integrity": "sha1-JTOpemWHbED/z5U5e375tJXEI/4=", + "optional": true, + "requires": { + "accepts": "1.1.4", + "base64id": "0.1.0", + "debug": "2.2.0", + "engine.io-parser": "1.2.4", + "ws": "1.1.0" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + } + } + }, + "engine.io-client": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.11.tgz", + "integrity": "sha1-fSUNj6HCGBGezeUTkEWKV9UXE3Y=", + "optional": true, + "requires": { + "component-emitter": "1.1.2", + "component-inherit": "0.0.3", + "debug": "2.2.0", + "engine.io-parser": "1.2.4", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.1", + "parseqs": "0.0.2", + "parseuri": "0.0.4", + "ws": "1.0.1", + "xmlhttprequest-ssl": "1.5.1", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + }, + "ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", + "integrity": "sha1-fQsqLljN3YGQOcKcneZQReGzEOk=", + "optional": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + } + } + }, + "engine.io-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", + "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", + "requires": { + "after": "0.8.1", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.2", + "blob": "0.0.4", + "has-binary": "0.1.6", + "utf8": "2.1.0" + }, + "dependencies": { + "after": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", + "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=" + }, + "has-binary": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", + "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "requires": { + "isarray": "0.0.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "es5-ext": { + "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", + "requires": { + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "es6-iterator": { + "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "es6-map": { + "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-set": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + } + }, + "es6-set": { + "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + } + }, + "es6-symbol": { + "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz" + } + }, + "es6-weak-map": { + "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "es6-weak-map": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "eslint": { + "version": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "espree": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", + "esquery": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "file-entry-cache": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "globals": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "ignore": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", + "imurmurhash": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "inquirer": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "is-resolvable": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "natural-compare": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "pluralize": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "progress": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "require-uncached": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "table": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "text-table": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "user-home": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz" + } + }, + "eslint-plugin-flowtype": { + "version": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.35.1.tgz", + "integrity": "sha1-mtmBgbRno2RfvSqNQwOTzBek6mM=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "espree": { + "version": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", + "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", + "acorn-jsx": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz" + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", + "dev": true + }, + "esquery": { + "version": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "esrecurse": { + "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "optional": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "execspawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", + "integrity": "sha1-gob53efOzeeQX73ATiTzaPI/jaY=", + "optional": true, + "requires": { + "util-extend": "1.0.3" + } + }, + "exit-hook": { + "version": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", + "integrity": "sha1-4J77qXe/mPnuDtJavQxpLgKuw/w=", + "optional": true + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-future": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", + "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=", + "optional": true + }, + "fast-levenshtein": { + "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "file-entry-cache": { + "version": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "flat-cache": { + "version": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "dev": true, + "requires": { + "circular-json": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "del": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "write": "https://registry.npmjs.org/write/-/write-0.2.1.tgz" + } + }, + "flow-bin": { + "version": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.45.0.tgz", + "integrity": "sha1-AJ3Q9Xej9mXHTKi+gnrowt2P1rU=", + "dev": true + }, + "flow-remove-types": { + "version": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.1.tgz", + "integrity": "sha1-WOJhv4uEK9I0yGyvuYKhITr/Dts=", + "dev": true, + "requires": { + "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "vlq": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "formatio": { + "version": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "dev": true, + "requires": { + "samsam": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz" + } + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz" + } + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "0.3.1", + "has-unicode": "2.0.1", + "lodash.pad": "4.5.1", + "lodash.padend": "4.6.1", + "lodash.padstart": "4.6.1" + } + }, + "generate-function": { + "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "ghreleases": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.6.tgz", + "integrity": "sha512-uySVPT5T9uP1xeWR7nl3WD8/JjJJXAph/0zdgUQJ7ovFpL3rxBT/HT0sO6w0GDWCj2gwXvzxBKrIeJAgBhs+fw==", + "optional": true, + "requires": { + "after": "0.8.2", + "ghrepos": "2.0.0", + "ghutils": "3.2.1", + "simple-mime": "0.1.0", + "url-template": "2.0.8", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "ghrepos": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ghrepos/-/ghrepos-2.0.0.tgz", + "integrity": "sha1-1m6unZijtTmORg1tt+EKdCaS6Bs=", + "optional": true, + "requires": { + "ghutils": "3.2.1" + } + }, + "ghutils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ghutils/-/ghutils-3.2.1.tgz", + "integrity": "sha1-T87f+sk1/KzgbhKhfGF04sKf/k8=", + "requires": { + "jsonist": "1.3.0", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "optional": true + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "globals": { + "version": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "dev": true + }, + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "graph-theory-ford-fulkerson": { + "version": "https://registry.npmjs.org/graph-theory-ford-fulkerson/-/graph-theory-ford-fulkerson-1.0.0.tgz", + "integrity": "sha1-LDHSHXDxp9KCiZX+BnZFdv9/nik=" + }, + "growl": { + "version": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "har-schema": "1.0.5" + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "optional": true + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "hyperquest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz", + "integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=", + "requires": { + "duplexer2": "0.0.2", + "through2": "0.6.5" + } + }, + "ignore": { + "version": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", + "integrity": "sha1-xOcVRV9gc6jX5drnLS/J1xZj26Y=", + "dev": true + }, + "imurmurhash": { + "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "optional": true + }, + "inquirer": { + "version": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "cli-width": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "readline2": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "run-async": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "rx-lite": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "interpret": { + "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "invariant": { + "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" + } + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-my-json-valid": { + "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha1-WoRnd+LCYg0eaRBOXToDsfYIjxE=", + "dev": true, + "requires": { + "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "is-path-cwd": { + "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz" + } + }, + "is-path-inside": { + "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + } + }, + "is-property": { + "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-resolvable": { + "version": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true, + "requires": { + "tryit": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-tokens": { + "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "integrity": "sha1-CHdc69/dNZIJ8NKs04PI+GppBKA=", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "jsonify": { + "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonist": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-1.3.0.tgz", + "integrity": "sha1-wMdLle8clSA4YZsp76UgscyYdVY=", + "requires": { + "bl": "1.0.3", + "hyperquest": "1.2.0", + "json-stringify-safe": "5.0.1", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "jsonpointer": { + "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "leveldown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-1.5.0.tgz", + "integrity": "sha1-a408vqekqJqkdERgfXNYIT5vy4E=", + "optional": true, + "requires": { + "abstract-leveldown": "2.6.3", + "bindings": "1.2.1", + "fast-future": "1.0.2", + "nan": "2.4.0", + "prebuild": "4.5.0" + }, + "dependencies": { + "nan": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", + "optional": true + } + } + }, + "levn": { + "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + } + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash._baseassign": { + "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" + } + }, + "lodash._basecopy": { + "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.create": { + "version": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "lodash._basecreate": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz" + } + }, + "lodash.isarguments": { + "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" + } + }, + "lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "lolex": { + "version": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", + "dev": true + }, + "loose-envify": { + "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "optional": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "optional": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + } + } + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz", + "integrity": "sha1-EyhWfScX+ZcDD4AGI0vOm4zXJGU=", + "dev": true, + "requires": { + "browser-stdout": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "diff": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "growl": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "lodash.create": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + } + } + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.5.1.tgz", + "integrity": "sha1-1bAWkSUzJql6K77p5hxV2NYDUeI=", + "optional": true + }, + "native-promise-only": { + "version": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", + "dev": true + }, + "natural-compare": { + "version": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz", + "integrity": "sha1-kuRrbbU8fkIe1koryU8IvnYw3z8=", + "optional": true + }, + "node-abi": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.1.tgz", + "integrity": "sha1-yc2iVuyKqZvKsvZEbbOK8UMziyo=", + "optional": true + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "optional": true, + "requires": { + "fstream": "1.0.11", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "3.0.6", + "npmlog": "2.0.4", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + } + }, + "node-ninja": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", + "integrity": "sha1-IKCeV7kuLfWRmT1L8JisPnJwYrY=", + "optional": true, + "requires": { + "fstream": "1.0.11", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "3.0.6", + "npmlog": "2.0.4", + "osenv": "0.1.4", + "path-array": "1.0.1", + "request": "2.81.0", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", + "optional": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1.1.0" + } + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "requires": { + "ansi": "0.3.1", + "are-we-there-yet": "1.1.4", + "gauge": "1.2.7" + } + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "optional": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "onetime": { + "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "optionator": { + "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "fast-levenshtein": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "os-tmpdir": "1.0.2" + } + }, + "parsejson": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", + "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", + "optional": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", + "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", + "optional": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", + "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", + "requires": { + "better-assert": "1.0.2" + } + }, + "path-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", + "integrity": "sha1-fi8PNfB6IBUSK4aLfqwOssT+wnE=", + "optional": true, + "requires": { + "array-index": "1.0.0" + } + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "pluralize": { + "version": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "prebuild": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-4.5.0.tgz", + "integrity": "sha1-KqoN8gY7/4FKgDvU3JT/m2Tl3wA=", + "optional": true, + "requires": { + "async": "1.5.2", + "execspawn": "1.0.1", + "expand-template": "1.1.0", + "ghreleases": "1.0.6", + "github-from-package": "0.0.0", + "minimist": "1.2.0", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "node-gyp": "3.6.2", + "node-ninja": "1.0.2", + "noop-logger": "0.1.1", + "npmlog": "2.0.4", + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "pump": "1.0.2", + "rc": "1.2.1", + "simple-get": "1.4.3", + "tar-fs": "1.15.3", + "tar-stream": "1.5.4", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "prebuild-install": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.2.2.tgz", + "integrity": "sha1-3UfE1h83VPsXu/YBdZ5ZIuFuBnE=", + "optional": true, + "requires": { + "expand-template": "1.1.0", + "github-from-package": "0.0.0", + "minimist": "1.2.0", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "node-abi": "2.1.1", + "noop-logger": "0.1.1", + "npmlog": "4.1.2", + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "pump": "1.0.2", + "rc": "1.2.1", + "simple-get": "1.4.3", + "tar-fs": "1.15.3", + "tunnel-agent": "0.6.0", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "signal-exit": "3.0.2", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wide-align": "1.1.2" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + } + } + }, + "prelude-ls": { + "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "pump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=", + "requires": { + "end-of-stream": "1.4.0", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "readline2": { + "version": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz" + } + }, + "rechoir": { + "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz" + } + }, + "regenerator-runtime": { + "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha1-flT+W1zNXWYk6mJVw0c74JC4AuE=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "require-uncached": { + "version": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "resolve-from": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz" + } + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha1-p1vgHFPaJdk0qY69DkxKcxL5KoY=", + "dev": true, + "requires": { + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + } + }, + "resolve-from": { + "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "onetime": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" + } + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "run-async": { + "version": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "rx-lite": { + "version": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "samsam": { + "version": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz", + "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=", + "dev": true + }, + "secp256k1": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.2.5.tgz", + "integrity": "sha1-Dd5bJ+UCFmX23/ynssPgEMbBPJM=", + "optional": true, + "requires": { + "bindings": "1.2.1", + "bip66": "1.1.5", + "bn.js": "4.11.6", + "create-hash": "1.1.3", + "drbg.js": "1.0.1", + "elliptic": "6.3.2", + "nan": "2.5.1", + "prebuild-install": "2.2.2" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "optional": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "shelljs": { + "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + } + }, + "should": { + "version": "https://registry.npmjs.org/should/-/should-11.2.1.tgz", + "integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=", + "dev": true, + "requires": { + "should-equal": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", + "should-format": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "should-type": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "should-type-adaptors": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", + "should-util": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz" + } + }, + "should-equal": { + "version": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", + "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", + "dev": true, + "requires": { + "should-type": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz" + } + }, + "should-format": { + "version": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "should-type-adaptors": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz" + } + }, + "should-sinon": { + "version": "https://registry.npmjs.org/should-sinon/-/should-sinon-0.0.5.tgz", + "integrity": "sha1-/8ioUb9FB2fn0K0i/4cVZQvpUOQ=", + "dev": true + }, + "should-type": { + "version": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", + "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", + "dev": true, + "requires": { + "should-type": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "should-util": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz" + } + }, + "should-util": { + "version": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", + "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "optional": true + }, + "simple-get": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", + "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", + "optional": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "unzip-response": "1.0.2", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "simple-mime": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz", + "integrity": "sha1-lfUXxPRm18/1YacfydqyWW6p7y4=", + "optional": true + }, + "sinon": { + "version": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", + "integrity": "sha1-Ah/WS1TLd9nS+w1Dze3652KcOjY=", + "dev": true, + "requires": { + "diff": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "formatio": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "lolex": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "native-promise-only": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "path-to-regexp": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "samsam": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz", + "text-encoding": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "type-detect": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz" + } + }, + "slice-ansi": { + "version": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.4.8.tgz", + "integrity": "sha1-5XbzMM0L7WTlWz/SbfmRFBiEhns=", + "optional": true, + "requires": { + "debug": "2.2.0", + "engine.io": "1.6.11", + "has-binary": "0.1.7", + "socket.io-adapter": "0.4.0", + "socket.io-client": "1.4.8", + "socket.io-parser": "2.2.6" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + } + } + }, + "socket.io-adapter": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz", + "integrity": "sha1-+5+CqxqmUpC/csNleVW5MKmRok8=", + "optional": true, + "requires": { + "debug": "2.2.0", + "socket.io-parser": "2.2.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "optional": true + }, + "json3": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", + "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=", + "optional": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + }, + "socket.io-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.2.tgz", + "integrity": "sha1-PXr2tkSX6Va32f53X5mXFgJ/lBc=", + "optional": true, + "requires": { + "benchmark": "1.0.0", + "component-emitter": "1.1.2", + "debug": "0.7.4", + "isarray": "0.0.1", + "json3": "3.2.6" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "optional": true + } + } + } + } + }, + "socket.io-client": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.4.8.tgz", + "integrity": "sha1-SBskHnPfFA6hpPsDSGqFrQl/VVg=", + "optional": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.0", + "debug": "2.2.0", + "engine.io-client": "1.6.11", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.4", + "socket.io-parser": "2.2.6", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.0.tgz", + "integrity": "sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=", + "optional": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + } + } + }, + "socket.io-parser": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.6.tgz", + "integrity": "sha1-ON/WHfUNz4qx2eIJEyK/kCuii5k=", + "requires": { + "benchmark": "1.0.0", + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "sorted-set": { + "version": "https://registry.npmjs.org/sorted-set/-/sorted-set-0.3.0.tgz", + "integrity": "sha1-POAVeFtkdPH6A6HGn/8ymFL8N+M=" + }, + "sprintf-js": { + "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "table": { + "version": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "ajv-keywords": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "slice-ansi": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + }, + "dependencies": { + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + } + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + } + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "tar-fs": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.15.3.tgz", + "integrity": "sha1-7M+TXpQUk9gVECjmNuUc5MPKfyA=", + "optional": true, + "requires": { + "chownr": "1.0.1", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "pump": "1.0.2", + "tar-stream": "1.5.4" + } + }, + "tar-stream": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "requires": { + "bl": "1.0.3", + "end-of-stream": "1.4.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "text-encoding": { + "version": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", + "dev": true + }, + "text-table": { + "version": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "requires": { + "readable-stream": "1.0.34", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "optional": true + }, + "to-fast-properties": { + "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + } + }, + "tryit": { + "version": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + } + }, + "type-detect": { + "version": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + }, + "typedarray": { + "version": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "optional": true + }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", + "optional": true + }, + "user-home": { + "version": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } + }, + "utf8": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.0.tgz", + "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=" + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", + "optional": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "vlq": { + "version": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", + "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", + "optional": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + } + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + } + }, + "ws": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.0.tgz", + "integrity": "sha1-wdb9FRXTzv8fCuJ1m/X9dwMKrR0=", + "optional": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz", + "integrity": "sha1-O3dB/qSoZnWXbpCNKW1ERZYfqmc=", + "optional": true + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "optional": true + } + } +} diff --git a/package.json b/package.json index 681643a..116b868 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,11 @@ "main": "lib/index.js", "scripts": { "build": "flow-remove-types -d lib/ src/", - "test": "npm run build && mocha", + "test": "npm run build && mocha -t 10000", "prepublish": "npm run build", - "typecheck": "flow check" + "typecheck": "flow check", + "lint": "./node_modules/.bin/eslint --fix src/ test/", + "check": "npm run lint && npm run typecheck && npm run test" }, "repository": { "type": "git", @@ -19,17 +21,25 @@ "blockchain" ], "author": "Decrypto-org", - "license": "ISC", + "license": "MIT", "bugs": { "url": "https://github.com/decrypto-org/TrustIsRisk.js/issues" }, "homepage": "https://github.com/decrypto-org/TrustIsRisk.js#readme", "devDependencies": { + "babel-eslint": "^7.2.3", + "eslint": "^3.19.0", + "eslint-plugin-flowtype": "^2.33.0", "flow-bin": "^0.45.0", "flow-remove-types": "^1.2.0", - "should": "^11.2.1" + "mocha": "^3.4.2", + "should": "^11.2.1", + "should-sinon": "0.0.5", + "sinon": "^2.2.0" }, "dependencies": { - "bcoin": "^1.0.0-beta.12" + "bcoin": "1.0.0-beta.12", + "graph-theory-ford-fulkerson": "^1.0.0", + "sorted-set": "^0.3.0" } } diff --git a/src/direct_trust.js b/src/direct_trust.js new file mode 100644 index 0000000..3ed4fcf --- /dev/null +++ b/src/direct_trust.js @@ -0,0 +1,103 @@ +// @flow +import type {Entity, Key} from "./types"; +import type {script} from "bcoin"; +var assert = require("assert"); +var helpers = require("./helpers"); + +type DirectTrustOptions = { + origin : Key, + dest : Key, + amount : number, + + txHash : string, + outputIndex? : number, + script? : bcoin$Script, + + prev? : DirectTrust, + next? : DirectTrust +} + +class DirectTrust { + origin : Key + dest : Key + amount : number + + // Every DT is associated with a transaction output, except for non-standard trust decreasing + // transactions, which reduce trust to zero and are related to a whole transaction and not + // a specific output. + txHash : string + outputIndex : (number | null) + script : (bcoin$Script | null) + + prev : (DirectTrust | null) + next : (DirectTrust | null) + + constructor(options : DirectTrustOptions) { + this.outputIndex = null; + this.script = null; + this.prev = null; + this.next = null; + Object.assign(this, options); + } + + isNull() { + return this.amount === 0; + } + + isIncrease() : boolean { + return this.prev === null; + } + + isDecrease() : boolean { + return !this.isIncrease(); + } + + isSpent() : boolean { + return this.next !== null; + } + + isSpendable() : boolean { + return !this.isSpent() && !this.isNull(); + } + + isValid() : boolean { + // TODO: Consider removing this function and ensure validity at build time by using the flow + // type system, possibly by creating sub-types like "IncreasingDirectTrust" etc. + if ((this.outputIndex === null) !== (this.script === null)) return false; + if (this.outputIndex === null && this.isIncrease()) return false; + if (this.outputIndex === null && this.amount > 0) return false; + if (this.isIncrease() && this.isNull()) return false; + if (this.isSpent() && this.isNull()) return false; + return true; + } + + getOriginEntity() : Entity { + return helpers.pubKeyToEntity(this.origin); + } + + getDestEntity() : Entity { + return helpers.pubKeyToEntity(this.dest); + } + + spend(next : DirectTrust) : void { + assert(!this.isSpent()); + assert(this.origin.equals(next.origin) && this.dest.equals(next.dest)); + assert(next.amount <= this.amount); + + this.next = next; + next.prev = this; + } + + getNullifying(txHash : string) : DirectTrust { + return new DirectTrust({ + origin: this.origin, + dest: this.dest, + amount: 0, + + prev: this, + txHash, + }); + } +} + +module.exports = DirectTrust; diff --git a/src/full_node.js b/src/full_node.js new file mode 100644 index 0000000..93e664d --- /dev/null +++ b/src/full_node.js @@ -0,0 +1,14 @@ +// @flow +var bcoin = require("bcoin"); +var TrustIsRisk = require("./trust_is_risk"); + +class FullNode extends bcoin.fullnode { + trust : TrustIsRisk + + constructor(options : Object) { + super(options); + this.trust = new TrustIsRisk(this); + } +} + +module.exports = FullNode; diff --git a/src/helpers.js b/src/helpers.js new file mode 100644 index 0000000..6416a31 --- /dev/null +++ b/src/helpers.js @@ -0,0 +1,12 @@ +// @flow +import type {Entity, TXHash, Key} from "./types"; +var bcoin = require("bcoin"); +var Address = bcoin.primitives.Address; + +var helpers = { + pubKeyToEntity: (key : Key) : Entity => { + return Address.fromHash(bcoin.crypto.hash160(key)).toBase58(); + } +}; + +module.exports = helpers; diff --git a/src/index.js b/src/index.js index 2db0e64..66a1290 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,5 @@ // @flow -var bcoin = require('bcoin'); - -class fullnode extends bcoin.fullnode { - constructor(options : Object) { - super(options); - } -} - module.exports = { - fullnode -} + FullNode: require("./full_node"), + TrustIsRisk: require("./trust_is_risk") +}; diff --git a/src/trust_db.js b/src/trust_db.js new file mode 100644 index 0000000..d41e680 --- /dev/null +++ b/src/trust_db.js @@ -0,0 +1,115 @@ +// @flow +import type {Entity, TXHash, Key} from "./types"; +var assert = require("assert"); +var SortedSet = require("sorted-set"); +var maxFlow = require("graph-theory-ford-fulkerson"); +var bcoin = require("bcoin"); +var Address = bcoin.primitives.Address; +var KeyRing = bcoin.primitives.KeyRing; +var MTX = bcoin.primitives.MTX; +var Input = bcoin.primitives.Input; +var Output = bcoin.primitives.Output; +var Outpoint = bcoin.primitives.Outpoint; +var DirectTrust = require("./direct_trust"); + +class TrustDB { + directTrusts : Map>> + txToDirectTrust : Map + entities : SortedSet; + + constructor() { + this.directTrusts = new Map(); + this.txToDirectTrust = new Map(); + this.entities = new SortedSet(); + } + + getDirectTrustByOutpoint(outpoint : bcoin$Outpoint) : (DirectTrust | null) { + var trust = this.txToDirectTrust.get(outpoint.hash.toString("hex")); + if (!trust) return null; + if (trust.outputIndex !== outpoint.index) return null; + return trust; + } + + getDirectTrustAmount(origin : Entity, dest : Entity) : number { + if (origin === dest) return Infinity; + + var trusts = this.getSpendableDirectTrusts(origin, dest); + return trusts.reduce((sum, t) => sum + t.amount, 0); + } + + getSpendableDirectTrusts(origin : Entity, dest : Entity) : DirectTrust[] { + return this.getDirectTrusts(origin, dest).filter((t) => t.isSpendable()); + } + + getDirectTrusts(origin : Entity, dest : Entity) : DirectTrust[] { + var originMap = this.directTrusts.get(origin); + if (!originMap) return []; + + var trusts = originMap.get(dest); + if (!trusts) return []; + + return trusts; + } + + getGraphWeightMatrix() : number[][] { + var entitiesArr = this.getEntities(); + return entitiesArr.map((origin) => { + return entitiesArr.map((dest) => this.getDirectTrustAmount(origin, dest)); + }); + } + + getTrustAmount(origin : Entity, dest : Entity) : number { + // TODO: Optimize + if (origin === dest) return Infinity; + + var graph = this.getGraphWeightMatrix(); + var originIndex = this.getEntityIndex(origin); + var destIndex = this.getEntityIndex(dest); + + if (originIndex === -1 || destIndex === -1) return 0; + else return maxFlow(graph, originIndex, destIndex); + } + + getEntities() : Entity[] { + return this.entities.slice(); + } + + getEntityIndex(entity : Entity) : number { + return this.entities.rank(entity); + } + + isTrustTX(txHash : string) : boolean { + return this.txToDirectTrust.has(txHash); + } + + isTrustOutput(txHash : string, outputIndex : number) : boolean { + var trust = this.txToDirectTrust.get(txHash); + return trust !== undefined && trust.outputIndex === outputIndex; + } + + add(trust : DirectTrust) { + var origin = trust.getOriginEntity(); + var dest = trust.getDestEntity(); + assert(origin !== dest); + + if (!this.directTrusts.has(origin)) this.directTrusts.set(origin, new Map()); + var originMap = ((this.directTrusts.get(origin) : any) : Map>); + + if (!originMap.has(dest)) originMap.set(dest, []); + var trusts = ((originMap.get(dest) : any) : Array); + + if (trust.prev !== null) { + trust.prev.spend(trust); + assert(trust.prev && trust.prev.isValid() && !trust.prev.isSpendable()); + } + + assert(trust.isValid()); + trusts.push(trust); + this.txToDirectTrust.set(trust.txHash, trust); + + this.entities.add(origin); + this.entities.add(dest); + } +} + +module.exports = TrustDB; diff --git a/src/trust_is_risk.js b/src/trust_is_risk.js new file mode 100644 index 0000000..70699c2 --- /dev/null +++ b/src/trust_is_risk.js @@ -0,0 +1,319 @@ +// @flow +import type {Entity, TXHash, Key} from "./types"; +var bcoin = require("bcoin"); +var Address = bcoin.primitives.Address; +var KeyRing = bcoin.primitives.KeyRing; +var MTX = bcoin.primitives.MTX; +var Input = bcoin.primitives.Input; +var Output = bcoin.primitives.Output; +var Outpoint = bcoin.primitives.Outpoint; +var Coin = bcoin.primitives.Coin; +var assert = require("assert"); +var helpers = require("./helpers"); +var TrustDB = require("./trust_db"); +var DirectTrust = require("./direct_trust"); + +class TrustIsRisk { + node : (bcoin$FullNode | bcoin$SPVNode) + db : TrustDB + + fakePubKeyArray : Array + fakePubKey : Buffer + fakeKeyRing : KeyRing + tag : Buffer + + compressedFakePubKeyArray : Array + compressedFakePubKey : Buffer + compressedFakeKeyRing : KeyRing + compressedTag : Buffer + + constructor(node : (bcoin$FullNode | bcoin$SPVNode)) { + this.fakePubKeyArray = [0x04, // constant 0x04 prefix + 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x69, 0x73, + 0x20, 0x52, 0x69, 0x73, 0x6b, 0x00, 0x00, 0x00, // 32 bytes with the x coordinate + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // containing ASCII "Trust is Risk" + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + // secp256k1 curve: y^2 = x^3 + 7 + 0x05, 0x5d, 0x5f, 0x28, 0x5e, 0xd7, 0x9d, 0x0c, + 0x6f, 0x61, 0xc3, 0x0e, 0xfc, 0x9d, 0x21, 0x91, + 0x65, 0x82, 0x80, 0x59, 0xa6, 0x01, 0x25, 0x0c, // 32 bytes with the y coordinate + 0x8e, 0xce, 0x18, 0x00, 0x14, 0xde, 0x48, 0x1a]; + + this.fakePubKey = Buffer.from(this.fakePubKeyArray); + this.fakeKeyRing = KeyRing.fromPublic(this.fakePubKey); + this.tag = Buffer.from(this.fakeKeyRing.getAddress("base58")); + + + this.compressedFakePubKeyArray = [0x02, // 0x02 prefix for even y values + 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x69, 0x73, + 0x20, 0x52, 0x69, 0x73, 0x6b, 0x00, 0x00, 0x00, // only x is given in short version + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01]; + + this.compressedFakePubKey = Buffer.from(this.compressedFakePubKeyArray); + this.compressedFakeKeyRing = KeyRing.fromPublic(this.compressedFakePubKey); + this.compressedTag = Buffer.from(this.compressedFakeKeyRing.getAddress("base58")); + + this.node = node; + this.db = new TrustDB(); + + this.node.on("tx", this.addTX.bind(this)); + } + + getIndirectTrust(origin : Entity, dest : Entity) { + return this.db.getTrustAmount(origin, dest); + } + + getDirectTrust(origin : Entity, dest : Entity) { + return this.db.getDirectTrustAmount(origin, dest); + } + + // Attempts to parse a bitcoin transaction as a trust change and adds it to the trust network + // if successful. + // Returns true if the transaction is a TIR transaction and was successfully added to the + // network, false otherwise. + // Throws an error if the transaction was processed earlier. + addTX(tx : bcoin$TX) : boolean { + var txHash = tx.hash().toString("hex"); + if (this.db.isTrustTX(txHash)) { + throw new Error(`Transaction already processed: Transaction ${txHash} already carries trust`); + } + + var directTrusts = this.getDirectTrusts(tx); + if (directTrusts.length === 0) return false; + else { + directTrusts.forEach(this.db.add.bind(this.db)); + return true; + } + } + + // Returns a list of trusts that a transaction contains, which will be one of the following: + // * An empty list (for non-TIR transactions). + // * A list containing a single trust increase (for trust-increasing transactions). + // * A list containing one or more trust decreases (for trust-decreasing transactions). + getDirectTrusts(tx : bcoin$TX) : DirectTrust[] { + var trustIncrease = this.parseTXAsTrustIncrease(tx); + if (trustIncrease !== null) { + return [trustIncrease]; + } else { + return this.getTrustDecreases(tx); + } + } + + // Returns a promise resolving to a mutable transaction object, which increases a trust + // relationship by some amount. It will spend the outpoint, which must reference a P2PKH output + // payable to the sender. The origin key must be a private key. Any satoshis not spent will be + // returned to the sender, minus the fees, via P2PKH. + async createTrustIncreasingMTX(origin : Key, dest : Key, outpoint : bcoin$Outpoint, + trustAmount : number, fee : ?number) + : Promise { + if (!fee) fee = 1000; // TODO: estimate this + var coin = await this.node.getCoin(outpoint.hash, outpoint.index); + if (!coin) throw new Error("Could not find coin"); + if (origin === dest) throw new Error("Can not increase self-trust."); + + var originKeyRing = KeyRing.fromPrivate(origin); + var originPubKey = originKeyRing.getPublicKey(); + + var mtx = new MTX({ + outputs: [ + new Output({ + script: bcoin.script.fromMultisig(1, 3, [originPubKey, dest, this.fakePubKey]), + value: trustAmount + }) + ] + }); + + var changeAmount = coin.value - trustAmount - fee; + assert(changeAmount >= 0); + if (changeAmount) { + mtx.addOutput(new Output({ + script: bcoin.script.fromPubkeyhash(bcoin.crypto.hash160(originPubKey)), + value: changeAmount + })); + } + + mtx.addCoin(coin); + var success = mtx.scriptVector(coin.script, mtx.inputs[0].script, originKeyRing); + assert(success); + + var signedCount = mtx.sign(originKeyRing); + assert(signedCount === 1); + + return mtx; + } + + // Returns an array of trust-decreasing mutable transaction objects, which reduce a trust + // relationship by the amount specified. The payee will receive the amount deducted minus the + // transaction fees via P2PKH. + // If steal is undefined or set to false, then the `origin` key is expected to be a private key + // and the `dest` key is expected to be a public key. If steal is set to true, then `origin` is + // expected to be a public key and `dest` is expected to be a private key. The private key will be + // used to sign the transaction. + createTrustDecreasingMTXs(origin : Key, dest : Key, trustDecreaseAmount : number, payee : ?Entity, + steal : ?boolean, fee : ?number) : bcoin$MTX[] { + if (steal === undefined) steal = false; + + var signingKeyRing, originKeyRing, destKeyRing; + if (!steal) { + signingKeyRing = KeyRing.fromPrivate(origin); + originKeyRing = KeyRing.fromPrivate(origin); + destKeyRing = KeyRing.fromPublic(dest); + } else { + signingKeyRing = KeyRing.fromPrivate(dest); + originKeyRing = KeyRing.fromPublic(origin); + destKeyRing = KeyRing.fromPrivate(dest); + } + + var originAddress = helpers.pubKeyToEntity(originKeyRing.getPublicKey()); + var destAddress = helpers.pubKeyToEntity(destKeyRing.getPublicKey()); + + if (originAddress === destAddress) throw new Error("Can't decrease self-trust"); + + var existingTrustAmount = this.db.getDirectTrustAmount(originAddress, destAddress); + if (existingTrustAmount < trustDecreaseAmount) throw new Error("Insufficient trust"); + + var directTrusts = this.db.getSpendableDirectTrusts(originAddress, destAddress); + return directTrusts.map((directTrust) => { + var decrease = Math.min(trustDecreaseAmount, directTrust.amount); + if (decrease === 0) return null; + trustDecreaseAmount -= decrease; + return this.getTrustDecreasingMTX(directTrust, decrease, payee, signingKeyRing, fee); + }).filter(Boolean); + } + + getTrustDecreasingMTX(directTrust : DirectTrust, decreaseAmount : number, payee : ?Entity, + signingKeyRing : bcoin$KeyRing, fee : ?number) { + if (!payee) payee = directTrust.getOriginEntity(); + if (!fee) fee = 1000; // TODO: estimate this + + var mtx = new MTX({ + inputs: [ + Input.fromOutpoint(new Outpoint(directTrust.txHash, directTrust.outputIndex)) + ], + outputs: [new Output({ + script: bcoin.script.fromPubkeyhash(Address.fromBase58(payee).hash), + value: ((decreaseAmount - fee) < 0) ? 0 : (decreaseAmount - fee) + })] + }); + + var remainingTrustAmount = directTrust.amount - decreaseAmount; + if (remainingTrustAmount > 0) { + mtx.addOutput(new Output({ + script: bcoin.script.fromMultisig(1, 3, [directTrust.origin, directTrust.dest, this.fakePubKey]), + value: remainingTrustAmount + })); + } + + var success = mtx.scriptVector(((directTrust.script : any) : bcoin$Script), + mtx.inputs[0].script, KeyRing.fromPublic(directTrust.origin)); + assert(success); + + success = mtx.signInput(0, new Coin({script: directTrust.script, value: directTrust.amount}), + signingKeyRing); + assert(success); + + return mtx; + } + + parseTXAsTrustIncrease(tx : bcoin$TX) : (DirectTrust | null) { + if (tx.inputs.length !== 1) return null; + var input = tx.inputs[0]; + if (input.getType() !== "pubkeyhash") return null; // TODO: This is unreliable + if (this.db.isTrustOutput(input.prevout.hash.toString("hex"), input.prevout.index)) return null; + var origin = tx.inputs[0].getAddress().toBase58(); + + if (tx.outputs.length === 0 || tx.outputs.length > 2) return null; + + var trustOutputs = this.searchForDirectTrustOutputs(tx, origin); + if (trustOutputs.length !== 1) return null; + + var changeOutputCount = tx.outputs.filter((o) => this.isChangeOutput(o, origin)).length; + if (changeOutputCount + 1 !== tx.outputs.length) return null; + + return trustOutputs[0]; + } + + getTrustDecreases(tx : bcoin$TX) : DirectTrust[] { + var inputTrusts = this.getInputTrusts(tx.inputs); + return inputTrusts.map(this.getTrustDecrease.bind(this, tx)); + } + + getInputTrusts(inputs : bcoin$Input[]) : DirectTrust[] { + return inputs.map((input) => { + return this.db.getDirectTrustByOutpoint(input.prevout); + }).filter(Boolean); + } + + getTrustDecrease(tx : bcoin$TX, prevTrust : DirectTrust) : DirectTrust { + var txHash = tx.hash().toString("hex"); + var nullTrust = prevTrust.getNullifying(txHash); + + if (tx.inputs.length !== 1) return nullTrust; + + var trustOutputs = this.searchForDirectTrustOutputs(tx, prevTrust.getOriginEntity(), + prevTrust.getDestEntity()); + if (trustOutputs.length != 1) return nullTrust; + var nextTrust = trustOutputs[0]; + + nextTrust.prev = prevTrust; + + assert(nextTrust.amount <= prevTrust.amount); + return nextTrust; + } + + // Looks for direct trust outputs that originate from a sender in a transaction. + // Returns an array of the corresponding DirectTrust objects. + // If the recipient parameter is set, it will limit the results only to the outputs being sent to + // the recipient. + searchForDirectTrustOutputs(tx : bcoin$TX, origin : Entity, recipient : ?Entity) : DirectTrust[] { + var directTrusts = tx.outputs.map((output, outputIndex) => + this.parseOutputAsDirectTrust(tx, outputIndex, origin) + ).filter(Boolean); // filter out nulls + + if (recipient) { + directTrusts = directTrusts.filter((trust) => + helpers.pubKeyToEntity(trust.dest) === recipient); + } + + return directTrusts; + } + + isChangeOutput(output : bcoin$Output, origin : Entity) : boolean { + return (output.getType() === "pubkeyhash") + && (output.getAddress().toBase58() === origin); + } + + parseOutputAsDirectTrust(tx : bcoin$TX, outputIndex : number, origin : Entity) + : (DirectTrust | null) { + var txHash = tx.hash().toString("hex"); + var output = tx.outputs[outputIndex]; + if (output.getType() !== "multisig") return null; + + var entities = [1, 2].map((i) => helpers.pubKeyToEntity(output.script.get(i))); + if (entities[0] === entities[1]) return null; + + var originPubKey, destPubKey; + if (entities[0] === origin) { + originPubKey = output.script.get(1); + destPubKey = output.script.get(2); + } + else if (entities[1] === origin) { + originPubKey = output.script.get(2); + destPubKey = output.script.get(1); + } + else return null; + + return new DirectTrust({ + origin: originPubKey, + dest: destPubKey, + amount: Number(output.value), + + txHash, + outputIndex, + script: output.script + }); + } +} + +module.exports = TrustIsRisk; diff --git a/src/types.js b/src/types.js new file mode 100644 index 0000000..1bb788b --- /dev/null +++ b/src/types.js @@ -0,0 +1,8 @@ +//@flow + +// base58 bitcoin address: +export type Entity = string; + +export type TXHash = string; + +export type Key = Buffer; diff --git a/test/fixtures.js b/test/fixtures.js new file mode 100644 index 0000000..726417b --- /dev/null +++ b/test/fixtures.js @@ -0,0 +1,23 @@ +var bcoin = require("bcoin"); +var KeyRing = bcoin.primitives.KeyRing; + +var privateKeys = { + "alice": "02B8F07A401ECA4888039B1898F94DB44C43CCC6D3AA8B27E9B6ED7B377B24C0", + "bob": "2437025954568A8273968AA7535DBFC444FD8F8D0F5237CD96AC7234C77810AD", + "charlie": "3BBA2AF9539D09B4FD2BDEA1D3A2CE4BF5D779831B8781EE2ACF9C03378B2AD7", + "dave": "19BD8D853FAEFDB9B01E4DE7F6096FF8F5F96D43E6564A5258307334A4AA59F3", + "eve": "0503054CF7EBB4E62191AF1D8DE97945178D3F465EE88EF1FB4E80A70CB4A49A", + "frank": "878DFE5B43AC858EA37B3A9EEBA9E244F1848A30F78B2E5AC5B3EBDE81AC7D45", + "george": "1349A1318B1426E6F724CBFE7ECD2C46008A364A96C4BD20C83FC1C4EBB2EB4A" +}; + +var keyRings = {}; +for (let name in privateKeys) { + let key = privateKeys[name]; + keyRings[name] = KeyRing.fromPrivate(Buffer.from(key, "hex")); +} + +module.exports = { + keyRings, + names: Object.keys(keyRings) +}; diff --git a/test/full_node.js b/test/full_node.js new file mode 100644 index 0000000..a3260ba --- /dev/null +++ b/test/full_node.js @@ -0,0 +1,197 @@ +var Trust = require("../"); +var helpers = require("../lib/helpers.js"); +var bcoin = require("bcoin"); +var Script = bcoin.script; +var Address = bcoin.primitives.Address; +var KeyRing = bcoin.primitives.KeyRing; +var MTX = bcoin.primitives.MTX; +var Input = bcoin.primitives.Input; +var Output = bcoin.primitives.Output; +var Outpoint = bcoin.primitives.Outpoint; +var testHelpers = require("./helpers"); +var consensus = require("bcoin/lib/protocol/consensus"); +var sinon = require("sinon"); +var should = require("should"); +var assert = require("assert"); +var fixtures = require("./fixtures"); +require("should-sinon"); + +const COIN = consensus.COIN; + +describe("FullNode", () => { + var node = null; + var walletDB = null; + var NodeWatcher = null; + var watcher = null; + sinon.spy(Trust.TrustIsRisk.prototype, "addTX"); + + beforeEach("get node", async () => { + node = await testHelpers.getNode(); + watcher = new testHelpers.NodeWatcher(node); + }); + + beforeEach("get walletDB", async () => { + walletDB = await testHelpers.getWalletDB(node); + }); + + afterEach("close walletDB", async () => walletDB.close()); + afterEach("close node", async () => node.close()); + + it("should call trust.addTX() on every transaction", async function() { + var sender = await testHelpers.createWallet(walletDB, "sender"); + var receiver = await testHelpers.createWallet(walletDB, "receiver"); + + await testHelpers.delay(1000); + // Produce a block and reward the sender, so that we have a coin to spend. + await testHelpers.mineBlock(node, sender.getAddress("base58")); + + // Make the coin spendable. + consensus.COINBASE_MATURITY = 0; + await testHelpers.delay(100); + + await sender.send({ + outputs: [{ + value: 10 * COIN, + address: receiver.getAddress("base58") + }] + }); + await watcher.waitForTX(); + + node.trust.addTX.should.be.calledOnce(); + }); + + describe("with the nobodyLikesFrank.json example", () => { + var addresses, rings = {}; + + beforeEach("apply graph transactions", async () => { + addresses = {}; + + for (var [name, keyRing] of Object.entries(fixtures.keyRings)) { + addresses[name] = helpers.pubKeyToEntity(keyRing.getPublicKey()); + } + + // Alice mines three blocks, each rewards her with 50 spendable BTC + consensus.COINBASE_MATURITY = 0; + var blockCount = 3; + var coinbaseHashes = []; + for(let i = 0; i < blockCount; i++) { + var block = await testHelpers.mineBlock(node, addresses.alice); + coinbaseHashes.push(block.txs[0].hash()); + await testHelpers.delay(500); + } + + // Alice sends 20 BTC to everyone (including herself) via P2PKH + var sendAmount = 20; + var outputs = fixtures.names.map((name) => { + return testHelpers.getP2PKHOutput( + Address.fromHash(bcoin.crypto.hash160(fixtures.keyRings[name].getPublicKey())) + .toBase58(), + sendAmount * consensus.COIN); + }); + + // We have to use a change output, because transaction with too large a fee are considered + // invalid. + var fee = 0.01; + var changeAmount = 50 * blockCount - sendAmount * fixtures.names.length - fee; + if (changeAmount >= 0.01) { + outputs.push(new Output({ + script: Script.fromPubkeyhash(bcoin.crypto.hash160( + fixtures.keyRings.alice.getPublicKey())), + value: changeAmount * consensus.COIN + })); + } + + // Use the coinbase coins as inputs + var coinbaseCoins = await Promise.all(coinbaseHashes.map((hash) => { + return node.getCoin(hash.toString("hex"), 0); + })); + var mtx = new MTX({outputs}); + coinbaseCoins.forEach((coin) => mtx.addCoin(coin)); + + var signedCount = mtx.sign(fixtures.keyRings.alice); + assert(signedCount === blockCount); + assert(await mtx.verify()); + + var tx = mtx.toTX(); + node.sendTX(tx); + await watcher.waitForTX(); + + prevout = {}; + fixtures.names.forEach((name) => { + prevout[name] = { + hash: tx.hash().toString("hex"), + index: fixtures.names.indexOf(name) + }; + }); + + // Alice mines another block + await testHelpers.mineBlock(node, helpers.pubKeyToEntity( + fixtures.keyRings.alice.getPublicKey())); + await testHelpers.delay(500); + + var graph = require("./graphs/nobodyLikesFrank.json"); + for (var origin in graph) { + var neighbours = graph[origin]; + for (var dest in neighbours) { + var value = neighbours[dest]; + if (!value || value < 1) continue; + + let outpoint = new Outpoint(prevout[origin].hash, prevout[origin].index); + + let mtx = await node.trust.createTrustIncreasingMTX( + fixtures.keyRings[origin].getPrivateKey(), + fixtures.keyRings[dest].getPublicKey(), + outpoint, + value * consensus.COIN); + + assert(await mtx.verify()); + + let tx = mtx.toTX(); + node.sendTX(tx); + await watcher.waitForTX(); + + prevout[origin] = {hash: tx.hash().toString("hex"), index: 1}; + } + } + + // Alice mines yet another block + await testHelpers.mineBlock(node, helpers.pubKeyToEntity( + fixtures.keyRings.alice.getPublicKey())); + await testHelpers.delay(500); + }); + + it("computes trusts correctly", () => { + for (name in addresses) { // Add addresses to scope + eval(`var ${name} = "${addresses[name]}";`); + } + + should(node.trust.getIndirectTrust(alice, alice)).equal(Infinity); + should(node.trust.getIndirectTrust(alice, bob)).equal(10 * COIN); + should(node.trust.getIndirectTrust(alice, charlie)).equal(1 * COIN); + should(node.trust.getIndirectTrust(alice, frank)).equal(0); + should(node.trust.getIndirectTrust(alice, eve)).equal(6 * COIN); + + should(node.trust.getIndirectTrust(bob, alice)).equal(1 * COIN); + should(node.trust.getIndirectTrust(bob, eve)).equal(3 * COIN); + should(node.trust.getIndirectTrust(dave, eve)).equal(12 * COIN); + should(node.trust.getIndirectTrust(george, eve)).equal(0); + }); + + it("after decreasing some trusts computes trusts correctly", async () => { + var mtxs = node.trust.createTrustDecreasingMTXs(fixtures.keyRings.alice.getPrivateKey(), + fixtures.keyRings.bob.getPublicKey(), 3 * COIN); + mtxs.length.should.equal(1); + var mtx = mtxs[0]; + + should(await mtx.verify()); + node.sendTX(mtx.toTX()); + + await testHelpers.delay(750); + should(node.trust.getIndirectTrust(addresses.alice, addresses.bob)).equal(7 * COIN); + }); + }); + + describe("with the topcoder.json example", () => { + //TODO: Write tests here. + }); +}); diff --git a/test/graphs/nobodyLikesFrank.json b/test/graphs/nobodyLikesFrank.json new file mode 100644 index 0000000..9c246bc --- /dev/null +++ b/test/graphs/nobodyLikesFrank.json @@ -0,0 +1,24 @@ +{ + "alice": { + "bob": 10, + "dave": 3 + }, + "bob": { + "charlie": 1, + "eve": 2, + "dave": 1, + "george": 1 + }, + "charlie": { + "george": 3 + }, + "dave": { + "eve": 10, + "alice": 2 + }, + "eve": {}, + "frank": { + "charlie": 10 + }, + "george": {} +} diff --git a/test/graphs/topcoder.json b/test/graphs/topcoder.json new file mode 100644 index 0000000..f051965 --- /dev/null +++ b/test/graphs/topcoder.json @@ -0,0 +1,19 @@ +{ + "alice": { + "bob": 3, + "dave": 1 + }, + "bob": { + "charlie": 3 + }, + "charlie": { + "frank": 2 + }, + "dave": { + "charlie": 5, + "eve": 4 + }, + "eve": { + "frank": 2 + } +} diff --git a/test/helpers.js b/test/helpers.js new file mode 100644 index 0000000..4a21a82 --- /dev/null +++ b/test/helpers.js @@ -0,0 +1,160 @@ +var TrustIsRisk = require("../"); +var WalletDB = require("bcoin/lib/wallet/walletdb"); +var bcoin = require("bcoin"); +var fixtures = require("./fixtures"); +var assert = require("assert"); + +var testHelpers = { + getNode: async () => { + var node = new TrustIsRisk.FullNode({network: "regtest", passphrase: "secret"}); + + await node.open(); + await node.connect(); + node.startSync(); + + return node; + }, + + getWalletDB: async (node) => { + var walletDB = new WalletDB({ + network: "regtest", + db: "memory", + client: new bcoin.node.NodeClient(node) + }); + + await walletDB.open(); + await walletDB.connect(); + + return walletDB; + }, + + createWallet: async (walletDB, id) => { + var options = { + id, + passphrase: "secret", + witness: false, + type: "pubkeyhash" + }; + + return walletDB.create(options); + }, + + mineBlock: async (node, rewardAddress) => { + var block = await node.miner.mineBlock(node.chain.tip, rewardAddress); + await node.chain.add(block); + // node.chain.tip does not contain all the properties we want, + // so we need to fetch it: + return node.getBlock(node.chain.tip.hash); + }, + + delay: async (milliseconds) => { + return new Promise((resolve, reject) => { + setTimeout(resolve, milliseconds); + }); + }, + + bufferToScript: (data) => { + return `0x${Number(data.length).toString(16)} 0x${data.toString("hex")}`; + }, + + getP2PKHOutput: (dest, value) => { + var address = bcoin.primitives.Address.fromBase58(dest); + var script = bcoin.script.fromPubkeyhash(address.hash); + + return new bcoin.primitives.Output({script, value}); + }, + + getP2PKHInput: (pubKey, prevout) => { + if (!prevout) { + prevout = { // Don't care + hash: "v0pnhphaf4r5wz63j60vnh27s1bftl260qq621y458tn0g4x64u64yqz6d7qi6i8", + index: 2 + }; + } + + return new bcoin.primitives.Input({ + prevout, + script: bcoin.script.fromString( + // Don't care about the signature + "0x47 0x3044022035e32834c6ee4db1696cc06762feca2809d865ca12a3b98c801f3f451341a2570220573bf3ffef55f2651e1563acc0a22f8056222f277f5ddf17dd583d4edd40fa6001 " + + testHelpers.bufferToScript(pubKey)) + }); + }, + + getOneOfThreeMultisigOutput: (originPubKey, destPubKey, value) => { + tag = (new TrustIsRisk.TrustIsRisk(new bcoin.fullnode({}))).fakePubKey; + return new bcoin.primitives.Output({ + script: bcoin.script.fromMultisig(1, 3, [originPubKey, destPubKey, tag]), + value + }); + }, + + getTrustIncreasingMTX: (originPubKey, destPubKey, value) => { + return new bcoin.primitives.MTX({ + inputs: [ + testHelpers.getP2PKHInput(originPubKey) + ], + outputs: [ + testHelpers.getOneOfThreeMultisigOutput(originPubKey, destPubKey, value) + ] + }); + }, + + applyGraph: (trust, fileName, addressBook) => { + var graph = require(fileName); + + for (var origin in graph) { + var neighbours = graph[origin]; + for (var dest in neighbours) { + var value = neighbours[dest]; + trust.addTX(testHelpers.getTrustIncreasingMTX(addressBook[origin].pubKey, addressBook[dest].pubKey, value).toTX()); + } + } + } +}; + +class NodeWatcher { + constructor(node) { + this.txCount = 0; + this.blockCount = 0; + this.node = node; + this.node.on("tx", this.onTX.bind(this)); + this.node.on("block", this.onBlock.bind(this)); + } + + onTX() { + this.txCount++; + } + + onBlock() { + this.blockCount++; + } + + async waitForBlock(initialCount) { + if (initialCount === undefined) initialCount = this.blockCount; + await new Promise((resolve, reject) => { + var check = (() => { + if (this.blockCount > initialCount) resolve(); + else setTimeout(check, 100); + }).bind(this); + + check(); + }); + } + + async waitForTX(initialCount) { + if (initialCount === undefined) initialCount = this.txCount; + await new Promise((resolve, reject) => { + var check = (() => { + if (this.txCount > initialCount) resolve(); + else setTimeout(check, 100); + }).bind(this); + + check(); + }); + } +} + +testHelpers.NodeWatcher = NodeWatcher; + +module.exports = testHelpers; diff --git a/test/tag-generator.py b/test/tag-generator.py new file mode 100644 index 0000000..3bab049 --- /dev/null +++ b/test/tag-generator.py @@ -0,0 +1,27 @@ +# Thanks to http://code.activestate.com/recipes/577821-integer-square-root-function/ for isqrt() +def isqrt(x): + if x < 0: + raise ValueError('square root not defined for negative numbers') + n = int(x) + if n == 0: + return 0 + a, b = divmod(n.bit_length(), 2) + x = 2**(a+b) + while True: + y = (x + n//x)//2 + if y >= x: + return x + x = y + +x = 0x5472757374206973205269736b00000000000000000000000000000000000000 +# 54:72:75:73:74:20:69:73:20:52:69:73:6b is the ASCII representation of "Trust is Risk" +p = 2**256 - 2**32 - 977 +y = pow((x**3 + 7), (p+1)//4, p) + +while ((y**2) % p) != (x**3 + 7) % p: + x=x+1 + y = pow((x**3 + 7), (p+1)//4, p) + +print("Found it!") +print("x is " + hex(x)) +print("y is " + hex(y)) diff --git a/test/test.js b/test/test.js deleted file mode 100644 index cd34a7d..0000000 --- a/test/test.js +++ /dev/null @@ -1,10 +0,0 @@ -var TrustIsRisk = require('../'); -var bcoin = require('bcoin'); -var should = require('should'); - -describe('new TrustIsRisk.fullnode', () => { - it('should be a bcoin instance', () => { - var node = new TrustIsRisk.fullnode({}); - should(node).be.an.instanceof(bcoin.fullnode); - }); -}); diff --git a/test/trust_is_risk.js b/test/trust_is_risk.js new file mode 100644 index 0000000..43bb468 --- /dev/null +++ b/test/trust_is_risk.js @@ -0,0 +1,397 @@ +var Trust = require("../"); +var helpers = require("../lib/helpers.js"); +var bcoin = require("bcoin"); +var Coin = bcoin.primitives.Coin; +var Address = bcoin.primitives.Address; +var Input = bcoin.primitives.Input; +var MTX = bcoin.primitives.MTX; +var testHelpers = require("./helpers"); +var consensus = require("bcoin/lib/protocol/consensus"); +var secp256k1 = require("bcoin/lib/crypto/ec-secp256k1"); +var sinon = require("sinon"); +var should = require("should"); +var fixtures = require("./fixtures"); +var assert = require("assert"); +require("should-sinon"); + +const COIN = bcoin.consensus.COIN; + +describe("TrustIsRisk", () => { + var addr = {}; + for (let [name, keyRing] of Object.entries(fixtures.keyRings)) { + var pubKey = keyRing.getPublicKey(); + var privKey = keyRing.getPrivateKey(); + + addr[name] = {}; + addr[name].pubKey = pubKey; + addr[name].privKey = privKey; + addr[name].base58 = bcoin.primitives.Address.fromHash(bcoin.crypto.hash160(pubKey)).toString(); + } + + // Add base58 address variables to scope. + for (name in fixtures.keyRings) { + var keyRing = fixtures.keyRings[name]; + eval(`var ${name} = "${bcoin.primitives.Address.fromHash(bcoin.crypto.hash160(keyRing.getPublicKey())).toString()}";`); + } + + var node, tir, trustIncreasingMTX, trustDecreasingMTX, trustIncreasingTX; + beforeEach(() => { + node = new bcoin.fullnode({}); + tir = new Trust.TrustIsRisk(node); + + trustIncreasingMTX = testHelpers.getTrustIncreasingMTX(addr.alice.pubKey, addr.bob.pubKey, 42 * COIN); + trustIncreasingTX = trustIncreasingMTX.toTX(); + + var inputOneOfThreeMultisig = new Input({ + prevout: { + hash: trustIncreasingTX.hash().toString("hex"), + index: 0 + }, + script: bcoin.script.fromString( + // 17P8kCbDBPmqLDCCe9dYwbfiEDaRb5xDYE + "0x47 0x3044022035e32834c6ee4db1696cc06762feca2809d865ca12a3b98c801f3f451341a2570220573bf3ffef55f2651e1563acc0a22f8056222f277f5ddf17dd583d4edd40fa6001 0x21 0x02b8f07a401eca4888039b1898f94db44c43ccc6d3aa8b27e9b6ed7b377b24c083") + }); + + trustDecreasingMTX = new MTX({ + inputs: [ + inputOneOfThreeMultisig + ], + outputs: [ + testHelpers.getOneOfThreeMultisigOutput(addr.alice.pubKey, addr.bob.pubKey, 20 * COIN), + testHelpers.getP2PKHOutput(addr.alice.base58, 22 * COIN) + ] + }); + }); + + describe("tag", () => { + it("corresponds to a valid public key", () => { + Buffer.isBuffer(tir.fakePubKey).should.equal(true); + secp256k1.publicKeyVerify(tir.fakePubKey).should.equal(true); + }); + + it("is a valid bitcoin address", () => { + assert(bcoin.primitives.Address.fromBase58(tir.tag.toString("ascii"))); + }); + }); + + describe(".getDirectTrust()", () => { + it("returns zero for two arbitary parties that do not trust each other", () => { + tir.getDirectTrust(alice, bob).should.equal(0); + tir.getDirectTrust(bob, alice).should.equal(0); + tir.getDirectTrust(charlie, alice).should.equal(0); + tir.getDirectTrust(alice, charlie).should.equal(0); + tir.getDirectTrust(charlie, frank).should.equal(0); + }); + + it("returns Infinity for one's direct trust to themselves", () => { + tir.getDirectTrust(alice, alice).should.equal(Infinity); + tir.getDirectTrust(bob, bob).should.equal(Infinity); + }); + }); + + describe(".addTX()", () => { + describe("with a non-TIR transaction", () => { + it("does not change trust", () => { + trustIncreasingMTX.outputs[0] = testHelpers.getP2PKHOutput(charlie, 50 * COIN); + tir.addTX(trustIncreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(0); + tir.getDirectTrust(bob, alice).should.equal(0); + tir.getDirectTrust(alice, charlie).should.equal(0); + tir.getDirectTrust(charlie, alice).should.equal(0); + tir.getDirectTrust(charlie, dave).should.equal(0); + }); + }); + + describe("with a trust increasing transaction", () => { + it("correctly increases trust", () => { + tir.addTX(trustIncreasingTX); + + tir.getDirectTrust(alice, bob).should.equal(42 * COIN); + tir.getDirectTrust(bob, alice).should.equal(0); + tir.getDirectTrust(charlie, dave).should.equal(0); + }); + + it("which has more than one input does not change trust", () => { + trustIncreasingMTX.inputs.push(trustIncreasingMTX.inputs[0].clone()); + tir.addTX(trustIncreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(0); + }); + + it("which has a change output correctly increases trust", () => { + trustIncreasingMTX.outputs[0].value -= 10 * COIN; + trustIncreasingMTX.outputs.push(testHelpers.getP2PKHOutput(alice, 10 * COIN)); + tir.addTX(trustIncreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(32 * COIN); + }); + + it("which has two change outputs does not change trust", () => { + trustIncreasingMTX.outputs[0].value -= 10; + for (var i = 0; i < 2; i++) { + trustIncreasingMTX.outputs.push(testHelpers.getP2PKHOutput(alice, 5 * COIN)); + } + tir.addTX(trustIncreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(0); + }); + + it("which has a second output that is not a change output does not change trust", () => { + trustIncreasingMTX.outputs[0].value -= 10 * COIN; + trustIncreasingMTX.outputs.push(testHelpers.getP2PKHOutput(charlie, 5 * COIN)); + tir.addTX(trustIncreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(0); + }); + + it("which has been processed before throws", () => { + var tx = trustIncreasingMTX.toTX(); + should(tir.addTX(tx)); + should.throws(() => tir.addTX(tx), /already processed/i); + tir.getDirectTrust(alice, bob).should.equal(42 * COIN); + }); + }); + + describe("with a trust decreasing transaction", () => { + beforeEach(() => { + tir.addTX(trustIncreasingTX); + }); + + it("correctly decreases trust", () => { + tir.addTX(trustDecreasingMTX.toTX()); + tir.getDirectTrust(alice, bob).should.equal(20 * COIN); + }); + + it("decreases trust to zero for trust decreasing transactions with a wrong recipient", () => { + // By changing the trust recipient from bob to charlie, we make the transaction a + // nullifying trust transaction. + trustDecreasingMTX.outputs[0] = + testHelpers.getOneOfThreeMultisigOutput(addr.alice.pubKey, addr.charlie.pubKey, 20 * COIN); + + tir.addTX(trustDecreasingMTX.toTX()); + tir.getDirectTrust(alice, bob).should.equal(0); + }); + + it("which has a second input decreases trust to zero", () => { + trustDecreasingMTX.inputs.push(testHelpers.getP2PKHInput(addr.alice.pubKey)); + tir.addTX(trustDecreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(0); + }); + + it("which has more than one trust outputs decreases trust to zero", () => { + trustDecreasingMTX.outputs[0].value -= 15 * COIN; + trustDecreasingMTX.outputs.push( + testHelpers.getOneOfThreeMultisigOutput(addr.alice.pubKey, addr.bob.pubKey, 5 * COIN)); + tir.addTX(trustDecreasingMTX.toTX()); + + tir.getDirectTrust(alice, bob).should.equal(0); + }); + }); + }); + + describe(".createTrustIncreasingMTX()", () => { + it("creates valid trust-increasing transactions", async () => { + var getTXStub = sinon.stub(node, "getCoin"); + + var prevOutput = { + hash: "v1pnhp2af4r5wz63j60vnh27s1bftl260qq621y458tn0g4x64u64yqz6d7qi6i8", + index: 1 + }; + + getTXStub.withArgs(prevOutput.hash).returns(new Coin({ + script: testHelpers.getP2PKHOutput(alice, 1).script, + value: 1000 * COIN + })); + + var mtx = await tir.createTrustIncreasingMTX(addr.alice.privKey, addr.bob.pubKey, prevOutput, + 100 * COIN); + + mtx.inputs.length.should.equal(1); + + mtx.outputs.length.should.equal(2); + + var trustOutput = mtx.outputs[0]; + trustOutput.getType().should.equal("multisig"); + [1, 2].map((i) => helpers.pubKeyToEntity(trustOutput.script.get(i))).sort() + .should.deepEqual([alice, bob].sort()); + trustOutput.script.get(3).should.deepEqual(tir.fakePubKey); + trustOutput.value.should.equal(100 * COIN); + + var changeOutput = mtx.outputs[1]; + changeOutput.getType().should.equal("pubkeyhash"); + changeOutput.getAddress().toBase58().should.equal(alice); + changeOutput.value.should.equal(900 * COIN - 1000); + }); + }); + + describe(".getTrustDecreasingMTX()", () => { + var trustTXs; + beforeEach(() => { + var tx; + trustTXs = []; + + tx = trustIncreasingTX; + trustTXs.push(tx); + tir.addTX(tx); + + trustIncreasingMTX.outputs[0].value = 100 * COIN; + tx = trustIncreasingMTX.toTX(); + trustTXs.push(tx); + tir.addTX(tx); + + trustIncreasingMTX.outputs[0].value = 500 * COIN; + tx = trustIncreasingMTX.toTX(); + trustTXs.push(tx); + tir.addTX(tx); + + // Total trust 642 BTC + }); + + // Helper specific to the next couple of tests: + // Checks that mtxs is a list of two trust decreasing transactions. The first one spends the + // entire first trust increasing transaction, and the second spends part of the second. + // Also checks that the reduced trust is sent via P2PKH outputs to the correct recipient. + var checkMTXs = (mtxs, recipient) => { + mtxs.length.should.equal(2); + + var mtx = mtxs[0]; + + mtx.inputs.length.should.equal(1); + mtx.inputs[0].prevout.should.have.properties({ + hash: trustTXs[0].hash().toString("hex"), + index: 0 + }); + + mtx.outputs.length.should.equal(1); // Single P2PKH output + mtx.outputs[0].getType().should.equal("pubkeyhash"); + mtx.outputs[0].getAddress().toBase58().should.equal(recipient); + mtx.outputs[0].value.should.equal(42 * COIN - 1000); + + mtx = mtxs[1]; + + mtx.inputs.length.should.equal(1); + mtx.inputs[0].prevout.should.have.properties({ + hash: trustTXs[1].hash().toString("hex"), + index: 0 + }); + + mtx.outputs.length.should.equal(2); // One P2PKH output and one multisig trust output + mtx.outputs[1].script.toString().should.equal(trustTXs[1].outputs[0].script.toString()); + mtx.outputs[1].value.should.equal(60 * COIN); + mtx.outputs[0].getType().should.equal("pubkeyhash"); + mtx.outputs[0].getAddress().toBase58().should.equal(recipient); + mtx.outputs[0].value.should.equal(40 * COIN - 1000); + }; + + it("creates correct trust decreasing transactions", () => { + var mtxs = tir.createTrustDecreasingMTXs(addr.alice.privKey, addr.bob.pubKey, 82 * COIN); + checkMTXs(mtxs, alice); + }); + + it("creates correct trust stealing transactions", () => { + var mtxs = tir.createTrustDecreasingMTXs(addr.alice.privKey, addr.bob.pubKey, 82 * COIN, charlie); + checkMTXs(mtxs, charlie); + }); + + it("throws when trying to decrease self-trust", () => { + should.throws(() => tir.createTrustDecreasingMTXs(addr.alice.privKey, addr.alice.pubKey, 10 * COIN) + , /self-trust/i); + }); + + it("throws when there is not enough trust", () => { + should.throws(() => tir.createTrustDecreasingMTXs(addr.alice.privKey, addr.bob.pubKey, 700 * COIN) + , /insufficient trust/i); + + }); + }); + + describe(".getIndirectTrust()", () => { + it("returns zero for two arbitary parties that do not trust each other", () => { + should(tir.getIndirectTrust(alice, bob)).equal(0); + should(tir.getIndirectTrust(bob, alice)).equal(0); + should(tir.getIndirectTrust(charlie, alice)).equal(0); + should(tir.getIndirectTrust(alice, charlie)).equal(0); + }); + + it("returns Infinity for one's trust to themselves", () => { + should(tir.getIndirectTrust(alice, alice)).equal(Infinity); + should(tir.getIndirectTrust(bob, bob)).equal(Infinity); + }); + + describe("after applying the Nobody Likes Frank graph example", () => { + beforeEach(() => { + testHelpers.applyGraph(tir, "./graphs/nobodyLikesFrank.json", addr); + }); + + it("correctly computes trusts", () => { + should(tir.getIndirectTrust(alice, alice)).equal(Infinity); + should(tir.getIndirectTrust(alice, bob)).equal(10); + should(tir.getIndirectTrust(alice, charlie)).equal(1); + should(tir.getIndirectTrust(alice, dave)).equal(4); + should(tir.getIndirectTrust(alice, eve)).equal(6); + should(tir.getIndirectTrust(alice, frank)).equal(0); + should(tir.getIndirectTrust(alice, george)).equal(2); + + should(tir.getIndirectTrust(bob, alice)).equal(1); + should(tir.getIndirectTrust(bob, bob)).equal(Infinity); + should(tir.getIndirectTrust(bob, charlie)).equal(1); + should(tir.getIndirectTrust(bob, dave)).equal(1); + should(tir.getIndirectTrust(bob, eve)).equal(3); + should(tir.getIndirectTrust(bob, frank)).equal(0); + should(tir.getIndirectTrust(bob, george)).equal(2); + + should(tir.getIndirectTrust(charlie, alice)).equal(0); + should(tir.getIndirectTrust(charlie, bob)).equal(0); + should(tir.getIndirectTrust(charlie, charlie)).equal(Infinity); + should(tir.getIndirectTrust(charlie, dave)).equal(0); + should(tir.getIndirectTrust(charlie, eve)).equal(0); + should(tir.getIndirectTrust(charlie, frank)).equal(0); + should(tir.getIndirectTrust(charlie, george)).equal(3); + + should(tir.getIndirectTrust(dave, alice)).equal(2); + should(tir.getIndirectTrust(dave, bob)).equal(2); + should(tir.getIndirectTrust(dave, charlie)).equal(1); + should(tir.getIndirectTrust(dave, dave)).equal(Infinity); + should(tir.getIndirectTrust(dave, eve)).equal(12); + should(tir.getIndirectTrust(dave, frank)).equal(0); + should(tir.getIndirectTrust(dave, george)).equal(2); + + should(tir.getIndirectTrust(eve, alice)).equal(0); + should(tir.getIndirectTrust(eve, bob)).equal(0); + should(tir.getIndirectTrust(eve, charlie)).equal(0); + should(tir.getIndirectTrust(eve, dave)).equal(0); + should(tir.getIndirectTrust(eve, eve)).equal(Infinity); + should(tir.getIndirectTrust(eve, frank)).equal(0); + should(tir.getIndirectTrust(eve, george)).equal(0); + + should(tir.getIndirectTrust(frank, alice)).equal(0); + should(tir.getIndirectTrust(frank, bob)).equal(0); + should(tir.getIndirectTrust(frank, charlie)).equal(10); + should(tir.getIndirectTrust(frank, dave)).equal(0); + should(tir.getIndirectTrust(frank, eve)).equal(0); + should(tir.getIndirectTrust(frank, frank)).equal(Infinity); + should(tir.getIndirectTrust(frank, george)).equal(3); + + should(tir.getIndirectTrust(george, alice)).equal(0); + should(tir.getIndirectTrust(george, bob)).equal(0); + should(tir.getIndirectTrust(george, charlie)).equal(0); + should(tir.getIndirectTrust(george, dave)).equal(0); + should(tir.getIndirectTrust(george, eve)).equal(0); + should(tir.getIndirectTrust(george, frank)).equal(0); + should(tir.getIndirectTrust(george, george)).equal(Infinity); + }); + + it("correctly computes trusts when bob trusts frank", () => { + tir.addTX(testHelpers.getTrustIncreasingMTX(addr.bob.pubKey, addr.frank.pubKey, 8).toTX()); + should(tir.getIndirectTrust(george, frank)).equal(0); + should(tir.getIndirectTrust(alice, frank)).equal(8); + should(tir.getIndirectTrust(dave, frank)).equal(2); + should(tir.getIndirectTrust(bob, frank)).equal(8); + }); + + // TODO: Decrement direct trusts and test that indirect trusts update correctly + }); + }); +});